From 3cdd34cea83b1402c2efe6b3045bf5837894cf0c Mon Sep 17 00:00:00 2001
From: Technophile <dostonnabotov@gmail.com>
Date: Thu, 31 Jul 2025 19:15:06 +0300
Subject: [PATCH 1/4] Setup nextjs & shadcn

---
 .github/CODEOWNERS                            |    31 -
 .github/FUNDING.yml                           |    15 -
 .github/ISSUE_TEMPLATE/bugs.yml               |    15 -
 .github/ISSUE_TEMPLATE/config.yml             |     1 -
 .github/ISSUE_TEMPLATE/docs.yml               |    15 -
 .github/ISSUE_TEMPLATE/features.yml           |    13 -
 .github/ISSUE_TEMPLATE/general.yml            |    12 -
 .github/pull_request_template.md              |    46 -
 .github/workflows/check-snippets.yml          |    34 -
 .github/workflows/pre-commit-checks.yml       |    34 -
 .gitignore                                    |    42 +-
 .husky/pre-commit                             |    11 -
 CODE_OF_CONDUCT.md                            |    37 -
 CONTRIBUTING.md                               |   279 -
 LICENSE                                       |    21 -
 README.md                                     |    66 +-
 VISION.md                                     |    56 -
 backend/.gitignore                            |     3 -
 backend/.prettierignore                       |     3 -
 backend/.prettierrc                           |    12 -
 backend/data/consolidated/_index.json         |    91 -
 backend/data/consolidated/bash.json           |    32 -
 backend/data/consolidated/c.json              |   349 -
 backend/data/consolidated/cpp.json            |   272 -
 backend/data/consolidated/csharp.json         |   123 -
 backend/data/consolidated/css.json            |   274 -
 backend/data/consolidated/haskell.json        |   240 -
 backend/data/consolidated/html.json           |    37 -
 backend/data/consolidated/java.json           |   670 -
 .../data/consolidated/javascript--react.json  |    19 -
 backend/data/consolidated/javascript.json     |  1120 --
 .../data/consolidated/python--fastapi.json    |    21 -
 .../data/consolidated/python--tkinter.json    |   254 -
 backend/data/consolidated/python.json         |   785 --
 backend/data/consolidated/regex.json          |    80 -
 backend/data/consolidated/ruby.json           |   238 -
 backend/data/consolidated/rust.json           |    82 -
 backend/data/consolidated/scss.json           |   258 -
 backend/data/consolidated/typescript.json     |   160 -
 backend/data/icons/bash.svg                   |     1 -
 backend/data/icons/c.svg                      |    15 -
 backend/data/icons/cpp.svg                    |    10 -
 backend/data/icons/csharp.svg                 |    10 -
 backend/data/icons/css.svg                    |     6 -
 backend/data/icons/haskell.svg                |     6 -
 backend/data/icons/html.svg                   |     8 -
 backend/data/icons/java.svg                   |    12 -
 backend/data/icons/javascript--react.svg      |     9 -
 backend/data/icons/javascript.svg             |     6 -
 backend/data/icons/python--fastapi.svg        |     1 -
 backend/data/icons/python--tkinter.svg        |     1 -
 backend/data/icons/python.svg                 |    21 -
 backend/data/icons/regex.svg                  |     6 -
 backend/data/icons/ruby.svg                   |   139 -
 backend/data/icons/rust.svg                   |     9 -
 backend/data/icons/scss.svg                   |     5 -
 backend/data/icons/typescript.svg             |     8 -
 backend/dist/data/consolidated/_index.json    |    91 -
 backend/dist/data/consolidated/bash.json      |    32 -
 backend/dist/data/consolidated/c.json         |   349 -
 backend/dist/data/consolidated/cpp.json       |   272 -
 backend/dist/data/consolidated/csharp.json    |   123 -
 backend/dist/data/consolidated/css.json       |   274 -
 backend/dist/data/consolidated/haskell.json   |   240 -
 backend/dist/data/consolidated/html.json      |    37 -
 backend/dist/data/consolidated/java.json      |   670 -
 .../data/consolidated/javascript--react.json  |    19 -
 .../dist/data/consolidated/javascript.json    |  1120 --
 .../data/consolidated/python--fastapi.json    |    21 -
 .../data/consolidated/python--tkinter.json    |   254 -
 backend/dist/data/consolidated/python.json    |   785 --
 backend/dist/data/consolidated/regex.json     |    80 -
 backend/dist/data/consolidated/ruby.json      |   238 -
 backend/dist/data/consolidated/rust.json      |    82 -
 backend/dist/data/consolidated/scss.json      |   258 -
 .../dist/data/consolidated/typescript.json    |   160 -
 backend/dist/data/icons/bash.svg              |     1 -
 backend/dist/data/icons/c.svg                 |    15 -
 backend/dist/data/icons/cpp.svg               |    10 -
 backend/dist/data/icons/csharp.svg            |    10 -
 backend/dist/data/icons/css.svg               |     6 -
 backend/dist/data/icons/haskell.svg           |     6 -
 backend/dist/data/icons/html.svg              |     8 -
 backend/dist/data/icons/java.svg              |    12 -
 backend/dist/data/icons/javascript--react.svg |     9 -
 backend/dist/data/icons/javascript.svg        |     6 -
 backend/dist/data/icons/python--fastapi.svg   |     1 -
 backend/dist/data/icons/python--tkinter.svg   |     1 -
 backend/dist/data/icons/python.svg            |    21 -
 backend/dist/data/icons/regex.svg             |     6 -
 backend/dist/data/icons/ruby.svg              |   139 -
 backend/dist/data/icons/rust.svg              |     9 -
 backend/dist/data/icons/scss.svg              |     5 -
 backend/dist/data/icons/typescript.svg        |     8 -
 backend/dist/index.js                         |    84 -
 backend/eslint.config.js                      |    91 -
 backend/index.ts                              |   101 -
 backend/package-lock.json                     |  7200 ----------
 backend/package.json                          |    51 -
 backend/railway.json                          |    18 -
 backend/scripts/checkSnippetFormatting.ts     |     9 -
 backend/scripts/consolidateSnippets.ts        |    60 -
 backend/scripts/copyStatic.ts                 |    19 -
 backend/scripts/snippetParser.ts              |   199 -
 backend/tsconfig.json                         |    27 -
 backend/types/index.ts                        |    35 -
 backend/utils/enums.ts                        |     4 -
 backend/utils/objectUtils.ts                  |     6 -
 backend/utils/raise.ts                        |     4 -
 backend/utils/slugify.ts                      |    19 -
 components.json                               |    21 +
 eslint.config.mjs                             |    16 +
 frontend/.gitattributes                       |     9 -
 frontend/.gitignore                           |    30 -
 frontend/.prettierignore                      |     9 -
 frontend/.prettierrc                          |    12 -
 frontend/cspell-dict.txt                      |     8 -
 frontend/cspell.json                          |    12 -
 frontend/eslint.config.js                     |   103 -
 frontend/index.html                           |    75 -
 frontend/package-lock.json                    | 11155 ----------------
 frontend/package.json                         |    56 -
 frontend/public/_redirects                    |     1 -
 .../public/favicon/android-chrome-192x192.png |   Bin 13909 -> 0 bytes
 .../public/favicon/android-chrome-512x512.png |   Bin 54491 -> 0 bytes
 frontend/public/favicon/apple-touch-icon.png  |   Bin 12526 -> 0 bytes
 frontend/public/favicon/favicon-16x16.png     |   Bin 545 -> 0 bytes
 frontend/public/favicon/favicon-32x32.png     |   Bin 1176 -> 0 bytes
 frontend/public/favicon/favicon.ico           |   Bin 15406 -> 0 bytes
 ...SourceSans3-Italic-VariableFont_wght.woff2 |   Bin 135884 -> 0 bytes
 .../fonts/SourceSans3-VariableFont_wght.woff2 |   Bin 167396 -> 0 bytes
 frontend/public/site.webmanifest              |    19 -
 frontend/src/AppRouter.tsx                    |    25 -
 frontend/src/components/App.tsx               |    17 -
 frontend/src/components/Button.tsx            |    28 -
 frontend/src/components/CategoryList.tsx      |    75 -
 frontend/src/components/CodePreview.tsx       |    63 -
 frontend/src/components/Container.tsx         |    33 -
 frontend/src/components/CopyToClipboard.tsx   |    31 -
 frontend/src/components/CopyURLButton.tsx     |    33 -
 frontend/src/components/Icons.tsx             |   200 -
 frontend/src/components/LanguageSelector.tsx  |   236 -
 frontend/src/components/LinkButton.tsx        |    22 -
 frontend/src/components/Logo.tsx              |    12 -
 frontend/src/components/SearchInput.tsx       |   132 -
 frontend/src/components/SnippetList.tsx       |   146 -
 frontend/src/components/SnippetModal.tsx      |   125 -
 .../src/components/SubLanguageSelector.tsx    |   111 -
 frontend/src/components/ThemeToggle.tsx       |    35 -
 frontend/src/contexts/AppContext.tsx          |    84 -
 frontend/src/hooks/useCategories.ts           |    23 -
 frontend/src/hooks/useEscapeKey.ts            |    14 -
 frontend/src/hooks/useFetch.ts                |    28 -
 frontend/src/hooks/useGitHubStars.ts          |    16 -
 frontend/src/hooks/useKeyboardNavigation.ts   |    76 -
 frontend/src/hooks/useLanguages.ts            |    12 -
 frontend/src/hooks/useSnippets.ts             |    53 -
 frontend/src/layouts/Banner.tsx               |    15 -
 frontend/src/layouts/Footer.tsx               |    81 -
 frontend/src/layouts/Header.tsx               |    39 -
 frontend/src/layouts/Sidebar.tsx              |    13 -
 frontend/src/main.tsx                         |    15 -
 frontend/src/styles/main.css                  |   877 --
 frontend/src/types/index.ts                   |    41 -
 frontend/src/utils/configureUserSelection.ts  |    57 -
 frontend/src/utils/consts.ts                  |    28 -
 frontend/src/utils/enums.ts                   |     4 -
 frontend/src/utils/languageUtils.ts           |    41 -
 frontend/src/utils/objectUtils.ts             |     6 -
 frontend/src/utils/raise.ts                   |     4 -
 frontend/src/utils/slugify.ts                 |    19 -
 frontend/src/vite-env.d.ts                    |     1 -
 frontend/tests/configureUserSelection.test.ts |   155 -
 frontend/tests/languageUtils.test.ts          |    44 -
 frontend/tests/objectUtils.test.ts            |    49 -
 frontend/tests/raise.test.ts                  |    37 -
 frontend/tests/setup.ts                       |     4 -
 frontend/tests/slugify.test.ts                |    89 -
 frontend/tsconfig.app.json                    |    29 -
 frontend/tsconfig.json                        |     7 -
 frontend/tsconfig.node.json                   |    22 -
 frontend/vite.config.ts                       |    66 -
 next.config.ts                                |     7 +
 package-lock.json                             |  5262 +++++---
 package.json                                  |    62 +-
 postcss.config.mjs                            |     5 +
 preview.png                                   |   Bin 77672 -> 0 bytes
 public/file.svg                               |     1 +
 public/globe.svg                              |     1 +
 public/next.svg                               |     1 +
 public/vercel.svg                             |     1 +
 public/window.svg                             |     1 +
 snippets/bash/icon.svg                        |     1 -
 .../bash/system/kill-previous-instances.md    |    20 -
 .../bash/system/system-resource-monitor.md    |    22 -
 snippets/c/basics/hello-world.md              |    16 -
 .../c/bit-manipulation/check-power-of-two.md  |    18 -
 snippets/c/bit-manipulation/clear-ith-bit.md  |    17 -
 snippets/c/bit-manipulation/count-set-bits.md |    23 -
 snippets/c/bit-manipulation/get-ith-bit.md    |    19 -
 snippets/c/bit-manipulation/is-odd.md         |    17 -
 snippets/c/bit-manipulation/reverse-bits.md   |    21 -
 snippets/c/bit-manipulation/set-ith-bit.md    |    19 -
 snippets/c/bit-manipulation/swap-numbers.md   |    20 -
 snippets/c/bit-manipulation/toggle-ith-bit.md |    18 -
 snippets/c/bit-manipulation/xor-of-range.md   |    18 -
 snippets/c/icon.svg                           |    15 -
 .../check-perfect-number.md                   |    28 -
 .../compound-interest.md                      |    23 -
 .../factorial-function.md                     |    20 -
 .../fibonacci-number.md                       |    17 -
 .../mathematical-functions/linear-mapping.md  |    18 -
 .../c/mathematical-functions/sum-of-digits.md |    21 -
 .../c/mathematical-functions/swap-numbers.md  |    19 -
 snippets/c/search/binary-search.md            |    36 -
 snippets/c/search/linear-search.md            |    25 -
 snippets/c/sorting/bubble-sort.md             |    27 -
 snippets/c/sorting/insertion-sort.md          |    30 -
 snippets/c/sorting/merge-sort.md              |    71 -
 snippets/c/sorting/quick-sort.md              |    47 -
 snippets/c/sorting/selection-sort.md          |    33 -
 snippets/cpp/basics/hello-world.md            |    15 -
 .../find-non-repeating-number.md              |    22 -
 .../vector-to-queue.md                        |    24 -
 snippets/cpp/debugging/vector-print.md        |    29 -
 .../file-handling/find-files-recursively.md   |    57 -
 snippets/cpp/file-handling/find-files.md      |    57 -
 .../cpp/file-handling/list-directories.md     |    37 -
 snippets/cpp/icon.svg                         |    10 -
 .../binary-to-unsigned-integer-conversion.md  |    26 -
 .../math-and-numbers/check-prime-number.md    |    21 -
 snippets/cpp/string-manipulation/filter.md    |    25 -
 .../cpp/string-manipulation/palindrome.md     |    26 -
 .../cpp/string-manipulation/reverse-string.md |    19 -
 .../cpp/string-manipulation/split-string.md   |    26 -
 snippets/cpp/string-manipulation/transform.md |    25 -
 snippets/cpp/vector-manipulation.md/filter.md |    25 -
 .../remove-duplicates.md                      |    29 -
 .../remove-n-occurences.md                    |    39 -
 .../cpp/vector-manipulation.md/transform.md   |    26 -
 snippets/csharp/basics/hello-world.md         |    14 -
 .../csharp/guid-utilities/generate-guid.md    |    15 -
 .../csharp/guid-utilities/validate-guid.md    |    16 -
 snippets/csharp/icon.svg                      |    10 -
 snippets/csharp/jwt-utilities/decode-jwt.md   |    16 -
 snippets/csharp/jwt-utilities/validate-jwt.md |    33 -
 .../list-utilities/swap-items-at-index.md     |    18 -
 .../capitalize-first-letter.md                |    15 -
 .../string-utilities/truncate-string.md       |    16 -
 snippets/css/animations/blink-animation.md    |    24 -
 snippets/css/animations/pulse-animation.md    |    24 -
 snippets/css/animations/shake-animation.md    |    27 -
 snippets/css/animations/slide-in-animation.md |    24 -
 .../css/animations/typewriter-animation.md    |    50 -
 snippets/css/buttons/3d-button-effect.md      |    23 -
 snippets/css/buttons/button-hover-effect.md   |    22 -
 snippets/css/buttons/macos-button.md          |    30 -
 snippets/css/effects/blur-background.md       |    13 -
 snippets/css/effects/hover-glow-effect.md     |    19 -
 snippets/css/effects/hover-to-reveal-color.md |    30 -
 .../css/effects/rgb-border-color-animation.md |    38 -
 snippets/css/icon.svg                         |     6 -
 snippets/css/layouts/css-reset.md             |    14 -
 snippets/css/layouts/equal-width-columns.md   |    18 -
 snippets/css/layouts/grid-layout.md           |    19 -
 snippets/css/layouts/responsive-design.md     |    48 -
 snippets/css/layouts/sticky-footer.md         |    18 -
 snippets/css/typography/letter-spacing.md     |    12 -
 .../css/typography/responsive-font-sizing.md  |    12 -
 .../array-manipulation/binary-search.md       |    28 -
 .../haskell/array-manipulation/chunk-array.md |    18 -
 .../array-manipulation/matrix-transpose.md    |    19 -
 snippets/haskell/basics/hello-world.md        |    10 -
 .../find-files-in-directory-by-type.md        |    24 -
 .../file-handling/read-file-in-chunks.md      |    30 -
 snippets/haskell/icon.svg                     |     6 -
 .../monads/either-monad-for-error-handling.md |    21 -
 snippets/haskell/monads/maybe-monad.md        |    21 -
 snippets/haskell/monads/state-monad.md        |    26 -
 snippets/haskell/monads/writer-monad.md       |    24 -
 .../camelcase-to-snake-case.md                |    22 -
 .../string-manipulation/capitalize-words.md   |    22 -
 .../count-word-occurrences-in-string.md       |    19 -
 .../string-manipulation/remove-punctuation.md |    19 -
 .../snake-case-to-camelcase.md                |    21 -
 .../string-manipulation/truncate-string.md    |    20 -
 .../grid-layout-with-navigation.md            |    61 -
 .../sticky-header-footer-layout.md            |    52 -
 snippets/html/icon.svg                        |     8 -
 .../array-manipulation/remove-duplicates.md   |    22 -
 .../java/array-manipulation/zip-two-lists.md  |    26 -
 snippets/java/basics/hello-world.md           |    18 -
 .../java/bit-manipulation/bit-counting.md     |    23 -
 .../java/bit-manipulation/is-power-of-two.md  |    16 -
 .../date-time-formatting-american.md          |    32 -
 .../date-time-formatting-european.md          |    32 -
 ...ration-formatting-hours-minutes-seconds.md |    33 -
 .../duration-formatting-minutes-seconds.md    |    28 -
 snippets/java/icon.svg                        |    12 -
 snippets/java/math/checksum.md                |    24 -
 snippets/java/math/factorial.md               |    24 -
 snippets/java/math/fibonacci.md               |    19 -
 snippets/java/math/greatest-common-divisor.md |    23 -
 snippets/java/math/least-common-multiple.md   |    26 -
 snippets/java/math/prime-check.md             |    31 -
 .../string-manipulation/ascii-to-string.md    |    23 -
 .../camelcase-to-snake-case.md                |    15 -
 .../string-manipulation/capitalize-words.md   |    27 -
 .../java/string-manipulation/check-anagram.md |    28 -
 .../string-manipulation/check-palindrome.md   |    20 -
 .../count-character-frequency.md              |    27 -
 .../count-character-occurrences.md            |    26 -
 .../java/string-manipulation/count-words.md   |    15 -
 .../extract-text-between-delimiters.md        |    21 -
 .../string-manipulation/find-longest-word.md  |    25 -
 .../find-unique-characters.md                 |    25 -
 .../java/string-manipulation/mask-text.md     |    25 -
 .../normalize-whitespace.md                   |    15 -
 .../string-manipulation/password-generator.md |    38 -
 .../string-manipulation/remove-punctuation.md |    15 -
 .../remove-special-characters.md              |    15 -
 .../reverse-word-contents.md                  |    23 -
 .../string-manipulation/reverse-word-order.md |    22 -
 .../string-manipulation/slugify-string.md     |    31 -
 .../snake-case-to-camelcase.md                |    19 -
 .../string-manipulation/spaces-to-tabs.md     |    15 -
 .../string-manipulation/string-to-ascii.md    |    24 -
 .../string-to-camelcase.md                    |    25 -
 .../string-to-param-case.md                   |    15 -
 .../string-to-pascalcase.md                   |    23 -
 .../string-to-snake-case.md                   |    15 -
 .../string-to-titlecase.md                    |    28 -
 .../string-manipulation/string-to-unicode.md  |    21 -
 .../string-manipulation/tabs-to-spaces.md     |    15 -
 .../string-manipulation/truncate-string.md    |    18 -
 .../string-manipulation/unicode-to-string.md  |    23 -
 .../javascript/[react]/basics/hello-world.md  |    21 -
 snippets/javascript/[react]/icon.svg          |     9 -
 .../array-manipulation/compare-arrays.md      |    32 -
 .../array-manipulation/partition-array.md     |    19 -
 .../array-manipulation/remove-duplicates.md   |    14 -
 .../array-manipulation/remove-falsy-values.md |    14 -
 .../array-manipulation/shuffle-array.md       |    19 -
 .../array-manipulation/zip-arrays.md          |    15 -
 snippets/javascript/basics/hello-world.md     |    10 -
 .../color-manipulation/hex-to-rgb-color.md    |    28 -
 .../color-manipulation/hsl-to-rgb-color.md    |    34 -
 .../color-manipulation/rgb-to-hex-color.md    |    21 -
 .../color-manipulation/rgb-to-hsl-color.md    |    37 -
 .../date-and-time/check-leap-year.md          |    14 -
 .../convert-to-unix-timestamp.md              |    39 -
 .../javascript/date-and-time/format-date.md   |    13 -
 .../date-and-time/get-day-of-the-year.md      |    17 -
 .../date-and-time/get-days-in-month.md        |    14 -
 .../date-and-time/get-time-difference.md      |    18 -
 .../date-and-time/relative-time-formatter.md  |    36 -
 .../date-and-time/start-of-the-day.md         |    14 -
 .../dom-manipulation/change-element-style.md  |    18 -
 .../dom-manipulation/remove-element.md        |    18 -
 .../function-utilities/compose-functions.md   |    18 -
 .../function-utilities/curry-function.md      |    24 -
 .../function-utilities/debounce-function.md   |    23 -
 .../function-utilities/get-contrast-color.md  |    26 -
 .../function-utilities/memoize-function.md    |    26 -
 .../function-utilities/once-function.md       |    23 -
 .../function-utilities/rate-limit-function.md |    28 -
 .../repeat-function-invocation.md             |    18 -
 .../function-utilities/sleep-function.md      |    15 -
 .../function-utilities/throttle-function.md   |    26 -
 snippets/javascript/icon.svg                  |     6 -
 .../local-storage/add-item-to-localstorage.md |    15 -
 .../check-if-item-exists-in-localstorage.md   |    15 -
 .../retrieve-item-from-localstorage.md        |    16 -
 .../mathematical-functions/combinations.md    |    31 -
 .../mathematical-functions/cross-product.md   |    23 -
 .../mathematical-functions/dot-product.md     |    19 -
 .../mathematical-functions/error-function.md  |    21 -
 .../greatest-common-divisor.md                |    22 -
 .../least-common-multiple.md                  |    25 -
 .../mathematical-functions/linear-mapping.md  |    17 -
 .../matrix-multiplication.md                  |    34 -
 .../mathematical-functions/modular-inverse.md |    33 -
 .../mathematical-functions/prime-number.md    |    24 -
 .../convert-number-to-currency.md             |    19 -
 .../convert-number-to-roman-numerals.md       |    27 -
 .../convert-to-scientific-notation.md         |    27 -
 .../number-formatting/format-file-size.md     |    22 -
 .../format-number-with-commas.md              |    17 -
 .../number-formatting/number-formatter.md     |    23 -
 .../number-to-words-converter.md              |    30 -
 .../check-if-object-is-empty.md               |    16 -
 .../compare-two-objects-shallowly.md          |    22 -
 .../convert-object-to-query-string.md         |    18 -
 .../count-properties-in-object.md             |    16 -
 .../object-manipulation/deep-clone-object.md  |    27 -
 .../object-manipulation/filter-object.md      |    27 -
 .../flatten-nested-object.md                  |    24 -
 .../object-manipulation/freeze-object.md      |    18 -
 .../object-manipulation/get-nested-value.md   |    19 -
 .../invert-object-keys-and-values.md          |    18 -
 .../merge-objects-deeply.md                   |    26 -
 .../omit-keys-from-object.md                  |    18 -
 .../pick-keys-from-object.md                  |    18 -
 .../object-manipulation/unique-by-key.md      |    19 -
 .../string-manipulation/capitalize-string.md  |    15 -
 .../check-if-string-is-a-palindrome.md        |    16 -
 .../convert-string-to-camel-case.md           |    15 -
 .../convert-string-to-param-case.md           |    15 -
 .../convert-string-to-pascal-case.md          |    15 -
 .../convert-string-to-snake-case.md           |    17 -
 .../convert-string-to-title-case.md           |    15 -
 .../convert-tabs-to-spaces.md                 |    15 -
 .../count-words-in-a-string.md                |    15 -
 .../string-manipulation/data-with-prefix.md   |    18 -
 .../extract-initials-from-name.md             |    15 -
 .../string-manipulation/generate-uuid.md      |    19 -
 .../mask-sensitive-information.md             |    16 -
 .../pad-string-on-both-sides.md               |    18 -
 .../string-manipulation/random-string.md      |    15 -
 .../remove-all-whitespace.md                  |    15 -
 .../remove-vowels-from-a-string.md            |    15 -
 .../string-manipulation/reverse-string.md     |    13 -
 .../string-manipulation/slugify-string.md     |    25 -
 .../string-manipulation/truncate-text.md      |    17 -
 .../python/[fastapi]/basics/hello-world.md    |    21 -
 snippets/python/[fastapi]/icon.svg            |     1 -
 .../basics/display-a-pillow-image.md          |    49 -
 .../python/[tkinter]/basics/hello-world.md    |    22 -
 .../entry-validation/allow-alphanumeric.md    |    24 -
 .../entry-validation/allow-decimal.md         |    32 -
 .../allow-digits-with-a-max-length.md         |    27 -
 .../entry-validation/allow-lowercase.md       |    24 -
 .../allow-negative-integers.md                |    28 -
 .../allow-numbers-in-range.md                 |    32 -
 .../entry-validation/allow-only-alphabets.md  |    24 -
 .../entry-validation/allow-only-digits.md     |    24 -
 .../allow-positive-integers.md                |    24 -
 .../entry-validation/allow-signed-decimals.md |    32 -
 .../entry-validation/allow-signed-integers.md |    30 -
 .../allow-specific-characters.md              |    25 -
 .../entry-validation/allow-uppercase.md       |    24 -
 .../custom-regular-expression.md              |    28 -
 .../entry-validation/restrict-length.md       |    25 -
 .../entry-validation/validate-file-path.md    |    27 -
 snippets/python/[tkinter]/icon.svg            |     1 -
 .../python/[tkinter]/menus/context-menu.md    |    31 -
 snippets/python/basics/hello-world.md         |    10 -
 ...lculate-date-difference-in-milliseconds.md |    19 -
 .../check-if-date-is-a-weekend.md             |    20 -
 .../day-of-the-week-string.md                 |    21 -
 .../generate-date-range-list.md               |    30 -
 .../get-current-date-and-time-as-string.md    |    16 -
 .../get-number-of-days-in-a-month.md          |    20 -
 .../measure-execution-time.md                 |    23 -
 .../create-custom-exception-type.md           |    18 -
 .../retry-function-execution-on-exception.md  |    29 -
 snippets/python/file-handling/find-files.md   |    26 -
 .../file-handling/get-file-extension.md       |    16 -
 .../file-handling/list-files-in-directory.md  |    16 -
 .../file-handling/read-file-in-chunks.md      |    17 -
 snippets/python/icon.svg                      |    21 -
 .../json-manipulation/filter-json-data.md     |    23 -
 .../json-manipulation/flatten-nested-json.md  |    21 -
 .../merge-multiple-json-files.md              |    27 -
 .../json-manipulation/read-json-file.md       |    17 -
 .../json-manipulation/update-json-file.md     |    26 -
 .../json-manipulation/write-json-file.md      |    18 -
 .../find-duplicates-in-a-list.md              |    22 -
 .../find-intersection-of-two-lists.md         |    16 -
 .../find-maximum-difference-in-list.md        |    17 -
 .../list-manipulation/flatten-nested-list.md  |    15 -
 .../flatten-unevenly-nested-lists.md          |    19 -
 .../list-manipulation/partition-list.md       |    16 -
 .../list-manipulation/remove-duplicates.md    |    14 -
 .../calculate-compound-interest.md            |    15 -
 .../math-and-numbers/check-perfect-square.md  |    18 -
 .../math-and-numbers/check-prime-number.md    |    19 -
 .../convert-binary-to-decimal.md              |    15 -
 .../convert-bytes-to-human-readable-format.md |    17 -
 .../find-lcm-least-common-multiple.md         |    15 -
 .../python/math-and-numbers/linear-mapping.md |    16 -
 .../solve-quadratic-equation.md               |    20 -
 .../create-sqlite-database-table.md           |    32 -
 .../insert-data-into-sqlite-table.md          |    28 -
 .../query-data-from-sqlite-table.md           |    29 -
 .../update-records-in-sqlite-table.md         |    27 -
 .../string-manipulation/capitalize-words.md   |    14 -
 .../string-manipulation/check-anagram.md      |    14 -
 .../string-manipulation/check-palindrome.md   |    15 -
 .../convert-snake-case-to-camel-case.md       |    15 -
 .../convert-string-to-unicode.md              |    14 -
 .../count-character-frequency.md              |    16 -
 .../string-manipulation/count-vowels.md       |    15 -
 .../python/string-manipulation/count-words.md |    14 -
 .../find-all-substrings.md                    |    18 -
 .../string-manipulation/find-longest-word.md  |    15 -
 .../find-unique-characters.md                 |    14 -
 .../generate-random-string.md                 |    18 -
 .../string-manipulation/remove-characters.md  |    14 -
 .../remove-duplicate-characters.md            |    15 -
 .../string-manipulation/remove-punctuation.md |    16 -
 .../string-manipulation/remove-whitespace.md  |    14 -
 .../string-manipulation/reverse-string.md     |    14 -
 .../string-manipulation/split-camel-case.md   |    16 -
 .../python/string-manipulation/truncate.md    |    16 -
 snippets/regex/icon.svg                       |     6 -
 .../regex/miscellaneous/hexadecimal-color.md  |    17 -
 snippets/regex/miscellaneous/ipv4.md          |    17 -
 .../unintentional-duplication.md              |    16 -
 .../regex/miscellaneous/whitespace-trimmer.md |    19 -
 .../regex/validation pattern/email-address.md |    15 -
 .../validation pattern/strong-password.md     |    17 -
 .../ruby/array-manipulation/binary-search.md  |    34 -
 .../ruby/array-manipulation/chunk-array.md    |    17 -
 .../array-manipulation/matrix-transpose.md    |    23 -
 snippets/ruby/basics/hello-world.md           |    10 -
 .../ruby/error-handling/custom-error-class.md |    22 -
 snippets/ruby/icon.svg                        |   139 -
 .../calculate-compound-interest.md            |    17 -
 .../math-and-numbers/calculate-factorial.md   |    16 -
 .../math-and-numbers/check-prime-number.md    |    21 -
 ...-primes-up-to-integer-sieve-of-sundaram.md |    31 -
 .../string-manipulation/capitalize-words.md   |    16 -
 .../count-word-occurrences-in-string.md       |    19 -
 .../string-manipulation/remove-punctuation.md |    16 -
 .../transform-camel-case-to-snake-case.md     |    18 -
 ...transform-from-snake-case-to-camel-case.md |    18 -
 ...ransform-from-snake-case-to-pascal-case.md |    18 -
 .../string-manipulation/truncate-string.md    |    18 -
 snippets/rust/basics/hello-world.md           |    12 -
 snippets/rust/file-handling/find-files.md     |    27 -
 .../rust/file-handling/read-file-lines.md     |    20 -
 snippets/rust/icon.svg                        |     9 -
 snippets/rust/linux/get-desktop-enviroment.md |    44 -
 .../string-manipulation/capitalize-string.md  |    19 -
 snippets/scss/animations/fade-in-animation.md |    21 -
 .../scss/animations/slide-in-from-left.md     |    21 -
 .../borders-shadows/border-radius-helper.md   |    12 -
 .../scss/borders-shadows/box-shadow-helper.md |    12 -
 snippets/scss/components/primary-button.md    |    21 -
 snippets/scss/icon.svg                        |     5 -
 snippets/scss/layouts/aspect-ratio.md         |    21 -
 snippets/scss/layouts/dark-theme.md           |    32 -
 snippets/scss/layouts/flex-center.md          |    14 -
 snippets/scss/layouts/grid-container.md       |    14 -
 .../scss/typography/font-import-helper.md     |    18 -
 snippets/scss/typography/line-clamp-mixin.md  |    15 -
 snippets/scss/typography/px-to-rem-helper.md  |    19 -
 snippets/scss/typography/text-gradient.md     |    14 -
 .../scss/typography/text-overflow-ellipsis.md |    14 -
 snippets/scss/utilities/clearfix.md           |    16 -
 .../scss/utilities/responsive-breakpoints.md  |    20 -
 snippets/scss/utilities/spacing.md            |    67 -
 .../helper-types/at-least-one-key.md          |    23 -
 .../helper-types/deep-partial-type.md         |    34 -
 .../helper-types/deep-readonly-type.md        |    34 -
 .../helper-types/deep-required-type.md        |    26 -
 .../helper-types/exclusive-types.md           |    26 -
 .../typescript/helper-types/keys-of-type.md   |    16 -
 .../helper-types/keys-to-optional.md          |    24 -
 .../typescript/helper-types/nullable-keys.md  |    22 -
 .../helper-types/omit-keys-of-type.md         |    22 -
 .../typescript/helper-types/required-keys.md  |    22 -
 .../helper-types/union-to-intersection.md     |    21 -
 snippets/typescript/icon.svg                  |     8 -
 src/app/api/snippets/route.ts                 |     1 +
 src/app/contribute/page.tsx                   |     9 +
 src/app/extensions/page.tsx                   |    31 +
 src/app/favicon.ico                           |   Bin 0 -> 25931 bytes
 src/app/globals.css                           |   122 +
 src/app/guide/page.tsx                        |     5 +
 src/app/layout.tsx                            |    34 +
 src/app/license/page.tsx                      |     9 +
 src/app/page.tsx                              |   103 +
 src/app/snippets/page.tsx                     |     5 +
 src/components/ui/button.tsx                  |    59 +
 src/lib/utils.ts                              |     6 +
 tsconfig.json                                 |    27 +
 578 files changed, 4295 insertions(+), 43911 deletions(-)
 delete mode 100644 .github/CODEOWNERS
 delete mode 100644 .github/FUNDING.yml
 delete mode 100644 .github/ISSUE_TEMPLATE/bugs.yml
 delete mode 100644 .github/ISSUE_TEMPLATE/config.yml
 delete mode 100644 .github/ISSUE_TEMPLATE/docs.yml
 delete mode 100644 .github/ISSUE_TEMPLATE/features.yml
 delete mode 100644 .github/ISSUE_TEMPLATE/general.yml
 delete mode 100644 .github/pull_request_template.md
 delete mode 100644 .github/workflows/check-snippets.yml
 delete mode 100644 .github/workflows/pre-commit-checks.yml
 delete mode 100644 .husky/pre-commit
 delete mode 100644 CODE_OF_CONDUCT.md
 delete mode 100644 CONTRIBUTING.md
 delete mode 100644 LICENSE
 delete mode 100644 VISION.md
 delete mode 100644 backend/.gitignore
 delete mode 100644 backend/.prettierignore
 delete mode 100644 backend/.prettierrc
 delete mode 100644 backend/data/consolidated/_index.json
 delete mode 100644 backend/data/consolidated/bash.json
 delete mode 100644 backend/data/consolidated/c.json
 delete mode 100644 backend/data/consolidated/cpp.json
 delete mode 100644 backend/data/consolidated/csharp.json
 delete mode 100644 backend/data/consolidated/css.json
 delete mode 100644 backend/data/consolidated/haskell.json
 delete mode 100644 backend/data/consolidated/html.json
 delete mode 100644 backend/data/consolidated/java.json
 delete mode 100644 backend/data/consolidated/javascript--react.json
 delete mode 100644 backend/data/consolidated/javascript.json
 delete mode 100644 backend/data/consolidated/python--fastapi.json
 delete mode 100644 backend/data/consolidated/python--tkinter.json
 delete mode 100644 backend/data/consolidated/python.json
 delete mode 100644 backend/data/consolidated/regex.json
 delete mode 100644 backend/data/consolidated/ruby.json
 delete mode 100644 backend/data/consolidated/rust.json
 delete mode 100644 backend/data/consolidated/scss.json
 delete mode 100644 backend/data/consolidated/typescript.json
 delete mode 100644 backend/data/icons/bash.svg
 delete mode 100644 backend/data/icons/c.svg
 delete mode 100644 backend/data/icons/cpp.svg
 delete mode 100644 backend/data/icons/csharp.svg
 delete mode 100644 backend/data/icons/css.svg
 delete mode 100644 backend/data/icons/haskell.svg
 delete mode 100644 backend/data/icons/html.svg
 delete mode 100644 backend/data/icons/java.svg
 delete mode 100644 backend/data/icons/javascript--react.svg
 delete mode 100644 backend/data/icons/javascript.svg
 delete mode 100644 backend/data/icons/python--fastapi.svg
 delete mode 100644 backend/data/icons/python--tkinter.svg
 delete mode 100644 backend/data/icons/python.svg
 delete mode 100644 backend/data/icons/regex.svg
 delete mode 100644 backend/data/icons/ruby.svg
 delete mode 100644 backend/data/icons/rust.svg
 delete mode 100644 backend/data/icons/scss.svg
 delete mode 100644 backend/data/icons/typescript.svg
 delete mode 100644 backend/dist/data/consolidated/_index.json
 delete mode 100644 backend/dist/data/consolidated/bash.json
 delete mode 100644 backend/dist/data/consolidated/c.json
 delete mode 100644 backend/dist/data/consolidated/cpp.json
 delete mode 100644 backend/dist/data/consolidated/csharp.json
 delete mode 100644 backend/dist/data/consolidated/css.json
 delete mode 100644 backend/dist/data/consolidated/haskell.json
 delete mode 100644 backend/dist/data/consolidated/html.json
 delete mode 100644 backend/dist/data/consolidated/java.json
 delete mode 100644 backend/dist/data/consolidated/javascript--react.json
 delete mode 100644 backend/dist/data/consolidated/javascript.json
 delete mode 100644 backend/dist/data/consolidated/python--fastapi.json
 delete mode 100644 backend/dist/data/consolidated/python--tkinter.json
 delete mode 100644 backend/dist/data/consolidated/python.json
 delete mode 100644 backend/dist/data/consolidated/regex.json
 delete mode 100644 backend/dist/data/consolidated/ruby.json
 delete mode 100644 backend/dist/data/consolidated/rust.json
 delete mode 100644 backend/dist/data/consolidated/scss.json
 delete mode 100644 backend/dist/data/consolidated/typescript.json
 delete mode 100644 backend/dist/data/icons/bash.svg
 delete mode 100644 backend/dist/data/icons/c.svg
 delete mode 100644 backend/dist/data/icons/cpp.svg
 delete mode 100644 backend/dist/data/icons/csharp.svg
 delete mode 100644 backend/dist/data/icons/css.svg
 delete mode 100644 backend/dist/data/icons/haskell.svg
 delete mode 100644 backend/dist/data/icons/html.svg
 delete mode 100644 backend/dist/data/icons/java.svg
 delete mode 100644 backend/dist/data/icons/javascript--react.svg
 delete mode 100644 backend/dist/data/icons/javascript.svg
 delete mode 100644 backend/dist/data/icons/python--fastapi.svg
 delete mode 100644 backend/dist/data/icons/python--tkinter.svg
 delete mode 100644 backend/dist/data/icons/python.svg
 delete mode 100644 backend/dist/data/icons/regex.svg
 delete mode 100644 backend/dist/data/icons/ruby.svg
 delete mode 100644 backend/dist/data/icons/rust.svg
 delete mode 100644 backend/dist/data/icons/scss.svg
 delete mode 100644 backend/dist/data/icons/typescript.svg
 delete mode 100644 backend/dist/index.js
 delete mode 100644 backend/eslint.config.js
 delete mode 100644 backend/index.ts
 delete mode 100644 backend/package-lock.json
 delete mode 100644 backend/package.json
 delete mode 100644 backend/railway.json
 delete mode 100644 backend/scripts/checkSnippetFormatting.ts
 delete mode 100644 backend/scripts/consolidateSnippets.ts
 delete mode 100644 backend/scripts/copyStatic.ts
 delete mode 100644 backend/scripts/snippetParser.ts
 delete mode 100644 backend/tsconfig.json
 delete mode 100644 backend/types/index.ts
 delete mode 100644 backend/utils/enums.ts
 delete mode 100644 backend/utils/objectUtils.ts
 delete mode 100644 backend/utils/raise.ts
 delete mode 100644 backend/utils/slugify.ts
 create mode 100644 components.json
 create mode 100644 eslint.config.mjs
 delete mode 100644 frontend/.gitattributes
 delete mode 100644 frontend/.gitignore
 delete mode 100644 frontend/.prettierignore
 delete mode 100644 frontend/.prettierrc
 delete mode 100644 frontend/cspell-dict.txt
 delete mode 100644 frontend/cspell.json
 delete mode 100644 frontend/eslint.config.js
 delete mode 100644 frontend/index.html
 delete mode 100644 frontend/package-lock.json
 delete mode 100644 frontend/package.json
 delete mode 100644 frontend/public/_redirects
 delete mode 100644 frontend/public/favicon/android-chrome-192x192.png
 delete mode 100644 frontend/public/favicon/android-chrome-512x512.png
 delete mode 100644 frontend/public/favicon/apple-touch-icon.png
 delete mode 100644 frontend/public/favicon/favicon-16x16.png
 delete mode 100644 frontend/public/favicon/favicon-32x32.png
 delete mode 100644 frontend/public/favicon/favicon.ico
 delete mode 100644 frontend/public/fonts/SourceSans3-Italic-VariableFont_wght.woff2
 delete mode 100644 frontend/public/fonts/SourceSans3-VariableFont_wght.woff2
 delete mode 100644 frontend/public/site.webmanifest
 delete mode 100644 frontend/src/AppRouter.tsx
 delete mode 100644 frontend/src/components/App.tsx
 delete mode 100644 frontend/src/components/Button.tsx
 delete mode 100644 frontend/src/components/CategoryList.tsx
 delete mode 100644 frontend/src/components/CodePreview.tsx
 delete mode 100644 frontend/src/components/Container.tsx
 delete mode 100644 frontend/src/components/CopyToClipboard.tsx
 delete mode 100644 frontend/src/components/CopyURLButton.tsx
 delete mode 100644 frontend/src/components/Icons.tsx
 delete mode 100644 frontend/src/components/LanguageSelector.tsx
 delete mode 100644 frontend/src/components/LinkButton.tsx
 delete mode 100644 frontend/src/components/Logo.tsx
 delete mode 100644 frontend/src/components/SearchInput.tsx
 delete mode 100644 frontend/src/components/SnippetList.tsx
 delete mode 100644 frontend/src/components/SnippetModal.tsx
 delete mode 100644 frontend/src/components/SubLanguageSelector.tsx
 delete mode 100644 frontend/src/components/ThemeToggle.tsx
 delete mode 100644 frontend/src/contexts/AppContext.tsx
 delete mode 100644 frontend/src/hooks/useCategories.ts
 delete mode 100644 frontend/src/hooks/useEscapeKey.ts
 delete mode 100644 frontend/src/hooks/useFetch.ts
 delete mode 100644 frontend/src/hooks/useGitHubStars.ts
 delete mode 100644 frontend/src/hooks/useKeyboardNavigation.ts
 delete mode 100644 frontend/src/hooks/useLanguages.ts
 delete mode 100644 frontend/src/hooks/useSnippets.ts
 delete mode 100644 frontend/src/layouts/Banner.tsx
 delete mode 100644 frontend/src/layouts/Footer.tsx
 delete mode 100644 frontend/src/layouts/Header.tsx
 delete mode 100644 frontend/src/layouts/Sidebar.tsx
 delete mode 100644 frontend/src/main.tsx
 delete mode 100644 frontend/src/styles/main.css
 delete mode 100644 frontend/src/types/index.ts
 delete mode 100644 frontend/src/utils/configureUserSelection.ts
 delete mode 100644 frontend/src/utils/consts.ts
 delete mode 100644 frontend/src/utils/enums.ts
 delete mode 100644 frontend/src/utils/languageUtils.ts
 delete mode 100644 frontend/src/utils/objectUtils.ts
 delete mode 100644 frontend/src/utils/raise.ts
 delete mode 100644 frontend/src/utils/slugify.ts
 delete mode 100644 frontend/src/vite-env.d.ts
 delete mode 100644 frontend/tests/configureUserSelection.test.ts
 delete mode 100644 frontend/tests/languageUtils.test.ts
 delete mode 100644 frontend/tests/objectUtils.test.ts
 delete mode 100644 frontend/tests/raise.test.ts
 delete mode 100644 frontend/tests/setup.ts
 delete mode 100644 frontend/tests/slugify.test.ts
 delete mode 100644 frontend/tsconfig.app.json
 delete mode 100644 frontend/tsconfig.json
 delete mode 100644 frontend/tsconfig.node.json
 delete mode 100644 frontend/vite.config.ts
 create mode 100644 next.config.ts
 create mode 100644 postcss.config.mjs
 delete mode 100644 preview.png
 create mode 100644 public/file.svg
 create mode 100644 public/globe.svg
 create mode 100644 public/next.svg
 create mode 100644 public/vercel.svg
 create mode 100644 public/window.svg
 delete mode 100644 snippets/bash/icon.svg
 delete mode 100644 snippets/bash/system/kill-previous-instances.md
 delete mode 100644 snippets/bash/system/system-resource-monitor.md
 delete mode 100644 snippets/c/basics/hello-world.md
 delete mode 100644 snippets/c/bit-manipulation/check-power-of-two.md
 delete mode 100644 snippets/c/bit-manipulation/clear-ith-bit.md
 delete mode 100644 snippets/c/bit-manipulation/count-set-bits.md
 delete mode 100644 snippets/c/bit-manipulation/get-ith-bit.md
 delete mode 100644 snippets/c/bit-manipulation/is-odd.md
 delete mode 100644 snippets/c/bit-manipulation/reverse-bits.md
 delete mode 100644 snippets/c/bit-manipulation/set-ith-bit.md
 delete mode 100644 snippets/c/bit-manipulation/swap-numbers.md
 delete mode 100644 snippets/c/bit-manipulation/toggle-ith-bit.md
 delete mode 100644 snippets/c/bit-manipulation/xor-of-range.md
 delete mode 100644 snippets/c/icon.svg
 delete mode 100644 snippets/c/mathematical-functions/check-perfect-number.md
 delete mode 100644 snippets/c/mathematical-functions/compound-interest.md
 delete mode 100644 snippets/c/mathematical-functions/factorial-function.md
 delete mode 100644 snippets/c/mathematical-functions/fibonacci-number.md
 delete mode 100644 snippets/c/mathematical-functions/linear-mapping.md
 delete mode 100644 snippets/c/mathematical-functions/sum-of-digits.md
 delete mode 100644 snippets/c/mathematical-functions/swap-numbers.md
 delete mode 100644 snippets/c/search/binary-search.md
 delete mode 100644 snippets/c/search/linear-search.md
 delete mode 100644 snippets/c/sorting/bubble-sort.md
 delete mode 100644 snippets/c/sorting/insertion-sort.md
 delete mode 100644 snippets/c/sorting/merge-sort.md
 delete mode 100644 snippets/c/sorting/quick-sort.md
 delete mode 100644 snippets/c/sorting/selection-sort.md
 delete mode 100644 snippets/cpp/basics/hello-world.md
 delete mode 100644 snippets/cpp/bit-manipulation/find-non-repeating-number.md
 delete mode 100644 snippets/cpp/data-structure-conversion/vector-to-queue.md
 delete mode 100644 snippets/cpp/debugging/vector-print.md
 delete mode 100644 snippets/cpp/file-handling/find-files-recursively.md
 delete mode 100644 snippets/cpp/file-handling/find-files.md
 delete mode 100644 snippets/cpp/file-handling/list-directories.md
 delete mode 100644 snippets/cpp/icon.svg
 delete mode 100644 snippets/cpp/math-and-numbers/binary-to-unsigned-integer-conversion.md
 delete mode 100644 snippets/cpp/math-and-numbers/check-prime-number.md
 delete mode 100644 snippets/cpp/string-manipulation/filter.md
 delete mode 100644 snippets/cpp/string-manipulation/palindrome.md
 delete mode 100644 snippets/cpp/string-manipulation/reverse-string.md
 delete mode 100644 snippets/cpp/string-manipulation/split-string.md
 delete mode 100644 snippets/cpp/string-manipulation/transform.md
 delete mode 100644 snippets/cpp/vector-manipulation.md/filter.md
 delete mode 100644 snippets/cpp/vector-manipulation.md/remove-duplicates.md
 delete mode 100644 snippets/cpp/vector-manipulation.md/remove-n-occurences.md
 delete mode 100644 snippets/cpp/vector-manipulation.md/transform.md
 delete mode 100644 snippets/csharp/basics/hello-world.md
 delete mode 100644 snippets/csharp/guid-utilities/generate-guid.md
 delete mode 100644 snippets/csharp/guid-utilities/validate-guid.md
 delete mode 100644 snippets/csharp/icon.svg
 delete mode 100644 snippets/csharp/jwt-utilities/decode-jwt.md
 delete mode 100644 snippets/csharp/jwt-utilities/validate-jwt.md
 delete mode 100644 snippets/csharp/list-utilities/swap-items-at-index.md
 delete mode 100644 snippets/csharp/string-utilities/capitalize-first-letter.md
 delete mode 100644 snippets/csharp/string-utilities/truncate-string.md
 delete mode 100644 snippets/css/animations/blink-animation.md
 delete mode 100644 snippets/css/animations/pulse-animation.md
 delete mode 100644 snippets/css/animations/shake-animation.md
 delete mode 100644 snippets/css/animations/slide-in-animation.md
 delete mode 100644 snippets/css/animations/typewriter-animation.md
 delete mode 100644 snippets/css/buttons/3d-button-effect.md
 delete mode 100644 snippets/css/buttons/button-hover-effect.md
 delete mode 100644 snippets/css/buttons/macos-button.md
 delete mode 100644 snippets/css/effects/blur-background.md
 delete mode 100644 snippets/css/effects/hover-glow-effect.md
 delete mode 100644 snippets/css/effects/hover-to-reveal-color.md
 delete mode 100644 snippets/css/effects/rgb-border-color-animation.md
 delete mode 100644 snippets/css/icon.svg
 delete mode 100644 snippets/css/layouts/css-reset.md
 delete mode 100644 snippets/css/layouts/equal-width-columns.md
 delete mode 100644 snippets/css/layouts/grid-layout.md
 delete mode 100644 snippets/css/layouts/responsive-design.md
 delete mode 100644 snippets/css/layouts/sticky-footer.md
 delete mode 100644 snippets/css/typography/letter-spacing.md
 delete mode 100644 snippets/css/typography/responsive-font-sizing.md
 delete mode 100644 snippets/haskell/array-manipulation/binary-search.md
 delete mode 100644 snippets/haskell/array-manipulation/chunk-array.md
 delete mode 100644 snippets/haskell/array-manipulation/matrix-transpose.md
 delete mode 100644 snippets/haskell/basics/hello-world.md
 delete mode 100644 snippets/haskell/file-handling/find-files-in-directory-by-type.md
 delete mode 100644 snippets/haskell/file-handling/read-file-in-chunks.md
 delete mode 100644 snippets/haskell/icon.svg
 delete mode 100644 snippets/haskell/monads/either-monad-for-error-handling.md
 delete mode 100644 snippets/haskell/monads/maybe-monad.md
 delete mode 100644 snippets/haskell/monads/state-monad.md
 delete mode 100644 snippets/haskell/monads/writer-monad.md
 delete mode 100644 snippets/haskell/string-manipulation/camelcase-to-snake-case.md
 delete mode 100644 snippets/haskell/string-manipulation/capitalize-words.md
 delete mode 100644 snippets/haskell/string-manipulation/count-word-occurrences-in-string.md
 delete mode 100644 snippets/haskell/string-manipulation/remove-punctuation.md
 delete mode 100644 snippets/haskell/string-manipulation/snake-case-to-camelcase.md
 delete mode 100644 snippets/haskell/string-manipulation/truncate-string.md
 delete mode 100644 snippets/html/basic-layouts/grid-layout-with-navigation.md
 delete mode 100644 snippets/html/basic-layouts/sticky-header-footer-layout.md
 delete mode 100644 snippets/html/icon.svg
 delete mode 100644 snippets/java/array-manipulation/remove-duplicates.md
 delete mode 100644 snippets/java/array-manipulation/zip-two-lists.md
 delete mode 100644 snippets/java/basics/hello-world.md
 delete mode 100644 snippets/java/bit-manipulation/bit-counting.md
 delete mode 100644 snippets/java/bit-manipulation/is-power-of-two.md
 delete mode 100644 snippets/java/date-time/date-time-formatting-american.md
 delete mode 100644 snippets/java/date-time/date-time-formatting-european.md
 delete mode 100644 snippets/java/date-time/duration-formatting-hours-minutes-seconds.md
 delete mode 100644 snippets/java/date-time/duration-formatting-minutes-seconds.md
 delete mode 100644 snippets/java/icon.svg
 delete mode 100644 snippets/java/math/checksum.md
 delete mode 100644 snippets/java/math/factorial.md
 delete mode 100644 snippets/java/math/fibonacci.md
 delete mode 100644 snippets/java/math/greatest-common-divisor.md
 delete mode 100644 snippets/java/math/least-common-multiple.md
 delete mode 100644 snippets/java/math/prime-check.md
 delete mode 100644 snippets/java/string-manipulation/ascii-to-string.md
 delete mode 100644 snippets/java/string-manipulation/camelcase-to-snake-case.md
 delete mode 100644 snippets/java/string-manipulation/capitalize-words.md
 delete mode 100644 snippets/java/string-manipulation/check-anagram.md
 delete mode 100644 snippets/java/string-manipulation/check-palindrome.md
 delete mode 100644 snippets/java/string-manipulation/count-character-frequency.md
 delete mode 100644 snippets/java/string-manipulation/count-character-occurrences.md
 delete mode 100644 snippets/java/string-manipulation/count-words.md
 delete mode 100644 snippets/java/string-manipulation/extract-text-between-delimiters.md
 delete mode 100644 snippets/java/string-manipulation/find-longest-word.md
 delete mode 100644 snippets/java/string-manipulation/find-unique-characters.md
 delete mode 100644 snippets/java/string-manipulation/mask-text.md
 delete mode 100644 snippets/java/string-manipulation/normalize-whitespace.md
 delete mode 100644 snippets/java/string-manipulation/password-generator.md
 delete mode 100644 snippets/java/string-manipulation/remove-punctuation.md
 delete mode 100644 snippets/java/string-manipulation/remove-special-characters.md
 delete mode 100644 snippets/java/string-manipulation/reverse-word-contents.md
 delete mode 100644 snippets/java/string-manipulation/reverse-word-order.md
 delete mode 100644 snippets/java/string-manipulation/slugify-string.md
 delete mode 100644 snippets/java/string-manipulation/snake-case-to-camelcase.md
 delete mode 100644 snippets/java/string-manipulation/spaces-to-tabs.md
 delete mode 100644 snippets/java/string-manipulation/string-to-ascii.md
 delete mode 100644 snippets/java/string-manipulation/string-to-camelcase.md
 delete mode 100644 snippets/java/string-manipulation/string-to-param-case.md
 delete mode 100644 snippets/java/string-manipulation/string-to-pascalcase.md
 delete mode 100644 snippets/java/string-manipulation/string-to-snake-case.md
 delete mode 100644 snippets/java/string-manipulation/string-to-titlecase.md
 delete mode 100644 snippets/java/string-manipulation/string-to-unicode.md
 delete mode 100644 snippets/java/string-manipulation/tabs-to-spaces.md
 delete mode 100644 snippets/java/string-manipulation/truncate-string.md
 delete mode 100644 snippets/java/string-manipulation/unicode-to-string.md
 delete mode 100644 snippets/javascript/[react]/basics/hello-world.md
 delete mode 100644 snippets/javascript/[react]/icon.svg
 delete mode 100644 snippets/javascript/array-manipulation/compare-arrays.md
 delete mode 100644 snippets/javascript/array-manipulation/partition-array.md
 delete mode 100644 snippets/javascript/array-manipulation/remove-duplicates.md
 delete mode 100644 snippets/javascript/array-manipulation/remove-falsy-values.md
 delete mode 100644 snippets/javascript/array-manipulation/shuffle-array.md
 delete mode 100644 snippets/javascript/array-manipulation/zip-arrays.md
 delete mode 100644 snippets/javascript/basics/hello-world.md
 delete mode 100644 snippets/javascript/color-manipulation/hex-to-rgb-color.md
 delete mode 100644 snippets/javascript/color-manipulation/hsl-to-rgb-color.md
 delete mode 100644 snippets/javascript/color-manipulation/rgb-to-hex-color.md
 delete mode 100644 snippets/javascript/color-manipulation/rgb-to-hsl-color.md
 delete mode 100644 snippets/javascript/date-and-time/check-leap-year.md
 delete mode 100644 snippets/javascript/date-and-time/convert-to-unix-timestamp.md
 delete mode 100644 snippets/javascript/date-and-time/format-date.md
 delete mode 100644 snippets/javascript/date-and-time/get-day-of-the-year.md
 delete mode 100644 snippets/javascript/date-and-time/get-days-in-month.md
 delete mode 100644 snippets/javascript/date-and-time/get-time-difference.md
 delete mode 100644 snippets/javascript/date-and-time/relative-time-formatter.md
 delete mode 100644 snippets/javascript/date-and-time/start-of-the-day.md
 delete mode 100644 snippets/javascript/dom-manipulation/change-element-style.md
 delete mode 100644 snippets/javascript/dom-manipulation/remove-element.md
 delete mode 100644 snippets/javascript/function-utilities/compose-functions.md
 delete mode 100644 snippets/javascript/function-utilities/curry-function.md
 delete mode 100644 snippets/javascript/function-utilities/debounce-function.md
 delete mode 100644 snippets/javascript/function-utilities/get-contrast-color.md
 delete mode 100644 snippets/javascript/function-utilities/memoize-function.md
 delete mode 100644 snippets/javascript/function-utilities/once-function.md
 delete mode 100644 snippets/javascript/function-utilities/rate-limit-function.md
 delete mode 100644 snippets/javascript/function-utilities/repeat-function-invocation.md
 delete mode 100644 snippets/javascript/function-utilities/sleep-function.md
 delete mode 100644 snippets/javascript/function-utilities/throttle-function.md
 delete mode 100644 snippets/javascript/icon.svg
 delete mode 100644 snippets/javascript/local-storage/add-item-to-localstorage.md
 delete mode 100644 snippets/javascript/local-storage/check-if-item-exists-in-localstorage.md
 delete mode 100644 snippets/javascript/local-storage/retrieve-item-from-localstorage.md
 delete mode 100644 snippets/javascript/mathematical-functions/combinations.md
 delete mode 100644 snippets/javascript/mathematical-functions/cross-product.md
 delete mode 100644 snippets/javascript/mathematical-functions/dot-product.md
 delete mode 100644 snippets/javascript/mathematical-functions/error-function.md
 delete mode 100644 snippets/javascript/mathematical-functions/greatest-common-divisor.md
 delete mode 100644 snippets/javascript/mathematical-functions/least-common-multiple.md
 delete mode 100644 snippets/javascript/mathematical-functions/linear-mapping.md
 delete mode 100644 snippets/javascript/mathematical-functions/matrix-multiplication.md
 delete mode 100644 snippets/javascript/mathematical-functions/modular-inverse.md
 delete mode 100644 snippets/javascript/mathematical-functions/prime-number.md
 delete mode 100644 snippets/javascript/number-formatting/convert-number-to-currency.md
 delete mode 100644 snippets/javascript/number-formatting/convert-number-to-roman-numerals.md
 delete mode 100644 snippets/javascript/number-formatting/convert-to-scientific-notation.md
 delete mode 100644 snippets/javascript/number-formatting/format-file-size.md
 delete mode 100644 snippets/javascript/number-formatting/format-number-with-commas.md
 delete mode 100644 snippets/javascript/number-formatting/number-formatter.md
 delete mode 100644 snippets/javascript/number-formatting/number-to-words-converter.md
 delete mode 100644 snippets/javascript/object-manipulation/check-if-object-is-empty.md
 delete mode 100644 snippets/javascript/object-manipulation/compare-two-objects-shallowly.md
 delete mode 100644 snippets/javascript/object-manipulation/convert-object-to-query-string.md
 delete mode 100644 snippets/javascript/object-manipulation/count-properties-in-object.md
 delete mode 100644 snippets/javascript/object-manipulation/deep-clone-object.md
 delete mode 100644 snippets/javascript/object-manipulation/filter-object.md
 delete mode 100644 snippets/javascript/object-manipulation/flatten-nested-object.md
 delete mode 100644 snippets/javascript/object-manipulation/freeze-object.md
 delete mode 100644 snippets/javascript/object-manipulation/get-nested-value.md
 delete mode 100644 snippets/javascript/object-manipulation/invert-object-keys-and-values.md
 delete mode 100644 snippets/javascript/object-manipulation/merge-objects-deeply.md
 delete mode 100644 snippets/javascript/object-manipulation/omit-keys-from-object.md
 delete mode 100644 snippets/javascript/object-manipulation/pick-keys-from-object.md
 delete mode 100644 snippets/javascript/object-manipulation/unique-by-key.md
 delete mode 100644 snippets/javascript/string-manipulation/capitalize-string.md
 delete mode 100644 snippets/javascript/string-manipulation/check-if-string-is-a-palindrome.md
 delete mode 100644 snippets/javascript/string-manipulation/convert-string-to-camel-case.md
 delete mode 100644 snippets/javascript/string-manipulation/convert-string-to-param-case.md
 delete mode 100644 snippets/javascript/string-manipulation/convert-string-to-pascal-case.md
 delete mode 100644 snippets/javascript/string-manipulation/convert-string-to-snake-case.md
 delete mode 100644 snippets/javascript/string-manipulation/convert-string-to-title-case.md
 delete mode 100644 snippets/javascript/string-manipulation/convert-tabs-to-spaces.md
 delete mode 100644 snippets/javascript/string-manipulation/count-words-in-a-string.md
 delete mode 100644 snippets/javascript/string-manipulation/data-with-prefix.md
 delete mode 100644 snippets/javascript/string-manipulation/extract-initials-from-name.md
 delete mode 100644 snippets/javascript/string-manipulation/generate-uuid.md
 delete mode 100644 snippets/javascript/string-manipulation/mask-sensitive-information.md
 delete mode 100644 snippets/javascript/string-manipulation/pad-string-on-both-sides.md
 delete mode 100644 snippets/javascript/string-manipulation/random-string.md
 delete mode 100644 snippets/javascript/string-manipulation/remove-all-whitespace.md
 delete mode 100644 snippets/javascript/string-manipulation/remove-vowels-from-a-string.md
 delete mode 100644 snippets/javascript/string-manipulation/reverse-string.md
 delete mode 100644 snippets/javascript/string-manipulation/slugify-string.md
 delete mode 100644 snippets/javascript/string-manipulation/truncate-text.md
 delete mode 100644 snippets/python/[fastapi]/basics/hello-world.md
 delete mode 100644 snippets/python/[fastapi]/icon.svg
 delete mode 100644 snippets/python/[tkinter]/basics/display-a-pillow-image.md
 delete mode 100644 snippets/python/[tkinter]/basics/hello-world.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-decimal.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-lowercase.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-negative-integers.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-only-digits.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-positive-integers.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-signed-integers.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-specific-characters.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/allow-uppercase.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/custom-regular-expression.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/restrict-length.md
 delete mode 100644 snippets/python/[tkinter]/entry-validation/validate-file-path.md
 delete mode 100644 snippets/python/[tkinter]/icon.svg
 delete mode 100644 snippets/python/[tkinter]/menus/context-menu.md
 delete mode 100644 snippets/python/basics/hello-world.md
 delete mode 100644 snippets/python/datetime-utilities/calculate-date-difference-in-milliseconds.md
 delete mode 100644 snippets/python/datetime-utilities/check-if-date-is-a-weekend.md
 delete mode 100644 snippets/python/datetime-utilities/day-of-the-week-string.md
 delete mode 100644 snippets/python/datetime-utilities/generate-date-range-list.md
 delete mode 100644 snippets/python/datetime-utilities/get-current-date-and-time-as-string.md
 delete mode 100644 snippets/python/datetime-utilities/get-number-of-days-in-a-month.md
 delete mode 100644 snippets/python/datetime-utilities/measure-execution-time.md
 delete mode 100644 snippets/python/error-handling/create-custom-exception-type.md
 delete mode 100644 snippets/python/error-handling/retry-function-execution-on-exception.md
 delete mode 100644 snippets/python/file-handling/find-files.md
 delete mode 100644 snippets/python/file-handling/get-file-extension.md
 delete mode 100644 snippets/python/file-handling/list-files-in-directory.md
 delete mode 100644 snippets/python/file-handling/read-file-in-chunks.md
 delete mode 100644 snippets/python/icon.svg
 delete mode 100644 snippets/python/json-manipulation/filter-json-data.md
 delete mode 100644 snippets/python/json-manipulation/flatten-nested-json.md
 delete mode 100644 snippets/python/json-manipulation/merge-multiple-json-files.md
 delete mode 100644 snippets/python/json-manipulation/read-json-file.md
 delete mode 100644 snippets/python/json-manipulation/update-json-file.md
 delete mode 100644 snippets/python/json-manipulation/write-json-file.md
 delete mode 100644 snippets/python/list-manipulation/find-duplicates-in-a-list.md
 delete mode 100644 snippets/python/list-manipulation/find-intersection-of-two-lists.md
 delete mode 100644 snippets/python/list-manipulation/find-maximum-difference-in-list.md
 delete mode 100644 snippets/python/list-manipulation/flatten-nested-list.md
 delete mode 100644 snippets/python/list-manipulation/flatten-unevenly-nested-lists.md
 delete mode 100644 snippets/python/list-manipulation/partition-list.md
 delete mode 100644 snippets/python/list-manipulation/remove-duplicates.md
 delete mode 100644 snippets/python/math-and-numbers/calculate-compound-interest.md
 delete mode 100644 snippets/python/math-and-numbers/check-perfect-square.md
 delete mode 100644 snippets/python/math-and-numbers/check-prime-number.md
 delete mode 100644 snippets/python/math-and-numbers/convert-binary-to-decimal.md
 delete mode 100644 snippets/python/math-and-numbers/convert-bytes-to-human-readable-format.md
 delete mode 100644 snippets/python/math-and-numbers/find-lcm-least-common-multiple.md
 delete mode 100644 snippets/python/math-and-numbers/linear-mapping.md
 delete mode 100644 snippets/python/math-and-numbers/solve-quadratic-equation.md
 delete mode 100644 snippets/python/sqlite-database/create-sqlite-database-table.md
 delete mode 100644 snippets/python/sqlite-database/insert-data-into-sqlite-table.md
 delete mode 100644 snippets/python/sqlite-database/query-data-from-sqlite-table.md
 delete mode 100644 snippets/python/sqlite-database/update-records-in-sqlite-table.md
 delete mode 100644 snippets/python/string-manipulation/capitalize-words.md
 delete mode 100644 snippets/python/string-manipulation/check-anagram.md
 delete mode 100644 snippets/python/string-manipulation/check-palindrome.md
 delete mode 100644 snippets/python/string-manipulation/convert-snake-case-to-camel-case.md
 delete mode 100644 snippets/python/string-manipulation/convert-string-to-unicode.md
 delete mode 100644 snippets/python/string-manipulation/count-character-frequency.md
 delete mode 100644 snippets/python/string-manipulation/count-vowels.md
 delete mode 100644 snippets/python/string-manipulation/count-words.md
 delete mode 100644 snippets/python/string-manipulation/find-all-substrings.md
 delete mode 100644 snippets/python/string-manipulation/find-longest-word.md
 delete mode 100644 snippets/python/string-manipulation/find-unique-characters.md
 delete mode 100644 snippets/python/string-manipulation/generate-random-string.md
 delete mode 100644 snippets/python/string-manipulation/remove-characters.md
 delete mode 100644 snippets/python/string-manipulation/remove-duplicate-characters.md
 delete mode 100644 snippets/python/string-manipulation/remove-punctuation.md
 delete mode 100644 snippets/python/string-manipulation/remove-whitespace.md
 delete mode 100644 snippets/python/string-manipulation/reverse-string.md
 delete mode 100644 snippets/python/string-manipulation/split-camel-case.md
 delete mode 100644 snippets/python/string-manipulation/truncate.md
 delete mode 100644 snippets/regex/icon.svg
 delete mode 100644 snippets/regex/miscellaneous/hexadecimal-color.md
 delete mode 100644 snippets/regex/miscellaneous/ipv4.md
 delete mode 100644 snippets/regex/miscellaneous/unintentional-duplication.md
 delete mode 100644 snippets/regex/miscellaneous/whitespace-trimmer.md
 delete mode 100644 snippets/regex/validation pattern/email-address.md
 delete mode 100644 snippets/regex/validation pattern/strong-password.md
 delete mode 100644 snippets/ruby/array-manipulation/binary-search.md
 delete mode 100644 snippets/ruby/array-manipulation/chunk-array.md
 delete mode 100644 snippets/ruby/array-manipulation/matrix-transpose.md
 delete mode 100644 snippets/ruby/basics/hello-world.md
 delete mode 100644 snippets/ruby/error-handling/custom-error-class.md
 delete mode 100644 snippets/ruby/icon.svg
 delete mode 100644 snippets/ruby/math-and-numbers/calculate-compound-interest.md
 delete mode 100644 snippets/ruby/math-and-numbers/calculate-factorial.md
 delete mode 100644 snippets/ruby/math-and-numbers/check-prime-number.md
 delete mode 100644 snippets/ruby/math-and-numbers/find-all-primes-up-to-integer-sieve-of-sundaram.md
 delete mode 100644 snippets/ruby/string-manipulation/capitalize-words.md
 delete mode 100644 snippets/ruby/string-manipulation/count-word-occurrences-in-string.md
 delete mode 100644 snippets/ruby/string-manipulation/remove-punctuation.md
 delete mode 100644 snippets/ruby/string-manipulation/transform-camel-case-to-snake-case.md
 delete mode 100644 snippets/ruby/string-manipulation/transform-from-snake-case-to-camel-case.md
 delete mode 100644 snippets/ruby/string-manipulation/transform-from-snake-case-to-pascal-case.md
 delete mode 100644 snippets/ruby/string-manipulation/truncate-string.md
 delete mode 100644 snippets/rust/basics/hello-world.md
 delete mode 100644 snippets/rust/file-handling/find-files.md
 delete mode 100644 snippets/rust/file-handling/read-file-lines.md
 delete mode 100644 snippets/rust/icon.svg
 delete mode 100644 snippets/rust/linux/get-desktop-enviroment.md
 delete mode 100644 snippets/rust/string-manipulation/capitalize-string.md
 delete mode 100644 snippets/scss/animations/fade-in-animation.md
 delete mode 100644 snippets/scss/animations/slide-in-from-left.md
 delete mode 100644 snippets/scss/borders-shadows/border-radius-helper.md
 delete mode 100644 snippets/scss/borders-shadows/box-shadow-helper.md
 delete mode 100644 snippets/scss/components/primary-button.md
 delete mode 100644 snippets/scss/icon.svg
 delete mode 100644 snippets/scss/layouts/aspect-ratio.md
 delete mode 100644 snippets/scss/layouts/dark-theme.md
 delete mode 100644 snippets/scss/layouts/flex-center.md
 delete mode 100644 snippets/scss/layouts/grid-container.md
 delete mode 100644 snippets/scss/typography/font-import-helper.md
 delete mode 100644 snippets/scss/typography/line-clamp-mixin.md
 delete mode 100644 snippets/scss/typography/px-to-rem-helper.md
 delete mode 100644 snippets/scss/typography/text-gradient.md
 delete mode 100644 snippets/scss/typography/text-overflow-ellipsis.md
 delete mode 100644 snippets/scss/utilities/clearfix.md
 delete mode 100644 snippets/scss/utilities/responsive-breakpoints.md
 delete mode 100644 snippets/scss/utilities/spacing.md
 delete mode 100644 snippets/typescript/helper-types/at-least-one-key.md
 delete mode 100644 snippets/typescript/helper-types/deep-partial-type.md
 delete mode 100644 snippets/typescript/helper-types/deep-readonly-type.md
 delete mode 100644 snippets/typescript/helper-types/deep-required-type.md
 delete mode 100644 snippets/typescript/helper-types/exclusive-types.md
 delete mode 100644 snippets/typescript/helper-types/keys-of-type.md
 delete mode 100644 snippets/typescript/helper-types/keys-to-optional.md
 delete mode 100644 snippets/typescript/helper-types/nullable-keys.md
 delete mode 100644 snippets/typescript/helper-types/omit-keys-of-type.md
 delete mode 100644 snippets/typescript/helper-types/required-keys.md
 delete mode 100644 snippets/typescript/helper-types/union-to-intersection.md
 delete mode 100644 snippets/typescript/icon.svg
 create mode 100644 src/app/api/snippets/route.ts
 create mode 100644 src/app/contribute/page.tsx
 create mode 100644 src/app/extensions/page.tsx
 create mode 100644 src/app/favicon.ico
 create mode 100644 src/app/globals.css
 create mode 100644 src/app/guide/page.tsx
 create mode 100644 src/app/layout.tsx
 create mode 100644 src/app/license/page.tsx
 create mode 100644 src/app/page.tsx
 create mode 100644 src/app/snippets/page.tsx
 create mode 100644 src/components/ui/button.tsx
 create mode 100644 src/lib/utils.ts
 create mode 100644 tsconfig.json

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
deleted file mode 100644
index 9b331881..00000000
--- a/.github/CODEOWNERS
+++ /dev/null
@@ -1,31 +0,0 @@
-# ---------- Our awesome maintainers ----------
-
-# Global maintainers
-* @Mathys-Gasnier
-
-# Code maintainers
-/src/ @psychlone77 @saminjay @Mathys-Gasnier
-
-# Snippets maintainers
-/snippets @majvax @Mathys-Gasnier
-/snippets/javascript @psychlone77 @saminjay
-/snippets/python @psychlone77 @saminjay
-/snippets/cpp @saminjay
-
-
-# ---------- What is a maintainer ----------
-
-# Maintainers will be notified when there is a pull request 
-# with a change in the folder/file assigned to them. They will 
-# have to approve the pull request before it can be merged.
-
-
-# ---------- How to be a maintainer ----------
-
-# To maintain trust and collaboration with reviewers, first, 
-# we will need to prove that you can contribute to the project well. 
-# As you contribute more, the more responsibility you will have.
-
-# We will assign maintainers for specific languages as well.
-# As we notice more contribution from your side, we will let you know 
-# and assign you a language.
\ No newline at end of file
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index b03120fc..00000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-# These are supported funding model platforms
-
-github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
-patreon: # Replace with a single Patreon username
-open_collective: # Replace with a single Open Collective username
-ko_fi: technoph1le
-tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
-community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
-liberapay: # Replace with a single Liberapay username
-issuehunt: # Replace with a single IssueHunt username
-lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
-polar: # Replace with a single Polar username
-buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
-thanks_dev: # Replace with a single thanks.dev username
-custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/.github/ISSUE_TEMPLATE/bugs.yml b/.github/ISSUE_TEMPLATE/bugs.yml
deleted file mode 100644
index b5d03625..00000000
--- a/.github/ISSUE_TEMPLATE/bugs.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: "Bug Report"
-description: "File a bug report to fix issues in the codebase"
-title: "[Bug] - "
-labels: ["bug"]
-body:
-  - type: markdown
-    attributes:
-      value: "# Bug report"
-  - type: textarea
-    id: description
-    attributes:
-      label: "What bug did you find in the codebase?"
-      description: "Please explain the issue in as much detail as possible. Provide screenshots as necessary"
-    validations:
-      required: true
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 3ba13e0c..00000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1 +0,0 @@
-blank_issues_enabled: false
diff --git a/.github/ISSUE_TEMPLATE/docs.yml b/.github/ISSUE_TEMPLATE/docs.yml
deleted file mode 100644
index 1c4c2011..00000000
--- a/.github/ISSUE_TEMPLATE/docs.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-name: Documentation
-description: Request to update documentation or fix typos
-title: "[Docs] - "
-labels: ["documentation"]
-body:
-  - type: markdown
-    attributes:
-      value: "# Update documentation"
-  - type: textarea
-    id: docs
-    attributes:
-      label: What changes would you like to make in the documentation?
-      description: Please explain the issue and what the change should be
-    validations:
-      required: true
diff --git a/.github/ISSUE_TEMPLATE/features.yml b/.github/ISSUE_TEMPLATE/features.yml
deleted file mode 100644
index 3f77f087..00000000
--- a/.github/ISSUE_TEMPLATE/features.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-name: Feature request
-description: Request for feature
-title: "[Feature] - "
-labels: ["feature"]
-body:
-  - type: markdown
-    attributes:
-      value: "# Feature request"
-  - type: textarea
-    id: feature
-    attributes:
-      label: What feature would you like to see?
-      description: Please provide a detailed description for the new feature.
diff --git a/.github/ISSUE_TEMPLATE/general.yml b/.github/ISSUE_TEMPLATE/general.yml
deleted file mode 100644
index 6ecf7033..00000000
--- a/.github/ISSUE_TEMPLATE/general.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-name: General report
-description: This is a general issue that does not fit in the other categories
-title: "[General] - "
-body:
-  - type: markdown
-    attributes:
-      value: "# General"
-  - type: textarea
-    id: description
-    attributes:
-      label: What general issue would you like to create?
-      description: Please be as detailed as possible. Include code snippets or screenshots if necessary.
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
deleted file mode 100644
index 977e2ca3..00000000
--- a/.github/pull_request_template.md
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- **ANY PULL REQUEST NOT FOLLOWING GUIDELINES OR NOT INCLUDING A DESCRIPTION WILL BE CLOSED !** -->
-
-# Description
-
-<!-- Include a summary of your changes. -->
-
-## Type of Change
-
-<!-- What kind of change does this pull request introduce? (Check all that apply) -->
-
-- [ ] ✨ New snippet
-- [ ] 🛠 Improvement to an existing snippet
-- [ ] 🐞 Bug fix
-- [ ] 📖 Documentation update
-- [ ] 🔧 Other (please describe):
-
-## Checklist
-
-<!--  Before submitting, ensure your pull request meets these requirements: -->
-
-- [ ] I have tested my code and verified it works as expected.
-- [ ] My code follows the style and contribution guidelines of this project.
-- [ ] Comments are added where necessary for clarity.
-- [ ] Documentation has been updated (if applicable).
-- [ ] There are no new warnings or errors from my changes.
-
-## Related Issues
-
-<!-- Link any relevant issues (use #issue-number syntax). If not, leave it empty -->
-
-Closes #
-
-## Additional Context
-
-<!-- Add any extra details, questions, or considerations here. -->
-
-## Screenshots (Optional)
-
-<!-- If your changes affect visuals, please include screenshots. -->
-
-<details> 
-<summary>Click to view screenshots</summary>
-
-<!-- Add your screenshots here -->
-
-</details>
diff --git a/.github/workflows/check-snippets.yml b/.github/workflows/check-snippets.yml
deleted file mode 100644
index 0caa5587..00000000
--- a/.github/workflows/check-snippets.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Checks snippets syntax
-
-on:
-  pull_request:
-    paths:
-      - "snippets/**"
-
-jobs:
-  check-snippets:
-    runs-on: ubuntu-latest
-
-    permissions:
-      contents: read
-      pull-requests: write
-
-    steps:
-      - name: Checkout repository
-        uses: actions/checkout@v4
-
-      - name: Set up Node.js
-        uses: actions/setup-node@v4
-        with:
-          node-version: 22
-
-      - name: Install dependencies
-        run: npm ci
-
-      - name: Check if snippets are formated correctly
-        uses: int128/comment-action@v1
-        with:
-          run: npx tsx utils/checkSnippetFormatting.ts # Run the script located in the utils/ folder
-          post-on-failure: |
-            ## :x: Snippet Format Error
-            ${run.output}
diff --git a/.github/workflows/pre-commit-checks.yml b/.github/workflows/pre-commit-checks.yml
deleted file mode 100644
index f0150d95..00000000
--- a/.github/workflows/pre-commit-checks.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: Pre-commit checks
-
-on:
-  pull_request:
-    branches:
-      - "**"
-
-jobs:
-  pre-commit-checks:
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout repository
-        uses: actions/checkout@v4
-
-      - name: Set up Node.js
-        uses: actions/setup-node@v4
-        with:
-          node-version: 22
-
-      - name: Install dependencies
-        run: npm ci
-
-      - name: Run cspell
-        run: npm run cspell
-
-      - name: Run lint
-        run: npm run lint
-
-      - name: Run tests
-        run: npm run test-ci
-
-      - name: Run build
-        run: npm run build
diff --git a/.gitignore b/.gitignore
index 40b878db..5ef6a520 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,41 @@
-node_modules/
\ No newline at end of file
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.*
+.yarn/*
+!.yarn/patches
+!.yarn/plugins
+!.yarn/releases
+!.yarn/versions
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+.pnpm-debug.log*
+
+# env files (can opt-in for committing if needed)
+.env*
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/.husky/pre-commit b/.husky/pre-commit
deleted file mode 100644
index e193cdc8..00000000
--- a/.husky/pre-commit
+++ /dev/null
@@ -1,11 +0,0 @@
-# TODO: Bring back tests
-# npm run test-ci
-# npm run cspell
-npm run cspell:frontend
-npm run format
-npm run lint
-
-npm run build:backend
-
-# Run production consolidate script before commit
-.husky/scripts/consolidateForProd.sh
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index 84f2c068..00000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,37 +0,0 @@
-## QuickSnip Code of Conduct
-
-QuickSnip is a welcoming and collaborative community for developers to organize, share, and discover code snippets. By participating in QuickSnip, you agree to uphold this code of conduct to maintain a friendly and inclusive environment.
-
-### Short Version
-
-- Be respectful to everyone in the community.
-- Avoid harassment, trolling, or spamming.
-- Ensure QuickSnip remains a safe and productive space for all.
-- Report any inappropriate behavior to [me](mailto:technophilechannelyt@gmail.com), the owner of QuickSnip, or our [Discord team](https://discord.gg/UtJJcnsN).
-- No unauthorized bots without prior permission.
-
----
-
-### Long Version
-
-#### Harassment-Free Environment
-
-We are committed to providing a harassment-free experience for everyone, regardless of gender, gender identity and expression, age, sexual orientation, disability, physical appearance, body size, race, ethnicity, national origin, or religion (or lack thereof). Examples of unacceptable behavior include:
-
-- **Harassment:** Includes sexual language or imagery, deliberate intimidation, stalking, name-calling, unwelcome attention, libel, and malicious hacking or social engineering.
-- **Trolling:** Posting inflammatory comments to provoke an emotional response or disrupt discussions.
-- **Spamming:** Posting off-topic messages, promoting unrelated products, soliciting donations, advertising jobs or gigs, or flooding discussions with files or text.
-
-#### Reporting Issues
-
-If you experience or witness harassment, trolling, spamming, or any other inappropriate behavior, please report it to [me](mailto:technophilechannelyt@gmail.com), the owner of QuickSnip, or our QuickSnip [Discord team](https://discord.gg/UtJJcnsN). Include details like screenshots and URLs, if possible, to help us address the issue effectively.
-
-I, or the QuickSnip team will review all reports and take appropriate actions, which may include warnings, temporary bans, or permanent removal from the community.
-
-#### Respectful Use of Bots
-
-No bots are allowed within the QuickSnip community without prior written permission from the QuickSnip team. Unauthorized bots will be removed.
-
-#### Final Notes
-
-This code of conduct is inspired by [FreeCodeCamp’s approach](https://www.freecodecamp.org/news/code-of-conduct), emphasizing clarity and friendliness. Let’s work together to make QuickSnip a supportive and productive space for all developers!
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index bef8b660..00000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,279 +0,0 @@
-# Contributing to QuickSnip
-
-Hey there! 👋 First off, thanks for taking the time to contribute! ❤️
-
-You can contribute in two main ways:
-
-- **Improving the code** (like fixing bugs or adding cool new features)
-- **Adding new code snippets** (or improving the existing ones!)
-
----
-
-## Improving the code
-
-### How to report bugs
-
-If you spot a bug in the codebase or issues with the documentation, please open up a [GitHub issue](https://github.com/technoph1le/quicksnip/issues) detailing the problem before creating a PR. Once confirmed with maintainers, you can then create a PR.
-
-### How to propose new features
-
-If you are interested in proposing new features, please open up a new [GitHub discussion](https://github.com/technoph1le/quicksnip/discussions) with details for the proposed feature.
-
-Please do not create a PR for a new feature without first discussing it with the maintainers. If you create a PR for a new feature without discussing it first, then your PR will be closed.
-
----
-
-## Snippets Guidelines
-
-### Snippet Tags
-
-- Tags must describe the snippet with simple word.
-
-Here's an example:
-
-```md
----
-title: Convert Number to Currency
-description: Converts a number to a currency format with a specific locale.
-author: axorax
-tags: number,currency
----
-```
-
-**Do not use generic keywords or the language itself as a tag `utility` or `javascript`!**
-
-### Snippet Format
-
-**All** snippets should follow the following structure:
-
-- A `code` segment, containing a function with the actual snippet functionnality
-- An `example` segement, containing one or more examples of use
-
-Example in javascript:
-
-```js
-function example(x) {
-  return x * 2;
-}
-
-// Usage:
-example(5); // Returns: 10
-```
-
-If your function doesn't return anything just show how to use it. If the result of your function is too complicated to be expressed in a single comment, your snippet is probably too complex to begin with.
-
-### Snippet boundaries
-
-To ensure your snippet isn’t refused, consider these questions:
-
-- **Does the standard library of my language provide an easy way of doing this ?**
-- **Does that snippet not have a real, and practical use case ?**
-- **Could it be split into separate parts to be better understood ?**
-
-If any answer is yes, then your snippet will most likely get rejected.
-
----
-
-## Adding Snippets
-
-### Adding a New Snippet
-
-1. **Ensure your snippet match [guidelines](#snippets-guidelines)**
-
-2. **Navigate to the relevant folder:**
-
-   - Go to the `/snippets` folder in the root directory.
-   - Locate the folder for the programming language of your snippet, such as `javascript` or `python`.
-
-3. **Choose the correct category:**
-
-   - Within the language folder, find the relevant category folder for your snippet.
-   - If no suitable category exists, refer to [Adding a New Category](#adding-a-new-category).
-
-4. **Create a markdown file:**
-
-   - Create a new file with a `.md` extension.
-   - Name the file appropriately, keeping it descriptive and concise.
-
-5. **Add your snippet:**
-
-   - Use the following format to structure your snippet:
-
-````md
----
-title: Name of the snippet
-description: A short explanation of what the snippet does
-tags: tag1, tag2, tag3
-author: your-github-username
----
-
-```lang
-// Your code here
-```
-````
-
-Here’s an example for JavaScript:
-
-````md
----
-title: Format Date
-description: Formats a date in 'YYYY-MM-DD' format.
-author: technoph1le
-tags: date,format
----
-
-```js
-const formatDate = (date) => date.toISOString().split("T")[0];
-
-// Usage:
-console.log(formatDate(new Date())); // Output: '2024-12-10'
-```
-````
-
-6. **Use syntax highlighting:**
-
-   - Enclose your code with triple backticks (```).
-   - Specify the language after the first set of backticks for syntax highlighting.
-
-7. **Test your snippet:**
-
-   - Ensure your code runs as expected. \
-      To test that your snippets are formatted correctly use the `snippets:check` script:
-
-     ```
-     $ npm run snippets:check
-     ```
-
-     It will return nothing if they are well formatted, otherwise it will tell you what the error is.
-
-     ***
-
-     To preview the snippets, start the vite server using:
-
-     ```
-     $ npm run dev
-     ```
-
-     It will use HMR to update the snippets in the `/public` folder, making them available to the frontend.
-
-Expected file structure:
-
-```md
-/snippets
-|- language
-|- category-name
-|- your-snippet-here.md
-```
-
-> Please do **NOT** add or edit anything in `/public` folder. It will be used for consolidating snippets.
-
-### Editing a Existing Snippet
-
-If you’d like to refine or improve an existing snippet:
-
-1. **Add a `contributors` field:**
-
-   - Include your GitHub username under the `contributors` field in the metadata section.
-
-````md
----
-title: Name of the snippet
-description: A short explanation of what the snippet does
-tags: tag1, tag2, tag3
-author: original-author
-contributors: your-github-username
----
-
-```
-Updated code here
-```
-````
-
-2. **Credit all contributors:**
-
-   - If contributors already exist, add your username separated by a comma
-
-```md
-contributors: contributor1, contributor2, your-github-username
-```
-
-3. **Document changes:**
-
-   - Clearly indicate what you updated and why in your pull request description.
-
-> We want to make sure that original author and contributor(s) are credited for their work.
-
-### Adding a New Category
-
-If your snippet doesn’t fit into any existing category, you can create a new one! Just make sure it’s unique and doesn’t overlap with others (e.g., don’t create separate categories for “Date” and “Time” when “Date and Time” works).
-
-1. **Create a new category folder:**
-
-   - In the relevant language directory, add a new folder.
-   - Use a lowercase name with hyphens for separation (e.g., `file-handling`).
-
-2. **Add snippets:**
-
-   - Follow the [Adding a New Snippet](#adding-a-new-snippet) instructions.
-
-Example structure:
-
-```md
-/snippets
-|- python
-|- file-handling
-|- list-manipulation
-|- ....
-```
-
-### Adding a New Language
-
-If you want to introduce a new programming language, here's how to do it:
-
-1. **Create a language folder:**
-
-   - Add a new folder under the `snippets` directory.
-   - Name it after the language in lowercase (e.g., `go`, `ruby`).
-
-2. **Add categories and snippets:**
-
-   - Follow the [Adding a New Snippet](#adding-a-new-snippet) and [Adding a New Category](#adding-a-new-category) guidelines.
-
-3. **Include an icon:**
-
-   - Add an `icon.svg` file (50x50px) in the same language folder.
-   - Use tools like [Resize SVG](https://www.iloveimg.com/resize-image/resize-svg) to ensure the correct size.
-
-4. **Double-check your work:**
-
-   - Verify that everything is structured correctly and displays as intended.
-
----
-
-## Testing Snippets
-
-To test that your snippets are formatted correctly use the following script:
-
-```
-$ npm run snippets:check
-```
-
-It will return nothing if they are well formatted, otherwise it will tell you what the error is.
-
----
-
-To preview the snippets, you need to consolidate them, use the following script:
-
-```
-$ npm run snippets:consolidate
-```
-
-It will update the snippets in the `/public` folder, making them available to the frontend.
-
-## Final Notes
-
-Whether you’re fixing a tiny typo, writing a new snippet, or dreaming up big features, every bit counts! 🛠️
-
-If you have any questions or need help, feel free to open a new [GitHub discussion](https://github.com/technoph1le/quicksnip/discussions).
-
-Happy coding! 💻✨
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index eb6b14a0..00000000
--- a/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2025 Technophile
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/README.md b/README.md
index 128dca4d..e215bc4c 100644
--- a/README.md
+++ b/README.md
@@ -1,56 +1,36 @@
-# QuickSnip
+This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
 
-QuickSnip is an open-source tool designed for developers who want to organize, search, and share code snippets across various programming languages. It provides a centralized platform for managing handy snippets. Built with love and powered by an awesome community. 🚀
+## Getting Started
 
-<div>
-<a href="https://youtu.be/BhRi7fJzPgk?si=z1sVXU7uRS0bkSEt" target="_blank">
-  <img src="https://img.shields.io/static/v1?label=&message=Watch%20on%20YouTube&labelColor=FFFFFF&color=FF0000&style=for-the-badge&logo=youtube&logoColor=FF0000" alt="Watch on YouTube">
-</a>
-<div>
+First, run the development server:
 
-<br>
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
 
-![Website preview](/preview.png)
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
 
-## How to Contribute
+You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
 
-Want to help make QuickSnip even better? You can contribute by:
+This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
 
-- **Improving the Code**: Fix bugs, suggest new features, or optimize the project.
-- **Adding New Snippets**: Share your favorite snippets to grow the database.
+## Learn More
 
-Check out the [CONTRIBUTING.md](/CONTRIBUTING.md) file for detailed contribution guidelines.
+To learn more about Next.js, take a look at the following resources:
 
-## General Rules
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
 
-To keep everything smooth and consistent, please:
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
 
-- [x] Follow the project’s style and contribution rules.
-- [x] Be kind and respectful to others.
-- [x] If you’re unsure, ask questions.
+## Deploy on Vercel
 
-Following these rules helps us build an awesome community. 🚀
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
 
-## Third-Party
-
-We love to see the creativity of our community! If you build something using QuickSnip, let us know. Here are some featured examples:
-
-- ⚡️ [**Raycast Extension**](https://www.raycast.com/anders_morille/quicksnip): An extension to browse and use QuickSnip snippets directly from Raycast. (Thanks to the creator: [@lille-morille](https://github.com/lille-morille))
-
-If you’d like to create your own extension or tool:
-
-- [x] Please ensure it adheres to our project’s licensing and attribution requirements.
-- [x] Please link to the [original QuickSnip repository](https://github.com/technoph1le/quicksnip) in your extension/tool to attribute the source.
-- [x] Share your work with us — we’d be thrilled to feature it!
-
-## Project Vision
-
-For a detailed look into our goals, future direction, and aspirations, see the [VISION.md](/VISION.md) file.
-
-## License
-
-QuickSnip is licensed under the [MIT License](/LICENSE). Feel free to use and share it as you like.
-
-<a href="https://www.producthunt.com/products/quicksnip" target="_blank" style="text-decoration: none;">
-  <img src="https://img.shields.io/static/v1?label=&message=Leave%20a%20Review&labelColor=FFFFFF&color=DA552F&style=for-the-badge&logo=product-hunt&logoColor=DA552F" alt="Leave a Review">
-</a>
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
diff --git a/VISION.md b/VISION.md
deleted file mode 100644
index c28d2509..00000000
--- a/VISION.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Vision for QuickSnip
-
-## What is QuickSnip?
-
-QuickSnip is an open-source tool designed for developers who want to organize, search, and share code snippets across various programming languages. It provides a centralized platform for managing handy snippets. Built with love and powered by an awesome community.
-
-## Core Principles
-
-- **Developer Focused**: Focus on features that truly improve developer productivity.
-
-- **Open and Extensible**: Encourage community contributions and integrations.
-
-- **Lightweight and Fast**: Keep performance high and avoid unnecessary complexity.
-
-## Our Goals
-
-- Seamless snippet management without turning into an overly complex tool
-
-- Enable collaboration and sharing while respecting user privacy and customization needs.
-
-We do **NOT** aim to be:
-
-- a component library
-- a documentation
-
-## QuickSnip Roadmap
-
-### v1.0 (Launching Soon)
-
-- [x] A new snippets storage system for better maintainability and scalability
-- [x] Search functionality
-- [x] A support for frameworks and libraries
-- [x] An ability to share snippets with others
-- [x] A basic SEO (Search Engine Optimization)
-
-### v2.0 (Planned Vision)
-
-- [ ] An ability to have private snippets with personal account
-- [ ] Improved search functionality with filters
-- [ ] A documentation page
-- [ ] An improved SEO (Search Engine Optimization)
-
-### Potential Future Ideas
-
-- [ ] Plugins for IDEs like VS Code and JetBrains
-- [ ] Enterprise-grade support for larger organizations
-
-## Disclaimer on Future Plans
-
-This roadmap outlines our current vision for QuickSnip and may evolve based on user feedback, community contributions, and shifting priorities. We welcome your input and encourage you to help shape QuickSnip’s future.
-
-## Future Vision
-
-QuickSnip aims to become the preferred platform for developers to store, retrieve, and collaborate on code snippets.
-
-Explore our [GitHub Releases](https://github.com/technoph1le/quicksnip/releases) for updates and join us on this journey.
diff --git a/backend/.gitignore b/backend/.gitignore
deleted file mode 100644
index bdabc146..00000000
--- a/backend/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-node_modules
-.env*
-data/
\ No newline at end of file
diff --git a/backend/.prettierignore b/backend/.prettierignore
deleted file mode 100644
index 1d445fd8..00000000
--- a/backend/.prettierignore
+++ /dev/null
@@ -1,3 +0,0 @@
-data/
-dist/
-node_modules/
\ No newline at end of file
diff --git a/backend/.prettierrc b/backend/.prettierrc
deleted file mode 100644
index ec9891ae..00000000
--- a/backend/.prettierrc
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "semi": true,
-  "tabWidth": 2,
-  "printWidth": 80,
-  "singleQuote": false,
-  "trailingComma": "es5",
-  "bracketSpacing": true,
-  "bracketSameLine": false,
-  "arrowParens": "always",
-  "jsxSingleQuote": false,
-  "endOfLine": "lf"
-}
diff --git a/backend/data/consolidated/_index.json b/backend/data/consolidated/_index.json
deleted file mode 100644
index fa9ea65c..00000000
--- a/backend/data/consolidated/_index.json
+++ /dev/null
@@ -1,91 +0,0 @@
-[
-    {
-        "name": "BASH",
-        "icon": "https://api.quicksnip.dev/icons/bash.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "C",
-        "icon": "https://api.quicksnip.dev/icons/c.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "CPP",
-        "icon": "https://api.quicksnip.dev/icons/cpp.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "CSHARP",
-        "icon": "https://api.quicksnip.dev/icons/csharp.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "CSS",
-        "icon": "https://api.quicksnip.dev/icons/css.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "HASKELL",
-        "icon": "https://api.quicksnip.dev/icons/haskell.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "HTML",
-        "icon": "https://api.quicksnip.dev/icons/html.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "JAVA",
-        "icon": "https://api.quicksnip.dev/icons/java.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "JAVASCRIPT",
-        "icon": "https://api.quicksnip.dev/icons/javascript.svg",
-        "subLanguages": [
-            {
-                "name": "REACT",
-                "icon": "https://api.quicksnip.dev/icons/javascript--react.svg"
-            }
-        ]
-    },
-    {
-        "name": "PYTHON",
-        "icon": "https://api.quicksnip.dev/icons/python.svg",
-        "subLanguages": [
-            {
-                "name": "FASTAPI",
-                "icon": "https://api.quicksnip.dev/icons/python--fastapi.svg"
-            },
-            {
-                "name": "TKINTER",
-                "icon": "https://api.quicksnip.dev/icons/python--tkinter.svg"
-            }
-        ]
-    },
-    {
-        "name": "REGEX",
-        "icon": "https://api.quicksnip.dev/icons/regex.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "RUBY",
-        "icon": "https://api.quicksnip.dev/icons/ruby.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "RUST",
-        "icon": "https://api.quicksnip.dev/icons/rust.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "SCSS",
-        "icon": "https://api.quicksnip.dev/icons/scss.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "TYPESCRIPT",
-        "icon": "https://api.quicksnip.dev/icons/typescript.svg",
-        "subLanguages": []
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/bash.json b/backend/data/consolidated/bash.json
deleted file mode 100644
index 854b733b..00000000
--- a/backend/data/consolidated/bash.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
-    {
-        "name": "System",
-        "snippets": [
-            {
-                "title": "Kill Previous Instances",
-                "description": "Kill all previous instances of a script",
-                "author": "saminjay",
-                "tags": [
-                    "kill",
-                    "process",
-                    "background"
-                ],
-                "contributors": [],
-                "code": "function kill_prev() {\n    # $$ contains current pid (grep ignore so it doesn't suicide)\n    local processes\n    readarray -t processes < <(pgrep -f \"$0\" | grep -v \"$$\")\n    kill \"${processes[@]}\" >/dev/null 2>&1\n}\n\n# Usage:\n# Add this function to your background running script\n# It will make sure that only one instance of your script is running at a time\nkill_prev\n",
-                "extension": "bash"
-            },
-            {
-                "title": "System Resource Monitor",
-                "description": "Monitors system resources (CPU, RAM, disk, users)",
-                "author": "sponkurtus2",
-                "tags": [
-                    "file",
-                    "system"
-                ],
-                "contributors": [],
-                "code": "system_resources () {\n      echo \"CPU Load: $(top -bn1 | grep \"Cpu(s)\" | awk '{print $2}')%\"\n      echo \"Memory Used: $(free -m | awk 'NR==2{printf \"%.2f%%\", $3*100/$2}')\"\n      echo \"Disk Used: $(df -h / | awk 'NR==2{print $5}')\"\n      echo \"Active Users: $(who | wc -l)\"\n}\n\nsystem_resources \"$@\"\n\n# Usage:\nchmod a+x system-resource-monitor.sh # First make it executable for all the users\n\n./system-resource-monitor.sh  # It will print the following system resources (CPU, RAM, disk, and active users)\n",
-                "extension": "bash"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/c.json b/backend/data/consolidated/c.json
deleted file mode 100644
index 4c307b14..00000000
--- a/backend/data/consolidated/c.json
+++ /dev/null
@@ -1,349 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "0xHouss",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "#include <stdio.h> // Includes the input/output library\n\nint main() { // Defines the main function\n  printf(\"Hello, World!\\n\") // Outputs Hello, World! and a newline\n\n  return 0; // indicate the program executed successfully\n}\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Bit Manipulation",
-        "snippets": [
-            {
-                "title": "Check Power of Two",
-                "description": "Checks if a given number is a power of two using bitwise operations.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "power-of-two"
-                ],
-                "contributors": [],
-                "code": "#include <stdbool.h> // Include the standard boolean library\n\nbool is_power_of_two(int n) {\n    return n > 0 && (n & (n - 1)) == 0; // Bitwise check for power of two\n}\n\n// Usage:\nis_power_of_two(16); // Returns: true\nis_power_of_two(18); // Returns: false\n",
-                "extension": "c"
-            },
-            {
-                "title": "Clear ith bit",
-                "description": "Clear the ith bit of a number and returns the resulting number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "clear"
-                ],
-                "contributors": [],
-                "code": "int clear_ith_bit(int n, int i) {\n    return n & ~(1 << i);\n}\n\n\n// Usage:\nclear_ith_bit(10, 1); // Returns: 8\nclear_ith_bit(10, 3); // Returns: 2\n",
-                "extension": "c"
-            },
-            {
-                "title": "Count Set Bits",
-                "description": "Counts the number of set bits in an int",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "int count_set_bits(int n) {\n    int count = 0;\n    while (n) {\n        n &= (n - 1);\n        count++;\n    }\n    return count;\n}\n\n\n// Usage:\ncount_set_bits(5);   // Returns: 2\ncount_set_bits(255); // Returns: 8\ncount_set_bits(8);   // Returns: 1\n",
-                "extension": "c"
-            },
-            {
-                "title": "Get ith bit",
-                "description": "Get the i-th bit of a number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "get"
-                ],
-                "contributors": [],
-                "code": "int get_ith_bit(int n, int i) {\n    return (n >> i) & 1;\n}\n\n\n// Usage:\nget_ith_bit(10, 0); // Returns: 0\nget_ith_bit(10, 1); // Returns: 1\nget_ith_bit(10, 2); // Returns: 0\nget_ith_bit(10, 3); // Returns: 1\n",
-                "extension": "c"
-            },
-            {
-                "title": "Is Odd",
-                "description": "Check if a number is odd",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "is-odd"
-                ],
-                "contributors": [],
-                "code": "bool is_odd(int n) {\n    return n & 1;\n}\n\n\n// Usage:\nis_odd(10); // Returns: false\nis_odd(11); // Returns: true\n",
-                "extension": "c"
-            },
-            {
-                "title": "Reverse Bits",
-                "description": "Reverses the bits of a given unsigned integer.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "reverse-bits"
-                ],
-                "contributors": [],
-                "code": "unsigned int reverse_bits(unsigned int n) {\n    unsigned int result = 0;\n    for (int i = 0; i < 32; ++i) {\n        result <<= 1;        // Shift result left by 1\n        result |= n & 1;     // Add the least significant bit of n to result\n        n >>= 1;            // Shift n right by 1\n    }\n    return result;\n}\n\n// Usage:\nreverse_bits(43261596); // Returns: 964176192 (Binary: 00000010100101000001111010011100 -> 00111001011110000010100101000000)\n",
-                "extension": "c"
-            },
-            {
-                "title": "Set ith bit",
-                "description": "Set the i-th bit of a number and returns the resulting number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "set"
-                ],
-                "contributors": [],
-                "code": "int set_ith_bit(int n, int i) {\n    return n | (1 << i);\n}\n\n\n// Usage:\nset_ith_bit(10, 0); // Returns: 11\nset_ith_bit(10, 2); // Returns: 14\nset_ith_bit(1, 8);  // Returns: 257\nset_ith_bit(1, 3);  // Returns: 9\n",
-                "extension": "c"
-            },
-            {
-                "title": "Swap Numbers",
-                "description": "Swap two numbers without a temporary variable",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "swap"
-                ],
-                "contributors": [],
-                "code": "void swap(int *a, int *b) {\n    *a ^= *b;\n    *b ^= *a;\n    *a ^= *b;\n}\n\n\n// Usage:\nint x = 5, y = 10;\nswap(&x, &y);\nprintf(\"x = %d, y = %d\\n\", x, y); // x = 10, y = 5\n",
-                "extension": "c"
-            },
-            {
-                "title": "Toggle ith bit",
-                "description": "Toggle the i-th bit of a number and returns the resulting number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "toggle"
-                ],
-                "contributors": [],
-                "code": "int toggle_ith_bit(int n, int i) {\n    return n ^ (1 << i);\n}\n\n\n// Usage:\ntoggle_ith_bit(10, 0); // Returns: 11\ntoggle_ith_bit(10, 1); // Returns: 8\ntoggle_ith_bit(8, 1);  // Returns: 10\n",
-                "extension": "c"
-            },
-            {
-                "title": "XOR of Range",
-                "description": "Finds XOR of all numbers from 1 to n using properties of XOR.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "xor"
-                ],
-                "contributors": [],
-                "code": "int xor_upto_n(int n) {\n    if (n % 4 == 0) return n;\n    if (n % 4 == 1) return 1;\n    if (n % 4 == 2) return n + 1;\n    return 0;\n}\n\n// Usage:\nxor_upto_n(5); // Returns: 1 (1 ^ 2 ^ 3 ^ 4 ^ 5 = 1)\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Mathematical Functions",
-        "snippets": [
-            {
-                "title": "Check Perfect Number",
-                "description": "Checks if a number is a perfect number. A perfect number is a positive integer that is equal to the sum of its proper divisors (excluding itself).",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "perfect-number"
-                ],
-                "contributors": [],
-                "code": "#include <stdbool.h>\n\n// Function to check if a number is a perfect number\nbool is_perfect(int n) {\n    if (n <= 1) return false;\n\n    int sum = 1; // 1 is a divisor for all n > 1\n    for (int i = 2; i * i <= n; ++i) {\n        if (n % i == 0) {\n            sum += i;\n            if (i != n / i) sum += n / i;\n        }\n    }\n    return sum == n;\n}\n\n// Usage\nis_perfect(28); // Returns: true\nis_perfect(12); // Returns: false\n",
-                "extension": "c"
-            },
-            {
-                "title": "Compound Interest",
-                "description": "Calculates the compound interest for a given principal, rate, time, and number of times interest applied per time period.",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "finance"
-                ],
-                "contributors": [],
-                "code": "#include <math.h>\n\n// Function to calculate compound interest\ndouble compound_interest(double principal, double rate, double time, int n) {\n    return principal * pow(1 + rate / n, n * time);\n}\n\n// Usage:\ndouble principal = 1000.0;  // Initial amount\ndouble rate = 0.05;         // Annual interest rate (5%)\ndouble time = 2;            // Time in years\nint n = 4;                  // Compounded quarterly\n\ncompound_interest(principal, rate, time, n); // Returns: 1104.081632653061\n",
-                "extension": "c"
-            },
-            {
-                "title": "Factorial Function",
-                "description": "Calculates the factorial of a number.",
-                "author": "0xHouss",
-                "tags": [
-                    "math",
-                    "factorial"
-                ],
-                "contributors": [],
-                "code": "int factorial(int x) {\n  int y = 1;\n\n  for (int i = 2; i <= x; i++)\n    y *= i;\n\n  return y;\n}\n\n// Usage:\nfactorial(4); // Returns: 24\n",
-                "extension": "c"
-            },
-            {
-                "title": "Fibonacci Number",
-                "description": "Calculates the nth Fibonacci number using recursion.",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "fibonacci",
-                    "recursion"
-                ],
-                "contributors": [],
-                "code": "// Function to calculate the nth Fibonacci number\nint fibonacci(int n) {\n    if (n <= 1) return n;\n    return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\n// Usage:\nfibonacci(6); // Returns: 8\n",
-                "extension": "c"
-            },
-            {
-                "title": "Linear Mapping",
-                "description": "remaps a value from one range to another",
-                "author": "JasimAlrawie",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "float linearMapping(float value, float minIn, float maxIn, float minOut, float maxOut) {\n    return (value - minIn) * (maxOut - minOut)/(maxIn - minIn) + minOut;\n}\n\n\n// Usage:\nlinearMapping(value, 0, 1, 0, 255);    // remaps the value from (0,1) to (0,255)\nlinearMapping(value, 0, PI*2, 0, 360); // remaps the value from rad to deg\nlinearMapping(value, -1, 1, 1, 8);     // remaps the value from (-1,1) to (1,8)\n",
-                "extension": "c"
-            },
-            {
-                "title": "Sum of Digits",
-                "description": "Calculates the sum of the digits of an integer.",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "digits"
-                ],
-                "contributors": [],
-                "code": "// Function to calculate the sum of the digits of an integer\nint sum_of_digits(int n) {\n    int sum = 0;\n    while (n != 0) {\n        sum += n % 10;\n        n /= 10;\n    }\n    return sum;\n}\n\n// Usage:\nsum_of_digits(123); // Returns: 6\n",
-                "extension": "c"
-            },
-            {
-                "title": "Swap numbers",
-                "description": "Swaps two numbers without using third variable",
-                "author": "Emosans",
-                "tags": [
-                    "swap",
-                    "numbers"
-                ],
-                "contributors": [],
-                "code": "#include<stdio.h>\nvoid swap(int* num1,int* num2){\n    *num1 = *num1 + *num2;\n    *num2 = *num1 - *num2;\n    *num1 = *num1 - *num2;\n}\n\n// Usage:\nint a = 3,b = 4;\nswap(&a,&b); // swaps the values of the a and b variables\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Search",
-        "snippets": [
-            {
-                "title": "Binary Search ",
-                "description": "Searches for an element in a sorted array using the Binary Search algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "search",
-                    "binarysearch",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "int binarySearch(int arr[], int low, int high, int x) {\n  while (low <= high) {\n    int mid = low + (high - low) / 2;\n\n    // Check if x is present at mid\n    if (arr[mid] == x) {\n      return mid;\n    }\n\n    // If x is smaller, search the left half\n    if (arr[mid] > x) {\n      high = mid - 1;\n    } else { // If x is larger, search the right half\n      low = mid + 1;\n    }\n  }\n  return -1; // Element not found\n}\n\n// Usage:\nint arr[] = {2, 3, 4, 10, 40};\nint n = sizeof(arr) / sizeof(arr[0]);\nint x = 10;\nint result = binarySearch(arr, 0, n - 1, x);\n// result = 3 (index of the element 10)\n\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Linear Search ",
-                "description": "Searches for an element in an array using the Linear Search algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "search",
-                    "linearsearch",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "int linearSearch(int arr[], int n, int x) {\n  for (int i = 0; i < n; i++) {\n    if (arr[i] == x) {\n      return i; // Element found at index i\n    }\n  }\n  return -1; // Element not found\n}\n\n// Usage:\nint arr[] = {10, 20, 30, 40, 50};\nint n = sizeof(arr) / sizeof(arr[0]);\nint x = 30;\nint result = linearSearch(arr, n, x);\n// result = 2 (index of the element 30)\n\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Sorting",
-        "snippets": [
-            {
-                "title": "Bubble Sort ",
-                "description": "Sorts an array of integers using the Bubble Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "bubblesort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "void bubbleSort(int arr[], int n) {\n  for (int i = 0; i < n - 1; i++) {\n    for (int j = 0; j < n - i - 1; j++) {\n      if (arr[j] > arr[j + 1]) {\n        // Swap arr[j] and arr[j + 1]\n        int temp = arr[j];\n        arr[j] = arr[j + 1];\n        arr[j + 1] = temp;\n      }\n    }\n  }\n}\n\n// Usage:\nint arr[] = {64, 34, 25, 12, 22, 11, 90};\nint n = sizeof(arr) / sizeof(arr[0]);\nbubbleSort(arr, n);\n// Now arr[] is sorted: {11, 12, 22, 25, 34, 64, 90}\n",
-                "extension": "c"
-            },
-            {
-                "title": "Insertion Sort ",
-                "description": "Sorts an array of integers using the Insertion Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "insertionsort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "void insertionSort(int arr[], int n) {\n  for (int i = 1; i < n; i++) {\n    int key = arr[i];\n    int j = i - 1;\n\n    // Move elements of arr[0..i-1] that are greater than key\n    // to one position ahead of their current position\n    while (j >= 0 && arr[j] > key) {\n      arr[j + 1] = arr[j];\n      j--;\n    }\n    arr[j + 1] = key;\n  }\n}\n\n// Usage:\nint arr[] = {12, 11, 13, 5, 6};\nint n = sizeof(arr) / sizeof(arr[0]);\ninsertionSort(arr, n);\n// Now arr[] is sorted: {5, 6, 11, 12, 13}\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Merge Sort ",
-                "description": "Sorts an array of integers using the Merge Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "mergesort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "#include <stdio.h>\n\nvoid merge(int arr[], int l, int m, int r) {\n  int n1 = m - l + 1;\n  int n2 = r - m;\n\n  // Temporary arrays\n  int L[n1], R[n2];\n\n  // Copy data to temporary arrays L[] and R[]\n  for (int i = 0; i < n1; i++)\n    L[i] = arr[l + i];\n  for (int j = 0; j < n2; j++)\n    R[j] = arr[m + 1 + j];\n\n  int i = 0, j = 0, k = l;\n\n  // Merge the temporary arrays back into arr[l..r]\n  while (i < n1 && j < n2) {\n    if (L[i] <= R[j]) {\n      arr[k] = L[i];\n      i++;\n    } else {\n      arr[k] = R[j];\n      j++;\n    }\n    k++;\n  }\n\n  // Copy remaining elements of L[], if any\n  while (i < n1) {\n    arr[k] = L[i];\n    i++;\n    k++;\n  }\n\n  // Copy remaining elements of R[], if any\n  while (j < n2) {\n    arr[k] = R[j];\n    j++;\n    k++;\n  }\n}\n\nvoid mergeSort(int arr[], int l, int r) {\n  if (l < r) {\n    int m = l + (r - l) / 2;\n\n    // Sort first and second halves\n    mergeSort(arr, l, m);\n    mergeSort(arr, m + 1, r);\n\n    merge(arr, l, m, r);\n  }\n}\n\n// Usage:\nint arr[] = {38, 27, 43, 3, 9, 82, 10};\nint n = sizeof(arr) / sizeof(arr[0]);\nmergeSort(arr, 0, n - 1);\n// Now arr[] is sorted: {3, 9, 10, 27, 38, 43, 82}\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Quick Sort ",
-                "description": "Sorts an array of integers using the Quick Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "quicksort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "int partition(int arr[], int low, int high) {\n  int pivot = arr[high]; // Pivot element\n  int i = low - 1;\n\n  for (int j = low; j < high; j++) {\n    if (arr[j] < pivot) {\n      i++;\n      // Swap arr[i] and arr[j]\n      int temp = arr[i];\n      arr[i] = arr[j];\n      arr[j] = temp;\n    }\n  }\n\n  // Swap arr[i + 1] and arr[high] (pivot)\n  int temp = arr[i + 1];\n  arr[i + 1] = arr[high];\n  arr[high] = temp;\n\n  return i + 1;\n}\n\nvoid quickSort(int arr[], int low, int high) {\n  if (low < high) {\n    int pi = partition(arr, low, high);\n\n    // Recursively sort elements before and after partition\n    quickSort(arr, low, pi - 1);\n    quickSort(arr, pi + 1, high);\n  }\n}\n\n// Usage:\nint arr[] = {10, 7, 8, 9, 1, 5};\nint n = sizeof(arr) / sizeof(arr[0]);\nquickSort(arr, 0, n - 1);\n// Now arr[] is sorted: {1, 5, 7, 8, 9, 10}\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Selection Sort ",
-                "description": "Sorts an array of integers using the Selection Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "selectionsort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "void selectionSort(int arr[], int n) {\n  for (int i = 0; i < n - 1; i++) {\n    int minIdx = i;\n\n    // Find the minimum element in the unsorted part of the array\n    for (int j = i + 1; j < n; j++) {\n      if (arr[j] < arr[minIdx]) {\n        minIdx = j;\n      }\n    }\n\n    // Swap the found minimum element with the first element of the unsorted part\n    int temp = arr[minIdx];\n    arr[minIdx] = arr[i];\n    arr[i] = temp;\n  }\n}\n\n// Usage:\nint arr[] = {64, 25, 12, 22, 11};\nint n = sizeof(arr) / sizeof(arr[0]);\nselectionSort(arr, n);\n// Now arr[] is sorted: {11, 12, 22, 25, 64}\n\n",
-                "extension": "c"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/cpp.json b/backend/data/consolidated/cpp.json
deleted file mode 100644
index 1ca213c6..00000000
--- a/backend/data/consolidated/cpp.json
+++ /dev/null
@@ -1,272 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "#include <iostream> // Includes the input/output stream library\n\nint main() { // Defines the main function\n    std::cout << \"Hello, World!\" << std::endl; // Outputs Hello, World! and a newline\n    return 0; // indicate the program executed successfully\n}\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Bit Manipulation",
-        "snippets": [
-            {
-                "title": "Find Non-Repeating Number",
-                "description": "Finds the number that appears only once in an array where every other number appears twice.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "xor"
-                ],
-                "contributors": [],
-                "code": "#include <vector>\n\nint find_non_repeating(const std::vector<int> nums) {\n    int result = 0;\n    for (const int num : nums) {\n        result ^= num;\n    }\n    return result;\n}\n\n// Usage:\nstd::vector<int> nums = {4, 1, 2, 1, 2};\nfind_non_repeating(nums); // Returns: 4\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Data Structure Conversion",
-        "snippets": [
-            {
-                "title": "Vector to Queue",
-                "description": "Convert vector into queue quickly",
-                "author": "mrityunjay2003",
-                "tags": [
-                    "data structures",
-                    "queue",
-                    "vector"
-                ],
-                "contributors": [
-                    "majvax"
-                ],
-                "code": "#include<queue>\n#include<vector>\n#include<deque>\n\ntemplate <typename T>\nstd::queue<T> vectorToQueue(const std::vector<T>& v) {\n    return std::queue<T>(std::deque<T>(v.begin(), v.end()));\n}\n\n\n\n// Usage:\nstd::vector<int> vec = { 1, 2, 3, 4, 5 };\nvectorToQueue(vec); // Returns: std::queue<int> { 1, 2, 3, 4, 5 }\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Debugging",
-        "snippets": [
-            {
-                "title": "Vector Print",
-                "description": "Overloads the << operator to print the contents of a vector just like in python.",
-                "author": "Mohamed-faaris",
-                "tags": [
-                    "printing",
-                    "debuging",
-                    "vector"
-                ],
-                "contributors": [],
-                "code": "#include <iostream> \n#include <vector>   \n\ntemplate <typename T>\nstd::ostream& operator<<(std::ostream& os, const std::vector<T>& vec) {\n    os << \"[\"; \n    for (size_t i = 0; i < vec.size(); ++i) {\n        os << vec[i]; // Print each vector element\n        if (i != vec.size() - 1) {\n            os << \", \"; // Add separator\n        }\n    }\n    os << \"]\"; \n    return os; // Return the stream\n}\n\n// Usage:\nstd::vector<int> numbers = {1, 2, 3, 4, 5};\nstd::cout << numbers << std::endl; // Outputs: [1, 2, 3, 4, 5]\n\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find files recursively",
-                "description": "Find all the files in a directory and subdirectories using a predicate function.",
-                "author": "majvax",
-                "tags": [
-                    "filesystem",
-                    "file_search",
-                    "c++17"
-                ],
-                "contributors": [],
-                "code": "#include <filesystem>\n#include <vector>\n#include <string>\n\ntemplate <typename P>\nstd::vector<std::filesystem::path> find_files_recursive(const std::string& path, P&& predicate) {\n    std::vector<std::filesystem::path> files;\n    std::error_code ec;\n\n    if (!std::filesystem::exists(path, ec) || ec)\n        return files;\n    if (!std::filesystem::is_directory(path, ec) || ec)\n        return files;\n\n    auto it = std::filesystem::recursive_directory_iterator(path, ec);\n    if (ec)\n        return files;\n\n    for (const auto& entry : it)\n        if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n            files.push_back(entry.path());\n\n    return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n    return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n    return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include <chrono>\n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n    std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files_recursive(\"Path\", [jan_1_2025](const auto& p) {\n    return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Find files",
-                "description": "Find all the files in a directory using a predicate function.",
-                "author": "majvax",
-                "tags": [
-                    "filesystem",
-                    "file_search",
-                    "c++17"
-                ],
-                "contributors": [],
-                "code": "#include <filesystem>\n#include <vector>\n#include <string>\n\ntemplate <typename P>\nstd::vector<std::filesystem::path> find_files(const std::string& path, P&& predicate) {\n    std::vector<std::filesystem::path> files;\n    std::error_code ec;\n\n    if (!std::filesystem::exists(path, ec) || ec)\n        return files;\n    if (!std::filesystem::is_directory(path, ec) || ec)\n        return files;\n\n    auto it = std::filesystem::directory_iterator(path, ec);\n    if (ec)\n        return files;\n\n    for (const auto& entry : it)\n        if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n            files.push_back(entry.path());\n\n    return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files(\"Path\", [](const auto& p) {\n    return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files(\"Path\", [](const auto& p) {\n    return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include <chrono>\n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n    std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files(\"Path\", [jan_1_2025](const auto& p) {\n    return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "List Directories",
-                "description": "Lists all the directories in a path.",
-                "author": "majvax",
-                "tags": [
-                    "filesystem",
-                    "directories",
-                    "c++17"
-                ],
-                "contributors": [],
-                "code": "#include <filesystem>\n#include <vector>\n#include <string>\n\nstd::vector<std::filesystem::path> list_directories(const std::string& path) {\n    std::vector<std::filesystem::path> files;\n    std::error_code ec;\n\n    if (!std::filesystem::exists(path, ec) || ec)\n        return files;\n    if (!std::filesystem::is_directory(path, ec) || ec)\n        return files;\n\n    auto it = std::filesystem::directory_iterator(path, ec);\n    if (ec)\n        return files;\n\n    for (const auto& entry : it)\n        if (std::filesystem::is_directory(entry))\n            files.push_back(entry.path());\n\n    return files;\n}\n\n\n\n// Usage:\nauto directories = list_directories(\"Path\");\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Math And Numbers",
-        "snippets": [
-            {
-                "title": "Binary to Unsigned Integer Conversion",
-                "description": "Converts a binary number represented as a string to its decimal equivalent.",
-                "author": "ashukr07",
-                "tags": [
-                    "binary",
-                    "conversion",
-                    "c++20"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <bitset>\n#include <stdexcept>\n\ntemplate <std::unsigned_integral T>\nT binary_to_uintegral(const std::string& binary) {\n    if (binary.size() > sizeof(T) * 8)\n        throw std::invalid_argument(\"binary string is too long\");\n    return static_cast<T>(std::bitset<sizeof(T) * 8>(binary).to_ullong());\n}\n\n// Usage:\nstd::string binary(64, '1'); // Binary 8 bytes long with all bits set to 1\nbinary_to_uintegral<unsigned long long>(binary); // Returns: 18446744073709551615\nbinary_to_uintegral<long long>(binary); // Compiles error: signed/unsigned mismatch\nbinary_to_uintegral<unsigned long long>(std::string(65, '1')); // Throws: std::invalid_argument\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Check Prime Number",
-                "description": "Check if an integer is a prime number",
-                "author": "MihneaMoso",
-                "tags": [
-                    "number",
-                    "prime"
-                ],
-                "contributors": [],
-                "code": "bool is_prime(int n) {\n    if (n < 2) return false;\n    if (n == 2 || n == 3) return true;\n    if (n % 2 == 0) return false;\n    for (int i = 3; i * i <= n; i += 2) {\n        if (n % i == 0) return false;\n    }\n    return true;\n}\n\n// Usage:\nis_prime(29); // Returns: true\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Filter",
-                "description": "Filter a string with a predicate function",
-                "author": "majvax",
-                "tags": [
-                    "string",
-                    "filtering",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <string>\n\ntemplate <typename P>\nstd::string filter(const std::string& str, P&& predicate) {\n    return str\n        | std::ranges::views::filter(std::forward<P>(predicate))\n        | std::ranges::to<std::string>();\n}\n\n\n\n// Usage:\nstd::string str = \"Hello, World!\";\nstd::string filtered = filter(str, [](char c){ return std::isalpha(c); });\nstd::cout << filtered << std::endl; // HelloWorld\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Palindrome",
-                "description": "Check if a string is a palindrome or not.",
-                "author": "majvax",
-                "tags": [
-                    "string",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <ranges>\n#include <algorithm>\n\nbool is_palindrome(const std::string& str) {\n    std::string sanitized_string = str\n        | std::ranges::views::filter([](char c){ return std::isalnum(c); })\n        | std::ranges::views::transform([](char c){ return std::tolower(c); })\n        | std::ranges::to<std::string>();\n    \n    return std::ranges::equal(sanitized_string, sanitized_string | std::views::reverse);\n}\n\n\n\n// Usage:\nbool pal = is_palindrome(\"A man, a plan, a canal, Panama\"); // true\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Reverse String",
-                "description": "Reverses the characters in a string.",
-                "author": "Vaibhav-kesarwani",
-                "tags": [
-                    "array",
-                    "reverse",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <algorithm>\n\nstd::string reverseString(const std::string& input) {\n    std::string reversed = input;\n    std::reverse(reversed.begin(), reversed.end());\n    return reversed;\n}\n\nreverseString(\"quicksnip\"); // Returns: \"pinskciuq\"\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Split String",
-                "description": "Splits a string by a delimiter",
-                "author": "saminjay",
-                "tags": [
-                    "string",
-                    "split"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <vector>\n\nstd::vector<std::string> split_string(std::string str, std::string delim) {\n    std::vector<std::string> splits;\n    int i = 0, j;\n    int inc = delim.length();\n    while (j != std::string::npos) {\n        j = str.find(delim, i);\n        splits.push_back(str.substr(i, j - i));\n        i = j + inc;\n    }\n    return splits;\n}\n\n// Usage:\nsplit_string(\"quick_-snip\", \"_-\"); // Returns: std::vector<std::string> { \"quick\", \"snip\" }\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Transform",
-                "description": "Transform a string with a function",
-                "author": "majvax",
-                "tags": [
-                    "string",
-                    "transform",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <string>\n\ntemplate <typename F>\nstd::string transform(const std::string& str, F&& transformer) {\n    return str\n        | std::ranges::views::transform(std::forward<F>(transformer))\n        | std::ranges::to<std::string>();\n}\n\n\n\n// Usage:\nstd::string str = \"Hello, World!\";\nstd::string transformed = transform(str, [](char c){ return std::toupper(c); });\nstd::cout << transformed << std::endl; // HELLO, WORLD!\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Vector Manipulation.md",
-        "snippets": [
-            {
-                "title": "Filter",
-                "description": "Filters a vector using a predicate function.",
-                "author": "majvax",
-                "tags": [
-                    "array",
-                    "filter",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <vector>\n\ntemplate <typename T, typename P>\nauto filter(const std::vector<T>& vec, P&& predicate) {\n    return vec\n        | std::views::filter(std::forward<P>(predicate))\n        | std::ranges::to<std::vector<T>>();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {1, 2, 3, 4, 5};\nstd::vector<int> filtered = filter(vec, [](int i){ return i % 2 == 0; });\n// filtered contains 2 and 4\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Remove duplicates",
-                "description": "Removes duplicates from an vector of ints",
-                "author": "AnkushRoy-code",
-                "tags": [
-                    "vector",
-                    "remove",
-                    "duplicate"
-                ],
-                "contributors": [],
-                "code": "#include <algorithm>\n#include <vector>\n\nbool removeDuplicates(std::vector<int> &input) noexcept {\n    if (input.empty()) return false;\n    const auto size = input.size();\n    std::sort(input.begin(), input.end());\n\n    auto last = std::unique(input.begin(), input.end()); // remove duplicates\n    input.erase(last, input.end()); // resize vector and delete the undefined elements\n\n    return size != input.size();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {4, 2, 2, 8, 5, 6, 9, 9, 9, 8, 8, 4};\nremoveDuplicates(vec); // returns {2, 4, 5, 6, 8, 9}\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Remove n Occurences",
-                "description": "Removes duplicates from an vector of ints",
-                "author": "AnkushRoy-code",
-                "tags": [
-                    "vector",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "#include <algorithm>\n#include <unordered_map>\n#include <vector>\n\nbool removeOccurrences(std::vector<int>& vec, const unsigned int n) noexcept {\n    if (vec.empty() || n == 0) return false;\n\n    const auto size = vec.size();\n    std::unordered_map<int, int> frequency; // count frequencies\n    for (int num : vec) {\n        frequency[num]++;\n    }\n\n    vec.erase( // remove elements with n number of occurrences\n        std::remove_if(vec.begin(), vec.end(), [&frequency, n](const int x) {\n            return frequency[x] == n;\n        }),\n        vec.end()\n    );\n    return size != vec.size();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {4, 2, 4, 8, 5, 6, 8, 8, 4, 3 };\n\nint n = 3; // Remove elements that occur exactly 3 times\nremoveOccurrences(vec, n); // returns {2, 5, 6, 3}\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Transform",
-                "description": "Transforms a vector using a function.",
-                "author": "majvax",
-                "tags": [
-                    "array",
-                    "transform",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <vector>\n\ntemplate <typename T, typename F>\nauto transform(const std::vector<T>& vec, F&& transformer) {\n    using U = std::invoke_result_t<F, T>;\n    return vec\n        | std::views::transform(std::forward<F>(transformer))\n        | std::ranges::to<std::vector<U>>();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {1, 2, 3, 4, 5};\nstd::vector<int> transformed = transform(vec, [](int i){ return i * 2; });\n// transformed contains 2, 4, 6, 8, 10\n",
-                "extension": "cpp"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/csharp.json b/backend/data/consolidated/csharp.json
deleted file mode 100644
index 5afc5f5f..00000000
--- a/backend/data/consolidated/csharp.json
+++ /dev/null
@@ -1,123 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "public class Program {\n  public static void Main(string[] args) {\n    System.Console.WriteLine(\"Hello, World!\");\n  }\n}\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "Guid Utilities",
-        "snippets": [
-            {
-                "title": "Generate GUID",
-                "description": "Generates a new GUID",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "guid",
-                    "generate"
-                ],
-                "contributors": [],
-                "code": "public static string GenerateGuid() {\n  return Guid.NewGuid().ToString();\n}\n\n// Usage:\nGenerateGuid(); // Returns: 1c4c38d8-64e4-431b-884a-c6eec2ab02cd (Uuid is random)\n",
-                "extension": "csharp"
-            },
-            {
-                "title": "Validate GUID",
-                "description": "Checks if a string is a valid GUID.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "guid",
-                    "validate"
-                ],
-                "contributors": [],
-                "code": "public static bool IsGuid(string str) {\n  return Guid.TryParse(str, out _);\n}\n\n// Usage:\nIsGuid(\"1c4c38d8-64e4-431b-884a-c6eec2ab02cd\"); // Returns: true\nIsGuid(\"quicksnip\"); // Returns: false\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "Jwt Utilities",
-        "snippets": [
-            {
-                "title": "Decode JWT",
-                "description": "Decodes a JWT.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "jwt",
-                    "decode"
-                ],
-                "contributors": [],
-                "code": "public static string DecodeJwt(string token) {\n  return new JwtSecurityTokenHandler().ReadJwtToken(token).ToString();\n}\n\n// Usage:\nstring token = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\";\nDecodeJwt(token); // Returns: \"{\\\"alg\\\":\\\"HS256\\\",\\\"typ\\\":\\\"JWT\\\"}.{\\\"sub\\\":\\\"1234567890\\\",\\\"name\\\":\\\"John Doe\\\",\\\"iat\\\":1516239022}\"\n",
-                "extension": "csharp"
-            },
-            {
-                "title": "Validate JWT",
-                "description": "Validates a JWT.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "jwt",
-                    "validate"
-                ],
-                "contributors": [],
-                "code": "public static bool ValidateJwt(string token, string secret) {\n  var tokenHandler = new JwtSecurityTokenHandler();\n  var validationParameters = new TokenValidationParameters {\n    ValidateIssuerSigningKey = true,\n    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)),\n    ValidateIssuer = false,\n    ValidateAudience = false\n  };\n  try {\n    tokenHandler.ValidateToken(token, validationParameters, out _);\n    return true;\n  }\n  catch {\n    return false\n  }\n}\n\n// Usage:\nstring JWT = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\";\nstring correctSecret = \"your-256-bit-secret\";\nstring wrongSecret = \"this-is-not-the-right-secret\";\n\nValidateJwt(JWT, correctSecret); // Returns: true\nValidateJwt(JWT, wrongSecret); // Returns: false\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "List Utilities",
-        "snippets": [
-            {
-                "title": "Swap items at index",
-                "description": "Swaps two items at determined indexes",
-                "author": "omegaleo",
-                "tags": [
-                    "list",
-                    "swapping"
-                ],
-                "contributors": [],
-                "code": "public static IList<T> Swap<T>(this IList<T> list, int indexA, int indexB)\n{\n    (list[indexA], list[indexB]) = (list[indexB], list[indexA]);\n    return list;\n}\n\nvar list = new List<string>() {\"Test\", \"Test2\"};\n\nlist.Swap(0, 1); // Swaps \"Test\" and \"Test2\" in place\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "String Utilities",
-        "snippets": [
-            {
-                "title": "Capitalize first letter",
-                "description": "Makes the first letter of a string uppercase.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "public static string Capitalize(this string str) {\n  return str.Substring(0, 1).ToUpper() + str.Substring(1);\n}\n\n// Usage:\n\"quicksnip\".Capitalize(); // Returns: \"Quicksnip\"\n",
-                "extension": "csharp"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Cut off a string once it reaches a determined amount of characters and add '...' to the end of the string",
-                "author": "omegaleo",
-                "tags": [
-                    "string",
-                    "truncate"
-                ],
-                "contributors": [],
-                "code": "public static string Truncate(this string value, int maxChars)\n{\n    return value.Length <= maxChars ? value : value.Substring(0, maxChars) + \"...\";\n}\n\n// Usage:\n\"Quicksnip\".Truncate(5); // Returns: \"Quick...\"\n",
-                "extension": "csharp"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/css.json b/backend/data/consolidated/css.json
deleted file mode 100644
index c1b8835e..00000000
--- a/backend/data/consolidated/css.json
+++ /dev/null
@@ -1,274 +0,0 @@
-[
-    {
-        "name": "Animations",
-        "snippets": [
-            {
-                "title": "Blink Animation",
-                "description": "Adds an infinite blinking animation to an element",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "animation",
-                    "blink",
-                    "infinite"
-                ],
-                "contributors": [],
-                "code": ".blink {\n    animation: blink 1s linear infinite;\n}\n\n@keyframes blink{\n    0%{\n        opacity: 0;\n    }\n    50%{\n        opacity: 1;\n    }\n    100%{\n        opacity: 0;\n    }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Pulse Animation",
-                "description": "Adds a smooth pulsing animation with opacity and scale effects",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "animation",
-                    "pulse",
-                    "pulse-scale"
-                ],
-                "contributors": [
-                    "alanb4rt"
-                ],
-                "code": ".pulse {\n  animation: pulse 1s ease-in-out infinite alternate;\n}\n\n@keyframes pulse {\n  from {\n    opacity: 0.5;\n    transform: scale(1);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1.05);\n  }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Shake Animation",
-                "description": "Adds a shake animation ( commonly used to mark invalid fields )",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "shake",
-                    "shake-horizontal"
-                ],
-                "contributors": [],
-                "code": ".shake {\n    animation: shake .5s ease-in-out;\n}\n\n@keyframes shake {\n  0%, 100% {\n    transform: translateX(0);\n  }\n  25% {\n    transform: translateX(-10px);\n  }\n  50% {\n    transform: translateX(10px);\n  }\n  75% {\n    transform: translateX(-10px);\n  }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Slide-in Animation",
-                "description": "Adds a slide-in from the right side of the screen",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "animation",
-                    "slide-in",
-                    "slide-right"
-                ],
-                "contributors": [],
-                "code": ".slide-in {\n    animation: slide-in 1s ease-in-out;\n}\n\n@keyframes slide-in {\n    from {\n        scale: 300% 1;\n        translate: 150vw 0;\n    }\n\n    to {\n        scale: 100% 1;\n        translate: 0 0;\n    }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Typewriter Animation",
-                "description": "Adds a typewriter animation + blinking cursor",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "blinking",
-                    "typewriter"
-                ],
-                "contributors": [],
-                "code": "    <div class=\"typewriter\">\n      <div>\n          <p>Typerwriter Animation</p>\n      </div>\n    </div>\n```\n\n```css\n    .typewriter{\n        display: flex;\n        justify-content: center;\n    }\n\n    .typewriter p {\n        overflow: hidden;\n        font-size: 1.5rem;\n        font-family: monospace;\n        border-right: 1px solid;\n        margin-inline: auto;\n        white-space: nowrap;\n        /* The cursor will inherit the text's color by default */\n        /* border-color: red */                \n        /* Steps: number of chars (better to set directly in js)*/\n        animation: typing 3s steps(21) forwards,\n        blink 1s step-end infinite;\n    }\n\n    @keyframes typing{\n        from{\n            width: 0%\n        }\n        to{\n            width: 100%\n        }\n    }\n\n    @keyframes blink{\n        50%{\n            border-color: transparent;\n        }\n    }\n",
-                "extension": "html"
-            }
-        ]
-    },
-    {
-        "name": "Buttons",
-        "snippets": [
-            {
-                "title": "3D Button Effect",
-                "description": "Adds a 3D effect to a button when clicked.",
-                "author": "technoph1le",
-                "tags": [
-                    "button",
-                    "3D",
-                    "effect"
-                ],
-                "contributors": [],
-                "code": ".button {\n  background-color: #28a745;\n  color: white;\n  padding: 10px 20px;\n  border: none;\n  border-radius: 5px;\n  box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n  transition: transform 0.1s;\n}\n\n.button:active {\n  transform: translateY(2px);\n  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Button Hover Effect",
-                "description": "Creates a hover effect with a color transition.",
-                "author": "technoph1le",
-                "tags": [
-                    "button",
-                    "hover",
-                    "transition"
-                ],
-                "contributors": [],
-                "code": ".button {\n  background-color: #007bff;\n  color: white;\n  padding: 10px 20px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  transition: background-color 0.3s ease;\n}\n\n.button:hover {\n  background-color: #0056b3;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "MacOS Button",
-                "description": "A macOS-like button style, with hover and shading effects.",
-                "author": "e3nviction",
-                "tags": [
-                    "button",
-                    "macos",
-                    "hover",
-                    "transition"
-                ],
-                "contributors": [],
-                "code": ".button {\n font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,;\n background: #0a85ff;\n color: #fff;\n padding: 8px 12px;\n border: none;\n margin: 4px;\n border-radius: 10px;\n cursor: pointer;\n box-shadow: inset 0 1px 1px #fff2, 0px 2px 3px -2px rgba(0, 0, 0, 0.3) !important; /*This is really performance heavy*/\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-decoration: none;\n transition: all 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n}\n.button:hover {\n background: #0974ee;\n color: #fff\n}\n",
-                "extension": "css"
-            }
-        ]
-    },
-    {
-        "name": "Effects",
-        "snippets": [
-            {
-                "title": "Blur Background",
-                "description": "Applies a blur effect to the background of an element.",
-                "author": "technoph1le",
-                "tags": [
-                    "blur",
-                    "background",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": ".blur-background {\n  backdrop-filter: blur(10px);\n  background: rgba(255, 255, 255, 0.5);\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Hover Glow Effect",
-                "description": "Adds a glowing effect on hover.",
-                "author": "technoph1le",
-                "tags": [
-                    "hover",
-                    "glow",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": ".glow {\n  background-color: #f39c12;\n  padding: 10px 20px;\n  border-radius: 5px;\n  transition: box-shadow 0.3s ease;\n}\n\n.glow:hover {\n  box-shadow: 0 0 15px rgba(243, 156, 18, 0.8);\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Hover to Reveal Color",
-                "description": "A card with an image that transitions from grayscale to full color on hover.",
-                "author": "Haider-Mukhtar",
-                "tags": [
-                    "hover",
-                    "image",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": ".card {\n  height: 300px;\n  width: 200px;\n  border-radius: 5px;\n  overflow: hidden;\n}\n\n.card img{\n  height: 100%;\n  width: 100%;\n  object-fit: cover;\n  filter: grayscale(100%);\n  transition: all 0.3s;\n  transition-duration: 200ms;\n  cursor: pointer;\n}\n\n.card:hover img {\n  filter: grayscale(0%);\n  scale: 1.05;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "RGB Border Color Animation",
-                "description": "changes border of an Element to rgb onhover (Can be changed)'",
-                "author": "Brianali-codes",
-                "tags": [
-                    "animation",
-                    "effects",
-                    "borders"
-                ],
-                "contributors": [],
-                "code": ".yourElement {\n    /* Your Elements styles go here*/\n    border-style: solid;\n    border-radius: 10px;\n    color: rgb(0, 0, 0);\n\n}\n.yourElement:hover {\n\n    animation: change-color;\n    animation-duration: 0.5s;         /* you can alter the duration of the animation here. */\n    animation-iteration-count: infinite;         /* Choose to play animation infinitely or once on hover. */\n}\n\n@keyframes change-color {\n    0% {\n        border-color: red;\n    }\n\n    50% {\n        border-color: green;\n    }\n\n    100% {\n        border-color: blue;\n    }\n}\n\n\n",
-                "extension": "css"
-            }
-        ]
-    },
-    {
-        "name": "Layouts",
-        "snippets": [
-            {
-                "title": "CSS Reset",
-                "description": "Resets some default browser styles, ensuring consistency across browsers.",
-                "author": "AmeerMoustafa",
-                "tags": [
-                    "reset",
-                    "browser",
-                    "layout"
-                ],
-                "contributors": [],
-                "code": "* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Equal-Width Columns",
-                "description": "Creates columns with equal widths using flexbox.",
-                "author": "technoph1le",
-                "tags": [
-                    "flexbox",
-                    "columns",
-                    "layout"
-                ],
-                "contributors": [],
-                "code": ".columns {\n  display: flex;\n  justify-content: space-between;\n}\n\n.column {\n  flex: 1;\n  margin: 0 10px;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Grid layout",
-                "description": "Equal sized items in a responsive grid",
-                "author": "xshubhamg",
-                "tags": [
-                    "layout",
-                    "grid"
-                ],
-                "contributors": [
-                    "tryoxiss"
-                ],
-                "code": ".grid-container {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));\n/* Explanation:\n- `auto-fit`: Automatically fits as many columns as possible within the container.\n- `minmax(min(250px, 100%), 1fr)`: Defines a minimum column size of 250px and a maximum size of 1fr (fraction of available space). However, that minimum column size is allowed to shrink to fit all avalible space if the space is otherwise less than the minimum.\n  - NOTE: the `min(x, 100%)` trick does not do much for very small sizes like 250px, but it will help massively if you increase the min column size yourself.\n*/\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Responsive Design",
-                "description": "The different responsive breakpoints.",
-                "author": "kruimol",
-                "tags": [
-                    "responsive",
-                    "media queries"
-                ],
-                "contributors": [],
-                "code": "/* Phone */\n.element {\n  margin: 0 10%\n}\n\n/* Tablet */\n@media (min-width: 640px) {\n  .element {\n    margin: 0 20%\n  }\n}\n\n/* Desktop base */\n@media (min-width: 768px) {\n  .element {\n    margin: 0 30%\n  }\n}\n\n/* Desktop large */\n@media (min-width: 1024px) {\n  .element {\n    margin: 0 40%\n  }\n}\n\n/* Desktop extra large */\n@media (min-width: 1280px) {\n  .element {\n    margin: 0 60%\n  }\n}\n\n/* Desktop bige */\n@media (min-width: 1536px) {\n  .element {\n    margin: 0 80%\n  }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Sticky Footer",
-                "description": "Ensures the footer always stays at the bottom of the page.",
-                "author": "technoph1le",
-                "tags": [
-                    "layout",
-                    "footer",
-                    "sticky"
-                ],
-                "contributors": [],
-                "code": "body {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\nfooter {\n  margin-top: auto;\n}\n",
-                "extension": "css"
-            }
-        ]
-    },
-    {
-        "name": "Typography",
-        "snippets": [
-            {
-                "title": "Letter Spacing",
-                "description": "Adds space between letters for better readability.",
-                "author": "technoph1le",
-                "tags": [
-                    "typography",
-                    "spacing"
-                ],
-                "contributors": [],
-                "code": "p {\n  letter-spacing: 0.05em;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Responsive Font Sizing",
-                "description": "Adjusts font size based on viewport width.",
-                "author": "technoph1le",
-                "tags": [
-                    "font",
-                    "responsive",
-                    "typography"
-                ],
-                "contributors": [],
-                "code": "h1 {\n  font-size: calc(1.5rem + 2vw);\n}\n",
-                "extension": "css"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/haskell.json b/backend/data/consolidated/haskell.json
deleted file mode 100644
index ff27eac2..00000000
--- a/backend/data/consolidated/haskell.json
+++ /dev/null
@@ -1,240 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Binary Search",
-                "description": "Searches for an element in a sorted array using binary search.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "binary-search",
-                    "search"
-                ],
-                "contributors": [],
-                "code": "binarySearch :: Ord a => a -> [a] -> Maybe Int\nbinarySearch _ [] = Nothing\nbinarySearch target xs = go 0 (length xs - 1)\n  where\n    go low high\n        | low > high = Nothing\n        | midElem < target = go (mid + 1) high\n        | midElem > target = go low (mid - 1)\n        | otherwise = Just mid\n      where\n        mid = (low + high) `div` 2\n        midElem = xs !! mid\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let array = [1, 2, 3, 4, 5]\n    print $ binarySearch 3 array -- Output: Just 2\n    print $ binarySearch 6 array -- Output: Nothing\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Chunk Array",
-                "description": "Splits an array into chunks of a specified size.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "chunk",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "chunkArray :: Int -> [a] -> [[a]]\nchunkArray _ [] = []\nchunkArray n xs = take n xs : chunkArray n (drop n xs)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let array = [1, 2, 3, 4, 5, 6]\n    print $ chunkArray 2 array -- Output: [[1, 2], [3, 4], [5, 6]]\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Matrix Transpose",
-                "description": "Transposes a 2D matrix.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "matrix",
-                    "transpose"
-                ],
-                "contributors": [],
-                "code": "transposeMatrix :: [[a]] -> [[a]]\ntransposeMatrix [] = []\ntransposeMatrix ([]:_) = []\ntransposeMatrix xs = map head xs : transposeMatrix (map tail xs)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n    print $ transposeMatrix matrix -- Output: [[1,4,7],[2,5,8],[3,6,9]]\n",
-                "extension": "hs"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "putStrLn \"Hello, World!\"\n",
-                "extension": "haskell"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find Files in Directory by Type",
-                "description": "Finds all files in a directory with a specific extension.",
-                "author": "ACR1209",
-                "tags": [
-                    "file",
-                    "search",
-                    "extension",
-                    "filesystem"
-                ],
-                "contributors": [],
-                "code": "import System.Directory (listDirectory)\nimport System.FilePath (takeExtension)\n\nfindFilesByExtension :: FilePath -> String -> IO [FilePath]\nfindFilesByExtension dir ext = do\n    files <- listDirectory dir\n    return $ filter (\\f -> takeExtension f == ext) files\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let directory = \".\"\n    let ext = \".txt\"\n    files <- findFilesByExtension directory ext\n    mapM_ putStrLn files -- Output: list of txt files on the current directory\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Read File in Chunks",
-                "description": "Reads a file in chunks grouped by lines.",
-                "author": "ACR1209",
-                "tags": [
-                    "file",
-                    "read",
-                    "chunks",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "import System.IO (openFile, IOMode(ReadMode), hGetContents)\nimport Data.List (unfoldr)\n\nreadFileInChunks :: FilePath -> Int -> IO [[String]]\nreadFileInChunks filePath chunkSize = do\n    handle <- openFile filePath ReadMode\n    contents <- hGetContents handle\n    let linesList = lines contents\n    return $ go linesList\n  where\n    go [] = []\n    go xs = take chunkSize xs : go (drop chunkSize xs)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let file = \"example.txt\"\n    let chunkSize = 3 -- Number of lines per chunk\n    chunks <- readFileInChunks file chunkSize\n    mapM_ (putStrLn . unlines) chunks\n\n",
-                "extension": "hs"
-            }
-        ]
-    },
-    {
-        "name": "Monads",
-        "snippets": [
-            {
-                "title": "Either Monad for Error Handling",
-                "description": "Using the Either monad to handle errors in a computation.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "either",
-                    "error handling"
-                ],
-                "contributors": [],
-                "code": "safeDiv :: Int -> Int -> Either String Int\nsafeDiv _ 0 = Left \"Division by zero error\"\nsafeDiv x y = Right (x `div` y)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let result = do\n            a <- safeDiv 10 2\n            b <- safeDiv a 0  -- This will trigger an error\n            return b\n    print result  -- Output: Left \"Division by zero error\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Maybe Monad",
-                "description": "Using the Maybe monad to handle computations that might fail.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "maybe"
-                ],
-                "contributors": [],
-                "code": "safeDiv :: Int -> Int -> Maybe Int\nsafeDiv _ 0 = Nothing\nsafeDiv x y = Just (x `div` y)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let result = do\n            a <- safeDiv 10 2\n            b <- safeDiv a 2\n            return b\n    print result  -- Output: Just 2\n",
-                "extension": "hs"
-            },
-            {
-                "title": "State Monad",
-                "description": "Managing mutable state using the State monad.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "state",
-                    "state-management"
-                ],
-                "contributors": [],
-                "code": "import Control.Monad.State\n\nincrement :: State Int Int\nincrement = do\n    count <- get\n    put (count + 1)\n    return count\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let (res1, intermediateState) = runState increment 0\n    print res1      -- Output: 0\n    let (result, finalState) = runState increment intermediateState\n    print result    -- Output: 1\n    print finalState  -- Output: 2\n\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Writer Monad",
-                "description": "Using the Writer monad to accumulate logs or other outputs alongside a computation.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "writer",
-                    "logs"
-                ],
-                "contributors": [],
-                "code": "import Control.Monad.Writer\n\naddAndLog :: Int -> Int -> Writer [String] Int\naddAndLog x y = do\n    tell [\"Adding \" ++ show x ++ \" and \" ++ show y]\n    return (x + y)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let (result, logs) = runWriter $ do\n            res1 <- addAndLog 3 5\n            addAndLog res1 1\n    print result  -- Output: 9\n    print logs  -- Output: [\"Adding 3 and 5\", \"Adding 8 and 1\"]\n",
-                "extension": "hs"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "CamelCase to snake_case",
-                "description": "Converts a Camel Case string to Snake case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "camel-case",
-                    "snake-case",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (isUpper, toLower)\n\ncamelToSnake :: String -> String\ncamelToSnake [] = []\ncamelToSnake (x:xs)\n    | isUpper x = '_' : toLower x : camelToSnake xs\n    | otherwise = x : camelToSnake xs\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let camelCase = \"camelCaseToSnakeCase\"\n    print $ camelToSnake camelCase -- Output: \"camel_case_to_snake_case\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "capitalize",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (toUpper)\n\ncapitalizeWords :: String -> String\ncapitalizeWords = unwords . map capitalize . words\n  where\n    capitalize []     = []\n    capitalize (x:xs) = toUpper x : xs\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let sentence = \"haskell is awesome\"\n    print $ capitalizeWords sentence -- Output: \"Haskell Is Awesome\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Count Word Occurrences in String",
-                "description": "Counts the occurrences of each word in a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "occurrences",
-                    "word-count"
-                ],
-                "contributors": [],
-                "code": "import Data.List (group, sort)\n\ncountWordOccurrences :: String -> [(String, Int)]\ncountWordOccurrences = map (\\(w:ws) -> (w, length (w:ws))) . group . sort . words\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let text = \"haskell is awesome and haskell is fun\"\n    print $ countWordOccurrences text -- Output: [(\"and\",1),(\"awesome\",1),(\"fun\",1),(\"haskell\",2),(\"is\",2)]\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes all punctuation from a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (isPunctuation)\n\nremovePunctuation :: String -> String\nremovePunctuation = filter (not . isPunctuation)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let text = \"Hello, Haskell! How's it going?\"\n    print $ removePunctuation text -- Output: \"Hello Haskell Hows it going\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Snake_Case to CamelCase",
-                "description": "Converts a Snake Case string to Camel Case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "snake-case",
-                    "camel-case",
-                    "utilty"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (toUpper)\n\nsnakeToCamel :: String -> String\nsnakeToCamel [] = []\nsnakeToCamel ('_':x:xs) = toUpper x : snakeToCamel xs\nsnakeToCamel (x:xs) = x : snakeToCamel xs\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let snakeCase = \"snake_case_to_camel_case\"\n    print $ snakeToCamel snakeCase -- Output: \"snakeCaseToCamelCase\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Truncates a string to a specified length, optionally adding an ellipsis.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "truncate",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "truncateString :: Int -> String -> String\ntruncateString maxLength str\n    | length str <= maxLength = str\n    | otherwise = take (maxLength - 3) str ++ \"...\"\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let longString = \"Haskell is a powerful functional programming language.\"\n    print $ truncateString 20 longString -- Output: \"Haskell is a powe...\"\n    print $ truncateString 54 longString -- Output: \"Haskell is a powerful functional programming language.\"\n",
-                "extension": "hs"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/html.json b/backend/data/consolidated/html.json
deleted file mode 100644
index e62ed638..00000000
--- a/backend/data/consolidated/html.json
+++ /dev/null
@@ -1,37 +0,0 @@
-[
-    {
-        "name": "Basic Layouts",
-        "snippets": [
-            {
-                "title": "Grid Layout with Navigation",
-                "description": "Full-height grid layout with header navigation using nesting syntax.",
-                "author": "GreenMan36",
-                "tags": [
-                    "css",
-                    "layout",
-                    "sticky",
-                    "grid",
-                    "full-height"
-                ],
-                "contributors": [],
-                "code": "<!DOCTYPE html>\n<html>\n  <head>\n    <style>\n      body {\n        margin: 0;\n        min-height: 100vh;\n        display: grid;\n        grid-template-rows: auto 1fr auto;\n        background: red; /* Shouldn't be visible */\n      }\n\n      .header {\n        background: #3b82f6;\n        padding: 1rem;\n        display: flex;\n        & .menu {\n          margin-left: auto;\n        }\n        & .menu ul {\n          margin-left: auto;\n          display: flex;\n          gap: 1rem;\n        }\n      }\n\n      .main {\n        background: #f3f4f6;\n        padding: 1rem;\n      }\n\n      .footer {\n        background: #1f2937;\n        padding: 1rem;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"header\">\n      Header\n      <nav class=\"menu\">\n        <ul>\n          <li><a href=\"#\">Home</a></li>\n          <li><a href=\"#\">About</a></li>\n          <li><a href=\"#\">Contact</a></li>\n        </ul>\n      </nav>\n    </div>\n    <div class=\"main\">Main Content</div>\n    <div class=\"footer\">Footer</div>\n  </body>\n</html>\n",
-                "extension": "html"
-            },
-            {
-                "title": "Sticky Header-Footer Layout",
-                "description": "Full-height layout with sticky header and footer, using modern viewport units and flexbox.",
-                "author": "GreenMan36",
-                "tags": [
-                    "css",
-                    "layout",
-                    "sticky",
-                    "flexbox",
-                    "viewport"
-                ],
-                "contributors": [],
-                "code": "<!DOCTYPE html>\n<html style=\"margin: 0\">\n  <head>\n    <style type=\"text/css\">\n      body {\n        margin: 0;\n        display: flex;\n        flex-direction: column;\n        min-height: 100svh; /* Smallest viewport height */\n        min-height: 100vh;  /* Standard viewport height */\n        min-height: 100dvh; /* Dynamic viewport height */\n        min-height: 100lvh; /* Largest viewport height */\n        background-color: red;\n      }\n\n      .header {\n        position: sticky;\n        top: 0;\n        left: 0;\n        right: 0;\n        background-color: blue;\n      }\n\n      .body {\n        flex-grow: 1;\n        background-color: whitesmoke;\n      }\n\n      .footer {\n        position: sticky;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        background-color: blue;\n      }\n    </style>\n  <head>\n  <body>\n    <div class=\"header\">header</div>\n    <div class=\"body\">body/content</div>\n    <div class=\"footer\">footer</div>\n  </body>\n</html>\n",
-                "extension": "html"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/java.json b/backend/data/consolidated/java.json
deleted file mode 100644
index 8c66af67..00000000
--- a/backend/data/consolidated/java.json
+++ /dev/null
@@ -1,670 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Remove duplicates",
-                "description": "Removes duplicate elements from an list",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "list",
-                    "duplicates",
-                    "unique"
-                ],
-                "contributors": [],
-                "code": "import java.util.List;\nimport java.util.stream.Collectors;\n\npublic static <T> List<T> removeDuplicates(List<T> list) {\n    return list.stream()\n        .distinct()\n        .collect(Collectors.toList());\n}\n\n// Usage:\nList<Integer> list = List.of(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);\nList<Integer> result = removeDuplicates(list);\nSystem.out.println(\"List with duplicates removed: \" + result); // [1, 2, 3, 4, 5]\n",
-                "extension": "java"
-            },
-            {
-                "title": "Zip Two Lists",
-                "description": "Zips two lists into a list of paired elements, combining corresponding elements from both lists.",
-                "author": "davidanukam",
-                "tags": [
-                    "lists",
-                    "zip",
-                    "stream-api",
-                    "collections"
-                ],
-                "contributors": [],
-                "code": "import java.util.*; // Importing utility classes for List and Arrays\nimport java.util.stream.IntStream; // Importing IntStream for range and mapping\nimport java.util.stream.Collectors; // Importing Collectors for collecting stream results\n\npublic <A, B> List<List<Object>> zip(List<A> list1, List<B> list2) {\n    // Create pairs by iterating through the indices of both lists\n    return IntStream.range(0, Math.min(list1.size(), list2.size())) // Limit the range to the smaller list\n            .mapToObj(i -> Arrays.asList(list1.get(i), list2.get(i))) // Pair elements from both lists at index i\n            .collect(Collectors.toList()); // Collect the pairs into a List\n}\n\n// Usage:\nList<String> arr1 = Arrays.asList(\"a\", \"b\", \"c\");\nList<Integer> arr2 = Arrays.asList(1, 2, 3);\nList<List<Object>> zipped = zip(arr1, arr2);\n\nSystem.out.println(zipped); // Output: [[a, 1], [b, 2], [c, 3]]\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello-World",
-                "description": "Prints Hello world in the console",
-                "author": "SarvariHarshitha",
-                "tags": [
-                    "java",
-                    "console",
-                    "printing"
-                ],
-                "contributors": [],
-                "code": "// This is the main class of the Java program\npublic class Main {\n    // The main method is the entry point of the program\n    public static void main(String args[]) {\n        // This statement prints \"Hello, World!\" to the console\n        System.out.println(\"Hello, World!\");\n    }\n}\n\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Bit Manipulation",
-        "snippets": [
-            {
-                "title": "Bit Counting",
-                "description": "Counts the set bits in the binary representation of an integer",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "bits",
-                    "bit-counting"
-                ],
-                "contributors": [],
-                "code": "public static int countBits(int number) {\n    int bits = 0;\n        \n    while (number > 0) {\n        bits += number & 1;\n        number >>= 1;\n    }\n\n    return bits;\n}\n\n// Usage:\nint number = 5;\nSystem.out.println(countBits(5)); // 2 (101)\n",
-                "extension": "java"
-            },
-            {
-                "title": "Is Power Of Two",
-                "description": "Checks if a number is a power of two",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "bit",
-                    "power-of-two"
-                ],
-                "contributors": [],
-                "code": "public static boolean isPowerOfTwo(int number) {\n    return (number > 0) && ((number & (number - 1)) == 0);\n}\n\n// Usage:\nint number = 16;\nSystem.out.println(isPowerOfTwo(number)); // true (2^4)\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Date Time",
-        "snippets": [
-            {
-                "title": "Date Time Formatting American",
-                "description": "Formats a timestamp to a human-readable date-time string in the format \"MM/dd/yyyy hh:mm:ss a\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "date",
-                    "time",
-                    "date-time",
-                    "formatting",
-                    "american"
-                ],
-                "contributors": [],
-                "code": "import java.time.Instant;\nimport java.time.ZoneId;\nimport java.time.format.DateTimeFormatter;\nimport java.util.concurrent.TimeUnit;\n\n// using the system default time zone\npublic static String formatDateTimeAmerican(long time, TimeUnit timeUnit) {\n    return formatDateTimeAmerican(time, timeUnit, ZoneId.systemDefault());\n}\n\npublic static String formatDateTimeAmerican(long time, TimeUnit timeUnit, ZoneId timeZone) {\n    return DateTimeFormatter.ofPattern(\"MM/dd/yyyy hh:mm:ss a\")\n            .withZone(\n                timeZone != null ? timeZone : ZoneId.systemDefault()\n            )\n            .format(Instant.ofEpochSecond(\n                timeUnit.toSeconds(time)\n            ));\n}\n\n// Usage:\nSystem.out.println(formatDateTimeAmerican(1735689599, TimeUnit.SECONDS)); // \"12/31/2024 | 11:59:59 PM\" for GMT+0000\nSystem.out.println(formatDateTimeAmerican(1735689599, TimeUnit.SECONDS, ZoneId.of(\"GMT+0000\"))); // \"12/31/2024 | 11:59:59 PM\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Date Time Formatting European",
-                "description": "Formats a timestamp to a human-readable date-time string in the format \"dd.MM.yyyy HH:mm:ss\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "date",
-                    "time",
-                    "date-time",
-                    "formatting",
-                    "european"
-                ],
-                "contributors": [],
-                "code": "import java.time.Instant;\nimport java.time.ZoneId;\nimport java.time.format.DateTimeFormatter;\nimport java.util.concurrent.TimeUnit;\n\n// using the system default time zone\npublic static String formatDateTimeEuropean(long time, TimeUnit timeUnit) {\n    return formatDateTimeEuropean(time, timeUnit, ZoneId.systemDefault());\n}\n\npublic static String formatDateTimeEuropean(long time, TimeUnit timeUnit, ZoneId timeZone) {\n    return DateTimeFormatter.ofPattern(\"dd.MM.yyyy HH:mm:ss\")\n            .withZone(\n                timeZone != null ? timeZone : ZoneId.systemDefault()\n            )\n            .format(Instant.ofEpochSecond(\n                    timeUnit.toSeconds(time)\n            ));\n}\n\n// Usage:\nSystem.out.println(formatDateTimeEuropean(1735689599, TimeUnit.SECONDS)); // \"31.12.2024 | 23:59:59\" for GMT+0000\nSystem.out.println(formatDateTimeEuropean(1735689599, TimeUnit.SECONDS, ZoneId.of(\"GMT+0000\"))); // \"31.12.2024 | 23:59:59\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Duration Formatting Hours Minutes Seconds",
-                "description": "Converts a given time duration to a human-readable string in the format \"hh:mm(:ss)\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "time",
-                    "formatting",
-                    "hours",
-                    "minutes",
-                    "seconds"
-                ],
-                "contributors": [],
-                "code": "import java.util.concurrent.TimeUnit;\n    \npublic static String formatDurationToHoursMinutesAndSeconds(int time, TimeUnit timeUnit, boolean showSeconds) {\n    long totalSeconds = timeUnit.toSeconds(time);\n\n    if (totalSeconds < 0)\n        throw new IllegalArgumentException(\"Duration must be a non-negative value.\");\n\n    // These variables can be directly used in the return statement,\n    // but are kept as separate variables here for better readability.\n    long hours = totalSeconds / 3600;\n    long minutes = (totalSeconds % 3600) / 60;\n    long seconds = totalSeconds % 60;\n\n    if (showSeconds) {\n        return String.format(\"%02d:%02d:%02d\", hours, minutes, seconds);\n    } else {\n        return String.format(\"%02d:%02d\", hours, minutes);\n    }\n}\n\n// Usage:\nSystem.out.println(formatDurationToHoursMinutesAndSeconds(3810, TimeUnit.SECONDS, true)); // \"01:03:30\"\nSystem.out.println(formatDurationToHoursMinutesAndSeconds(3810, TimeUnit.SECONDS, false)); // \"01:03\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Duration Formatting Minutes Seconds",
-                "description": "Converts a given time duration to a human-readable string in the format \"mm:ss\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "time",
-                    "formatting",
-                    "minutes",
-                    "seconds"
-                ],
-                "contributors": [],
-                "code": "import java.util.concurrent.TimeUnit;\n\npublic static String formatDurationToMinutesAndSeconds(int time, TimeUnit timeUnit) {\n    long totalSeconds = timeUnit.toSeconds(time);\n\n    if (totalSeconds < 0)\n        throw new IllegalArgumentException(\"Duration must be a non-negative value.\");\n\n    // These variables can be directly used in the return statement,\n    // but are kept here as separate variables for better readability.\n    long minutes = totalSeconds / 60;\n    long seconds = totalSeconds % 60;\n\n    return String.format(\"%02d:%02d\", minutes, seconds);\n}\n\n// Usage:\nSystem.out.println(formatDurationToMinutesAndSeconds(120, TimeUnit.SECONDS)); // \"02:00\"\nSystem.out.println(formatDurationToMinutesAndSeconds(75, TimeUnit.SECONDS)); // \"01:15\"\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Math",
-        "snippets": [
-            {
-                "title": "Checksum",
-                "description": "Calculates the checksum of an int",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "checksum"
-                ],
-                "contributors": [],
-                "code": "public static int checksum(int number) {\n    number = Math.abs(number);\n    int sum = 0;\n\n    while (number != 0) {\n        sum += number % 10;\n        number /= 10;\n    }\n\n    return sum;\n}\n\n// Usage:\nint number = 12345;\nSystem.out.println(checksum(number)); // 15 = 1+2+3+4+5\n",
-                "extension": "java"
-            },
-            {
-                "title": "Factorial",
-                "description": "Computes the factorial of a given number",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "factorial"
-                ],
-                "contributors": [],
-                "code": "import java.math.BigInteger;\n\npublic static BigInteger factorial(int number) {\n    BigInteger result = BigInteger.ONE;\n\n    for (int currentNumber = 1; currentNumber <= number; currentNumber++) {\n        result = result.multiply(BigInteger.valueOf(currentNumber));\n    }\n\n    return result;\n}\n\n// Usage:\nint number = 6;\nSystem.out.println(factorial(number)); // 720 = 6*5*4*3*2\n",
-                "extension": "java"
-            },
-            {
-                "title": "Fibonacci",
-                "description": "Calculates the nth fibonacci number",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "fibonacci"
-                ],
-                "contributors": [],
-                "code": "public static int fibonacci(int number) {\n    if (number <= 1) \n        return number;\n        \n    return fibonacci(number - 1) + fibonacci(number - 2);\n}\n\n// Usage:\nint number = 5;\nSystem.out.println(fibonacci(number)) // 3 (0, 1, 1, 2, 3)\n",
-                "extension": "java"
-            },
-            {
-                "title": "Greatest Common Divisor",
-                "description": "Calculates the greatest common divisor (gcd) of two numbers",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "greatest-common-devisor",
-                    "gcd",
-                    "euclidean-algorithm"
-                ],
-                "contributors": [],
-                "code": "public static int gcd(int number1, int number2) {\n    while (number2 != 0) {\n        int remainder = number2;\n        number2 = number1 % number2;\n        number1 = remainder;\n    }\n\n    return number1;\n}\n\n// Usage:\nint a = 16;\nint b = 12;\nSystem.out.println(gcd(a, b)); // 4\n",
-                "extension": "java"
-            },
-            {
-                "title": "Least Common Multiple",
-                "description": "Calculates the least common multiple (lcm) of two numbers",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "least-common-multiple",
-                    "lcm",
-                    "euclidean-algorithm"
-                ],
-                "contributors": [],
-                "code": "public static int lcm(int number1, int number2) {\n    int gcdNumber1 = number1;\n    int gcdNumber2 = number2;\n    \n    while (gcdNumber2 != 0) {\n        int remainder = gcdNumber2;\n        gcdNumber2 = gcdNumber1 % gcdNumber2;\n        gcdNumber1 = remainder;\n    }\n    \n    return (number1 / gcdNumber1) * number2;\n}\n\n// Usage:\nint a = 16;\nint b = 12;\nSystem.out.println(lcm(a, b)); // 48\n",
-                "extension": "java"
-            },
-            {
-                "title": "Prime Check",
-                "description": "Checks if a number is a prime",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "prime"
-                ],
-                "contributors": [],
-                "code": "public static boolean isPrime(int number) {\n    if (number <= 1) \n        return false;\n\n    if (number <= 3) \n        return true;\n\n    boolean prime = true;\n    for (int divisor = 3; divisor < number; divisor++) {\n        if (number % divisor != 0)\n            continue;\n\n        prime = false;\n        break;\n    }\n\n    return prime;\n}\n\n// Usage:\nint number = 31;\nSystem.out.println(isPrime(number)); // true\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Ascii To String",
-                "description": "Converts a list of ascii numbers into a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "ascii",
-                    "encoding",
-                    "decode",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "import java.util.List;\n\npublic static String asciiToString(List<Integer> asciiCodes) {\n    StringBuilder text = new StringBuilder();\n\n    for (int asciiCode : asciiCodes) {\n        text.append((char) asciiCode);\n    }\n\n    return text.toString();\n}\n\n// Usage:\nSystem.out.println(asciiToString(List.of(104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100))); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "camelCase to snake_case",
-                "description": "Converts a camelCase string into snake_case",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "camel-case",
-                    "snake-case"
-                ],
-                "contributors": [],
-                "code": "public static String camelToSnake(String camelCase) {\n    return camelCase.replaceAll(\"([a-z])([A-Z])\", \"$1_$2\").toLowerCase();\n}\n\n// Usage:\nSystem.out.println(camelToSnake(\"helloWorld\")); // \"hello_world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "capitalize",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "public static String capitalizeWords(String text) {\n    String[] words = text.split(\"(?<=\\\\S)(?=\\\\s+)|(?<=\\\\s+)(?=\\\\S)\"); // this is needed to preserve spaces (text.split(\" \") would remove multiple spaces)\n    StringBuilder capitalizedText = new StringBuilder();\n    \n    for (String word : words) {\n        if (word.trim().isEmpty()) {\n            capitalizedText.append(word);\n            continue;\n        }\n        capitalizedText.append(Character.toUpperCase(word.charAt(0)))\n                .append(word.substring(1));\n    }\n    \n    return capitalizedText.toString();\n}\n\n// Usage:\nSystem.out.println(capitalizeWords(\"hello  world\")); // \"Hello  World\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Check Anagram",
-                "description": "Checks if two strings are anagrams, meaning they contain the same characters ignoring order, spaces and case sensitivity",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "anagram",
-                    "compare",
-                    "arrays"
-                ],
-                "contributors": [],
-                "code": "import java.util.Arrays;\n\npublic static boolean isAnagram(String text1, String text2) {\n    String text1Normalized = text1.replaceAll(\"\\\\s+\", \"\");\n    String text2Normalized = text2.replaceAll(\"\\\\s+\", \"\");\n\n    if (text1Normalized.length() != text2Normalized.length())\n        return false;\n        \n    char[] text1Array = text1Normalized.toCharArray();\n    char[] text2Array = text2Normalized.toCharArray();\n    Arrays.sort(text1Array);\n    Arrays.sort(text2Array);\n    return Arrays.equals(text1Array, text2Array);\n}\n\n// Usage:\nSystem.out.println(isAnagram(\"listen\", \"silent\")); // true\nSystem.out.println(isAnagram(\"hello\", \"world\"));   // false\n",
-                "extension": "java"
-            },
-            {
-                "title": "Check Palindrome",
-                "description": "Checks if a string reads the same backward as forward, ignoring whitespaces and case sensitivity",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "palindrome",
-                    "compare",
-                    "reverse"
-                ],
-                "contributors": [],
-                "code": "public static boolean isPalindrome(String text) {\n    String cleanText = text.toLowerCase().replaceAll(\"\\\\s+\", \"\");\n        \n    return new StringBuilder(cleanText)\n            .reverse()\n            .toString()\n            .equals(cleanText);\n}\n\n// Usage:\nSystem.out.println(isPalindrome(\"A man a plan a canal Panama\")); // true\n",
-                "extension": "java"
-            },
-            {
-                "title": "Count Character Frequency",
-                "description": "Counts the frequency of each character in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "character",
-                    "frequency",
-                    "character-frequency"
-                ],
-                "contributors": [],
-                "code": "public static Map<Character, Integer> characterFrequency(String text, boolean countSpaces, boolean caseSensitive) {\n    Map<Character, Integer> frequencyMap = new HashMap<>();\n\n    for (char character : text.toCharArray()) {\n        if (character == ' ' && !countSpaces)\n            continue;\n\n        if (!caseSensitive)\n            character = Character.toLowerCase(character);\n\n        frequencyMap.put(character, frequencyMap.getOrDefault(character, 0) + 1);\n    }\n\n    return frequencyMap;\n}\n\n// Usage:\nSystem.out.println(characterFrequency(\"hello world\", false, false)); // {r=1, d=1, e=1, w=1, h=1, l=3, o=2}\n",
-                "extension": "java"
-            },
-            {
-                "title": "Count Character Occurrences",
-                "description": "Counts the occurrences of the specified characters in a given string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "characters",
-                    "counter",
-                    "occurence"
-                ],
-                "contributors": [],
-                "code": "import java.util.List;\n\npublic static int countCharacterOccurrences(String text, List<Character> characters) {\n    int count = 0;\n    \n    for (char character : text.toCharArray()) {\n        if (characters.indexOf(character) == -1)\n            continue;\n                \n        count++;\n    }\n    \n    return count;\n}\n\n// Usage:\nSystem.out.println(countCharacterOccurrences(\"hello world\", List.of('l', 'o'))); // 5\n",
-                "extension": "java"
-            },
-            {
-                "title": "Count Words",
-                "description": "Counts the number of words in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "word",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "public static int countWords(String text) {\n    return text.split(\"\\\\s+\").length;\n}\n\n// Usage:\nSystem.out.println(countWords(\"hello world\")); // 2\n",
-                "extension": "java"
-            },
-            {
-                "title": "Extract Text Between Delimiters",
-                "description": "Extracts a text between two given delimiters from a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "delimiters",
-                    "start",
-                    "end"
-                ],
-                "contributors": [],
-                "code": "public static String extractBetweenDelimiters(String text, String start, String end) {\n    int startIndex = text.indexOf(start);\n    int endIndex = text.indexOf(end, startIndex + start.length());\n    \n    if (startIndex == -1 || endIndex == -1)\n        return \"\";\n    \n    return text.substring(startIndex + start.length(), endIndex);\n}\n\n// Usage:\nSystem.out.println(extractBetweenDelimiters(\"hello, world!\", \",\", \"!\")); // \" world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Find Longest Word",
-                "description": "Returns the longest word in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "length",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "public static String findLongestWord(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    String longestWord = words[0];\n    \n    for (String word : words) {\n        if (word.length() <= longestWord.length())\n            continue;\n            \n        longestWord = word;\n    }\n\n    return longestWord;\n}\n\n// Usage:\nSystem.out.println(findLongestWord(\"hello world123\")); // \"world123\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Find Unique Characters",
-                "description": "Returns a set of unique characters from a string, with options to include spaces and control case sensitivity",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "unique",
-                    "characters",
-                    "case-sensitive"
-                ],
-                "contributors": [],
-                "code": "public static Set<Character> findUniqueCharacters(String text, boolean countSpaces, boolean caseSensitive) {\n    Set<Character> uniqueCharacters = new TreeSet<>();\n    \n    for (char character : text.toCharArray()) {\n        if (character == ' ' && !countSpaces)\n            continue;\n        if (!caseSensitive)\n            character = Character.toLowerCase(character);\n        uniqueCharacters.add(character);\n    }\n    \n    return uniqueCharacters;\n}\n\n// Usage:\nSystem.out.println(findUniqueCharacters(\"hello world\", false, true)); // Output: [d, e, h, l, o, r, w]\n",
-                "extension": "java"
-            },
-            {
-                "title": "Mask Text",
-                "description": "Masks portions of a string, leaving specific parts at the beginning and end visible while replacing the rest with a specified character",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "mask",
-                    "hide"
-                ],
-                "contributors": [],
-                "code": "public static String partialMask(String text, int maskLengthStart, int maskLengthEnd, char mask) \n    if (text == null)\n        return null;\n    \n    StringBuilder maskedText = new StringBuilder();\n    maskedText.append(text, 0, maskLengthStart);\n    \n    for (int currentChar = maskLengthStart; currentChar < text.length(); currentChar++) {\n        maskedText.append(mask);\n    }\n    maskedText.append(text, text.length() - maskLengthEnd, text.length());\n    return maskedText.toString();\n}\n\n// Usage:\nSystem.out.println(partialMask(\"1234567890\", 4, 2, '*')); // \"1234****90\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Normalize Whitespace",
-                "description": "Replaces consecutive whitespaces with a single space",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "whitespace",
-                    "normalize"
-                ],
-                "contributors": [],
-                "code": "public static String normalizeWhitespace(String text) {\n    return text.replaceAll(\" {2,}\", \" \");\n}\n\n// Usage:\nSystem.out.println(normalizeWhitespace(\"hello   world\")); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Password Generator",
-                "description": "Generates a random string with specified length and character set, including options for letters, numbers, and special characters ",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "password",
-                    "generator",
-                    "security",
-                    "random",
-                    "token"
-                ],
-                "contributors": [],
-                "code": "public static String randomString(int length, boolean useLetters, boolean useNumbers, boolean useSpecialCharacters) {\n    String characters = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n    String numbers = \"0123456789\";\n    String specialCharacters = \"!@#$%^&*()_+-=[]{}|;:,.<>?\";\n    \n    String allowedCharacters = \"\";\n    \n    if (useLetters)\n        allowedCharacters += characters;\n\n    if (useNumbers)\n        allowedCharacters += numbers;\n\n    if (useSpecialCharacters)\n        allowedCharacters += specialCharacters;\n\n    SecureRandom random = new SecureRandom();\n    StringBuilder result = new StringBuilder(length);\n\n    for (int i = 0; i < length; i++) {\n        int index = random.nextInt(allowedCharacters.length());\n        result.append(allowedCharacters.charAt(index));\n    }\n\n    return result.toString();\n}\n\n// Usage:\nSystem.out.println(randomString(10, true, true, false)); // Random string containing letters, numbers but no special characters with 10 characters\n",
-                "extension": "java"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes punctuation (, . !) from a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "clean",
-                    "normalization"
-                ],
-                "contributors": [],
-                "code": "public static String removePunctuation(String text) {\n    return text.replaceAll(\"[,!.?;:]\", \"\");\n}\n\n// Usage:\nSystem.out.println(removePunctuation(\"hello, world!\")); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Remove Special Characters",
-                "description": "Removes any character which is not alphabetic (A-Z, a-z) or numeric (0-9)",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "special-characters",
-                    "clean",
-                    "normalization"
-                ],
-                "contributors": [],
-                "code": "public static String removeSpecialCharacters(String text) {\n    return text.replaceAll(\"[^a-zA-Z0-9]\", \"\");\n}\n\n// Usage:\nSystem.out.println(removeSpecialCharacters(\"hello, world!#%\")); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Reverse Word Contents",
-                "description": "Reverses the characters of each word in a string while preserving word order",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "reverse",
-                    "words",
-                    "transformation",
-                    "order"
-                ],
-                "contributors": [],
-                "code": "public static String reverseWords(String text) {\n    String[] words = text.split(\"\\\\s+\"); \n    StringBuilder reversedText = new StringBuilder();\n\n    for (String word : words) {\n        StringBuilder reversedWord = new StringBuilder(word).reverse();\n        reversedText.append(reversedWord).append(\" \");\n    }\n\n    return reversedText.toString().trim();\n}\n\n// Usage:\nSystem.out.println(reverseWordContents(\"hello world\")); // \"olleh dlrow\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Reverse Word Order",
-                "description": "Reverses the order of words in a sentence while preserving the content of each word",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "reverse",
-                    "words",
-                    "transformation",
-                    "sentence"
-                ],
-                "contributors": [],
-                "code": "public static String reverseWords(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    StringBuilder reversedSentence = new StringBuilder();\n\n    for (int currentWord = words.length - 1; currentWord >= 0; currentWord--) {\n        reversedSentence.append(words[currentWord]).append(\" \");\n    }\n\n    return reversedSentence.toString().trim();\n}\n\n// Usage:\nSystem.out.println(reverseWords(\"hello world\")); // Output: world hello\n",
-                "extension": "java"
-            },
-            {
-                "title": "Slugify String",
-                "description": "Converts a string into a URL-friendly slug format",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "slug",
-                    "slugify"
-                ],
-                "contributors": [],
-                "code": "public static String slugify(String text, String separator) {\n    if (text == null)\n        return \"\";\n\n    // used to decompose accented characters to their base characters (e.g. \"é\" to \"e\")\n    String normalizedString = Normalizer.normalize(text, Normalizer.Form.NFD);\n    normalizedString = normalizedString.replaceAll(\"[\\\\p{InCombiningDiacriticalMarks}]\", \"\");\n\n    String slug = normalizedString.trim()\n            .toLowerCase()\n            .replaceAll(\"\\\\s+\", separator)\n            .replaceAll(\"[^a-z0-9\\\\-_\" + separator + \"]\", \"\")\n            .replaceAll(\"_\", separator)\n            .replaceAll(\"-\", separator)\n            .replaceAll(separator + \"+\", separator)\n            .replaceAll(separator + \"$\", \"\");\n\n    return slug;\n}\n\n// Usage:\nSystem.out.println(slugify(\"Hello World-#123-é\", \"-\")); // \"hello-world-123-e\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "snake_case to camelCase",
-                "description": "Converts a snake_case string into camelCase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "camel-case",
-                    "snake-case"
-                ],
-                "contributors": [],
-                "code": "import java.util.regex.Pattern;\n\npublic static String snakeToCamel(String snakeCase) {\n    return Pattern.compile(\"(_)([a-z])\")\n        .matcher(snakeCase)\n        .replaceAll(match -> match.group(2).toUpperCase());\n}\n\n// Usage:\nSystem.out.println(snakeToCamel(\"hello_world\")); // \"helloWorld\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Spaces To Tabs",
-                "description": "Converts spaces into tabs",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "tab",
-                    "space",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String convertSpacesToTab(String text, int spacesPerTab) {\n    return text.replaceAll(\" \".repeat(spacesPerTab), \"\\t\");\n}\n\n// Usage:\nSystem.out.println(convertSpacesToTab(\"hello    world\", 4)); // Output: hello\\tworld\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To Ascii",
-                "description": "Converts a string into ascii numbers",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "ascii",
-                    "encoding",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "import java.util.ArrayList;\nimport java.util.List;\n\npublic static List<Integer> stringToAscii(String text) {\n    List<Integer> asciiCodes = new ArrayList<>();\n\n    for (char character : text.toCharArray()) {\n        asciiCodes.add((int) character);\n    }\n\n    return asciiCodes;\n}\n\n// Usage:\nSystem.out.println(stringToAscii(\"hello world\")); // [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To camelCase",
-                "description": "Converts a string into camelCase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "camel-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToCamelCase(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    StringBuilder camelCase = new StringBuilder(\n        words[0].substring(0, 1).toLowerCase() + words[0].substring(1)\n    );\n\n    for (int i = 1; i < words.length; i++) {\n        camelCase.append(words[i].substring(0, 1).toUpperCase());\n        camelCase.append(words[i].substring(1));\n    }\n\n    return camelCase.toString();\n}\n\n// Usage:\nSystem.out.println(stringToCamelCase(\"Hello world test\")); // \"helloWorldTest\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To param-case",
-                "description": "Converts a string into param-case",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "param-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToParamCase(String text) {\n    return text.toLowerCase().replaceAll(\"\\\\s+\", \"-\");\n}\n\n// Usage:\nSystem.out.println(stringToParamCase(\"Hello World 123\")); // \"hello-world-123\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To PascalCase",
-                "description": "Converts a string into PascalCase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "pascal-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToPascalCase(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    StringBuilder pascalCase = new StringBuilder();\n\n    for (String word : words) {\n        pascalCase.append(word.substring(0, 1).toUpperCase());\n        pascalCase.append(word.substring(1).toLowerCase());\n    }\n\n    return pascalCase.toString();\n}\n\n// Usage:\nSystem.out.println(stringToPascalCase(\"hello world\")); // \"HelloWorld\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To snake_case",
-                "description": "Converts a string into snake_case",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "snake-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToSnakeCase(String text) {\n    return text.toLowerCase().replaceAll(\"\\\\s+\", \"_\");\n}\n\n// Usage:\nSystem.out.println(stringToSnakeCase(\"Hello World 123\")); // \"hello_world_123\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To Titlecase",
-                "description": "Converts a string into Title Case, where the first letter of each word is capitalized and the remaining letters are lowercase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "title-case"
-                ],
-                "contributors": [],
-                "code": "public static String convertToTitleCase(String text) {\n    String[] words = text.split(\"(?<=\\\\S)(?=\\\\s+)|(?<=\\\\s+)(?=\\\\S)\"); // this is needed to preserve spaces (text.split(\" \") would remove multiple spaces)\n    StringBuilder capitalizedText = new StringBuilder();\n\n    for (String word : words) {\n        if (word.trim().isEmpty()) {\n            capitalizedText.append(word);\n            continue;\n        }\n\n        capitalizedText.append(Character.toUpperCase(word.charAt(0)))\n                .append(word.substring(1).toLowerCase());\n    }\n\n    return capitalizedText.toString().trim();\n}\n\n// Usage:\nSystem.out.println(convertToTitleCase(\"heLlo wOrld\")); // \"Hello World\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To Unicode",
-                "description": "Converts characters of a string into their unicode representation",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "unicode",
-                    "encoding",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String stringToUnicode(String text) {\n    StringBuilder unicodeText = new StringBuilder();\n\n    for (char character : text.toCharArray()) {\n        unicodeText.append(String.format(\"\\\\u%04x\", (int) character));\n    }\n\n    return unicodeText.toString();\n}\n\n// Usage:\nSystem.out.println(stringToUnicode(\"hello world\")); // \\u0068\\u0065\\u006C\\u006C\\u006F\\u0020\\u0077\\u006F\\u0072\\u006C\\u0064\n",
-                "extension": "java"
-            },
-            {
-                "title": "Tabs To Spaces",
-                "description": "Converts tabs into spaces",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "tab",
-                    "space",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String convertTabToSpace(String text, int spacesPerTab) {\n    return text.replaceAll(\"\\t\", \" \".repeat(spacesPerTab));\n}\n\n// Usage:\nSystem.out.println(convertTabToSpace(\"hello\\tworld\", 2)); // \"hello  world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Truncates a string after a specified length (can also be used for hiding information)",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "truncate",
-                    "mask",
-                    "hide"
-                ],
-                "contributors": [],
-                "code": "public static String truncate(String text, int length, String suffix) {\n    if (text.length() <= length)\n        return text;\n    \n    return text.substring(0, length).trim() + (suffix != null ? suffix : \"\");\n}\n\n// Usage:\nSystem.out.println(truncate(\"hello world\", 5, \"...\")); // \"hello...\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Unicode To String",
-                "description": "Converts a unicode String into its normal representation",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "unicode",
-                    "encoding",
-                    "decoding",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String unicodeToString(String unicode) {\n    StringBuilder string = new StringBuilder();\n    String[] hex = unicode.split(\"\\\\\\\\u\");\n\n    for (int symbol = 1; symbol < hex.length; symbol++) {\n        int data = Integer.parseInt(hex[symbol], 16);\n        string.append((char) data);\n    }\n\n    return string.toString();\n}\n\n// Usage:\nSystem.out.println(unicodeToString(\"\\\\u0068\\\\u0065\\\\u006c\\\\u006c\\\\u006f\\\\u0020\\\\u0077\\\\u006f\\\\u0072\\\\u006c\\\\u0064\")); // \"hello world\"\n",
-                "extension": "java"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/javascript--react.json b/backend/data/consolidated/javascript--react.json
deleted file mode 100644
index 5e1df433..00000000
--- a/backend/data/consolidated/javascript--react.json
+++ /dev/null
@@ -1,19 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Show Hello World on the page.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst App = () => {\n    return (\n        <div>\n            <h1>Hello, World!</h1>\n        </div>\n    );\n};\n\nReactDOM.render(<App />, document.getElementById('root'));\n",
-                "extension": "tsx"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/javascript.json b/backend/data/consolidated/javascript.json
deleted file mode 100644
index 95f42b30..00000000
--- a/backend/data/consolidated/javascript.json
+++ /dev/null
@@ -1,1120 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Compare Arrays",
-                "description": "Deeply compares two arrays to check if they are equal to each other (supports nested arrays and objects).",
-                "author": "KCSquid",
-                "tags": [
-                    "array",
-                    "object",
-                    "compare",
-                    "equal"
-                ],
-                "contributors": [],
-                "code": "const compareArrays = (a, b) => {\n  if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n  return a.every((v, i) => \n    Array.isArray(v) && Array.isArray(b[i]) ? compareArrays(v, b[i]) :\n    typeof v === \"object\" && typeof b[i] === \"object\" ? compareObjects(v, b[i]) :\n    v === b[i]\n  );\n};\n\nconst compareObjects = (a, b) => {\n  if (typeof a !== \"object\" || typeof b !== \"object\" || Object.keys(a).length !== Object.keys(b).length) return false;\n  return Object.keys(a).every(k => \n    Array.isArray(a[k]) && Array.isArray(b[k]) ? compareArrays(a[k], b[k]) :\n    typeof a[k] === \"object\" && typeof b[k] === \"object\" ? compareObjects(a[k], b[k]) :\n    a[k] === b[k]\n  );\n};\n\n// Usage:\ncompareArrays([1, 2, 3], [1, 2, 3]); // Returns: true\ncompareArrays([1, 2, 3], [3, 2, 1]); // Returns: false\ncompareArrays([{a:1}], [{a:1}]);     // Returns: true\ncompareArrays([{a:1}], null);        // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Partition Array",
-                "description": "Splits an array into two arrays based on a callback function.",
-                "author": "Swaraj-Singh-30",
-                "tags": [
-                    "array",
-                    "partition",
-                    "reduce"
-                ],
-                "contributors": [],
-                "code": "const partition = (arr, callback) =>\n  arr.reduce(\n    ([pass, fail], elem) => (callback(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]]),\n    [[], []]\n  );\n\n// Usage:\nconst numbers = [1, 2, 3, 4, 5, 6];\nconst isEven = (n) => n % 2 === 0;\npartition(numbers, isEven); // Returns: [[2, 4, 6], [1, 3, 5]]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Duplicates",
-                "description": "Removes duplicate values from an array.",
-                "author": "technoph1le",
-                "tags": [
-                    "array",
-                    "deduplicate"
-                ],
-                "contributors": [],
-                "code": "const removeDuplicates = (arr) => [...new Set(arr)];\n\n// Usage:\nconst numbers = [1, 2, 2, 3, 4, 4, 5];\nremoveDuplicates(numbers); // Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Falsy Values",
-                "description": "Removes falsy values from an array.",
-                "author": "mubasshir",
-                "tags": [
-                    "array",
-                    "falsy",
-                    "filter"
-                ],
-                "contributors": [],
-                "code": "const removeFalsy = (arr) => arr.filter(Boolean);\n\n// Usage:\nconst array = [0, 1, false, 2, \"\", 3, null];\nremoveFalsy(array); // Returns: [1, 2, 3]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Shuffle Array",
-                "description": "Shuffles an Array.",
-                "author": "loxt-nixo",
-                "tags": [
-                    "array",
-                    "shuffle"
-                ],
-                "contributors": [],
-                "code": "function shuffleArray(array) {\n    for (let i = array.length - 1; i >= 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        [array[i], array[j]] = [array[j], array[i]];\n    }\n}\n\n// Usage:\nconst array = [1, 2, 3, 4, 5];\nshuffleArray(array); // Shuffles `array` in place\n",
-                "extension": "js"
-            },
-            {
-                "title": "Zip Arrays",
-                "description": "Combines two arrays by pairing corresponding elements from each array.",
-                "author": "Swaraj-Singh-30",
-                "tags": [
-                    "array",
-                    "map"
-                ],
-                "contributors": [],
-                "code": "const zip = (arr1, arr2) => arr1.map((value, index) => [value, arr2[index]]);\n\n// Usage:\nconst arr1 = ['a', 'b', 'c'];\nconst arr2 = [1, 2, 3];\nconsole.log(zip(arr1, arr2)); // Output: [['a', 1], ['b', 2], ['c', 3]]\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "console.log(\"Hello, World!\"); // Prints Hello, World! to the console\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Color Manipulation",
-        "snippets": [
-            {
-                "title": "Hex to RGB Color",
-                "description": "Converts hexadecimal color code to RGB color values.",
-                "author": "pvictordev",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function hexToRgb(hex) {\n  let sanitizedHex = hex.startsWith(\"#\") ? hex.slice(1) : hex;\n\n  if (sanitizedHex.length === 3) {\n    sanitizedHex = [...sanitizedHex].map((char) => char + char).join(\"\");\n  }\n\n  const bigint = parseInt(sanitizedHex, 16);\n\n  return {\n    r: (bigint >> 16) & 0xff, \n    g: (bigint >> 8) & 0xff,  \n    b: bigint & 0xff,       \n  };\n}\n\n// Usage:\nconsole.log(hexToRgb(\"#ff5733\")); // { r: 255, g: 87, b: 51 }\nconsole.log(hexToRgb(\"#ffff\")); // { r: 0, g: 255, b: 255 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "HSL to RGB Color",
-                "description": "Converts HSL color values to RGB color values.",
-                "author": "pvictordev",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function hslToRgb(h, s, l) {\n  s /= 100;\n  l /= 100;\n  const c = (1 - Math.abs(2 * l - 1)) * s;\n  const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n  const m = l - c / 2;\n\n  const [r, g, b] = \n    h < 60  ? [c, x, 0] :\n    h < 120 ? [x, c, 0] :\n    h < 180 ? [0, c, x] :\n    h < 240 ? [0, x, c] :\n    h < 300 ? [x, 0, c] :\n              [c, 0, x];\n\n  return {\n    r: Math.round((r + m) * 255),\n    g: Math.round((g + m) * 255),\n    b: Math.round((b + m) * 255),\n  };\n}\n\n// Usage:\nconsole.log(hslToRgb(14, 100, 60)); // { r: 255, g: 87, b: 51 }\nconsole.log(hslToRgb(0, 0, 100)); // { r: 255, g: 255, b: 255 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "RGB to Hex Color",
-                "description": "Converts RGB color values to hexadecimal color code.",
-                "author": "jjcantu",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function rgbToHex(r, g, b) {\n  const toHex = (n) => {\n    const hex = n.toString(16);\n    return hex.length === 1 ? \"0\" + hex : hex;\n  };\n\n  return \"#\" + toHex(r) + toHex(g) + toHex(b);\n}\n\n// Usage:\nconsole.log(rgbToHex(255, 128, 0)); // Output: \"#ff8000\"\nconsole.log(rgbToHex(0, 255, 0)); // Output: \"#00ff00\"\n",
-                "extension": "js"
-            },
-            {
-                "title": "RGB to HSL Color",
-                "description": "Converts RGB color values to HSL color values.",
-                "author": "pvictordev",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function rgbToHsl(r, g, b) {\n  [r, g, b] = [r, g, b].map((v) => v / 255);\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const delta = max - min;\n\n  const l = (max + min) / 2;\n\n  if (delta === 0) return { h: 0, s: 0, l: Math.round(l * 100) };\n\n  const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n  const h = \n    max === r ? ((g - b) / delta + (g < b ? 6 : 0)) :\n    max === g ? (b - r) / delta + 2 :\n                (r - g) / delta + 4;\n\n  return {\n    h: Math.round(h * 60), \n    s: Math.round(s * 100),\n    l: Math.round(l * 100), \n  };\n}\n\n// Usage:\nconsole.log(rgbToHsl(255, 87, 51)); // { h: 14, s: 100, l: 60 }\nconsole.log(rgbToHsl(255, 255, 255)); // { h: 0, s: 0, l: 100 }\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Date And Time",
-        "snippets": [
-            {
-                "title": "Check Leap Year",
-                "description": "Determines if a given year is a leap year.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "leap-year"
-                ],
-                "contributors": [],
-                "code": "const isLeapYear = (year) => (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\n// Usage:\nisLeapYear(2024); // Returns: true\nisLeapYear(2023); // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert to Unix Timestamp",
-                "description": "Converts a date to a Unix timestamp in seconds.",
-                "author": "Yugveer06",
-                "tags": [
-                    "date",
-                    "unix",
-                    "timestamp"
-                ],
-                "contributors": [],
-                "code": "function convertToUnixSeconds(input) {\n  if (typeof input === 'string') {\n    if (!input.trim()) {\n      throw new Error('Date string cannot be empty or whitespace');\n    }\n  } else if (!input) {\n    throw new Error('Input is required');\n  }\n\n  let date;\n\n  if (typeof input === 'string') {\n    date = new Date(input);\n  } else if (input instanceof Date) {\n    date = input;\n  } else {\n    throw new Error('Input must be a valid date string or Date object');\n  }\n\n  if (isNaN(date.getTime())) {\n    throw new Error('Invalid date provided');\n  }\n\n  return Math.floor(date.getTime() / 1000);\n}\n\n// Usage:\nconvertToUnixSeconds('2025-01-01T12:00:00Z'); // Returns: 1735732800\nconvertToUnixSeconds(new Date('2025-01-01T12:00:00Z')); // Returns: 1735732800\nconvertToUnixSeconds(new Date()); // Returns: Current Unix timestamp in seconds\n",
-                "extension": "js"
-            },
-            {
-                "title": "Format Date",
-                "description": "Formats a date in 'YYYY-MM-DD' format.",
-                "author": "technoph1le",
-                "tags": [
-                    "date",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const formatDate = (date) => date.toISOString().split('T')[0];\n\n// Usage:\nformatDate(new Date(2024, 11, 10)); // Returns: '2024-12-10'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Day of the Year",
-                "description": "Calculates the day of the year (1-365 or 1-366 for leap years) for a given date.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "day-of-year"
-                ],
-                "contributors": [],
-                "code": "const getDayOfYear = (date) => {\n  const startOfYear = new Date(date.getFullYear(), 0, 0);\n  const diff = date - startOfYear + (startOfYear.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000;\n  return Math.floor(diff / (1000 * 60 * 60 * 24));\n};\n\n// Usage:\ngetDayOfYear(new Date('2024-12-31')) // Returns: 366 (Leap year)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Days in Month",
-                "description": "Calculates the number of days in a specific month of a given year.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "days-in-month"
-                ],
-                "contributors": [],
-                "code": "const getDaysInMonth = (year, month) => new Date(year, month + 1, 0).getDate();\n\n// Usage:\ngetDaysInMonth(2024, 1); // Returns: 29 (February in a leap year)\ngetDaysInMonth(2023, 1); // Returns: 28\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Time Difference",
-                "description": "Calculates the time difference in days between two dates.",
-                "author": "technoph1le",
-                "tags": [
-                    "date",
-                    "time-difference"
-                ],
-                "contributors": [],
-                "code": "const getTimeDifference = (date1, date2) => {\n  const diff = Math.abs(date2 - date1);\n  return Math.ceil(diff / (1000 * 60 * 60 * 24));\n};\n\n// Usage:\nconst date1 = new Date('2024-01-01');\nconst date2 = new Date('2024-12-31');\ngetTimeDifference(date1, date2); // Returns: 365\n",
-                "extension": "js"
-            },
-            {
-                "title": "Relative Time Formatter",
-                "description": "Displays how long ago a date occurred or how far in the future a date is.",
-                "author": "Yugveer06",
-                "tags": [
-                    "date",
-                    "time",
-                    "relative",
-                    "future",
-                    "past"
-                ],
-                "contributors": [],
-                "code": "const getRelativeTime = (date) => {\n  const now = Date.now();\n  const diff = date.getTime() - now;\n  const seconds = Math.abs(Math.floor(diff / 1000));\n  const minutes = Math.abs(Math.floor(seconds / 60));\n  const hours = Math.abs(Math.floor(minutes / 60));\n  const days = Math.abs(Math.floor(hours / 24));\n  const years = Math.abs(Math.floor(days / 365));\n\n  if (Math.abs(diff) < 1000) return 'just now';\n\n  const isFuture = diff > 0;\n\n  if (years > 0) return `${isFuture ? 'in ' : ''}${years} ${years === 1 ? 'year' : 'years'}${isFuture ? '' : ' ago'}`;\n  if (days > 0) return `${isFuture ? 'in ' : ''}${days} ${days === 1 ? 'day' : 'days'}${isFuture ? '' : ' ago'}`;\n  if (hours > 0) return `${isFuture ? 'in ' : ''}${hours} ${hours === 1 ? 'hour' : 'hours'}${isFuture ? '' : ' ago'}`;\n  if (minutes > 0) return `${isFuture ? 'in ' : ''}${minutes} ${minutes === 1 ? 'minute' : 'minutes'}${isFuture ? '' : ' ago'}`;\n\n  return `${isFuture ? 'in ' : ''}${seconds} ${seconds === 1 ? 'second' : 'seconds'}${isFuture ? '' : ' ago'}`;\n}\n\n// Usage:\nconst pastDate = new Date('2021-12-29 13:00:00');\nconst futureDate = new Date('2099-12-29 13:00:00');\ngetRelativeTime(pastDate); // x years ago\ngetRelativeTime(new Date()); // just now\ngetRelativeTime(futureDate); // in x years\n",
-                "extension": "js"
-            },
-            {
-                "title": "Start of the Day",
-                "description": "Returns the start of the day (midnight) for a given date.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "start-of-day"
-                ],
-                "contributors": [],
-                "code": "const startOfDay = (date) => new Date(date.setHours(0, 0, 0, 0));\n\n// Usage:\nconst today = new Date();\nstartOfDay(today); // Returns: Date object for midnight\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Dom Manipulation",
-        "snippets": [
-            {
-                "title": "Change Element Style",
-                "description": "Changes the inline style of an element.",
-                "author": "axorax",
-                "tags": [
-                    "dom",
-                    "style"
-                ],
-                "contributors": [],
-                "code": "const changeElementStyle = (element, styleObj) => {\n  Object.entries(styleObj).forEach(([property, value]) => {\n    element.style[property] = value;\n  });\n};\n\n// Usage:\nconst element = document.querySelector('.my-element');\nchangeElementStyle(element, { color: 'red', backgroundColor: 'yellow' });\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Element",
-                "description": "Removes a specified element from the DOM.",
-                "author": "axorax",
-                "tags": [
-                    "dom",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "const removeElement = (element) => {\n  if (element && element.parentNode) {\n    element.parentNode.removeChild(element);\n  }\n};\n\n// Usage:\nconst element = document.querySelector('.my-element');\nremoveElement(element);\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Function Utilities",
-        "snippets": [
-            {
-                "title": "Compose Functions",
-                "description": "Composes multiple functions into a single function, where the output of one function becomes the input of the next.",
-                "author": "axorax",
-                "tags": [
-                    "function",
-                    "compose"
-                ],
-                "contributors": [],
-                "code": "const compose = (...funcs) => (initialValue) => {\n  return funcs.reduce((acc, func) => func(acc), initialValue);\n};\n\n// Usage:\nconst add2 = (x) => x + 2;\nconst multiply3 = (x) => x * 3;\nconst composed = compose(multiply3, add2);\ncomposed(5); // Returns: 17 ((5 * 3) + 2)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Curry Function",
-                "description": "Transforms a function into its curried form.",
-                "author": "axorax",
-                "tags": [
-                    "curry",
-                    "function"
-                ],
-                "contributors": [],
-                "code": "const curry = (func) => {\n  const curried = (...args) => {\n    if (args.length >= func.length) {\n      return func(...args);\n    }\n    return (...nextArgs) => curried(...args, ...nextArgs);\n  };\n  return curried;\n};\n\n// Usage:\nconst add = (a, b, c) => a + b + c;\nconst curriedAdd = curry(add);\ncurriedAdd(1)(2)(3); // Returns: 6\ncurriedAdd(1, 2)(3); // Returns: 6\n",
-                "extension": "js"
-            },
-            {
-                "title": "Debounce Function",
-                "description": "Delays a function execution until after a specified time.",
-                "author": "technoph1le",
-                "tags": [
-                    "debounce",
-                    "performance"
-                ],
-                "contributors": [],
-                "code": "const debounce = (func, delay) => {\n  let timeout;\n\n  return (...args) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => func(...args), delay);\n  };\n};\n\n// Usage:\nwindow.addEventListener(\n  'resize',\n  debounce(() => console.log('Resized!'), 500), // Will only output after resizing has stopped for 500ms\n);\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Contrast Color",
-                "description": "Returns either black or white text color based on the brightness of the provided hex color.",
-                "author": "yaya12085",
-                "tags": [
-                    "color",
-                    "hex",
-                    "contrast",
-                    "brightness"
-                ],
-                "contributors": [],
-                "code": "const getContrastColor = (hexColor) => {\n  // Expand short hex color to full format\n  if (hexColor.length === 4) {\n    hexColor = `#${hexColor[1]}${hexColor[1]}${hexColor[2]}${hexColor[2]}${hexColor[3]}${hexColor[3]}`;\n  }\n  const r = parseInt(hexColor.slice(1, 3), 16);\n  const g = parseInt(hexColor.slice(3, 5), 16);\n  const b = parseInt(hexColor.slice(5, 7), 16);\n  const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n  return brightness >= 128 ? \"#000000\" : \"#FFFFFF\";\n};\n\n// Usage:\ngetContrastColor('#fff'); // Returns: #000000 (black)\ngetContrastColor('#123456'); // Returns: #FFFFFF (white)\ngetContrastColor('#ff6347'); // Returns: #000000 (black)\ngetContrastColor('#f4f'); // Returns: #000000 (black)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Memoize Function",
-                "description": "Caches the result of a function based on its arguments to improve performance.",
-                "author": "axorax",
-                "tags": [
-                    "memoization",
-                    "optimization"
-                ],
-                "contributors": [],
-                "code": "const memoize = (func) => {\n  const cache = new Map();\n  return (...args) => {\n    const key = JSON.stringify(args);\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    const result = func(...args);\n    cache.set(key, result);\n    return result;\n  };\n};\n\n// Usage:\nconst factorial = memoize((n) => (n <= 1 ? 1 : n * factorial(n - 1)));\nfactorial(5); // Returns: 120\nfactorial(5); // Returns: 120 (retrieved from cache)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Once Function",
-                "description": "Ensures a function is only called once.",
-                "author": "axorax",
-                "tags": [
-                    "function",
-                    "once"
-                ],
-                "contributors": [],
-                "code": "const once = (func) => {\n  let called = false;\n  return (...args) => {\n    if (!called) {\n      called = true;\n      return func(...args);\n    }\n  };\n};\n\n// Usage:\nconst initialize = once(() => console.log('Initialized!'));\ninitialize(); // Output: Initialized!\ninitialize(); // No output\n",
-                "extension": "js"
-            },
-            {
-                "title": "Rate Limit Function",
-                "description": "Limits how often a function can be executed within a given time window.",
-                "author": "axorax",
-                "tags": [
-                    "function",
-                    "rate-limiting"
-                ],
-                "contributors": [],
-                "code": "const rateLimit = (func, limit, timeWindow) => {\n  let queue = [];\n  setInterval(() => {\n    if (queue.length) {\n      const next = queue.shift();\n      func(...next.args);\n    }\n  }, timeWindow);\n  return (...args) => {\n    if (queue.length < limit) {\n      queue.push({ args });\n    }\n  };\n};\n\n// Usage:\nconst fetchData = () => console.log('Fetching data...');\nconst rateLimitedFetch = rateLimit(fetchData, 2, 1000);\nsetInterval(() => rateLimitedFetch(), 200); // Limits fetchData calls to twice a seconds\n",
-                "extension": "js"
-            },
-            {
-                "title": "Repeat Function Invocation",
-                "description": "Invokes a function a specified number of times.",
-                "author": "technoph1le",
-                "tags": [
-                    "function",
-                    "repeat"
-                ],
-                "contributors": [],
-                "code": "const times = (func, n) => {\n  Array.from(Array(n)).forEach(() => {\n    func();\n  });\n};\n\n// Usage:\nconst randomFunction = () => console.log('Function called!');\ntimes(randomFunction, 3); // Logs 'Function called!' three times\n",
-                "extension": "js"
-            },
-            {
-                "title": "Sleep Function",
-                "description": "Waits for a specified amount of milliseconds before resolving.",
-                "author": "0xHouss",
-                "tags": [
-                    "javascript",
-                    "sleep",
-                    "delay",
-                    "utility",
-                    "promises"
-                ],
-                "contributors": [],
-                "code": "const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\n// Usage:\nconsole.log('Hello');\nawait sleep(2000); // Waits for 2 seconds\nconsole.log('World!');\n",
-                "extension": "js"
-            },
-            {
-                "title": "Throttle Function",
-                "description": "Ensures a function is only called at most once in a specified time interval. Useful for optimizing events like scrolling or resizing.",
-                "author": "WizardOfDigits",
-                "tags": [
-                    "throttle",
-                    "performance",
-                    "optimization"
-                ],
-                "contributors": [],
-                "code": "const throttle = (func, limit) => {\n  let inThrottle;\n  return (...args) => {\n    if (!inThrottle) {\n      func(...args);\n      inThrottle = true;\n      setTimeout(() => (inThrottle = false), limit);\n    }\n  };\n};\n\n// Usage:\n// Ensures the function can only be called once every 1000 milliseconds\nconst logScroll = throttle(() => console.log(\"Scroll event triggered\"), 1000);\n\n// Attach to scroll event\nwindow.addEventListener(\"scroll\", logScroll);\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Local Storage",
-        "snippets": [
-            {
-                "title": "Add Item to localStorage",
-                "description": "Stores a value in localStorage under the given key.",
-                "author": "technoph1le",
-                "tags": [
-                    "localStorage",
-                    "storage"
-                ],
-                "contributors": [],
-                "code": "const addToLocalStorage = (key, value) => {\n  localStorage.setItem(key, JSON.stringify(value));\n};\n\n// Usage:\naddToLocalStorage('user', { name: 'John', age: 30 });\n",
-                "extension": "js"
-            },
-            {
-                "title": "Check if Item Exists in localStorage",
-                "description": "Checks if a specific item exists in localStorage.",
-                "author": "axorax",
-                "tags": [
-                    "localStorage",
-                    "storage"
-                ],
-                "contributors": [],
-                "code": "const isItemInLocalStorage = (key) => {\n  return localStorage.getItem(key) !== null;\n};\n\n// Usage:\nconsole.log(isItemInLocalStorage('user')); // Output: true or false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Retrieve Item from localStorage",
-                "description": "Retrieves a value from localStorage by key and parses it.",
-                "author": "technoph1le",
-                "tags": [
-                    "localStorage",
-                    "storage"
-                ],
-                "contributors": [],
-                "code": "const getFromLocalStorage = (key) => {\n  const item = localStorage.getItem(key);\n  return item ? JSON.parse(item) : null;\n};\n\n// Usage:\ngetFromLocalStorage('user'); // Returns: { name: 'John', age: 30 }\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Mathematical Functions",
-        "snippets": [
-            {
-                "title": "Combinations",
-                "description": "Calculates the number of combinations (denoted as C(n,r) or \"n choose r\"), which determines how many ways you can select r items from n items without considering the order.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function combinations(n, r) {\n    if (n < 0 || r < 0 || n < r) {\n        throw new Error('Invalid input: n and r must be non-negative and n must be greater than or equal to r.');\n    }\n\n    function factorial(x) {\n        if (x === 0 || x === 1) return 1;\n        let result = 1;\n        for (let i = 2; i <= x; i++) {\n            result *= i;\n        }\n        return result;\n    }\n\n    const numerator = factorial(n);\n    const denominator = factorial(r) * factorial(n - r);\n    return numerator / denominator;\n}\n\n// Usage:\ncombinations(24,22); // Returns:    276\ncombinations(5,3);   // Returns:     10\n",
-                "extension": "js"
-            },
-            {
-                "title": "Cross Product",
-                "description": "Computes the cross product of two 3D vectors, which results in a vector perpendicular to both.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "vector-algebra"
-                ],
-                "contributors": [],
-                "code": "function crossProduct(a, b) {\n    if (a.length !== 3 || b.length !== 3) {\n        throw new Error('Vectors must be 3-dimensional');\n    }\n\n    return [\n        a[1] * b[2] - a[2] * b[1],\n        a[2] * b[0] - a[0] * b[2],\n        a[0] * b[1] - a[1] * b[0]\n    ];\n}\n\n// Usage:\ncrossProduct([1, 2, 3], [4, 5, 6]); // Returns: [-3, 6, -3] \n",
-                "extension": "js"
-            },
-            {
-                "title": "Dot Product",
-                "description": "Computes the dot product of two vectors, which is the sum of the products of corresponding elements.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "vector-algebra"
-                ],
-                "contributors": [],
-                "code": "function dotProduct(a, b) {\n    if (a.length !== b.length) {\n        throw new Error('Vectors must be of the same length');\n    }\n\n    return a.reduce((sum, value, index) => sum + value * b[index], 0);\n}\n\n// Usage:\ndotProduct([1, 2, 3], [4, 5, 6]); // Returns: 32\n",
-                "extension": "js"
-            },
-            {
-                "title": "Error function",
-                "description": "Computes the error function (erf(x)) for a given input x, which is a mathematical function used frequently in probability, statistics, and partial differential equations.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math"
-                ],
-                "contributors": [],
-                "code": "function erf(x) {\n    const sign = Math.sign(x);\n    const absX = Math.abs(x);\n    const t = 1 / (1 + 0.3275911 * absX);\n    const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741, a4 = -1.453152027, a5 = 1.061405429;\n    const poly = t * (a1 + t * (a2 + t * (a3 + t * (a4 + t * a5))));\n    return sign * (1 - poly * Math.exp(-absX * absX));\n}\n\n// Usage:\nerf(-1); // Returns:    -0.8427006897475899\nerf(1);  // Returns:     0.8427006897475899\n",
-                "extension": "js"
-            },
-            {
-                "title": "Greatest Common Divisor",
-                "description": "Calculates the largest positive integer that divides each of the integers without leaving a remainder. Useful for calculating aspect ratios.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "division",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function gcd(a, b) {\n    while (b !== 0) {\n        let temp = b;\n        b = a % b;\n        a = temp;\n    }\n    return a;\n}\n\n// Usage:\ngcd(1920, 1080); // Returns:    120\ngcd(1920, 1200); // Returns:    240\ngcd(5,12);       // Returns:      1\n",
-                "extension": "js"
-            },
-            {
-                "title": "Least common multiple",
-                "description": "Computes the least common multiple (LCM) of two numbers 𝑎 and b. The LCM is the smallest positive integer that is divisible by both a and b.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function lcm(a, b) {\n    function gcd(x, y) {\n        while (y !== 0) {\n            const temp = y;\n            y = x % y;\n            x = temp;\n        }\n        return Math.abs(x);\n    }\n    return Math.abs(a * b) / gcd(a, b);\n}\n\n// Usage:\nlcm(12,16); // Returns:    48\nlcm(8,20);  // Returns:    40\nlcm(16,17); // Returns:   272\n",
-                "extension": "js"
-            },
-            {
-                "title": "Linear Mapping",
-                "description": "remaps a value from one range to another",
-                "author": "JasimAlrawie",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function linearMapping(value, minIn, maxIn, minOut, maxOut) {\n    return (value - minIn) * (maxOut - minOut)/(maxIn - minIn) + minOut\n}\n\n// Usage:\nlinearMapping(value, 0, 1, 0, 255)    // remaps the value from (0,1) to (0,255)\nlinearMapping(value, 0, PI*2, 0, 360) // remaps the value from rad to deg\nlinearMapping(value, -1, 1, 1, 8)     // remaps the value from (-1,1) to (1,8)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Matrix Multiplication",
-                "description": "Multiplies two matrices, where the number of columns in the first matrix equals the number of rows in the second.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "matrix-algebra"
-                ],
-                "contributors": [],
-                "code": "function matrixMultiply(A, B) {\n    const rowsA = A.length;\n    const colsA = A[0].length;\n    const rowsB = B.length;\n    const colsB = B[0].length;\n\n    if (colsA !== rowsB) {\n        throw new Error('Number of columns of A must equal the number of rows of B');\n    }\n\n    let result = Array.from({ length: rowsA }, () => Array(colsB).fill(0));\n\n    for (let i = 0; i < rowsA; i++) {\n        for (let j = 0; j < colsB; j++) {\n            for (let k = 0; k < colsA; k++) {\n                result[i][j] += A[i][k] * B[k][j];\n            }\n        }\n    }\n\n    return result;\n}\n\n// Usage:\nmatrixMultiply([[1, 2], [3, 4]], [[5, 6], [7, 8]]); // Returns: [[19, 22], [43, 50]]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Modular Inverse",
-                "description": "Computes the modular multiplicative inverse of a number a under modulo m, which is the integer x such that (a*x) mod m=1.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function modInverse(a, m) {\n    function extendedGCD(a, b) {\n        if (b === 0) {\n            return { gcd: a, x: 1, y: 0 };\n        }\n        const { gcd, x: x1, y: y1 } = extendedGCD(b, a % b);\n        const x = y1;\n        const y = x1 - Math.floor(a / b) * y1;\n        return { gcd, x, y };\n    }\n\n    const { gcd, x } = extendedGCD(a, m);\n\n    if (gcd !== 1) {\n        return null;\n    }\n\n    return (x % m + m) % m;\n}\n\n// Usage:\nmodInverse(3, 26);  // Returns: 9\nmodInverse(10, 17); // Returns: 12\nmodInverse(6, 9);   // Returns: null\n",
-                "extension": "js"
-            },
-            {
-                "title": "Prime Number",
-                "description": "Checks if a number is a prime number or not.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function isPrime(num) {\n    if (num <= 1) return false; // 0 and 1 are not prime numbers\n    if (num <= 3) return true;  // 2 and 3 are prime numbers\n    if (num % 2 === 0 || num % 3 === 0) return false; // Exclude multiples of 2 and 3\n\n    // Check divisors from 5 to √num, skipping multiples of 2 and 3\n    for (let i = 5; i * i <= num; i += 6) {\n        if (num % i === 0 || num % (i + 2) === 0) return false;\n    }\n    return true;\n}\n\n// Usage:\nisPrime(69); // Returns:  false\nisPrime(17); // Returns:  true\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Number Formatting",
-        "snippets": [
-            {
-                "title": "Convert Number to Currency",
-                "description": "Converts a number to a currency format with a specific locale.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "currency"
-                ],
-                "contributors": [],
-                "code": "const convertToCurrency = (num, locale = 'en-US', currency = 'USD') => {\n  return new Intl.NumberFormat(locale, {\n    style: 'currency',\n    currency: currency\n  }).format(num);\n};\n\n// Usage:\nconvertToCurrency(1234567.89); // Returns: '$1,234,567.89'\nconvertToCurrency(987654.32, 'de-DE', 'EUR'); // Returns: '987.654,32 €'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert Number to Roman Numerals",
-                "description": "Converts a number to Roman numeral representation.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "roman"
-                ],
-                "contributors": [],
-                "code": "const numberToRoman = (num) => {\n  const romanNumerals = {\n    1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L',\n    90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'\n  };\n  let result = '';\n  Object.keys(romanNumerals).reverse().forEach(value => {\n    while (num >= value) {\n      result += romanNumerals[value];\n      num -= value;\n    }\n  });\n  return result;\n};\n\n// Usage:\nnumberToRoman(1994); // Returns: 'MCMXCIV'\nnumberToRoman(58); // Returns: 'LVIII'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert to Scientific Notation",
-                "description": "Converts a number to scientific notation.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "scientific"
-                ],
-                "contributors": [],
-                "code": "const toScientificNotation = (num) => {\n  if (isNaN(num)) {\n    throw new Error('Input must be a number');\n  }\n  if (num === 0) {\n    return '0e+0';\n  }\n  const exponent = Math.floor(Math.log10(Math.abs(num)));\n  const mantissa = num / Math.pow(10, exponent);\n  return `${mantissa.toFixed(2)}e${exponent >= 0 ? '+' : ''}${exponent}`;\n};\n\n// Usage:\ntoScientificNotation(12345); // Returns: '1.23e+4'\ntoScientificNotation(0.0005678); // Returns: '5.68e-4'\ntoScientificNotation(1000); // Returns: '1.00e+3'\ntoScientificNotation(0); // Returns: '0e+0'\ntoScientificNotation(-54321); // Returns: '-5.43e+4'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Format File Size",
-                "description": "Converts bytes into human-readable file size format.",
-                "author": "jjcantu",
-                "tags": [
-                    "format",
-                    "size"
-                ],
-                "contributors": [],
-                "code": "function formatFileSize(bytes) {\n  if (bytes === 0) return '0 Bytes';\n  \n  const k = 1024;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  \n  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n// Usage:\nconsole.log(formatFileSize(1234)); // Output: \"1.21 KB\"\nconsole.log(formatFileSize(1234567)); // Output: \"1.18 MB\"\n",
-                "extension": "js"
-            },
-            {
-                "title": "Format Number with Commas",
-                "description": "Formats a number with commas for better readability (e.g., 1000 -> 1,000).",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const formatNumberWithCommas = (num) => {\n  return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n// Usage:\nformatNumberWithCommas(1000); // Returns: '1,000'\nformatNumberWithCommas(1234567); // Returns: '1,234,567'\nformatNumberWithCommas(987654321); // Returns: '987,654,321'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Number Formatter",
-                "description": "Formats a number with suffixes (K, M, B, etc.).",
-                "author": "realvishalrana",
-                "tags": [
-                    "number",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const nFormatter = (num) => {\n  if (!num) return;\n  num = parseFloat(num.toString().replace(/[^0-9.]/g, ''));\n  const suffixes = ['', 'K', 'M', 'B', 'T', 'P', 'E'];\n  let index = 0;\n  while (num >= 1000 && index < suffixes.length - 1) {\n    num /= 1000;\n    index++;\n  }\n  return num.toFixed(2).replace(/\\.0+$|(\\.[0-9]*[1-9])0+$/, '$1') + suffixes[index];\n};\n\n// Usage:\nnFormatter(1234567); // Returns: '1.23M'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Number to Words Converter",
-                "description": "Converts a number to its word representation in English.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "const numberToWords = (num) => {\n  const below20 = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'];\n  const tens = ['', '', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety'];\n  const above1000 = ['Hundred', 'Thousand', 'Million', 'Billion'];\n  if (num < 20) return below20[num];\n  let words = '';\n  for (let i = 0; num > 0; i++) {\n    if (i > 0 && num % 1000 !== 0) words = above1000[i] + ' ' + words;\n    if (num % 100 >= 20) {\n      words = tens[Math.floor(num / 10)] + ' ' + words;\n      num %= 10;\n    }\n    if (num < 20) words = below20[num] + ' ' + words;\n    num = Math.floor(num / 100);\n  }\n  return words.trim();\n};\n\n// Usage:\nnumberToWords(123); // Returns: 'One Hundred Twenty Three'\nnumberToWords(2045); // Returns: 'Two Thousand Forty Five'\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Object Manipulation",
-        "snippets": [
-            {
-                "title": "Check if Object is Empty",
-                "description": "Checks whether an object has no own enumerable properties.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "check",
-                    "empty"
-                ],
-                "contributors": [],
-                "code": "function isEmptyObject(obj) {\n  return Object.keys(obj).length === 0;\n}\n\n// Usage:\nisEmptyObject({}); // Returns: true\nisEmptyObject({ a: 1 }); // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Compare Two Objects Shallowly",
-                "description": "Compares two objects shallowly and returns whether they are equal.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "compare",
-                    "shallow"
-                ],
-                "contributors": [],
-                "code": "function shallowEqual(obj1, obj2) {\n  const keys1 = Object.keys(obj1);\n  const keys2 = Object.keys(obj2);\n  if (keys1.length !== keys2.length) return false;\n  return keys1.every(key => obj1[key] === obj2[key]);\n}\n\n// Usage:\nconst obj1 = { a: 1, b: 2 };\nconst obj2 = { a: 1, b: 2 };\nconst obj3 = { a: 1, b: 3 };\nshallowEqual(obj1, obj2); // Returns: true\nshallowEqual(obj1, obj3); // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert Object to Query String",
-                "description": "Converts an object to a query string for use in URLs.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "query string",
-                    "url"
-                ],
-                "contributors": [],
-                "code": "function toQueryString(obj) {\n  return Object.entries(obj)\n    .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n    .join('&');\n}\n\n// Usage:\nconst params = { search: 'test', page: 1 };\ntoQueryString(params); // Returns: 'search=test&page=1'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Count Properties in Object",
-                "description": "Counts the number of own properties in an object.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "count",
-                    "properties"
-                ],
-                "contributors": [],
-                "code": "function countProperties(obj) {\n  return Object.keys(obj).length;\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\ncountProperties(obj); // Returns: 3\n",
-                "extension": "js"
-            },
-            {
-                "title": "Deep Clone Object",
-                "description": "Creates a deep copy of an object or array without reference.",
-                "author": "jjcantu",
-                "tags": [
-                    "object",
-                    "clone"
-                ],
-                "contributors": [],
-                "code": "function deepClone(obj) {\n  if (obj === null || typeof obj !== 'object') return obj;\n  \n  const clone = Array.isArray(obj) ? [] : {};\n  \n  for (let key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      clone[key] = deepClone(obj[key]);\n    }\n  }\n  \n  return clone;\n}\n\n// Usage:\nconst original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };\nconst cloned = deepClone(original);\nconsole.log(cloned); // Output: 'original' but cloned\n",
-                "extension": "js"
-            },
-            {
-                "title": "Filter Object",
-                "description": "Filter out entries in an object where the value is falsy, including empty strings, empty objects, null, and undefined.",
-                "author": "realvishalrana",
-                "tags": [
-                    "object",
-                    "filter"
-                ],
-                "contributors": [],
-                "code": "export const filterObject = (object = {}) =>\n  Object.fromEntries(\n    Object.entries(object)\n      .filter(([key, value]) => value !== null && value !== undefined && value !== '' && (typeof value !== 'object' || Object.keys(value).length > 0))\n  );\n\n// Usage:\nconst obj1 = { a: 1, b: null, c: undefined, d: 4, e: '', f: {} };\nfilterObject(obj1); // Returns: { a: 1, d: 4 }\n\nconst obj2 = { x: 0, y: false, z: 'Hello', w: [] };\nfilterObject(obj2); // Returns: { z: 'Hello' }\n\nconst obj3 = { name: 'John', age: null, address: { city: 'New York' }, phone: '' };\nfilterObject(obj3); // Returns: { name: 'John', address: { city: 'New York' } }\n\nconst obj4 = { a: 0, b: '', c: false, d: {}, e: 'Valid' };\nfilterObject(obj4); // Returns: { e: 'Valid' }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Flatten Nested Object",
-                "description": "Flattens a nested object into a single-level object with dot notation for keys.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "flatten"
-                ],
-                "contributors": [],
-                "code": "function flattenObject(obj, prefix = '') {\n  return Object.keys(obj).reduce((acc, key) => {\n    const fullPath = prefix ? `${prefix}.${key}` : key;\n    if (typeof obj[key] === 'object' && obj[key] !== null) {\n      Object.assign(acc, flattenObject(obj[key], fullPath));\n    } else {\n      acc[fullPath] = obj[key];\n    }\n    return acc;\n  }, {});\n}\n\n// Usage:\nconst nestedObj = { a: { b: { c: 1 }, d: 2 }, e: 3 };\nflattenObject(nestedObj); // Returns: { 'a.b.c': 1, 'a.d': 2, e: 3 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Freeze Object",
-                "description": "Freezes an object to make it immutable.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "freeze",
-                    "immutable"
-                ],
-                "contributors": [],
-                "code": "function freezeObject(obj) {\n  return Object.freeze(obj);\n}\n\n// Usage:\nconst obj = { a: 1, b: 2 };\nconst frozenObj = freezeObject(obj);\nfrozenObj.a = 42;         // This will fail silently in strict mode.\nfrozenObj.a; // Returns: 1\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Nested Value",
-                "description": "Retrieves the value at a given path in a nested object.",
-                "author": "realvishalrana",
-                "tags": [
-                    "object",
-                    "nested"
-                ],
-                "contributors": [],
-                "code": "const getNestedValue = (obj, path) => {\n  const keys = path.split('.');\n  return keys.reduce((currentObject, key) => {\n    return currentObject && typeof currentObject === 'object' ? currentObject[key] : undefined;\n  }, obj);\n};\n\n// Usage:\nconst obj = { a: { b: { c: 42 } } };\ngetNestedValue(obj, 'a.b.c'); // Returns: 42\n",
-                "extension": "js"
-            },
-            {
-                "title": "Invert Object Keys and Values",
-                "description": "Creates a new object by swapping keys and values of the given object.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "invert"
-                ],
-                "contributors": [],
-                "code": "function invertObject(obj) {\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => [value, key])\n  );\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\ninvertObject(obj); // Returns: { '1': 'a', '2': 'b', '3': 'c' }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Merge Objects Deeply",
-                "description": "Deeply merges two or more objects, including nested properties.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "merge",
-                    "deep"
-                ],
-                "contributors": [],
-                "code": "function deepMerge(...objects) {\n  return objects.reduce((acc, obj) => {\n    Object.keys(obj).forEach(key => {\n      if (typeof obj[key] === 'object' && obj[key] !== null) {\n        acc[key] = deepMerge(acc[key] || {}, obj[key]);\n      } else {\n        acc[key] = obj[key];\n      }\n    });\n    return acc;\n  }, {});\n}\n\n// Usage:\nconst obj1 = { a: 1, b: { c: 2 } };\nconst obj2 = { b: { d: 3 }, e: 4 };\ndeepMerge(obj1, obj2); // Returns: { a: 1, b: { c: 2, d: 3 }, e: 4 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Omit Keys from Object",
-                "description": "Creates a new object with specific keys omitted.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "omit"
-                ],
-                "contributors": [],
-                "code": "function omitKeys(obj, keys) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([key]) => !keys.includes(key))\n  );\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\nomitKeys(obj, ['b', 'c']); // Returns: { a: 1 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Pick Keys from Object",
-                "description": "Creates a new object with only the specified keys.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "pick"
-                ],
-                "contributors": [],
-                "code": "function pickKeys(obj, keys) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([key]) => keys.includes(key))\n  );\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\npickKeys(obj, ['a', 'c']); // Returns: { a: 1, c: 3 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Unique By Key",
-                "description": "Filters an array of objects to only include unique objects by a specified key.",
-                "author": "realvishalrana",
-                "tags": [
-                    "array",
-                    "unique"
-                ],
-                "contributors": [],
-                "code": "const uniqueByKey = (key, arr) =>\n  arr.filter((obj, index, self) => index === self.findIndex((t) => t?.[key] === obj?.[key]));\n\n// Usage:\nconst arr = [\n  { id: 1, name: 'John' },\n  { id: 2, name: 'Jane' },\n  { id: 1, name: 'John' }\n];\nuniqueByKey('id', arr); // Returns: [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize String",
-                "description": "Capitalizes the first letter of a string.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "function capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// Usage:\ncapitalize('hello'); // Returns: 'Hello'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Check if String is a Palindrome",
-                "description": "Checks whether a given string is a palindrome.",
-                "author": "axorax",
-                "tags": [
-                    "check",
-                    "palindrome",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "function isPalindrome(str) {\n  const cleanStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n  return cleanStr === cleanStr.split('').reverse().join('');\n}\n\n// Example usage:\nisPalindrome('A man, a plan, a canal, Panama'); // Returns: true\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Camel Case",
-                "description": "Converts a given string into camelCase.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "camelCase"
-                ],
-                "contributors": [],
-                "code": "function toCamelCase(str) {\n  return str.replace(/\\W+(.)/g, (match, chr) => chr.toUpperCase());\n}\n\n// Usage:\ntoCamelCase('hello world test'); // Returns: 'helloWorldTest'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Param Case",
-                "description": "Converts a given string into param-case.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "paramCase"
-                ],
-                "contributors": [],
-                "code": "function toParamCase(str) {\n  return str.toLowerCase().replace(/\\s+/g, '-');\n}\n\n// Usage:\ntoParamCase('Hello World Test'); // Returns: 'hello-world-test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Pascal Case",
-                "description": "Converts a given string into Pascal Case.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "pascalCase"
-                ],
-                "contributors": [],
-                "code": "function toPascalCase(str) {\n  return str.replace(/\\b\\w/g, (s) => s.toUpperCase()).replace(/\\W+(.)/g, (match, chr) => chr.toUpperCase());\n}\n\n// Usage:\ntoPascalCase('hello world test'); // Returns: 'HelloWorldTest'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Snake Case",
-                "description": "Converts a given string into snake_case.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "case",
-                    "snake_case"
-                ],
-                "contributors": [],
-                "code": "function toSnakeCase(str) {\n  return str.replace(/([a-z])([A-Z])/g, '$1_$2')\n            .replace(/\\s+/g, '_')\n            .toLowerCase();\n}\n\n// Usage:\ntoSnakeCase('Hello World Test'); // Returns: 'hello_world_test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Title Case",
-                "description": "Converts a given string into Title Case.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "titleCase"
-                ],
-                "contributors": [],
-                "code": "function toTitleCase(str) {\n  return str.toLowerCase().replace(/\\b\\w/g, (s) => s.toUpperCase());\n}\n\n// Usage:\ntoTitleCase('hello world test'); // Returns: 'Hello World Test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert Tabs to Spaces",
-                "description": "Converts all tab characters in a string to spaces.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "tabs",
-                    "spaces"
-                ],
-                "contributors": [],
-                "code": "function tabsToSpaces(str, spacesPerTab = 4) {\n  return str.replace(/\\t/g, ' '.repeat(spacesPerTab));\n}\n\n// Usage:\ntabsToSpaces('Hello\\tWorld', 2); // Returns: 'Hello  World'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Count Words in a String",
-                "description": "Counts the number of words in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "manipulation",
-                    "word count",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "function countWords(str) {\n  return str.trim().split(/\\s+/).length;\n}\n\n// Usage:\ncountWords('Hello world! This is a test.'); // Returns: 6\n",
-                "extension": "js"
-            },
-            {
-                "title": "Data with Prefix",
-                "description": "Adds a prefix and postfix to data, with a fallback value.",
-                "author": "realvishalrana",
-                "tags": [
-                    "data",
-                    "prefix",
-                    "postfix",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const dataWithPrefix = (data, fallback = '-', prefix = '', postfix = '') => {\n  return data ? `${prefix}${data}${postfix}` : fallback;\n};\n\n// Usage:\ndataWithPrefix('123', '-', '(', ')'); // Returns: '(123)'\ndataWithPrefix('', '-', '(', ')'); // Returns: '-'\ndataWithPrefix('Hello', 'N/A', 'Mr. ', ''); // Returns: 'Mr. Hello'\ndataWithPrefix(null, 'N/A', 'Mr. ', ''); // Returns: 'N/A'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Extract Initials from Name",
-                "description": "Extracts and returns the initials from a full name.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "initials",
-                    "name"
-                ],
-                "contributors": [],
-                "code": "function getInitials(name) {\n  return name.split(' ').map(part => part.charAt(0).toUpperCase()).join('');\n}\n\n// Usage:\ngetInitials('John Doe'); // Returns: 'JD'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Generate UUID",
-                "description": "Generates a UUID (v4) string.",
-                "author": "jjcantu",
-                "tags": [
-                    "uuid",
-                    "generate",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "function generateUUID() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n    const r = Math.random() * 16 | 0;\n    const v = c === 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n}\n\n// Usage:\nconsole.log(generateUUID()); // Output: \"a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5\"\n",
-                "extension": "js"
-            },
-            {
-                "title": "Mask Sensitive Information",
-                "description": "Masks parts of a sensitive string, like a credit card or email address.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "mask",
-                    "sensitive"
-                ],
-                "contributors": [],
-                "code": "function maskSensitiveInfo(str, visibleCount = 4, maskChar = '*') {\n  return str.slice(0, visibleCount) + maskChar.repeat(Math.max(0, str.length - visibleCount));\n}\n\n// Usage:\nmaskSensitiveInfo('123456789', 4); // Returns: '1234*****'\nmaskSensitiveInfo('example@mail.com', 2, '#'); // Returns: 'ex#############'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Pad String on Both Sides",
-                "description": "Pads a string on both sides with a specified character until it reaches the desired length.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "pad",
-                    "manipulation"
-                ],
-                "contributors": [],
-                "code": "function padString(str, length, char = ' ') {\n  const totalPad = length - str.length;\n  const padStart = Math.floor(totalPad / 2);\n  const padEnd = totalPad - padStart;\n  return char.repeat(padStart) + str + char.repeat(padEnd);\n}\n\n// Usage:\npadString('hello', 10, '*'); // Returns: '**hello***'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Random string",
-                "description": "Generates a random string of characters of a certain length",
-                "author": "kruimol",
-                "tags": [
-                    "function",
-                    "random"
-                ],
-                "contributors": [],
-                "code": "function makeid(length, characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {\n  return Array.from({ length }, () => characters.charAt(Math.floor(Math.random() * characters.length))).join('');\n}\n\nmakeid(3); // Returns: gDs (Random)\nmakeid(5, \"1234\" /* (optional) */); // Returns: \"35453\" (Random)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove All Whitespace",
-                "description": "Removes all whitespace from a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "whitespace"
-                ],
-                "contributors": [],
-                "code": "function removeWhitespace(str) {\n  return str.replace(/\\s+/g, '');\n}\n\n// Usage:\nremoveWhitespace('Hello world!'); // Returns: 'Helloworld!'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Vowels from a String",
-                "description": "Removes all vowels from a given string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "remove",
-                    "vowels"
-                ],
-                "contributors": [],
-                "code": "function removeVowels(str) {\n  return str.replace(/[aeiouAEIOU]/g, '');\n}\n\n// Usage:\nremoveVowels('Hello World'); // Returns: 'Hll Wrld'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Reverse String",
-                "description": "Reverses the characters in a string.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "reverse"
-                ],
-                "contributors": [],
-                "code": "const reverseString = (str) => str.split('').reverse().join('');\n\n// Usage:\nreverseString('hello'); // Returns: 'olleh'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Slugify String",
-                "description": "Converts a string into a URL-friendly slug format.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "slug"
-                ],
-                "contributors": [],
-                "code": "const slugify = (string, separator = \"-\") => {\n  return string\n    .toString() // Cast to string (optional)\n    .toLowerCase() // Convert the string to lowercase letters\n    .trim() // Remove whitespace from both sides of a string (optional)\n    .replace(/\\s+/g, separator) // Replace spaces with {separator}\n    .replace(/[^\\w\\-]+/g, \"\") // Remove all non-word chars\n    .replace(/\\_/g, separator) // Replace _ with {separator}\n    .replace(/\\-\\-+/g, separator) // Replace multiple - with single {separator}\n    .replace(/\\-$/g, \"\"); // Remove trailing -\n};\n\n// Usage:\nconst title = \"Hello, World! This is a Test.\";\nslugify(title); // Returns: 'hello-world-this-is-a-test'\nslugify(title, \"_\"); // Returns: 'hello_world_this_is_a_test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Truncate Text",
-                "description": "Truncates the text to a maximum length and appends '...' if the text exceeds the maximum length.",
-                "author": "realvishalrana",
-                "tags": [
-                    "string",
-                    "truncate",
-                    "text"
-                ],
-                "contributors": [],
-                "code": "const truncateText = (text = '', maxLength = 50) => {\n  return `${text.slice(0, maxLength)}${text.length >= maxLength ? '...' : ''}`;\n};\n\n// Usage:\nconst title = \"Hello, World! This is a Test.\";\ntruncateText(title); // Returns: 'Hello, World! This is a Test.'\ntruncateText(title, 10); // Returns: 'Hello, Wor...'\n",
-                "extension": "js"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/python--fastapi.json b/backend/data/consolidated/python--fastapi.json
deleted file mode 100644
index 2cea01cb..00000000
--- a/backend/data/consolidated/python--fastapi.json
+++ /dev/null
@@ -1,21 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Returns Hello, World! when it recives a GET request made to the root endpoint.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world",
-                    "web",
-                    "api"
-                ],
-                "contributors": [],
-                "code": "from typing import Union\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n    return {\"msg\": \"Hello, World!\"}\n\n# Usage: \n# -> Go to http://127.0.0.1:8000/ and you'll see {\"msg\", \"Hello, World!\"}\n",
-                "extension": "py"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/python--tkinter.json b/backend/data/consolidated/python--tkinter.json
deleted file mode 100644
index 412122ae..00000000
--- a/backend/data/consolidated/python--tkinter.json
+++ /dev/null
@@ -1,254 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Display a Pillow Image",
-                "description": "Use Pillow to show an image in a Tkinter window.",
-                "author": "Legopitstop",
-                "tags": [
-                    "app",
-                    "hello-world",
-                    "object-oriented"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Label\nfrom PIL import Image, ImageDraw, ImageTk\n\n\nclass App(Tk):\n    def __init__(self):\n        Tk.__init__(self)\n        self.geometry(\"200x200\")\n\n        # PhotoImage must be global or be assigned to a class or it will be garbage collected.\n        self.photo = ImageTk.PhotoImage(self.make_image())\n        lbl = Label(self, image=self.photo)\n        lbl.pack(expand=1)\n\n    def make_image(self):\n        width, height = 200, 200\n        image = Image.new(\"RGB\", (width, height), \"white\")\n\n        # Create a drawing context\n        draw = ImageDraw.Draw(image)\n\n        # Draw a circle\n        radius = 80\n        center = (width // 2, height // 2)\n        draw.ellipse(\n            [\n                (center[0] - radius, center[1] - radius),\n                (center[0] + radius, center[1] + radius),\n            ],\n            fill=\"red\",\n            outline=\"black\",\n            width=3,\n        )\n        return image\n\n\n# Usage:\nroot = App()\nroot.mainloop()\n\n",
-                "extension": "py"
-            },
-            {
-                "title": "Hello, World!",
-                "description": "Creates a basic Tkinter window with a \"Hello, World!\" label.",
-                "author": "Legopitstop",
-                "tags": [
-                    "app",
-                    "hello-world",
-                    "object-oriented"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Label\n\nclass App(Tk):\n    def __init__(self):\n        Tk.__init__(self)\n        self.geometry(\"200x200\")\n\n        self.lbl = Label(self, text='Hello, World!')\n        self.lbl.pack(expand=1)\n\n# Usage:\nroot = App()\nroot.mainloop()\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Entry Validation",
-        "snippets": [
-            {
-                "title": "Allow Alphanumeric",
-                "description": "A validation function to allow alphanumeric characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "alphanumeric"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_alphanumeric(value):\n    return value.isalnum() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_alphanumeric)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Decimal",
-                "description": "A validation function to allow only decimal numbers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "decimals"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_decimal(action, value):\n    if action == \"1\":\n        if value == \"\":\n            return True\n        try:\n            float(value)\n            return True\n        except ValueError:\n            return False\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_decimal)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Digits with A Max Length",
-                "description": "A validation function to allow only digits with a specified maximum length.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "max",
-                    "length"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_digits_with_max_length(action, value, max_length):\n    if action == \"1\":\n        return value == \"\" or (value.isdigit() and len(value) <= int(max_length))\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_digits_with_max_length)\n# 4 is the max length\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\", 4)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Lowercase",
-                "description": "A validation function to allow only lowercase alphabetic characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "lowercase"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_lowercase(value):\n    return value.islower() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_lowercase)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Negative Integers",
-                "description": "A validation function to allow only negative integers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "negative",
-                    "integers"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_negative_integers(value):\n    return (\n        value in (\"\", \"-\") or value.startswith(\"-\") and value[1:].isdigit()\n        if value\n        else True\n    )\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_negative_integers)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Numbers in Range",
-                "description": "A validation function to allow only numbers within a specified range.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "number",
-                    "range"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_numbers_in_range(action, value, min_value, max_value):\n    if action == \"1\":  \n        try:\n            num = float(value)\n            return float(min_value) <= num <= float(max_value)\n        except ValueError:\n            return False\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_numbers_in_range)\n# 0 is the minimum value\n# 10 is the maximum value\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\", 0, 10)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Only Alphabets",
-                "description": "A validation function to allow only alphabetic characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "alphabets"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_only_alphabets(value):\n    return value.isalpha() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_only_alphabets)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Only Digits",
-                "description": "A validation function to allow only digits.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "digits"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_only_digits(value):\n    return value.isdigit() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_only_digits)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Positive Integers",
-                "description": "A validation function to allow only positive integers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "positive",
-                    "integers"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_positive_integers(value):\n    return value.isdigit() and (value == \"\" or int(value) > 0)\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_positive_integers)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow signed Decimals",
-                "description": "A validation function to allow only signed decimal numbers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "signed",
-                    "decimals"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_signed_decimals(action, value):\n    if action == \"1\":\n        try:\n            if value in (\"\", \"-\"):\n                return True\n            float(value)\n            return True\n        except ValueError:\n            return False\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_signed_decimals)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Signed Integers",
-                "description": "A validation function to allow only signed integers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "signed",
-                    "integers"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_signed_integers(action, value):\n    if action == \"1\":\n        return (\n            value in (\"\", \"-\")\n            or value.isdigit()\n            or (value.startswith(\"-\") and value[1:].isdigit())\n        )\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_signed_integers)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Specific Characters",
-                "description": "A validation function to allow specific characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "regex"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_specific_characters(value, allowed_chars):\n    return all(char in allowed_chars for char in value)\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_specific_characters)\nallowed_chars = \"0123456789ABCDEFabcdef\"  # Hexadecimal characters\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\", allowed_chars)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Uppercase",
-                "description": "A validation function to allow uppercase letters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "uppercase"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_uppercase(value):\n    return value.isupper() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_uppercase)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Custom Regular Expression",
-                "description": "A validation function to match a regular expression pattern.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "regex",
-                    "pattern"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\nimport re\n\n\ndef custom_regular_expression(action, value, pattern):\n    if action == \"1\":\n        return re.fullmatch(pattern, value) is not None\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(custom_regular_expression)\npattern = r\"^\\d{0,4}$\"  # Allow up to 4 digits\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\", pattern)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Restrict Length",
-                "description": "A validation function to limit the length.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "length"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef restrict_length(value, max_length):\n    return len(value) <= int(max_length)\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(restrict_length)\n# 10 is the maximum length allowed\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\", 10)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Validate File Path",
-                "description": "A validation function to ensure the file path exists.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "filepath",
-                    "fp"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\nimport os\n\n\ndef validate_file_path(action, value):\n    if action == \"1\":\n        return value == \"\" or os.path.exists(os.path.expandvars(value))\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(validate_file_path)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Menus",
-        "snippets": [
-            {
-                "title": "Context Menu",
-                "description": "Opens a menu when you right click a widget.",
-                "author": "Legopitstop",
-                "tags": [
-                    "menu"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Label, Menu\n\n\nclass App(Tk):\n    def __init__(self):\n        Tk.__init__(self)\n        self.geometry(\"200x200\")\n\n        lbl = Label(self, text=\"Right-click me!\")\n        lbl.bind(\"<Button-3>\", self.do_popup)\n        lbl.pack(expand=1, ipadx=10, ipady=10)\n\n    def do_popup(self, event):\n        menu = Menu(self, tearoff=0)\n        menu.add_command(label=\"Option 1\", command=lambda: print(\"Option 1\"))\n        menu.add_command(label=\"Option 2\", command=lambda: print(\"Option 2\"))\n        menu.post(event.x_root, event.y_root)\n\n\n# Usage:\nroot = App()\nroot.mainloop()\n",
-                "extension": "py"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/python.json b/backend/data/consolidated/python.json
deleted file mode 100644
index 6e22272d..00000000
--- a/backend/data/consolidated/python.json
+++ /dev/null
@@ -1,785 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "print(\"Hello, World!\") # Prints Hello, World! to the terminal.\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Datetime Utilities",
-        "snippets": [
-            {
-                "title": "Calculate Date Difference in Milliseconds",
-                "description": "Calculates the difference between two dates in milliseconds.",
-                "author": "e3nviction",
-                "tags": [
-                    "datetime",
-                    "difference"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef date_difference_in_millis(date1, date2):\n    delta = date2 - date1\n    return delta.total_seconds() * 1000\n\n# Usage:\nd1 = datetime(2023, 1, 1, 12, 0, 0)\nd2 = datetime(2023, 1, 1, 12, 1, 0)\ndate_difference_in_millis(d1, d2) # Returns: 60000\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check if Date is a Weekend",
-                "description": "Checks whether a given date falls on a weekend.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "weekend"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef is_weekend(date):\n    try:\n        return date.weekday() >= 5  # Saturday = 5, Sunday = 6\n    except AttributeError:\n        raise TypeError(\"Input must be a datetime object\")\n\n# Usage:\ndate = datetime(2023, 1, 1)\nis_weekend(date) # Returns: True (Sunday)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Day of the Week String",
-                "description": "Gets the string of the day of the week for a given date.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "weekday"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef get_day_of_week(date):\n    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n    try:\n        return days[date.weekday()]\n    except IndexError:\n        raise ValueError(\"Invalid date\")\n\n# Usage:\ndate = datetime(2023, 1, 1)\nget_day_of_week(date) # Returns: 'Sunday'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Generate Date Range List",
-                "description": "Generates a list of dates between two given dates.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "range"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime, timedelta\n\ndef generate_date_range(start_date, end_date):\n    if start_date > end_date:\n        raise ValueError(\"start_date must be before end_date\")\n\n    current_date = start_date\n    date_list = []\n    while current_date <= end_date:\n        date_list.append(current_date)\n        current_date += timedelta(days=1)\n\n    return date_list\n\n# Usage:\nstart = datetime(2023, 1, 1)\nend = datetime(2023, 1, 5)\ndates = generate_date_range(start, end)\nfor d in dates:\n    print(d.strftime('%Y-%m-%d'))\n# Outputs: '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Get Current Date and Time as String",
-                "description": "Fetches the current date and time as a formatted string.",
-                "author": "e3nviction",
-                "tags": [
-                    "datetime",
-                    "current",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef get_current_datetime_string():\n    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')\n\n# Usage:\nget_current_datetime_string() # Returns: '2023-01-01 12:00:00'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Get Number of Days in a Month",
-                "description": "Determines the number of days in a specific month and year.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "calendar"
-                ],
-                "contributors": [],
-                "code": "from calendar import monthrange\nfrom datetime import datetime\n\ndef get_days_in_month(year, month):\n    try:\n        return monthrange(year, month)[1]\n    except ValueError as e:\n        raise ValueError(f\"Invalid month or year: {e}\")\n\n# Usage:\nget_days_in_month(2023, 2) # Returns: 28 (for non-leap year February)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Measure Execution Time",
-                "description": "Measures the execution time of a code block.",
-                "author": "technoph1le",
-                "tags": [
-                    "time",
-                    "execution"
-                ],
-                "contributors": [],
-                "code": "import time\n\ndef measure_time(func, *args):\n    start = time.time()\n    result = func(*args)\n    end = time.time()\n    print(f'Execution time: {end - start:.6f} seconds')\n    return result\n\n# Usage:\ndef slow_function():\n    time.sleep(2)\n\nmeasure_time(slow_function) # Outputs an execution time of ~2s\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Error Handling",
-        "snippets": [
-            {
-                "title": "Create Custom Exception Type",
-                "description": "Create a Custom Exception Type that can be called with raise.",
-                "author": "mrcool7387",
-                "tags": [
-                    "python",
-                    "error-creation",
-                    "organisation",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "class ExceptionName(BaseException):\n    def __init__(message: str):\n        super().__init__(message)\n\n# Usage\na: int = 1\n\nif a > 0:\n  raise ExceptionName('Error Message')\n",
-                "extension": "py"
-            },
-            {
-                "title": "Retry Function Execution on Exception",
-                "description": "Retries a function execution a specified number of times if it raises an exception.",
-                "author": "axorax",
-                "tags": [
-                    "error-handling",
-                    "retry"
-                ],
-                "contributors": [],
-                "code": "import time\n\ndef retry(func, retries=3, delay=1):\n    for attempt in range(retries):\n        try:\n            return func()\n        except Exception as e:\n            print(f\"Attempt {attempt + 1} failed: {e}\")\n            time.sleep(delay)\n    raise Exception(\"All retry attempts failed\")\n\n# Usage:\ndef unstable_function():\n    raise ValueError(\"Simulated failure\")\n\n# Retry 3 times with 2 seconds delay:\ntry:\n    retry(unstable_function, retries=3, delay=2)\nexcept Exception as e:\n    print(e)  # Output: All retry attempts failed\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find Files",
-                "description": "Finds all files of the specified type within a given directory.",
-                "author": "Jackeastern",
-                "tags": [
-                    "os",
-                    "filesystem",
-                    "file_search"
-                ],
-                "contributors": [],
-                "code": "import os\n\ndef find_files(directory, file_type):\n  file_type = file_type.lower()  # Convert file_type to lowercase\n  found_files = []\n\n  for root, _, files in os.walk(directory):\n    for file in files:\n      file_ext = os.path.splitext(file)[1].lower()\n      if file_ext == file_type:\n        full_path = os.path.join(root, file)\n        found_files.append(full_path)\n\n  return found_files\n\n# Example Usage:\nfind_files('/path/to/your/directory', '.pdf') # Returns all .pdf in directory\n",
-                "extension": "py"
-            },
-            {
-                "title": "Get File Extension",
-                "description": "Gets the extension of a file.",
-                "author": "axorax",
-                "tags": [
-                    "file",
-                    "extension"
-                ],
-                "contributors": [],
-                "code": "import os\n\ndef get_file_extension(filepath):\n    return os.path.splitext(filepath)[1]\n\n# Usage:\nget_file_extension('example.txt') # Returns: '.txt'\n",
-                "extension": "py"
-            },
-            {
-                "title": "List Files in Directory",
-                "description": "Lists all files in a specified directory.",
-                "author": "axorax",
-                "tags": [
-                    "file",
-                    "list",
-                    "directory"
-                ],
-                "contributors": [],
-                "code": "import os\n\ndef list_files(directory):\n    return [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]\n\n# Usage:\nlist_files('/path/to/directory') # Returns: List of file in the directory\n",
-                "extension": "py"
-            },
-            {
-                "title": "Read File in Chunks",
-                "description": "Reads a file in chunks of a specified size.",
-                "author": "axorax",
-                "tags": [
-                    "file",
-                    "read",
-                    "chunks"
-                ],
-                "contributors": [],
-                "code": "def read_file_in_chunks(filepath, chunk_size):\n    with open(filepath, 'r') as file:\n        while chunk := file.read(chunk_size):\n            yield chunk\n\n# Usage:\nfor chunk in read_file_in_chunks('example.txt', 1024):\n    print(chunk) # Outputs: Chucks of 1024 bytes\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Json Manipulation",
-        "snippets": [
-            {
-                "title": "Filter JSON Data",
-                "description": "Filters a JSON object based on a condition and returns the filtered data.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "filter",
-                    "data"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef filter_json_data(filepath, condition):\n    with open(filepath, 'r') as file:\n        data = json.load(file)\n\n    # Filter data based on the provided condition\n    filtered_data = [item for item in data if condition(item)]\n\n    return filtered_data\n\n# Usage:\ncondition = lambda x: x['age'] > 25\nfilter_json_data('data.json', condition) # Returns: `data.json` filtered with `condition`\n",
-                "extension": "py"
-            },
-            {
-                "title": "Flatten Nested JSON",
-                "description": "Flattens a nested JSON object into a flat dictionary.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "flatten",
-                    "nested"
-                ],
-                "contributors": [],
-                "code": "def flatten_json(nested_json, prefix=''):\n    flat_dict = {}\n    for key, value in nested_json.items():\n        if isinstance(value, dict):\n            flat_dict.update(flatten_json(value, prefix + key + '.'))\n        else:\n            flat_dict[prefix + key] = value\n    return flat_dict\n\n# Usage:\nnested_json = {'name': 'John', 'address': {'city': 'New York', 'zip': '10001'}}\nflatten_json(nested_json) # Returns: {'name': 'John', 'address.city': 'New York', 'address.zip': '10001'}\n",
-                "extension": "py"
-            },
-            {
-                "title": "Merge Multiple JSON Files",
-                "description": "Merges multiple JSON files into one and writes the merged data into a new file.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "merge",
-                    "file"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef merge_json_files(filepaths, output_filepath):\n    merged_data = []\n\n    # Read each JSON file and merge their data\n    for filepath in filepaths:\n        with open(filepath, 'r') as file:\n            data = json.load(file)\n            merged_data.extend(data)\n\n    # Write the merged data into a new file\n    with open(output_filepath, 'w') as file:\n        json.dump(merged_data, file, indent=4)\n\n# Usage:\nfiles_to_merge = ['file1.json', 'file2.json']\nmerge_json_files(files_to_merge, 'merged.json')\n",
-                "extension": "py"
-            },
-            {
-                "title": "Read JSON File",
-                "description": "Reads a JSON file and parses its content.",
-                "author": "e3nviction",
-                "tags": [
-                    "json",
-                    "file",
-                    "read"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef read_json(filepath):\n    with open(filepath, 'r') as file:\n        return json.load(file)\n\n# Usage:\nread_json('data.json') # Returns: Content of file as dict\n",
-                "extension": "py"
-            },
-            {
-                "title": "Update JSON File",
-                "description": "Updates an existing JSON file with new data or modifies the existing values.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "update",
-                    "file"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef update_json(filepath, new_data):\n    # Read the existing JSON data\n    with open(filepath, 'r') as file:\n        data = json.load(file)\n\n    # Update the data with the new content\n    data.update(new_data)\n\n    # Write the updated data back to the JSON file\n    with open(filepath, 'w') as file:\n        json.dump(data, file, indent=4)\n\n# Usage:\nnew_data = {'age': 31}\nupdate_json('data.json', new_data) # Updates `age` in `data.json` without modifying other keys\n",
-                "extension": "py"
-            },
-            {
-                "title": "Write JSON File",
-                "description": "Writes a dictionary to a JSON file.",
-                "author": "e3nviction",
-                "tags": [
-                    "json",
-                    "file",
-                    "write"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef write_json(filepath, data):\n    with open(filepath, 'w') as file:\n        json.dump(data, file, indent=4)\n\n# Usage:\ndata = {'name': 'John', 'age': 30}\nwrite_json('data.json', data)\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "List Manipulation",
-        "snippets": [
-            {
-                "title": "Find Duplicates in a List",
-                "description": "Identifies duplicate elements in a list.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "duplicates"
-                ],
-                "contributors": [],
-                "code": "def find_duplicates(lst):\n    seen = set()\n    duplicates = set()\n    for item in lst:\n        if item in seen:\n            duplicates.add(item)\n        else:\n            seen.add(item)\n    return list(duplicates)\n\n# Usage:\ndata = [1, 2, 3, 2, 4, 5, 1]\nfind_duplicates(data) # Returns: [1, 2]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Intersection of Two Lists",
-                "description": "Finds the common elements between two lists.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "intersection"
-                ],
-                "contributors": [],
-                "code": "def list_intersection(lst1, lst2):\n    return [item for item in lst1 if item in lst2]\n\n# Usage:\nlist_a = [1, 2, 3, 4]\nlist_b = [3, 4, 5, 6]\nlist_intersection(list_a, list_b) # Returns: [3, 4]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Maximum Difference in List",
-                "description": "Finds the maximum difference between any two elements in a list.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "difference"
-                ],
-                "contributors": [],
-                "code": "def max_difference(lst):\n    if not lst or len(lst) < 2:\n        return 0\n    return max(lst) - min(lst)\n\n# Usage:\ndata = [10, 3, 5, 20, 7]\nmax_difference(data) # Returns: 17\n",
-                "extension": "py"
-            },
-            {
-                "title": "Flatten Nested List",
-                "description": "Flattens a multi-dimensional list into a single list.",
-                "author": "technoph1le",
-                "tags": [
-                    "list",
-                    "flatten"
-                ],
-                "contributors": [],
-                "code": "def flatten_list(lst):\n    return [item for sublist in lst for item in sublist]\n\n# Usage:\nnested_list = [[1, 2], [3, 4], [5]]\nflatten_list(nested_list)  # Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Flatten Unevenly Nested Lists",
-                "description": "Converts unevenly nested lists of any depth into a single flat list.",
-                "author": "agilarasu",
-                "tags": [
-                    "list",
-                    "flattening",
-                    "nested-lists",
-                    "depth"
-                ],
-                "contributors": [],
-                "code": "def flatten(nested_list):\n    for item in nested_list:\n        if isinstance(item, list):\n            yield from flatten(item)\n        else:\n            yield item\n\n# Usage:\nnested_list = [1, [2, [3, 4]], 5]\nlist(flatten(nested_list))  # Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Partition List",
-                "description": "Partitions a list into sublists of a given size.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "partition"
-                ],
-                "contributors": [],
-                "code": "def partition_list(lst, size):\n    for i in range(0, len(lst), size):\n        yield lst[i:i + size]\n\n# Usage:\ndata = [1, 2, 3, 4, 5, 6, 7]\nlist(partition_list(data, 3)) # Returns: [[1, 2, 3], [4, 5, 6], [7]]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Duplicates",
-                "description": "Removes duplicate elements from a list while maintaining order.",
-                "author": "technoph1le",
-                "tags": [
-                    "list",
-                    "duplicates",
-                    "filter"
-                ],
-                "contributors": [],
-                "code": "def remove_duplicates(lst):\n    return list(dict.fromkeys(lst))\n\n# Usage:\nremove_duplicates([1, 2, 2, 3, 4, 4, 5])  # Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Math And Numbers",
-        "snippets": [
-            {
-                "title": "Calculate Compound Interest",
-                "description": "Calculates compound interest for a given principal amount, rate, and time period.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "compound interest",
-                    "finance"
-                ],
-                "contributors": [],
-                "code": "def compound_interest(principal, rate, time, n=1):\n    return principal * (1 + rate / n) ** (n * time)\n\n# Usage:\ncompound_interest(1000, 0.05, 5) # Returns: 1276.2815625000003\ncompound_interest(1000, 0.05, 5, 12) # Returns: 1283.68\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Perfect Square",
-                "description": "Checks if a number is a perfect square.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "perfect square",
-                    "check"
-                ],
-                "contributors": [],
-                "code": "def is_perfect_square(n):\n    if n < 0:\n        return False\n    root = int(n**0.5)\n    return root * root == n\n\n# Usage:\nis_perfect_square(16) # Returns: True\nis_perfect_square(20) # Returns: False\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Prime Number",
-                "description": "Checks if a number is a prime number.",
-                "author": "technoph1le",
-                "tags": [
-                    "math",
-                    "prime",
-                    "check"
-                ],
-                "contributors": [],
-                "code": "def is_prime(n):\n    if n <= 1:\n        return False\n    for i in range(2, int(n**0.5) + 1):\n        if n % i == 0:\n            return False\n    return True\n\n# Usage:\nis_prime(17) # Returns: True\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert Binary to Decimal",
-                "description": "Converts a binary string to its decimal equivalent.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "binary",
-                    "decimal",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "def binary_to_decimal(binary_str):\n    return int(binary_str, 2)\n\n# Usage:\nbinary_to_decimal('1010') # Returns: 10\nbinary_to_decimal('1101') # Returns: 13\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert Bytes to Human-Readable Format",
-                "description": "Converts a size in bytes to a human-readable format.",
-                "author": "axorax",
-                "tags": [
-                    "bytes",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "def bytes_to_human_readable(num):\n    for unit in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:\n        if num < 1024:\n            return f\"{num:.2f} {unit}\"\n        num /= 1024\n\n# Usage:\nbytes_to_human_readable(123456789) # Returns: '117.74 MB'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find LCM (Least Common Multiple)",
-                "description": "Calculates the least common multiple (LCM) of two numbers.",
-                "author": "axorax",
-                "tags": [
-                    "python",
-                    "math",
-                    "lcm",
-                    "gcd",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "def lcm(a, b):\n    return abs(a * b) // gcd(a, b)\n\n# Usage:\nlcm(12, 15) # Returns: 60\nlcm(7, 5) # Returns: 35\n",
-                "extension": "py"
-            },
-            {
-                "title": "Linear Mapping",
-                "description": "remaps a value from one range to another",
-                "author": "JasimAlrawie",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "def linear_mapping(value, min_in, max_in, min_out, max_out):\n    return (value - min_in) * (max_out - min_out) / (max_in - min_in) + min_out\n\n#Usage:\nlinear_mapping(value, 0, 1, 0, 255)    # remaps the value from (0,1) to (0,255)\nlinear_mapping(value, 0, PI*2, 0, 360) # remaps the value from rad to deg\nlinear_mapping(value, -1, 1, 1, 8)     # remaps the value from (-1,1) to (1,8)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Solve Quadratic Equation",
-                "description": "Solves a quadratic equation ax^2 + bx + c = 0 and returns the roots.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "quadratic",
-                    "equation",
-                    "solver"
-                ],
-                "contributors": [],
-                "code": "import cmath\n\ndef solve_quadratic(a, b, c):\n    discriminant = cmath.sqrt(b**2 - 4 * a * c)\n    root1 = (-b + discriminant) / (2 * a)\n    root2 = (-b - discriminant) / (2 * a)\n    return root1, root2\n\n# Usage:\nsolve_quadratic(1, -3, 2) # Returns: ((2+0j), (1+0j))\nsolve_quadratic(1, 2, 5) # Returns: ((-1+2j), (-1-2j))\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Sqlite Database",
-        "snippets": [
-            {
-                "title": "Create SQLite Database Table",
-                "description": "Creates a table in an SQLite database with a dynamic schema.",
-                "author": "e3nviction",
-                "tags": [
-                    "sqlite",
-                    "database",
-                    "table"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef create_table(db_name, table_name, schema):\n    conn = sqlite3.connect(db_name)\n    cursor = conn.cursor()\n    schema_string = ', '.join([f'{col} {dtype}' for col, dtype in schema.items()])\n    cursor.execute(f'''\n        CREATE TABLE IF NOT EXISTS {table_name} (\n            {schema_string}\n        )''')\n    conn.commit()\n    conn.close()\n\n# Usage:\ndb_name = 'example.db'\ntable_name = 'users'\nschema = {\n    'id': 'INTEGER PRIMARY KEY',\n    'name': 'TEXT',\n    'age': 'INTEGER',\n    'email': 'TEXT'\n}\ncreate_table(db_name, table_name, schema)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Insert Data into Sqlite Table",
-                "description": "Inserts a row into a specified SQLite table using a dictionary of fields and values.",
-                "author": "e3nviction",
-                "tags": [
-                    "sqlite",
-                    "database"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef insert_into_table(db_path, table_name, data):\n    with sqlite3.connect(db_path) as conn:\n        columns = ', '.join(data.keys())\n        placeholders = ', '.join(['?'] * len(data))\n        sql = f\"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})\"\n        conn.execute(sql, tuple(data.values()))\n        conn.commit()\n\n# Usage:\ndb_path = 'example.db'\ntable_name = 'users'\ndata = {\n    'name': 'John Doe',\n    'email': 'john@example.com',\n    'age': 30\n}\ninsert_into_table(db_path, table_name, data)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Query Data from Sqlite Table",
-                "description": "Fetches data from a specified SQLite table, with options for selecting specific columns and applying a WHERE clause.",
-                "author": "pl44t",
-                "tags": [
-                    "sqlite",
-                    "database"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef query_table(db_path, table_name, columns='*', where_clause=None):\n    with sqlite3.connect(db_path) as conn:\n        cursor = conn.cursor()\n        sql = f\"SELECT {columns} FROM {table_name}\"\n        if where_clause:\n            sql += f\" WHERE {where_clause}\"\n        cursor.execute(sql)\n        return cursor.fetchall()\n\n# Usage:\ndb_path = 'example.db'\ntable_name = 'users'\ncolumns = 'id, name, email'\nwhere_clause = 'age > 25'\nresult = query_table(db_path, table_name, columns, where_clause)\nfor row in result:\n    print(row)\n\n",
-                "extension": "py"
-            },
-            {
-                "title": "Update Records in Sqlite Table",
-                "description": "Updates records in a specified SQLite table, allowing dynamic column updates and an optional WHERE clause.",
-                "author": "pl44t",
-                "tags": [
-                    "sqlite",
-                    "database"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef update_table(db_path, table_name, updates, where_clause=None):\n    with sqlite3.connect(db_path) as conn:\n        set_clause = ', '.join([f\"{col} = ?\" for col in updates.keys()])\n        sql = f\"UPDATE {table_name} SET {set_clause}\"\n        if where_clause:\n            sql += f\" WHERE {where_clause}\"\n        conn.execute(sql, tuple(updates.values()))\n        conn.commit()\n\n# Usage:\ndb_path = 'example.db'\ntable_name = 'users'\nupdates = {'name': 'Jane Doe', 'age': 28}\nwhere_clause = \"id = 1\"\nupdate_table(db_path, table_name, updates, where_clause)\n\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "def capitalize_words(s):\n    return ' '.join(word.capitalize() for word in s.split())\n\n# Usage:\ncapitalize_words('hello world') # Returns: 'Hello World'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Anagram",
-                "description": "Checks if two strings are anagrams of each other.",
-                "author": "SteliosGee",
-                "tags": [
-                    "string",
-                    "anagram",
-                    "check"
-                ],
-                "contributors": [],
-                "code": "def is_anagram(s1, s2):\n    return sorted(s1) == sorted(s2)\n\n# Usage:\nis_anagram('listen', 'silent') # Returns: True\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Palindrome",
-                "description": "Checks if a string is a palindrome.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "palindrome"
-                ],
-                "contributors": [],
-                "code": "def is_palindrome(s):\n    s = s.lower().replace(' ', '')\n    return s == s[::-1]\n\n# Usage:\nis_palindrome('A man a plan a canal Panama') # Returns: True\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert Snake Case to Camel Case",
-                "description": "Converts a snake_case string to camelCase.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "snake-case",
-                    "camel-case",
-                    "convert"
-                ],
-                "contributors": [],
-                "code": "def snake_to_camel(s):\n    parts = s.split('_')\n    return parts[0] + ''.join(word.capitalize() for word in parts[1:])\n\n# Usage:\nsnake_to_camel('hello_world') # Returns: 'helloWorld'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert String to Unicode",
-                "description": "Converts a string into its Unicode representation.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "ascii",
-                    "unicode",
-                    "convert"
-                ],
-                "contributors": [],
-                "code": "def string_to_unicode(s):\n    return [ord(char) for char in s]\n\n# Usage:\nstring_to_unicode('hello') # Returns: [104, 101, 108, 108, 111]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Count Character Frequency",
-                "description": "Counts the frequency of each character in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "character-frequency"
-                ],
-                "contributors": [],
-                "code": "from collections import Counter\n\ndef char_frequency(s):\n    return dict(Counter(s))\n\n# Usage:\nchar_frequency('hello') # Returns: {'h': 1, 'e': 1, 'l': 2, 'o': 1}\n",
-                "extension": "py"
-            },
-            {
-                "title": "Count Vowels",
-                "description": "Counts the number of vowels in a string.",
-                "author": "SteliosGee",
-                "tags": [
-                    "string",
-                    "vowels",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "def count_vowels(s):\n    vowels = 'aeiou'\n    return len([char for char in s.lower() if char in vowels])\n\n# Usage:\ncount_vowels('hello') # Returns: 2\n",
-                "extension": "py"
-            },
-            {
-                "title": "Count Words",
-                "description": "Counts the number of words in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "word-count"
-                ],
-                "contributors": [],
-                "code": "def count_words(s):\n    return len(s.split())\n\n# Usage:\ncount_words('The quick brown fox') # Returns: 4\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find All Substrings",
-                "description": "Finds all substrings of a given string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "substring",
-                    "find"
-                ],
-                "contributors": [],
-                "code": "def find_substrings(s):\n    substrings = []\n    for i in range(len(s)):\n        for j in range(i + 1, len(s) + 1):\n            substrings.append(s[i:j])\n    return substrings\n\n# Usage:\nfind_substrings('abc') # Returns: ['a', 'ab', 'abc', 'b', 'bc', 'c']\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Longest Word",
-                "description": "Finds the longest word in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "longest-word"
-                ],
-                "contributors": [],
-                "code": "def find_longest_word(s):\n    words = s.split()\n    return max(words, key=len) if words else ''\n\n# Usage:\nfind_longest_word('The quick brown fox') # Returns: 'quick'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Unique Characters",
-                "description": "Finds all unique characters in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "unique",
-                    "characters"
-                ],
-                "contributors": [],
-                "code": "def find_unique_chars(s):\n    return ''.join(sorted(set(s)))\n\n# Usage:\nfind_unique_chars('banana') # Results: 'abn'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Generate Random String",
-                "description": "Generates a random alphanumeric string.",
-                "author": "technoph1le",
-                "tags": [
-                    "random",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "import random\nimport string\n\ndef random_string(length):\n    letters_and_digits = string.ascii_letters + string.digits\n    return ''.join(random.choice(letters_and_digits) for _ in range(length))\n\n# Usage:\nrandom_string(10) # Results: Random 10-character string\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Characters",
-                "description": "Removes specific characters from a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "remove",
-                    "characters"
-                ],
-                "contributors": [],
-                "code": "def remove_chars(s, chars):\n    return ''.join(c for c in s if c not in chars)\n\n# Usage:\nremove_chars('hello world', 'eo') # Returns: 'hll wrld'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Duplicate Characters",
-                "description": "Removes duplicate characters from a string while maintaining the order.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "duplicates",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "def remove_duplicate_chars(s):\n    seen = set()\n    return ''.join(char for char in s if not (char in seen or seen.add(char)))\n\n# Usage:\nremove_duplicate_chars('programming') # Returns: 'progamin'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes punctuation from a string.",
-                "author": "SteliosGee",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "import string\n\ndef remove_punctuation(s):\n    return s.translate(str.maketrans('', '', string.punctuation))\n\n# Usage:\nremove_punctuation('Hello, World!') # Returns: 'Hello World'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Whitespace",
-                "description": "Removes all whitespace from a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "whitespace",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "def remove_whitespace(s):\n    return ''.join(s.split())\n\n# Usage:\nremove_whitespace('hello world') # Returns: 'helloworld'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Reverse String",
-                "description": "Reverses the characters in a string.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "reverse"
-                ],
-                "contributors": [],
-                "code": "def reverse_string(s:str) -> str:\n    return s[::-1]\n\n# Usage:\nreverse_string('hello') # Returns: 'olleh'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Split Camel Case",
-                "description": "Splits a camel case string into separate words.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "camel-case",
-                    "split"
-                ],
-                "contributors": [],
-                "code": "import re\n\ndef split_camel_case(s):\n    return ' '.join(re.findall(r'[A-Z][a-z]*|[a-z]+', s))\n\n# Usage:\nsplit_camel_case('camelCaseString') # Returns: 'camel Case String'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Truncate",
-                "description": "Truncates a string to a specified length and a toggleable truncation notation.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "truncate"
-                ],
-                "contributors": [
-                    "MinerMinerMods"
-                ],
-                "code": "def truncate(s:str, length:int, suffix:bool = True) -> str :\n    return (s[:length] + (\"...\" if suffix else \"\")) if len(s) > length else s\n\n# Usage:\ntruncate('This is a long string', 10) # Returns: 'This is a ...'\ntruncate('This is a long string', 10, False) # Returns: 'This is a '\n",
-                "extension": "py"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/regex.json b/backend/data/consolidated/regex.json
deleted file mode 100644
index 9fc3d786..00000000
--- a/backend/data/consolidated/regex.json
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-    {
-        "name": "Miscellaneous",
-        "snippets": [
-            {
-                "title": "Hexadecimal Color",
-                "description": "Matches hex color codes",
-                "author": "majvax",
-                "tags": [
-                    "color",
-                    "hexadecimal"
-                ],
-                "contributors": [],
-                "code": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$\n\n\n-> Usage:\n#FFF1 ✗\n#FFF ✓\n#FFF000 ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "IPv4",
-                "description": "Matches IPv4 address",
-                "author": "majvax",
-                "tags": [
-                    "ipv4",
-                    "networking"
-                ],
-                "contributors": [],
-                "code": "^((25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})$\n\n\n-> Usage:\n123.300.0.101 ✗\n127.0.0.1 ✓\n192.168.0.1 ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "Unintentional Duplication",
-                "description": "Matches duplicated word in a text.",
-                "author": "majvax",
-                "tags": [
-                    "duplication"
-                ],
-                "contributors": [],
-                "code": "\\b(\\w+)\\s+\\1\\b\n\n\n-> Usage:\nI need to finish this task ✗\nI need to to finish this task ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "Whitespace Trimmer",
-                "description": "Matches leading and/or trailing whitespace.",
-                "author": "majvax",
-                "tags": [
-                    "trim"
-                ],
-                "contributors": [],
-                "code": "^\\s+|\\s+$\n\n\n-> Usage:\n(don't account for the quotation marks, it just to visualize whitespace)\n\"Hello World\" ✗\n\" Hello World\" ✓\n\"Hello World \" ✓\n\" Hello World \" ✓\n",
-                "extension": "regex"
-            }
-        ]
-    },
-    {
-        "name": "Validation pattern",
-        "snippets": [
-            {
-                "title": "Email Address",
-                "description": "Match any email address",
-                "author": "majvax",
-                "tags": [
-                    "email"
-                ],
-                "contributors": [],
-                "code": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\n\n-> Usage:\nexample.name@domain.com.ru ✓\nname.surname@gmail.com ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "Strong Password",
-                "description": "Match password with at least 12 characters, one uppercased letter, one number, and one special character.",
-                "author": "majvax",
-                "tags": [
-                    "password"
-                ],
-                "contributors": [],
-                "code": "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{12,}$\n\n-> Usage:\nlongpassword ✗\nlongpassw0rd ✗\nlongp@ssw0rd ✗\nLongp@ssw0rd ✓\n",
-                "extension": "regex"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/ruby.json b/backend/data/consolidated/ruby.json
deleted file mode 100644
index be6449e3..00000000
--- a/backend/data/consolidated/ruby.json
+++ /dev/null
@@ -1,238 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Binary Search",
-                "description": "Searches for an element in a sorted array using binary search.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "binary-search",
-                    "search"
-                ],
-                "contributors": [],
-                "code": "def binary_search(array, target)\n  low = 0\n  high = array.length - 1\n\n  while low <= high\n    mid = (low + high) / 2\n    guess = array[mid]\n\n    if guess == target\n      return mid\n    elsif guess > target\n      high = mid - 1\n    else\n      low = mid + 1\n    end\n  end\n\n  return nil\nend\n\n# Usage:\narray = [1, 3, 5, 7, 9]\ntarget = 5\nresult = binary_search(array, target)\nputs result # Output: 2\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Chunk Array",
-                "description": "Splits an array into chunks of a specified size.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "chunk"
-                ],
-                "contributors": [],
-                "code": "def chunk_array(array, size)\n    array.each_slice(size).to_a\nend\n\n# Usage:\narr = [1, 2, 3, 4, 5, 6, 7, 8, 9]\nchunked_arr = chunk_array(arr, 2)\nputs chunked_arr.inspect # Output: [[1, 2], [3, 4], [5, 6], [7, 8], [9]]\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Matrix Transpose",
-                "description": "Transposes a 2D matrix.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "matrix",
-                    "transpose"
-                ],
-                "contributors": [],
-                "code": "def transpose_matrix(matrix)\n    return [] if matrix.empty?\n    return [] if matrix.first.empty?\n\n    matrix.first.zip(*matrix[1..-1])\nend\n\n# Usage:\nmatrix = [\n    [1, 2, 3],\n    [4, 5, 6],\n    [7, 8, 9]\n]\nprint transpose_matrix(matrix) # Output: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]\n",
-                "extension": "ruby"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "puts 'Hello, World!'\n",
-                "extension": "rb"
-            }
-        ]
-    },
-    {
-        "name": "Error Handling",
-        "snippets": [
-            {
-                "title": "Custom Error Class",
-                "description": "Defines and raises a custom error class in Ruby.",
-                "author": "ACR1209",
-                "tags": [
-                    "error handling",
-                    "custom error"
-                ],
-                "contributors": [],
-                "code": "class MyCustomError < StandardError; end\n\ndef risky_method(value)\n    raise MyCustomError, \"Value must be positive\" if value <= 0\n    \"Valid value: #{value}\"\nend\n\n# Usage:\nbegin\n    puts risky_method(-1)\nrescue MyCustomError => e\n    puts e.message # Output: \"Value must be positive\"\nend\n",
-                "extension": "rb"
-            }
-        ]
-    },
-    {
-        "name": "Math And Numbers",
-        "snippets": [
-            {
-                "title": "Calculate Compound Interest",
-                "description": "Calculates compound interest for a given principal amount, rate, and time period.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "compound interest",
-                    "finance"
-                ],
-                "contributors": [
-                    "axorax"
-                ],
-                "code": "def compound_interest(principal, rate, time, n = 1)\n    principal * (1 + rate / n) ** (n * time)\nend\n\n# Usage:\nputs compound_interest(1000, 0.05, 5)   # Output: 1276.2815625000003\nputs compound_interest(1000, 0.05, 5, 12) # Output: 1283.3586785035118\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Calculate Factorial",
-                "description": "Computes the factorial of a given integer.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "factorial"
-                ],
-                "contributors": [],
-                "code": "def factorial(n)\n    return 1 if n <= 1\n    (2..n).reduce(1, :*)\nend\n\n# Usage:\nputs factorial(5) # Output: 120\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Check Prime Number",
-                "description": "Checks if a number is a prime number.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "prime",
-                    "check"
-                ],
-                "contributors": [
-                    "technoph1le"
-                ],
-                "code": "def is_prime?(n)\n    return false if n <= 1\n    (2..Math.sqrt(n)).each do |i|\n        return false if n % i == 0\n    end\n    true\nend\n\n# Usage:\nputs is_prime?(29) # Output: true\nputs is_prime?(30) # Output: false\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Find all primes up to integer (Sieve of Sundaram)",
-                "description": "Finds all the prime numbers up to a specific integer.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "prime numbers"
-                ],
-                "contributors": [],
-                "code": "def sieve_of_sundaram(limit)\n    n = (limit - 1) / 2\n    marked = Array.new(n + 1, false)\n\n    (1..n).each do |i|\n        j = i\n        while (i + j + 2 * i * j) <= n\n            marked[i + j + 2 * i * j] = true\n            j += 1\n        end\n    end\n\n    primes = [2]\n    (1..n).each do |i|\n        primes << (2 * i + 1) unless marked[i]\n    end\n\n    primes\nend\n\n# Usage:\nprint sieve_of_sundaram(30) # Output: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]\n",
-                "extension": "rb"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "capitalize",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "def capitalize_words(str)\n  str.split.map(&:capitalize).join(' ')\nend\n\n# Usage:\nsentence = \"ruby is awesome\"\nputs capitalize_words(sentence) # Output: \"Ruby Is Awesome\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Count Word Occurrences in String",
-                "description": "Counts the occurrences of each word in a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "occurrences",
-                    "word-count"
-                ],
-                "contributors": [],
-                "code": "def count_word_occurrences(text)\n    words = text.downcase.scan(/\\w+/)\n    occurrences = Hash.new(0)\n    words.each { |word| occurrences[word] += 1 }\n    occurrences\nend\n\n# Usage:\ntext = \"ruby is awesome and Ruby is fun\"\nputs count_word_occurrences(text) # Output: {\"ruby\"=>2, \"is\"=>2, \"awesome\"=>1, \"and\"=>1, \"fun\"=>1}\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes all punctuation from a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "def remove_punctuation(str)\n    str.gsub(/[[:punct:]]/, '')\nend\n\n# Usage:\ntext = \"Hello, Ruby! How's it going?\"\nputs remove_punctuation(text) # Output: \"Hello Ruby Hows it going\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Transform Camel Case to Snake Case",
-                "description": "Converts a Camel or Pascal Case string to Snake case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "camel-case",
-                    "snake-case",
-                    "pascal-case"
-                ],
-                "contributors": [],
-                "code": "def camel_to_snake(str)\n    str.gsub(/([A-Z])/, '_\\1').sub(/^_/, '').downcase\nend\n\n# Usage:\ncamel_case = \"camelCaseToSnakeCase\"\npascal_case = \"PascalCaseToSnakeCase\"\nputs camel_to_snake(camel_case) # Output: \"camel_case_to_snake_case\"\nputs camel_to_snake(pascal_case) # Output: \"pascal_case_to_snake_case\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Transform from Snake Case to Camel Case",
-                "description": "Converts a Snake Case string to Camel Case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "snake-case",
-                    "camel-case"
-                ],
-                "contributors": [],
-                "code": "def snake_to_camel(str)\n    str.split('_').map.with_index { |word, index| \n        index == 0 ? word : word.capitalize \n    }.join\nend\n\n# Usage:\nsnake_case = \"snake_case_to_camel_case\"\nputs snake_to_camel(snake_case) # Output: \"snakeCaseToCamelCase\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Transform from Snake Case to Pascal Case",
-                "description": "Converts a Snake Case string to Pascal Case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "snake-case",
-                    "pascal-case"
-                ],
-                "contributors": [],
-                "code": "def snake_to_pascal(str)\n    str.split('_').map.with_index { |word, index| \n        word.capitalize \n    }.join\nend\n\n# Usage:\nsnake_case = \"snake_case_to_pascal_case\"\nputs snake_to_pascal(snake_case) # Output: \"SnakeCaseToPascalCase\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Truncates a string to a specified length, optionally adding an ellipsis.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "truncate"
-                ],
-                "contributors": [],
-                "code": "def truncate_string(str, max_length)\n    return str if str.length <= max_length || max_length <= 3\n    str[0, max_length - 3] + '...'\nend\n\n# Usage:\nlong_string = \"Ruby is a dynamic, open source programming language.\"\nputs truncate_string(20, long_string) # Output: \"Ruby is a dynamic...\"\nputs truncate_string(54, long_string) # Output: \"Ruby is a dynamic, open source programming language.\"\n",
-                "extension": "rb"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/rust.json b/backend/data/consolidated/rust.json
deleted file mode 100644
index 7fd16cd1..00000000
--- a/backend/data/consolidated/rust.json
+++ /dev/null
@@ -1,82 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "fn main() { // Defines the main running function\n    println!(\"Hello, World!\"); // Prints Hello, World! to the terminal.\n}\n",
-                "extension": "rust"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find Files",
-                "description": "Finds all files of the specified extension within a given directory.",
-                "author": "Mathys-Gasnier",
-                "tags": [
-                    "file",
-                    "search"
-                ],
-                "contributors": [],
-                "code": "fn find_files(directory: &str, file_type: &str) -> std::io::Result<Vec<std::path::PathBuf>> {\n    let mut result = vec![];\n\n    for entry in std::fs::read_dir(directory)? {\n        let dir = entry?;\n        let path = dir.path();\n        if dir.file_type().is_ok_and(|t| !t.is_file()) &&\n            path.extension().is_some_and(|ext| ext != file_type) {\n            continue;\n        }\n        result.push(path)\n    }\n\n    Ok(result)\n}\n\n// Usage:\nfind_files(\"/path/to/your/directory\", \".pdf\"); // Returns: if Ok(), a vector of path to `.pdf` files in the directory\n",
-                "extension": "rust"
-            },
-            {
-                "title": "Read File Lines",
-                "description": "Reads all lines from a file and returns them as a vector of strings.",
-                "author": "Mathys-Gasnier",
-                "tags": [
-                    "file",
-                    "read"
-                ],
-                "contributors": [],
-                "code": "fn read_lines(file_name: &str) -> std::io::Result<Vec<String>>\n    Ok(\n        std::fs::read_to_string(file_name)?\n            .lines()\n            .map(String::from)\n            .collect()\n    )\n}\n\n// Usage:\nread_lines(\"path/to/file.txt\"); // Returns: If Ok(), a Vec of the lines of the file\n",
-                "extension": "rust"
-            }
-        ]
-    },
-    {
-        "name": "Linux",
-        "snippets": [
-            {
-                "title": "Get Desktop Enviroment",
-                "description": "Get the Desktop Enviroment that the user is currently using.",
-                "author": "sponkurtus2 ",
-                "tags": [
-                    "linux",
-                    "file"
-                ],
-                "contributors": [],
-                "code": "fn get_desktop_env() -> String {\n    // Return empty string if no X display is available\n    if env::var(\"DISPLAY\").is_err() {\n        return String::new();\n    }\n\n    // Check common desktop environment variables.\n    for env_var in &[\n        \"XDG_SESSION_DESKTOP\",\n        \"XDG_CURRENT_DESKTOP\",\n        \"DESKTOP_SESSION\",\n    ] {\n        if let Ok(de) = env::var(env_var) {\n            return de;\n        }\n    }\n\n    // As fallback, try to get desktop name from last word of last line in .xinitrc\n    let path = format!(\"{}/.xinitrc\", env::var(\"HOME\").unwrap_or_default());\n    if let Ok(mut file) = File::open(&path) {\n        let mut buf = String::new();\n        if file.read_to_string(&mut buf).is_ok() {\n            if let Some(last_line) = buf.lines().last() {\n                let last_word = last_line.split(' ').last().unwrap_or(\"\");\n                return last_word.to_string();\n            }\n        }\n    }\n\n    // Return \"N/A\" if no desktop environment could be detected\n    String::from(\"N/A\")\n}\n\n// Usage:\nget_desktop_env(); // Returns: the desktop enviroment that the user actually has e.g. i3.\n",
-                "extension": "rust"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize String",
-                "description": "Makes the first letter of a string uppercase.",
-                "author": "Mathys-Gasnier",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "fn capitalized(str: &str) -> String {\n    let mut chars = str.chars();\n    match chars.next() {\n        None => String::new(),\n        Some(f) => f.to_uppercase().chain(chars).collect(),\n    }\n}\n\n// Usage:\ncapitalized(\"lower_case\"); // Returns: Lower_case\n",
-                "extension": "rust"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/scss.json b/backend/data/consolidated/scss.json
deleted file mode 100644
index c27f54f8..00000000
--- a/backend/data/consolidated/scss.json
+++ /dev/null
@@ -1,258 +0,0 @@
-[
-    {
-        "name": "Animations",
-        "snippets": [
-            {
-                "title": "Fade In Animation",
-                "description": "Animates the fade-in effect.",
-                "author": "technoph1le",
-                "tags": [
-                    "animation",
-                    "fade",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@keyframes fade-in {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n@mixin fade-in($duration: 1s, $easing: ease-in-out) {\n  animation: fade-in $duration $easing;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Slide In From Left",
-                "description": "Animates content sliding in from the left.",
-                "author": "technoph1le",
-                "tags": [
-                    "animation",
-                    "slide",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@keyframes slide-in-left {\n  from {\n    transform: translateX(-100%);\n  }\n  to {\n    transform: translateX(0);\n  }\n}\n\n@mixin slide-in-left($duration: 0.5s, $easing: ease-out) {\n  animation: slide-in-left $duration $easing;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Borders Shadows",
-        "snippets": [
-            {
-                "title": "Border Radius Helper",
-                "description": "Applies a customizable border-radius.",
-                "author": "technoph1le",
-                "tags": [
-                    "border",
-                    "radius",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin border-radius($radius: 4px) {\n  border-radius: $radius;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Box Shadow Helper",
-                "description": "Generates a box shadow with customizable values.",
-                "author": "technoph1le",
-                "tags": [
-                    "box-shadow",
-                    "css",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": "@mixin box-shadow($x: 0px, $y: 4px, $blur: 10px, $spread: 0px, $color: rgba(0, 0, 0, 0.1)) {\n  box-shadow: $x $y $blur $spread $color;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Components",
-        "snippets": [
-            {
-                "title": "Primary Button",
-                "description": "Generates a styled primary button.",
-                "author": "technoph1le",
-                "tags": [
-                    "button",
-                    "primary",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin primary-button($bg: #007bff, $color: #fff) {\n  background-color: $bg;\n  color: $color;\n  padding: 0.5rem 1rem;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: darken($bg, 10%);\n  }\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Layouts",
-        "snippets": [
-            {
-                "title": "Aspect Ratio",
-                "description": "Ensures that elements maintain a specific aspect ratio.",
-                "author": "technoph1le",
-                "tags": [
-                    "aspect-ratio",
-                    "layout",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin aspect-ratio($width, $height) {\n  position: relative;\n  width: 100%;\n  padding-top: ($height / $width) * 100%;\n  > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Dark Theme",
-                "description": "SCSS mixin to change styles for dark themes.",
-                "author": "gihanrangana",
-                "tags": [
-                    "css",
-                    "mixin",
-                    "snippet",
-                    "dark-theme",
-                    "layout"
-                ],
-                "contributors": [],
-                "code": "@mixin isDark($type: 'module') {\n  $root: &;\n\n  @if $type == 'module' {\n    :global {\n      @at-root body[theme='dark'] #{$root} {\n        @content;\n      }\n    }\n  } @else {\n    &[theme='dark'] {\n      @content;\n    }\n  }\n}\n\n// Usage:\n.container{\n\tbackground: #f0f0f0;\n\t@include isDark {\n\t\tbackground: #222;\n\t}\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Flex Center",
-                "description": "A mixin to center content using flexbox.",
-                "author": "technoph1le",
-                "tags": [
-                    "flex",
-                    "center",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin flex-center {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Grid Container",
-                "description": "Creates a responsive grid container with customizable column counts.",
-                "author": "technoph1le",
-                "tags": [
-                    "grid",
-                    "layout",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin grid-container($columns: 12, $gap: 1rem) {\n  display: grid;\n  grid-template-columns: repeat($columns, 1fr);\n  gap: $gap;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Typography",
-        "snippets": [
-            {
-                "title": "Font Import Helper",
-                "description": "Simplifies importing custom fonts in Sass.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "fonts",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin import-font($family, $weight: 400, $style: normal) {\n  @font-face {\n    font-family: #{$family};\n    font-weight: #{$weight};\n    font-style: #{$style};\n    src: url('/fonts/#{$family}-#{$weight}.woff2') format('woff2'),\n         url('/fonts/#{$family}-#{$weight}.woff') format('woff');\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Line Clamp Mixin",
-                "description": "A Sass mixin to clamp text to a specific number of lines.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "typography",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin line-clamp($number) {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: $number;\n  overflow: hidden;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "PX to REM Helper",
-                "description": "This function will convert px values to rem values.",
-                "author": "gihanrangana",
-                "tags": [
-                    "function",
-                    "pixel",
-                    "rem",
-                    "px-to-rem"
-                ],
-                "contributors": [],
-                "code": "@function px-to-rem($px, $base: 16px) {\n  @return ($px / $base) * 1rem;\n}\n\n// Usage:\ndiv {\n  font-size: px-to-rem(12px); // Output: 0.75rem\n  padding: px-to-rem(16px);   // Output: 1rem\n  margin: px-to-rem(32px) // Output 2rem\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Text Gradient",
-                "description": "Adds a gradient color effect to text.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "gradient",
-                    "text",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin text-gradient($from, $to) {\n  background: linear-gradient(to right, $from, $to);\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Text Overflow Ellipsis",
-                "description": "Ensures long text is truncated with an ellipsis.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "text",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin text-ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Utilities",
-        "snippets": [
-            {
-                "title": "Clearfix",
-                "description": "Provides a clearfix utility for floating elements.",
-                "author": "technoph1le",
-                "tags": [
-                    "clearfix",
-                    "utility",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin clearfix {\n  &::after {\n    content: '';\n    display: block;\n    clear: both;\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Responsive Breakpoints",
-                "description": "Generates media queries for responsive design.",
-                "author": "technoph1le",
-                "tags": [
-                    "responsive",
-                    "media-queries",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin breakpoint($breakpoint) {\n  @if $breakpoint == sm {\n    @media (max-width: 576px) { @content; }\n  } @else if $breakpoint == md {\n    @media (max-width: 768px) { @content; }\n  } @else if $breakpoint == lg {\n    @media (max-width: 992px) { @content; }\n  } @else if $breakpoint == xl {\n    @media (max-width: 1200px) { @content; }\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Spacing",
-                "description": "This SCSS snippet dynamically generates utility classes for managing spacing in a consistent and efficient manner. The classes are built using a loop, ensuring scalability and flexibility. use .mt-* for margin-top, and .pb-* for padding bottom",
-                "author": "dinesh-here",
-                "tags": [
-                    "clearfix",
-                    "utility",
-                    "css",
-                    "spacing"
-                ],
-                "contributors": [],
-                "code": "$step: 5;\n$start_limit: 0;\n$end_limit: 50;\n\n  @while $start_limit <= $end_limit {\n    .mt-#{$start_limit} {\n        margin-top: $start_limit + px;\n    }\n    .mb-#{$start_limit} {\n        margin-bottom: $start_limit + px;\n    }\n\n    .ml-#{$start_limit} {\n        margin-left: $start_limit + px;\n    }\n\n    .mr-#{$start_limit} {\n        margin-right: $start_limit + px;\n    }\n\n    .pt-#{$start_limit} {\n        padding-top: $start_limit + px;\n    }\n    .pb-#{$start_limit} {\n        padding-bottom: $start_limit + px;\n    }\n\n    .pl-#{$start_limit} {\n        padding-left: $start_limit + px;\n    }\n\n    .pr-#{$start_limit} {\n        padding-right: $start_limit + px;\n    }\n    .mx-#{$start_limit} {\n        margin-left: $start_limit + px;\n        margin-right: $start_limit + px;\n    }\n\n    .px-#{$start_limit} {\n        padding-left: $start_limit + px;\n        padding-right: $start_limit + px;\n    }\n\n    .my-#{$start_limit} {\n        margin-top: $start_limit + px;\n        margin-bottom: $start_limit + px;\n    }\n\n    .py-#{$start_limit} {\n        padding-top: $start_limit + px;\n        padding-bottom: $start_limit + px;\n    }\n\n\n    $start_limit: $start_limit + $step;\n}\n\n",
-                "extension": "scss"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/consolidated/typescript.json b/backend/data/consolidated/typescript.json
deleted file mode 100644
index 53e49bba..00000000
--- a/backend/data/consolidated/typescript.json
+++ /dev/null
@@ -1,160 +0,0 @@
-[
-    {
-        "name": "Helper Types",
-        "snippets": [
-            {
-                "title": "At Least One Key",
-                "description": "Ensures that at least one property of an object is required.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition"
-                ],
-                "contributors": [],
-                "code": "type AtLeastOne<T> = {\n    [K in keyof T]: Pick<T, K> & Partial<Omit<T, K>>;\n}[keyof T];\n\n\n// Usage:\ntype A = {\n    id?: string;\n    name?: string;\n    isActive?: boolean;\n};\n\ntype AtLeastOneA = AtLeastOne<A>;\n// Requires at least one of 'id', 'name', or 'isActive' to be defined\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Deep Partial Type",
-                "description": "Converts all properties of a type, including nested objects, into optional.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "optional"
-                ],
-                "contributors": [],
-                "code": "type DeepPartial<T> = {\n    [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\n\n// Usage:\ntype A = {\n    name: string;\n    details: {\n        age: number;\n        address: { city: string; zip: string };\n    };\n};\n\ntype PartialA = DeepPartial<A>;\n/*\nType PartialA:\n{\n  name?: string;\n  details?: {\n    age?: number;\n    address?: { city?: string; zip?: string };\n  };\n}\n*/\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Deep Readonly Type",
-                "description": "Converts all properties of a type, including nested objects, into readonly.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "readonly"
-                ],
-                "contributors": [],
-                "code": "type DeepReadonly<T> = {\n    readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];\n};\n\n\n// Usage:\ntype A = {\n    name: string;\n    details: {\n        age: number;\n        address: { city: string; zip: string };\n    };\n};\n\ntype ReadonlyA = DeepReadonly<A>;\n/*\nType ReadonlyA:\n{\n  readonly name: string;\n  readonly details: {\n    readonly age: number;\n    readonly address: { readonly city: string; readonly zip: string };\n  };\n}\n*/\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Deep Required Type",
-                "description": "Converts all properties of a type, including nested objects, into required.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "required"
-                ],
-                "contributors": [],
-                "code": "type DeepRequired<T> = T extends object\n    ? { [K in keyof T]-?: DeepRequired<T[K]> }\n    : T;\n\n\n// Usage:\ntype A = {\n    id?: string;\n    name?: string;\n    details?: {\n        age?: number;\n        address?: { city?: string; zip?: string };\n    };\n};\n\ntype RequiredA = DeepRequired<A>;\n// Result: { id: string; name: string; details: { age: number; address: { city: string; zip: string }; }; }\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Exclusive Types",
-                "description": "Allows to have a type which conforms to either/or.",
-                "author": "px-d",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition"
-                ],
-                "contributors": [],
-                "code": "type Exclusive<T, U = T> = T | U extends Record<string, unknown>\n  ?\n      | ({ [P in Exclude<keyof T, keyof U>]?: never } & U)\n      | ({ [P in Exclude<keyof U, keyof T>]?: never } & T)\n  : T | U;\n\n\n// Usage:\ntype A = { name: string; email?: string; provider?: string };\ntype B = { name: string; phone?: string; country?: string };\n\ntype EitherOr = Exclusive<A, B>;\n\nconst w: EitherOr = { name: \"John\", email: \"j@d.c\" }; // ✅\nconst x: EitherOr = { name: \"John\", phone: \"+123 456\" }; // ✅\nconst y: EitherOr = { name: \"John\", email: \"\", phone: \"\" }; // ⛔️\nconst z: EitherOr = { name: \"John\", phne: \"\", provider: \"\" }; // ⛔️\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Keys of Type",
-                "description": "Extracts keys from an object type that match a specified value type.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition"
-                ],
-                "contributors": [],
-                "code": "type KeysOfType<T, U> = { [K in keyof T]: T[K] extends U ? K : never }[keyof T];\n\n\n// Usage:\ntype A = { name: string; age: number; isActive: boolean, isDeleted: boolean };\ntype StringKeys = KeysOfType<A, string>; // \"name\"\ntype BooleanKeys = KeysOfType<A, boolean>; // \"isActive\" | \"isDeleted\"\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Keys to Optional",
-                "description": "Makes only the specified keys of an object type optional.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "optional"
-                ],
-                "contributors": [],
-                "code": "type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n\n// Usage:\ntype A = {\n    id: string;\n    name: string;\n    age: number;\n};\n\ntype WithOptionalName = OptionalKeys<A, \"name\">;\n// { id: string; age: number; name?: string }\n\ntype WithOptionalNameAndAge = OptionalKeys<A, \"name\" | \"age\">;\n// Result: { id: string; name?: string; age?: number }\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Nullable Keys",
-                "description": "Extracts keys from an object type that allow null or undefined values.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "nullable"
-                ],
-                "contributors": [],
-                "code": "type NullableKeys<T> = {\n    [K in keyof T]: null extends T[K] ? K : undefined extends T[K] ? K : never;\n}[keyof T];\n\n\n// Usage:\ntype A = {\n    id: string;\n    name?: string;\n    description: string | null;\n};\n\ntype Nullable = NullableKeys<A>; // \"name\" | \"description\"\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Omit Keys of Type",
-                "description": "Removes keys of a specified type from an object type.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "omit",
-                    "keys"
-                ],
-                "contributors": [],
-                "code": "type OmitKeysOfType<T, U> = {\n    [K in keyof T as T[K] extends U ? never : K]: T[K];\n};\n\n\n// Usage:\ntype A = {\n    id: string;\n    isActive: boolean;\n    data: number[];\n};\n\ntype WithoutBoolean = OmitKeysOfType<A, boolean>; // { id: string; data: number[] }\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Required Keys",
-                "description": "Extracts required keys from an object.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "required"
-                ],
-                "contributors": [],
-                "code": "type RequiredKeys<T> = {\n    [K in keyof T]-?: {} extends Pick<T, K> ? never : K;\n}[keyof T];\n\n\n// Usage:\ntype A = {\n    id: string;\n    name?: string;\n    isActive: boolean;\n};\n\ntype ReqKeys = RequiredKeys<A>; // \"id\" | \"isActive\"\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Union to Intersection",
-                "description": "Converts a union type into an intersection type.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "intersection",
-                    "union"
-                ],
-                "contributors": [],
-                "code": "type UnionToIntersection<U> = (U extends any ? (arg: U) => void : never) extends (arg: infer I) => void\n    ? I\n    : never;\n\n\n// Usage:\ntype A = { id: string };\ntype B = { name: string };\ntype C = { age: number };\n\ntype Intersected = UnionToIntersection<A | B | C>;\n// { id: string } & { name: string } & { age: number }\n",
-                "extension": "ts"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/data/icons/bash.svg b/backend/data/icons/bash.svg
deleted file mode 100644
index 9fb1be15..00000000
--- a/backend/data/icons/bash.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 48 48" width="96px" height="96px" fill-rule="evenodd" clip-rule="evenodd" baseProfile="basic"><path fill="#ededed" fill-rule="evenodd" d="M22.903,3.286c0.679-0.381,1.515-0.381,2.193,0 c3.355,1.883,13.451,7.551,16.807,9.434C42.582,13.1,43,13.804,43,14.566c0,3.766,0,15.101,0,18.867 c0,0.762-0.418,1.466-1.097,1.847c-3.355,1.883-13.451,7.551-16.807,9.434c-0.679,0.381-1.515,0.381-2.193,0 c-3.355-1.883-13.451-7.551-16.807-9.434C5.418,34.899,5,34.196,5,33.434c0-3.766,0-15.101,0-18.867 c0-0.762,0.418-1.466,1.097-1.847C9.451,10.837,19.549,5.169,22.903,3.286z" clip-rule="evenodd"/><path fill="#434345" d="M23.987,46.221c-1.085,0-2.171-0.252-3.165-0.757c-2.22-1.127-5.118-2.899-7.921-4.613 c-1.973-1.206-3.836-2.346-5.297-3.157C5.381,36.458,4,34.113,4,31.572V16.627c0-2.59,1.417-4.955,3.699-6.173 c3.733-1.989,9.717-5.234,12.878-7.01h0c2.11-1.184,4.733-1.184,6.844,0c3.576,2.007,10.369,6.064,14.252,8.513 C43.13,12.874,44,14.453,44,16.182V32c0,2.4-0.859,4.048-2.553,4.895c-0.944,0.531-2.628,1.576-4.578,2.787 c-3.032,1.882-6.806,4.225-9.564,5.705C26.27,45.942,25.128,46.221,23.987,46.221z M21.556,5.188 C18.384,6.97,12.382,10.226,8.64,12.22C7.012,13.088,6,14.776,6,16.627v14.945c0,1.814,0.987,3.49,2.576,4.373 c1.498,0.832,3.378,1.981,5.369,3.199c2.77,1.693,5.634,3.445,7.783,4.536c1.458,0.739,3.188,0.717,4.631-0.056 c2.703-1.451,6.447-3.775,9.456-5.643c1.97-1.223,3.671-2.279,4.696-2.854C41.835,34.464,42,33.109,42,32V16.182 c0-1.037-0.521-1.983-1.392-2.532c-3.862-2.435-10.613-6.467-14.165-8.461C24.913,4.331,23.086,4.331,21.556,5.188L21.556,5.188z"/><path fill="#434345" d="M22.977,41.654l-0.057-13.438c-0.011-2.594,1.413-4.981,3.701-6.204l12.01-6.416 c1.998-1.068,4.414,0.38,4.414,2.646v14.73c0,1.041-0.54,2.008-1.426,2.554l-14.068,8.668 C25.557,45.424,22.987,43.996,22.977,41.654z"/><path fill="#ededed" d="M28.799,26.274c0.123-0.063,0.225,0.014,0.227,0.176l0.013,1.32 c0.552-0.219,1.032-0.278,1.467-0.177c0.095,0.024,0.136,0.153,0.098,0.306l-0.291,1.169c-0.024,0.089-0.072,0.178-0.132,0.233 c-0.026,0.025-0.052,0.044-0.077,0.057c-0.04,0.02-0.078,0.026-0.114,0.019c-0.199-0.045-0.671-0.148-1.413,0.228 c-0.778,0.395-1.051,1.071-1.046,1.573c0.007,0.601,0.315,0.783,1.377,0.802c1.416,0.023,2.027,0.643,2.042,2.067 c0.016,1.402-0.733,2.905-1.876,3.826l0.025,1.308c0.001,0.157-0.1,0.338-0.225,0.4l-0.775,0.445 c-0.123,0.063-0.225-0.014-0.227-0.172l-0.013-1.286c-0.664,0.276-1.334,0.342-1.763,0.17c-0.082-0.032-0.117-0.152-0.084-0.288 l0.28-1.181c0.022-0.092,0.071-0.186,0.138-0.246c0.023-0.023,0.048-0.04,0.072-0.053c0.044-0.022,0.087-0.027,0.124-0.013 c0.462,0.155,1.053,0.082,1.622-0.206c0.722-0.365,1.206-1.102,1.198-1.834c-0.007-0.664-0.366-0.939-1.241-0.946 c-1.113,0.002-2.151-0.216-2.168-1.855c-0.014-1.35,0.688-2.753,1.799-3.641l-0.013-1.319c-0.001-0.162,0.098-0.34,0.225-0.405 L28.799,26.274z"/><path fill="#4da925" d="M37.226,34.857l-3.704,2.185c-0.109,0.061-0.244-0.019-0.244-0.143v-1.252 c0-0.113,0.061-0.217,0.16-0.273l3.704-2.185c0.111-0.061,0.246,0.019,0.246,0.145v1.248 C37.388,34.697,37.326,34.801,37.226,34.857"/></svg>
\ No newline at end of file
diff --git a/backend/data/icons/c.svg b/backend/data/icons/c.svg
deleted file mode 100644
index 94ebe6d9..00000000
--- a/backend/data/icons/c.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<svg viewBox="32.18585611720149 20.47 223.6851360941233 247.05999999999997" xmlns="http://www.w3.org/2000/svg"
-    width="50" height="50">
-    <path
-        d="M252.71 93.61a21.67 21.67 0 0 0-2.65-10.87 20.74 20.74 0 0 0-7.87-7.67Q198.77 50 155.32 25c-7.8-4.51-15.36-4.35-23.11.23C120.69 32 63 65.09 45.81 75.06c-7.08 4.1-10.52 10.38-10.52 18.54v100.8a21.77 21.77 0 0 0 2.55 10.66 20.63 20.63 0 0 0 8 7.88c17.19 10 74.89 43.05 86.41 49.85 7.75 4.58 15.31 4.74 23.12.23q43.41-25.08 86.87-50.09a20.63 20.63 0 0 0 8-7.88 21.77 21.77 0 0 0 2.55-10.66V93.61z"
-        fill="#004482" />
-    <path
-        d="M252.73 194.4a21.72 21.72 0 0 1-2.55 10.66 18.58 18.58 0 0 1-1.45 2.24L144 144l98.19-68.93a20.72 20.72 0 0 1 7.86 7.67 21.57 21.57 0 0 1 2.66 10.87c.02 33.6.02 100.79.02 100.79z"
-        fill="#00599c" />
-    <path
-        d="M250.05 82.74L37.81 205.06a21.75 21.75 0 0 1-2.53-10.65V93.6c0-8.16 3.45-14.44 10.52-18.54C63 65.09 120.69 32 132.22 25.21c7.73-4.58 15.3-4.74 23.1-.23q43.41 25.08 86.87 50.09a20.72 20.72 0 0 1 7.86 7.67z"
-        fill="#659ad2" />
-    <path
-        d="M148.2 184.72a39.91 39.91 0 0 1-35-20.63q-.53-.94-1-1.92A39.94 39.94 0 0 1 179 119.4c.53.64 1 1.31 1.53 2 .24.33.48.66.7 1l35.07-20.2q-1.28-2.06-2.68-4c-.49-.69-1-1.35-1.48-2A79.9 79.9 0 0 0 78 181.92c.34.64.69 1.27 1 1.9a79.91 79.91 0 0 0 136.86 3.62l-34.29-20.73a39.88 39.88 0 0 1-33.37 18.01z"
-        fill="#fff" />
-</svg>
\ No newline at end of file
diff --git a/backend/data/icons/cpp.svg b/backend/data/icons/cpp.svg
deleted file mode 100644
index 7e75c38c..00000000
--- a/backend/data/icons/cpp.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 256 288" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" aria-labelledby="cpp-logo-title cpp-logo-description">
-<title id="cpp-logo-title">C++ logo</title>
-<desc id="cpp-logo-description">A two tone blue hexagon with the letters C++ inside in white</desc>
-<path d="M255.569 84.72c-.002-4.83-1.035-9.098-3.124-12.761-2.052-3.602-5.125-6.621-9.247-9.008-34.025-19.619-68.083-39.178-102.097-58.817-9.17-5.294-18.061-5.101-27.163.269C100.395 12.39 32.59 51.237 12.385 62.94 4.064 67.757.015 75.129.013 84.711 0 124.166.013 163.62 0 203.076c.002 4.724.991 8.909 2.988 12.517 2.053 3.711 5.169 6.813 9.386 9.254 20.206 11.703 88.02 50.547 101.56 58.536 9.106 5.373 17.997 5.565 27.17.269 34.015-19.64 68.075-39.198 102.105-58.817 4.217-2.44 7.333-5.544 9.386-9.252 1.994-3.608 2.985-7.793 2.987-12.518 0 0 0-78.889-.013-118.345" fill="#5C8DBC"/>
-<path d="M128.182 143.509L2.988 215.593c2.053 3.711 5.169 6.813 9.386 9.254 20.206 11.703 88.02 50.547 101.56 58.536 9.106 5.373 17.997 5.565 27.17.269 34.015-19.64 68.075-39.198 102.105-58.817 4.217-2.44 7.333-5.544 9.386-9.252l-124.413-72.074" fill="#1A4674"/>
-<path d="M91.101 164.861c7.285 12.718 20.98 21.296 36.69 21.296 15.807 0 29.58-8.687 36.828-21.541l-36.437-21.107-37.081 21.352" fill="#1A4674"/>
-<path d="M255.569 84.72c-.002-4.83-1.035-9.098-3.124-12.761l-124.263 71.55 124.413 72.074c1.994-3.608 2.985-7.793 2.987-12.518 0 0 0-78.889-.013-118.345" fill="#1B598E"/>
-<path d="M248.728 148.661h-9.722v9.724h-9.724v-9.724h-9.721v-9.721h9.721v-9.722h9.724v9.722h9.722v9.721M213.253 148.661h-9.721v9.724h-9.722v-9.724h-9.722v-9.721h9.722v-9.722h9.722v9.722h9.721v9.721" fill="#FFF"/>
-<path d="M164.619 164.616c-7.248 12.854-21.021 21.541-36.828 21.541-15.71 0-29.405-8.578-36.69-21.296a42.062 42.062 0 0 1-5.574-20.968c0-23.341 18.923-42.263 42.264-42.263 15.609 0 29.232 8.471 36.553 21.059l36.941-21.272c-14.683-25.346-42.096-42.398-73.494-42.398-46.876 0-84.875 38-84.875 84.874 0 15.378 4.091 29.799 11.241 42.238 14.646 25.48 42.137 42.637 73.634 42.637 31.555 0 59.089-17.226 73.714-42.781l-36.886-21.371" fill="#FFF"/>
-</svg>
\ No newline at end of file
diff --git a/backend/data/icons/csharp.svg b/backend/data/icons/csharp.svg
deleted file mode 100644
index 96cf5abc..00000000
--- a/backend/data/icons/csharp.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(63.137257%,47.450981%,86.274511%);fill-opacity:1;" d="M 47.148438 14.660156 C 47.148438 13.824219 46.96875 13.082031 46.605469 12.445312 C 46.25 11.820312 45.714844 11.296875 45 10.882812 C 39.09375 7.476562 33.179688 4.082031 27.273438 0.671875 C 25.683594 -0.246094 24.140625 -0.214844 22.558594 0.71875 C 20.207031 2.105469 8.4375 8.847656 4.929688 10.878906 C 3.484375 11.71875 2.78125 12.996094 2.78125 14.660156 C 2.777344 21.511719 2.78125 28.359375 2.777344 35.210938 C 2.777344 36.03125 2.949219 36.757812 3.296875 37.382812 C 3.652344 38.027344 4.195312 38.566406 4.925781 38.988281 C 8.433594 41.019531 20.207031 47.765625 22.558594 49.152344 C 24.140625 50.085938 25.683594 50.117188 27.273438 49.199219 C 33.179688 45.789062 39.09375 42.394531 45 38.988281 C 45.734375 38.5625 46.273438 38.023438 46.632812 37.382812 C 46.976562 36.753906 47.148438 36.027344 47.148438 35.207031 C 47.148438 35.207031 47.148438 21.511719 47.148438 14.660156 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(15.686275%,0%,40.784314%);fill-opacity:1;" d="M 25.03125 24.867188 L 3.296875 37.382812 C 3.652344 38.027344 4.195312 38.566406 4.925781 38.988281 C 8.433594 41.019531 20.207031 47.765625 22.558594 49.152344 C 24.140625 50.085938 25.683594 50.117188 27.273438 49.199219 C 33.179688 45.789062 39.09375 42.394531 45 38.988281 C 45.734375 38.5625 46.273438 38.023438 46.632812 37.382812 L 25.03125 24.867188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(22.352941%,0%,56.862748%);fill-opacity:1;" d="M 47.148438 14.660156 C 47.148438 13.824219 46.96875 13.082031 46.605469 12.445312 L 25.03125 24.867188 L 46.632812 37.382812 C 46.976562 36.753906 47.148438 36.027344 47.148438 35.207031 C 47.148438 35.207031 47.148438 21.511719 47.148438 14.660156 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 37.828125 20.191406 L 37.828125 22.527344 L 40.167969 22.527344 L 40.167969 20.191406 L 41.335938 20.191406 L 41.335938 22.527344 L 43.675781 22.527344 L 43.675781 23.699219 L 41.335938 23.699219 L 41.335938 26.039062 L 43.675781 26.039062 L 43.675781 27.207031 L 41.335938 27.207031 L 41.335938 29.546875 L 40.167969 29.546875 L 40.167969 27.207031 L 37.828125 27.207031 L 37.828125 29.546875 L 36.660156 29.546875 L 36.660156 27.207031 L 34.320312 27.207031 L 34.320312 26.039062 L 36.660156 26.039062 L 36.660156 23.699219 L 34.320312 23.699219 L 34.320312 22.527344 L 36.660156 22.527344 L 36.660156 20.191406 Z M 40.167969 23.699219 L 37.828125 23.699219 L 37.828125 26.039062 L 40.167969 26.039062 Z M 40.167969 23.699219 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 25.078125 8.441406 C 31.179688 8.441406 36.507812 11.753906 39.359375 16.679688 L 39.332031 16.632812 L 32.15625 20.765625 C 30.738281 18.371094 28.148438 16.757812 25.171875 16.722656 L 25.078125 16.722656 C 20.542969 16.722656 16.867188 20.398438 16.867188 24.933594 C 16.867188 26.417969 17.261719 27.808594 17.949219 29.007812 C 19.367188 31.480469 22.027344 33.148438 25.078125 33.148438 C 28.152344 33.148438 30.828125 31.460938 32.234375 28.960938 L 32.203125 29.023438 L 39.371094 33.175781 C 36.546875 38.058594 31.292969 41.359375 25.261719 41.425781 L 25.078125 41.429688 C 18.957031 41.429688 13.617188 38.09375 10.769531 33.144531 C 9.382812 30.726562 8.585938 27.921875 8.585938 24.933594 C 8.585938 15.828125 15.96875 8.441406 25.078125 8.441406 Z M 25.078125 8.441406 "/>
-</g>
-</svg>
diff --git a/backend/data/icons/css.svg b/backend/data/icons/css.svg
deleted file mode 100644
index c981c7ac..00000000
--- a/backend/data/icons/css.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="css-logo-title css-logo-description">
-<title id="css-logo-title">CSS Logo Square</title>
-<desc id="css-logo-description">A purple square with the letters CSS inside in white</desc>
-<path id="bg" fill="#639" d="M0,0H1000V1000H0Z" />
-<path id="fg" fill="#fff" d="m358.1,920c-64.23-.06-103.86-36.23-103.1-102.79,0,0,0-168.39,0-168.39,0-33.74,9.88-59.4,29.64-76.96,35.49-34.19,117.83-36.27,152.59.52,21.42,18.89,29.5,57.48,27.58,93.49h-73.72c.56-14.15-.19-35.58-8.51-43.65-10.81-14.63-39.36-12.91-46.91,2.32-4.64,8.26-6.96,20.49-6.96,36.67v146.18c0,30.65,10.65,46.15,31.96,46.49,9.96,0,17.53-3.62,22.68-10.85,7.19-8.58,8.31-27.58,7.73-41.32h73.72c5.04,70.07-36.32,119.16-106.71,118.29Zm234.04,0c-71.17.98-103.01-49.66-101.04-118.29h69.59c-1.93,29.92,8.35,57.17,32.99,55.27,10.99,0,18.73-3.44,23.2-10.33,8.5-12.59,10.09-48.95-2.06-63.02-8.49-13.55-39.03-25.51-55.16-33.57-23.03-11.02-39.61-24.1-49.75-39.26-22.87-33.64-20.75-107.48,11.34-137.4,31.18-36.92,112.61-38.62,143.82-.77,19.25,19.51,27.66,57.9,26.03,93.23h-67.02c.57-14.52-.8-37.95-6.44-46.49-3.95-7.23-11.43-10.85-22.42-10.85-19.59,0-29.38,11.71-29.38,35.12.21,24.86,9.9,35.06,32.48,45.45,29.24,11.36,66.42,30.76,79.9,54.24,40.2,71.54,12.62,180.82-86.09,176.65Zm224.76,0c-71.17.98-103.01-49.66-101.04-118.29h69.59c-1.93,29.92,8.35,57.17,32.99,55.27,10.99,0,18.73-3.44,23.2-10.33,8.5-12.59,10.09-48.95-2.06-63.02-8.49-13.55-39.03-25.51-55.16-33.57-23.03-11.02-39.61-24.1-49.75-39.26-22.87-33.64-20.75-107.48,11.34-137.4,31.18-36.92,112.61-38.62,143.82-.77,19.25,19.51,27.66,57.9,26.03,93.23h-67.02c.57-14.52-.8-37.95-6.44-46.49-3.95-7.23-11.43-10.85-22.42-10.85-19.59,0-29.38,11.71-29.38,35.12.21,24.86,9.9,35.06,32.48,45.45,29.24,11.36,66.42,30.76,79.9,54.24,40.2,71.54,12.62,180.82-86.09,176.65Z" />
-</svg>
\ No newline at end of file
diff --git a/backend/data/icons/haskell.svg b/backend/data/icons/haskell.svg
deleted file mode 100644
index 8163876f..00000000
--- a/backend/data/icons/haskell.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 12" width="50" height="50">
-		<path fill="#453a62" d="M 0 12 L 4 6 L 0 0 L 3 0 L 7 6 L 3 12"/>
-		<path fill="#5e5086" d="M 4 12 L 8 6 L 4 0 L 7 0 L 15 12 L 12 12 L 9.5 8.25 L 7 12"/>
-		<path fill="#8f4e8b" d="M 13.66 8.5 L 12.333 6.5 L 17 6.5 L 17 8.5 M 11.666 5.5 L 10.333 3.5 L 17 3.5 L 17 5.5"/>
-</svg>
\ No newline at end of file
diff --git a/backend/data/icons/html.svg b/backend/data/icons/html.svg
deleted file mode 100644
index 59345ce4..00000000
--- a/backend/data/icons/html.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="html5-logo-title html5-logo-description">
-<title id="html5-logo-title">HTML5 Logo</title>
-<desc id="html5-logo-description">A two tone orange shield with a white number 5 in it</desc>
-<path fill="#E34F26" d="M71,460 L30,0 481,0 440,460 255,512"/>
-<path fill="#EF652A" d="M256,472 L405,431 440,37 256,37"/>
-<path fill="#EBEBEB" d="M256,208 L181,208 176,150 256,150 256,94 255,94 114,94 115,109 129,265 256,265zM256,355 L255,355 192,338 188,293 158,293 132,293 139,382 255,414 256,414z"/>
-<path fill="#FFF" d="M255,208 L255,265 325,265 318,338 255,355 255,414 371,382 372,372 385,223 387,208 371,208zM255,94 L255,129 255,150 255,150 392,150 392,150 392,150 393,138 396,109 397,94z"/>
-</svg>
\ No newline at end of file
diff --git a/backend/data/icons/java.svg b/backend/data/icons/java.svg
deleted file mode 100644
index e51aae9c..00000000
--- a/backend/data/icons/java.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 37.308594 39.429688 L 37.121094 39.429688 L 37.121094 39.324219 L 37.628906 39.324219 L 37.628906 39.429688 L 37.441406 39.429688 L 37.441406 39.953125 L 37.308594 39.953125 Z M 38.320312 39.457031 L 38.316406 39.457031 L 38.132812 39.953125 L 38.046875 39.953125 L 37.859375 39.457031 L 37.859375 39.953125 L 37.734375 39.953125 L 37.734375 39.324219 L 37.917969 39.324219 L 38.089844 39.769531 L 38.261719 39.324219 L 38.441406 39.324219 L 38.441406 39.953125 L 38.320312 39.953125 Z M 38.320312 39.457031 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 20.445312 26.523438 C 20.445312 26.523438 19.136719 27.285156 21.378906 27.542969 C 24.097656 27.851562 25.484375 27.808594 28.480469 27.242188 C 28.480469 27.242188 29.269531 27.734375 30.367188 28.164062 C 23.652344 31.039062 15.171875 27.996094 20.445312 26.523438 M 19.625 22.769531 C 19.625 22.769531 18.15625 23.855469 20.402344 24.089844 C 23.304688 24.386719 25.597656 24.410156 29.5625 23.648438 C 29.5625 23.648438 30.113281 24.203125 30.976562 24.507812 C 22.859375 26.882812 13.816406 24.695312 19.625 22.769531 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 26.542969 16.398438 C 28.195312 18.304688 26.109375 20.015625 26.109375 20.015625 C 26.109375 20.015625 30.308594 17.847656 28.378906 15.132812 C 26.578125 12.601562 25.195312 11.34375 32.675781 7.003906 C 32.675781 7.003906 20.933594 9.9375 26.542969 16.398438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 35.421875 29.300781 C 35.421875 29.300781 36.390625 30.097656 34.355469 30.71875 C 30.476562 31.890625 18.222656 32.246094 14.820312 30.765625 C 13.597656 30.230469 15.890625 29.492188 16.613281 29.339844 C 17.367188 29.175781 17.796875 29.203125 17.796875 29.203125 C 16.433594 28.246094 9 31.085938 14.019531 31.902344 C 27.707031 34.121094 38.972656 30.902344 35.421875 29.300781 M 21.078125 18.878906 C 21.078125 18.878906 14.84375 20.359375 18.871094 20.894531 C 20.570312 21.125 23.957031 21.070312 27.113281 20.808594 C 29.695312 20.589844 32.285156 20.128906 32.285156 20.128906 C 32.285156 20.128906 31.375 20.515625 30.714844 20.964844 C 24.386719 22.628906 12.160156 21.855469 15.679688 20.152344 C 18.65625 18.714844 21.078125 18.878906 21.078125 18.878906 M 32.257812 25.128906 C 38.691406 21.785156 35.71875 18.570312 33.640625 19.003906 C 33.132812 19.109375 32.90625 19.203125 32.90625 19.203125 C 32.90625 19.203125 33.09375 18.90625 33.453125 18.777344 C 37.5625 17.332031 40.722656 23.035156 32.128906 25.296875 C 32.128906 25.296875 32.230469 25.207031 32.257812 25.128906 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 28.378906 0 C 28.378906 0 31.941406 3.566406 25 9.046875 C 19.429688 13.441406 23.730469 15.949219 24.996094 18.816406 C 21.746094 15.882812 19.363281 13.300781 20.960938 10.898438 C 23.308594 7.371094 29.816406 5.664062 28.378906 0 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 21.710938 34.1875 C 27.886719 34.582031 37.371094 33.96875 37.59375 31.046875 C 37.59375 31.046875 37.164062 32.152344 32.488281 33.035156 C 27.21875 34.027344 20.714844 33.910156 16.859375 33.273438 C 16.859375 33.273438 17.648438 33.925781 21.710938 34.1875 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 20.695312 45.355469 C 20.113281 45.859375 19.5 46.144531 18.945312 46.144531 C 18.160156 46.144531 17.734375 45.671875 17.734375 44.914062 C 17.734375 44.09375 18.1875 43.492188 20.019531 43.492188 L 20.695312 43.492188 L 20.695312 45.355469 M 22.304688 47.167969 L 22.304688 41.554688 C 22.304688 40.117188 21.488281 39.171875 19.515625 39.171875 C 18.363281 39.171875 17.355469 39.457031 16.535156 39.820312 L 16.769531 40.8125 C 17.417969 40.578125 18.25 40.355469 19.070312 40.355469 C 20.207031 40.355469 20.695312 40.8125 20.695312 41.757812 L 20.695312 42.46875 L 20.128906 42.46875 C 17.371094 42.46875 16.125 43.539062 16.125 45.148438 C 16.125 46.539062 16.945312 47.328125 18.488281 47.328125 C 19.484375 47.328125 20.222656 46.917969 20.917969 46.316406 L 21.042969 47.167969 Z M 27.671875 47.167969 L 25.664062 47.167969 L 23.25 39.316406 L 25.003906 39.316406 L 26.5 44.140625 L 26.832031 45.589844 C 27.589844 43.492188 28.125 41.363281 28.394531 39.316406 L 30.097656 39.316406 C 29.640625 41.902344 28.820312 44.738281 27.671875 47.167969 M 35.363281 45.355469 C 34.777344 45.859375 34.160156 46.144531 33.609375 46.144531 C 32.824219 46.144531 32.394531 45.671875 32.394531 44.914062 C 32.394531 44.09375 32.851562 43.492188 34.683594 43.492188 L 35.363281 43.492188 L 35.363281 45.355469 M 36.96875 47.167969 L 36.96875 41.554688 C 36.96875 40.117188 36.148438 39.171875 34.179688 39.171875 C 33.027344 39.171875 32.019531 39.457031 31.199219 39.820312 L 31.433594 40.8125 C 32.082031 40.578125 32.917969 40.355469 33.738281 40.355469 C 34.871094 40.355469 35.363281 40.8125 35.363281 41.757812 L 35.363281 42.46875 L 34.792969 42.46875 C 32.03125 42.46875 30.789062 43.539062 30.789062 45.148438 C 30.789062 46.539062 31.609375 47.328125 33.152344 47.328125 C 34.148438 47.328125 34.886719 46.917969 35.582031 46.316406 L 35.707031 47.167969 Z M 14.359375 48.503906 C 13.902344 49.171875 13.164062 49.699219 12.351562 50 L 11.558594 49.066406 C 12.175781 48.75 12.703125 48.238281 12.949219 47.761719 C 13.164062 47.339844 13.25 46.792969 13.25 45.488281 L 13.25 36.523438 L 14.957031 36.523438 L 14.957031 45.363281 C 14.957031 47.109375 14.820312 47.816406 14.359375 48.503906 "/>
-</g>
-</svg>
diff --git a/backend/data/icons/javascript--react.svg b/backend/data/icons/javascript--react.svg
deleted file mode 100644
index b9025712..00000000
--- a/backend/data/icons/javascript--react.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="50" width="50" viewBox="-11.5 -10.23174 23 20.46348">
-  <title>React Logo</title>
-  <circle cx="0" cy="0" r="2.05" fill="#61dafb"/>
-  <g stroke="#61dafb" stroke-width="1" fill="none">
-    <ellipse rx="11" ry="4.2"/>
-    <ellipse rx="11" ry="4.2" transform="rotate(60)"/>
-    <ellipse rx="11" ry="4.2" transform="rotate(120)"/>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/backend/data/icons/javascript.svg b/backend/data/icons/javascript.svg
deleted file mode 100644
index 25ccdbaa..00000000
--- a/backend/data/icons/javascript.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="js-logo-title js-logo-description">
-<title id="js-logo-title">JS Logo Square</title>
-<desc id="js-logo-description">A yellow square with the letters JS inside in white</desc>
-<path d="M3.125 3.125H46.875V46.875H3.125V3.125Z" fill="#F5DE19"/>
-<path d="M32.5141 37.3047C32.8874 38.0614 33.4667 38.6974 34.1853 39.1396C34.904 39.5819 35.7328 39.8124 36.5766 39.8047C38.2797 39.8047 39.3687 38.9531 39.3687 37.7734C39.3687 36.3672 38.25 35.8641 36.375 35.0437L35.3469 34.6031C32.3781 33.3391 30.4094 31.7562 30.4094 28.4094C30.4094 25.3266 32.7531 22.9781 36.4297 22.9781C37.6198 22.8924 38.8089 23.1588 39.8486 23.7443C40.8883 24.3297 41.7327 25.2082 42.2765 26.2703L39.0625 28.325C38.853 27.7984 38.4884 27.348 38.0171 27.0332C37.5459 26.7185 36.9901 26.5543 36.4234 26.5625C36.1762 26.5377 35.9265 26.5648 35.6903 26.6418C35.454 26.7189 35.2364 26.8444 35.0514 27.0102C34.8663 27.176 34.7178 27.3785 34.6153 27.6049C34.5129 27.8313 34.4587 28.0765 34.4562 28.325C34.4562 29.5578 35.2203 30.0578 36.9844 30.825L38.0125 31.2656C41.5062 32.7641 43.4812 34.2906 43.4812 37.7234C43.4812 41.425 40.5734 43.4531 36.6687 43.4531C35.1475 43.5491 33.6309 43.2032 32.3017 42.4572C30.9724 41.7113 29.8872 40.5969 29.1766 39.2484L32.5141 37.3047ZM17.9906 37.6609C18.6359 38.8062 19.2234 39.775 20.6359 39.775C21.9859 39.775 22.8391 39.2469 22.8391 37.1922V23.2125H26.95V37.2469C26.95 41.5031 24.45 43.4406 20.8109 43.4406C19.5246 43.5109 18.2471 43.1904 17.1464 42.5211C16.0456 41.8517 15.1732 40.865 14.6437 39.6906L17.9906 37.6609Z" fill="black"/>
-</svg>
diff --git a/backend/data/icons/python--fastapi.svg b/backend/data/icons/python--fastapi.svg
deleted file mode 100644
index a7be660d..00000000
--- a/backend/data/icons/python--fastapi.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" height="50" width="50" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 154 154"><circle cx="77" cy="77" fill="#05998b" r="77"/><path d="M81.375 18.667l-38.75 70H77.5l-3.875 46.666 38.75-70H77.5z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/backend/data/icons/python--tkinter.svg b/backend/data/icons/python--tkinter.svg
deleted file mode 100644
index 9316a704..00000000
--- a/backend/data/icons/python--tkinter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50" height="50"><style>.a{fill:#f14729}.b{fill:#1e5cb3}.c{fill:#fff}.d{fill:#fff200}</style><path class="a" d="m19.9 48.8l20.4 0.7-1.2-25.2 1.9-23-9.4 0.5-4.4-1.8-19.2 1 1 22.7-1 26.2z"/><path class="b" d="m26.5 30.7l-1.8 0.4 1-2.3 0.9-6.3-1.1-0.3 1.4-2 1.7-6.6-3.1 0.7c0 0 1.7-3 3.4-5l-2.3-1.7c0 0-7.3 3.2-5.3 13.7l-1.5-0.3 1.4 11-1.2 0.3c0 0 1.3 2.6 3 3.8 0.2 0.1-2.2-8.6 0.3-17.3l0.3 0.6c0 0-2 9.2 0 16.7 0 0 0.1 0.2 1.1 0.1 0 0 1.8-3.5 1.8-5.5z"/><path class="c" d="m13.6 38.5h0.3v-0.7q0.3 0 0.5 0v0.7h0.5v0.2h-0.5v1.8c0 0.1 0 0.3 0.2 0.3 0.2 0 0.2-0.1 0.3-0.2h0.1c-0.1 0.3-0.4 0.4-0.6 0.4-0.4 0-0.5-0.2-0.5-0.5v-1.8h-0.3z"/><path class="c" d="m18.9 40.2c-0.2 0.4-0.4 0.8-1.1 0.8-0.9 0-1.2-0.8-1.2-1.2 0-1.1 0.9-1.3 1.2-1.3 0.4 0 1 0.1 1 0.6 0 0.2-0.1 0.3-0.3 0.3-0.2 0-0.3-0.1-0.3-0.3 0-0.2 0.2-0.2 0.2-0.3 0-0.1-0.4-0.2-0.5-0.2-0.6 0-0.7 0.4-0.7 1.2 0 0.4 0.1 0.6 0.1 0.7q0.1 0.3 0.6 0.4c0.3 0 0.7-0.3 0.8-0.7z"/><path class="c" d="m20.5 40.9v-0.1h0.5v-3.9h-0.5v-0.1h0.3q0.3 0 0.7-0.1v4.1h0.4v0.1z"/><path class="c" d="m26.3 38.5h0.4v-0.7q0.2 0 0.4 0v0.7h0.5v0.2h-0.5v1.8c0 0.1 0 0.3 0.2 0.3 0.2 0 0.3-0.1 0.4-0.2h0.1c-0.1 0.3-0.4 0.4-0.7 0.4-0.4 0-0.5-0.2-0.5-0.5v-1.8h-0.3z"/><path class="c" d="m30.8 38.7v-0.2h1v0.2h-0.4l-0.8 0.7 1.1 1.4h0.3v0.1h-1.2v-0.1h0.3l-1-1.2 1.1-0.9zm-1.5 2.2v-0.1h0.3v-3.9h-0.3v-0.1h0.1q0.4 0 0.7-0.1v4.1h0.4v0.1z"/><path class="c" d="m24.1 18c0 0-1.1 4.8-0.8 12.5 0.1 2.3 0.4 4.4 0.7 6.2 0.2 1.7 0.3 2.2 0.9 4.2l-0.1 1.2c0 0-4.2-13.3-0.7-24.1z"/><path class="c" d="m26.7 13.9c0 0 0.9-0.4 2.3-0.6 0 0 1.4 2.7-2.2 7.3 0 0 2.2-4.8 1.7-6.3 0 0-0.6-0.4-1.8-0.4z"/><path class="c" d="m26.2 22c0 0 0.9 0.2 1.3-0.1 0 0-0.8 3.1-0.6 4.8 0.2 1.8-1.3 2.9-1.3 2.9 0 0 1.3-1.7 0.9-3-0.3-0.9 0-3.3 0.4-4 0 0-0.4-0.1-0.7-0.6z"/><path class="c" d="m25.4 30.3c0 0 1.4-0.2 1.5-0.9 0 0 0.2 4.2-1.7 5.9 0 0 1.4-2.3 1.2-4.6z"/><path class="c" d="m21.5 32c0 0-0.5 0.5-1.8-0.6 0 0 0.4 2.8 3.1 4.1 0 0-1.9-1.3-2.4-2.8 0 0 0.7-0.2 1.1-0.7z"/><path class="c" d="m21 30.9c0 0-1.8-4.6-1.4-10.9 0 0 0.4 1.2 1.8 1.6 0 0-0.7 0.1-1 0 0 0-1 2.7 0.6 9.3z"/><path class="c" d="m28.7 9.4c0 0-0.7-5-5 0.1-3.4 4-3 7.4-2.8 9.4 0.1 0.5-0.6-5.2 3.1-8.9 3.8-3.7 4.6-0.8 4.7-0.6z"/><path class="d" d="m22.4 5.1c0 0-3.4-1-4.4 10.2 0 0-0.9-3.5 1.3-8.3 2.1-4.9 3.1-1.9 3.1-1.9z"/><path class="d" d="m18.2 4.3c0 0-1.7 2.6-1.3 5.3 0 0-1.3-5.2 1.3-5.3z"/><path class="d" d="m30.8 11.5c0 0 2.1-0.7-0.8 6.8 0 0 1.5-2.2 2.4-5.7 0.6-2.2-1.6-1.1-1.6-1.1z"/><path class="d" d="m34.1 10.9c0 0 1.5 1.3 0.4 3 0 0 2.6-2.6-0.4-3z"/><path class="d" d="m14 43.6c0 0.1 0 0.2-0.1 0.2-0.2 0-0.2-0.1-0.2-0.2v-0.6h0.1v0.5c0 0.2 0 0.3 0.1 0.3 0.1 0 0.1-0.1 0.1-0.3v-0.5z"/><path class="d" d="m15.1 43v0.5q0 0.1 0 0.2 0-0.1 0-0.1l-0.2-0.6h-0.1v0.8h0.1v-0.5q0-0.1-0.1-0.2 0.1 0.1 0.1 0.1l0.2 0.6z"/><path class="d" d="m16 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m16.9 43.8h-0.1l-0.1-0.8 0.2 0.6q0 0 0 0.1 0-0.1 0-0.1l0.1-0.6h0.1z"/><path class="d" d="m18 43h-0.2v0.3h0.2v0.1h-0.2v0.4h0.2-0.2v-0.8h0.2z"/><path class="d" d="m18.8 43.8v-0.8c0.2 0 0.3 0 0.3 0.2 0 0.1 0 0.2-0.2 0.2l0.2 0.4h-0.1l-0.2-0.4v0.4zm0.1-0.5h0.1c0.1 0 0.1 0 0.1-0.1 0-0.2-0.1-0.2-0.2-0.2z"/><path class="d" d="m20.1 43.1q0-0.1-0.1-0.1-0.1 0-0.1 0.2c0 0.1 0 0.1 0.1 0.2 0.1 0 0.2 0.1 0.2 0.2 0 0.1-0.1 0.2-0.3 0.2q0 0-0.1 0v-0.1q0.1 0.1 0.1 0.1c0.1 0 0.2-0.1 0.2-0.2 0-0.1-0.1-0.1-0.2-0.2-0.1 0-0.1-0.1-0.1-0.2 0-0.1 0-0.3 0.2-0.3q0 0 0.1 0.1z"/><path class="d" d="m21.2 43.8h-0.1v-0.2h-0.2v0.2h-0.1l0.2-0.8zm-0.1-0.3l-0.1-0.3q0-0.1 0-0.2 0 0.1 0 0.2l-0.1 0.3z"/><path class="d" d="m22 43.8h0.2-0.3v-0.8h0.1z"/><path class="d" d="m24 43.1q-0.1-0.1-0.2-0.1-0.1 0-0.1 0.2c0 0.1 0.1 0.1 0.2 0.2 0 0 0.1 0.1 0.1 0.2 0 0.1-0.1 0.2-0.2 0.2q-0.1 0-0.1 0v-0.1q0 0.1 0.1 0.1c0.1 0 0.1-0.1 0.1-0.2 0-0.1 0-0.1-0.1-0.2-0.1 0-0.2-0.1-0.2-0.2 0-0.1 0.1-0.3 0.2-0.3q0.1 0 0.2 0.1z"/><path class="d" d="m25 43.7q0 0.1-0.1 0.1c-0.1 0-0.1-0.3-0.1-0.4 0-0.2 0-0.4 0.1-0.4q0.1 0 0.1 0.1v-0.1q0-0.1-0.1-0.1c-0.2 0-0.2 0.4-0.2 0.5 0 0.2 0 0.4 0.2 0.4q0.1 0 0.1 0z"/><path class="d" d="m25.8 43.8v-0.8c0.2 0 0.3 0 0.3 0.2 0 0.1 0 0.2-0.2 0.2l0.2 0.4h-0.1l-0.2-0.4v0.4zm0.1-0.5c0.2 0 0.2 0 0.2-0.1 0-0.2-0.1-0.2-0.2-0.2z"/><path class="d" d="m26.9 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m27.6 43.8v-0.8h0.1c0.1 0 0.3 0 0.3 0.2 0 0.2-0.1 0.2-0.3 0.2v0.4zm0.1-0.5c0.1 0 0.1 0 0.1-0.1 0-0.1 0-0.2-0.1-0.2z"/><path class="d" d="m28.9 43h-0.3 0.1v0.8h0.1v-0.8h0.1z"/><path class="d" d="m29.7 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m30.8 43.8h-0.1l-0.2-0.6q0 0 0-0.1 0 0.1 0 0.2v0.5h-0.1v-0.8h0.1l0.2 0.6q0 0 0 0.1 0-0.1 0-0.2v-0.5h0.1z"/><path class="d" d="m31.7 43.4h0.2v0.1c0 0.2 0 0.3-0.2 0.3-0.2 0-0.2-0.2-0.2-0.4 0-0.2 0-0.5 0.2-0.5q0.2 0.1 0.2 0.2h-0.1c0 0 0-0.1-0.1-0.1-0.1 0-0.1 0.2-0.1 0.4 0 0.3 0 0.4 0.1 0.4 0.1 0 0.1-0.1 0.1-0.3v-0.1h-0.1z"/></svg>
\ No newline at end of file
diff --git a/backend/data/icons/python.svg b/backend/data/icons/python.svg
deleted file mode 100644
index 3755e98e..00000000
--- a/backend/data/icons/python.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="python-logo-title python-logo-description">
-<title id="python-logo-title">Python Logo</title>
-<desc id="python-logo-description">A blue and yellow snake symbol forming a plus with a somewhat circular or rounded shape</desc>
-<path d="M24.7621 4.78437C23.1129 4.79218 21.5387 4.93242 20.1528 5.17773C16.0707 5.89882 15.3301 7.4082 15.3301 10.1922V13.8684H24.9758V15.0937H11.7098C8.90666 15.0937 6.45197 16.7785 5.684 19.9848C4.79806 23.6586 4.759 25.9516 5.684 29.7879C6.36955 32.6437 8.00705 34.6781 10.8106 34.6781H14.1274V30.2711C14.1274 27.0871 16.8817 24.2789 20.1531 24.2789H29.7879C32.4699 24.2789 34.6106 22.0703 34.6106 19.3773V10.1926C34.6106 7.57812 32.4051 5.61445 29.7879 5.17812C28.1301 4.90234 26.411 4.77695 24.7621 4.78437ZM19.5457 7.74101C20.5418 7.74101 21.3559 8.56796 21.3559 9.58515C21.3559 10.598 20.5422 11.4172 19.5457 11.4172C18.5457 11.4172 17.736 10.598 17.736 9.58515C17.7356 8.56796 18.5457 7.74101 19.5457 7.74101Z" fill="url(#paint0_linear_98_155)"/>
-<path d="M35.8133 15.0937V19.3773C35.8133 22.6977 32.9977 25.4926 29.7875 25.4926H20.1527C17.5137 25.4926 15.3301 27.7516 15.3301 30.3945V39.5801C15.3301 42.1937 17.6027 43.7316 20.1527 44.4812C23.2059 45.3785 26.134 45.541 29.7875 44.4812C32.2156 43.7777 34.6102 42.3629 34.6102 39.5801V35.9035H24.9758V34.6777H39.4336C42.2367 34.6777 43.282 32.7227 44.257 29.7875C45.2641 26.766 45.2207 23.8602 44.257 19.9844C43.5641 17.1934 42.241 15.0934 39.4336 15.0934L35.8133 15.0937ZM30.3941 38.3543C31.3945 38.3543 32.2043 39.1734 32.2043 40.1871C32.2043 41.2035 31.3941 42.0305 30.3941 42.0305C29.398 42.0305 28.5844 41.2035 28.5844 40.1871C28.5844 39.1734 29.398 38.3543 30.3941 38.3543Z" fill="url(#paint1_linear_98_155)"/>
-<path opacity="0.444" d="M38.0113 46.7176C38.0113 48.1016 32.2238 49.2238 25.0851 49.2238C17.9461 49.2238 12.1586 48.1016 12.1586 46.7176C12.1586 45.3336 17.9457 44.2109 25.0851 44.2109C32.2238 44.2109 38.0113 45.3328 38.0113 46.7176Z" fill="url(#paint2_radial_98_155)"/>
-<defs>
-<linearGradient id="paint0_linear_98_155" x1="4.03786" y1="5.93383" x2="26.2854" y2="24.9064" gradientUnits="userSpaceOnUse">
-<stop stop-color="#5A9FD4"/>
-<stop offset="1" stop-color="#306998"/>
-</linearGradient>
-<linearGradient id="paint1_linear_98_155" x1="34.6558" y1="36.7001" x2="26.6775" y2="25.5118" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FFD43B"/>
-<stop offset="1" stop-color="#FFE873"/>
-</linearGradient>
-<radialGradient id="paint2_radial_98_155" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.0329 46.6458) rotate(-90) scale(2.50716 11.021)">
-<stop stop-color="#B8B8B8" stop-opacity="0.498"/>
-<stop offset="1" stop-color="#7F7F7F" stop-opacity="0"/>
-</radialGradient>
-</defs>
-</svg>
diff --git a/backend/data/icons/regex.svg b/backend/data/icons/regex.svg
deleted file mode 100644
index bdbe2fc2..00000000
--- a/backend/data/icons/regex.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 30.242188 34.101562 L 30.242188 22.550781 L 20.726562 28.382812 L 17.371094 22.539062 L 27.300781 17.105469 L 17.371094 11.589844 L 20.742188 5.851562 L 30.242188 11.65625 L 30.242188 0.0585938 L 37.019531 0.0585938 L 37.019531 11.65625 L 46.605469 5.851562 L 50 11.589844 L 40.027344 17.105469 L 50 22.539062 L 46.59375 28.40625 L 37.019531 22.550781 L 37.019531 34.101562 Z M 14.175781 42.851562 C 14.175781 37.414062 8.25 34 3.535156 36.714844 C -1.179688 39.433594 -1.179688 46.265625 3.535156 48.984375 C 8.25 51.703125 14.175781 48.289062 14.175781 42.851562 Z M 14.175781 42.851562 "/>
-</g>
-</svg>
diff --git a/backend/data/icons/ruby.svg b/backend/data/icons/ruby.svg
deleted file mode 100644
index 10ec5836..00000000
--- a/backend/data/icons/ruby.svg
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<defs>
-<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="174.0737" y1="215.548798" x2="132.276306" y2="141.753296" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(98.431373%,46.27451%,33.333333%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(98.431373%,46.27451%,33.333333%);stop-opacity:1;"/>
-<stop offset="0.41" style="stop-color:rgb(89.411765%,16.862745%,11.764706%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(60%,0%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(60%,0%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="194.895004" y1="153.557602" x2="141.027603" y2="117.409302" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="151.795395" y1="217.785202" x2="97.929703" y2="181.638" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="38.696301" y1="127.390602" x2="47.046902" y2="181.661407" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.23" style="stop-color:rgb(89.803922%,44.705882%,32.156863%);stop-opacity:1;"/>
-<stop offset="0.46" style="stop-color:rgb(87.058824%,23.137255%,12.54902%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.098039%,0%,1.176471%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.098039%,0%,1.176471%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="96.132797" y1="76.715302" x2="99.209602" y2="132.102097" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.23" style="stop-color:rgb(89.411765%,44.313725%,30.588235%);stop-opacity:1;"/>
-<stop offset="0.56" style="stop-color:rgb(74.509804%,10.196078%,5.098039%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="147.102997" y1="25.521" x2="156.314102" y2="65.216202" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.18" style="stop-color:rgb(89.411765%,38.823529%,25.882353%);stop-opacity:1;"/>
-<stop offset="0.4" style="stop-color:rgb(78.431373%,14.117647%,6.27451%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear6" gradientUnits="userSpaceOnUse" x1="118.976097" y1="11.5415" x2="158.668594" y2="-8.3048" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.54" style="stop-color:rgb(78.431373%,12.156863%,6.666667%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(74.901961%,3.529412%,1.960784%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(74.901961%,3.529412%,1.960784%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear7" gradientUnits="userSpaceOnUse" x1="3.9033" y1="113.554703" x2="7.1702" y2="146.262802" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.31" style="stop-color:rgb(87.058824%,25.098039%,14.117647%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(74.901961%,9.803922%,4.313725%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(74.901961%,9.803922%,4.313725%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear8" gradientUnits="userSpaceOnUse" x1="-18.5557" y1="155.104507" x2="135.015198" y2="-2.8093" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(74.117647%,0%,7.058824%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(74.117647%,0%,7.058824%);stop-opacity:1;"/>
-<stop offset="0.07" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.17" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.27" style="stop-color:rgb(78.431373%,18.431373%,10.980392%);stop-opacity:1;"/>
-<stop offset="0.33" style="stop-color:rgb(50.980392%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.46" style="stop-color:rgb(63.921569%,8.627451%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.72" style="stop-color:rgb(70.196078%,7.45098%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(90.980392%,14.901961%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(90.980392%,14.901961%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear9" gradientUnits="userSpaceOnUse" x1="99.074699" y1="171.033203" x2="52.817699" y2="159.616592" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(54.901961%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(54.901961%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.54" style="stop-color:rgb(60%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,5.490196%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,5.490196%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear10" gradientUnits="userSpaceOnUse" x1="178.525894" y1="115.514603" x2="137.432693" y2="78.683998" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(49.411765%,6.666667%,4.313725%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(49.411765%,6.666667%,4.313725%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(61.960784%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(61.960784%,4.705882%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear11" gradientUnits="userSpaceOnUse" x1="193.623505" y1="47.937" x2="173.154205" y2="26.053801" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(47.45098%,7.45098%,5.098039%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(47.45098%,7.45098%,5.098039%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(61.960784%,7.058824%,4.313725%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(61.960784%,7.058824%,4.313725%);stop-opacity:1;"/>
-</linearGradient>
-<radialGradient id="radial0" gradientUnits="userSpaceOnUse" cx="143.831497" cy="79.388199" fx="143.831497" fy="79.388199" r="50.357601" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(49.411765%,5.490196%,3.137255%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(49.411765%,5.490196%,3.137255%);stop-opacity:1;"/>
-</radialGradient>
-<radialGradient id="radial1" gradientUnits="userSpaceOnUse" cx="74.0923" cy="145.751007" fx="74.0923" fy="145.751007" r="66.943703" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(63.921569%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(63.921569%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(50.196078%,5.490196%,3.137255%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(50.196078%,5.490196%,3.137255%);stop-opacity:1;"/>
-</radialGradient>
-<linearGradient id="linear12" gradientUnits="userSpaceOnUse" x1="26.669901" y1="197.335907" x2="9.9887" y2="140.742004" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(54.509804%,12.941176%,7.843137%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(54.509804%,12.941176%,7.843137%);stop-opacity:1;"/>
-<stop offset="0.43" style="stop-color:rgb(61.960784%,6.27451%,3.921569%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(70.196078%,6.27451%,4.705882%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(70.196078%,6.27451%,4.705882%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear13" gradientUnits="userSpaceOnUse" x1="154.641098" y1="9.7979" x2="192.039001" y2="26.305901" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(70.196078%,6.27451%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(70.196078%,6.27451%,0%);stop-opacity:1;"/>
-<stop offset="0.44" style="stop-color:rgb(56.862745%,5.882353%,3.137255%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(47.45098%,10.980392%,7.058824%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(47.45098%,10.980392%,7.058824%);stop-opacity:1;"/>
-</linearGradient>
-</defs>
-<g id="surface1">
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear0);" d="M 38.761719 32.933594 L 10.195312 49.894531 L 47.183594 47.382812 L 50.03125 10.089844 Z M 38.761719 32.933594 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear1);" d="M 47.246094 47.359375 L 44.066406 25.417969 L 35.40625 36.851562 Z M 47.246094 47.359375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear2);" d="M 47.289062 47.359375 L 23.996094 45.53125 L 10.320312 49.847656 Z M 47.289062 47.359375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear3);" d="M 10.355469 49.851562 L 16.171875 30.789062 L 3.367188 33.527344 Z M 10.355469 49.851562 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear4);" d="M 35.402344 36.914062 L 30.050781 15.945312 L 14.730469 30.304688 Z M 35.402344 36.914062 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear5);" d="M 48.816406 16.238281 L 34.335938 4.410156 L 30.304688 17.449219 Z M 48.816406 16.238281 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear6);" d="M 42.046875 0.195312 L 33.527344 4.902344 L 28.152344 0.132812 Z M 42.046875 0.195312 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear7);" d="M 0 39.921875 L 3.566406 33.414062 L 0.683594 25.660156 Z M 0 39.921875 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 0.488281 25.417969 L 3.394531 33.652344 L 16.011719 30.824219 L 30.417969 17.433594 L 34.484375 4.519531 L 28.082031 0 L 17.199219 4.074219 C 13.769531 7.261719 7.117188 13.574219 6.875 13.691406 C 6.640625 13.8125 2.480469 21.667969 0.488281 25.417969 Z M 0.488281 25.417969 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear8);" d="M 10.6875 10.617188 C 18.117188 3.25 27.699219 -1.105469 31.375 2.605469 C 35.050781 6.316406 31.152344 15.332031 23.722656 22.695312 C 16.289062 30.0625 6.828125 34.65625 3.152344 30.945312 C -0.523438 27.238281 3.253906 17.984375 10.6875 10.617188 Z M 10.6875 10.617188 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear9);" d="M 10.355469 49.84375 L 16.125 30.722656 L 35.296875 36.882812 C 28.367188 43.382812 20.65625 48.875 10.355469 49.84375 Z M 10.355469 49.84375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear10);" d="M 30.445312 17.394531 L 35.367188 36.890625 C 41.15625 30.804688 46.355469 24.257812 48.898438 16.160156 Z M 30.445312 17.394531 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear11);" d="M 48.847656 16.261719 C 50.816406 10.316406 51.273438 1.789062 41.984375 0.203125 L 34.363281 4.414062 Z M 48.847656 16.261719 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:rgb(61.960787%,7.058824%,3.529412%);fill-opacity:1;" d="M 0 39.835938 C 0.273438 49.648438 7.351562 49.792969 10.367188 49.878906 L 3.402344 33.613281 Z M 0 39.835938 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#radial0);" d="M 30.472656 17.425781 C 34.921875 20.160156 43.890625 25.652344 44.070312 25.753906 C 44.351562 25.914062 47.9375 19.710938 48.75 16.207031 Z M 30.472656 17.425781 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#radial1);" d="M 16.117188 30.722656 L 23.835938 45.609375 C 28.398438 43.136719 31.972656 40.121094 35.246094 36.890625 Z M 16.117188 30.722656 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear12);" d="M 3.371094 33.632812 L 2.277344 46.652344 C 4.339844 49.472656 7.179688 49.71875 10.15625 49.496094 C 8.003906 44.136719 3.699219 33.417969 3.371094 33.632812 Z M 3.371094 33.632812 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear13);" d="M 34.316406 4.445312 L 49.648438 6.597656 C 48.832031 3.132812 46.316406 0.894531 42.035156 0.195312 Z M 34.316406 4.445312 "/>
-</g>
-</svg>
diff --git a/backend/data/icons/rust.svg b/backend/data/icons/rust.svg
deleted file mode 100644
index 3f62b3c2..00000000
--- a/backend/data/icons/rust.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="rust-logo-title rust-logo-description">
-<title id="rust-logo-title">Rust Logo</title>
-<desc id="rust-logo-description">A black gear with the letter R in the center</desc>
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 24.671875 8.222656 C 15.621094 8.222656 8.257812 15.589844 8.257812 24.636719 C 8.257812 33.679688 15.625 41.046875 24.671875 41.046875 C 33.714844 41.046875 41.082031 33.679688 41.082031 24.636719 C 41.082031 15.589844 33.714844 8.222656 24.671875 8.222656 Z M 24.644531 9.679688 C 25.230469 9.695312 25.695312 10.175781 25.695312 10.761719 C 25.695312 11.355469 25.210938 11.839844 24.613281 11.839844 C 24.019531 11.839844 23.535156 11.355469 23.535156 10.761719 C 23.535156 10.46875 23.652344 10.1875 23.863281 9.984375 C 24.070312 9.78125 24.355469 9.671875 24.644531 9.679688 Z M 27.117188 11.457031 C 30.953125 12.175781 34.28125 14.546875 36.214844 17.9375 L 34.941406 20.8125 C 34.722656 21.308594 34.949219 21.890625 35.441406 22.113281 L 37.890625 23.203125 C 37.96875 23.96875 37.976562 24.738281 37.921875 25.507812 L 36.554688 25.507812 C 36.421875 25.507812 36.363281 25.597656 36.363281 25.730469 L 36.363281 26.355469 C 36.363281 27.828125 35.535156 28.148438 34.804688 28.230469 C 34.109375 28.308594 33.34375 27.9375 33.246094 27.515625 C 32.835938 25.210938 32.15625 24.722656 31.078125 23.871094 C 32.417969 23.023438 33.804688 21.769531 33.804688 20.097656 C 33.804688 18.289062 32.566406 17.148438 31.722656 16.589844 C 30.535156 15.808594 29.222656 15.652344 28.867188 15.652344 L 14.769531 15.652344 C 16.71875 13.476562 19.332031 12 22.203125 11.457031 L 23.867188 13.203125 C 24.242188 13.59375 24.863281 13.609375 25.257812 13.234375 Z M 11.769531 19.453125 C 12.355469 19.46875 12.820312 19.945312 12.820312 20.53125 C 12.820312 21.128906 12.335938 21.609375 11.738281 21.609375 C 11.144531 21.609375 10.660156 21.128906 10.660156 20.53125 C 10.660156 20.238281 10.777344 19.960938 10.988281 19.757812 C 11.195312 19.554688 11.480469 19.441406 11.769531 19.453125 Z M 37.515625 19.5 C 38.101562 19.515625 38.566406 19.996094 38.566406 20.578125 C 38.566406 21.175781 38.082031 21.660156 37.484375 21.660156 C 36.890625 21.660156 36.40625 21.175781 36.40625 20.578125 C 36.40625 20.289062 36.523438 20.007812 36.734375 19.804688 C 36.941406 19.601562 37.226562 19.492188 37.515625 19.5 Z M 13.804688 19.671875 L 15.6875 19.671875 L 15.6875 28.160156 L 11.890625 28.160156 C 11.417969 26.511719 11.273438 24.789062 11.457031 23.085938 L 13.785156 22.050781 C 14.28125 21.828125 14.507812 21.25 14.285156 20.753906 Z M 21.660156 19.765625 L 26.140625 19.765625 C 26.375 19.765625 27.777344 20.03125 27.777344 21.082031 C 27.777344 21.953125 26.703125 22.265625 25.816406 22.265625 L 21.65625 22.265625 Z M 21.660156 25.859375 L 25.09375 25.859375 C 25.40625 25.859375 26.769531 25.953125 27.203125 27.695312 C 27.339844 28.230469 27.640625 29.972656 27.847656 30.53125 C 28.050781 31.15625 28.882812 32.40625 29.765625 32.40625 L 35.371094 32.40625 C 34.996094 32.910156 34.585938 33.386719 34.140625 33.828125 L 31.859375 33.339844 C 31.328125 33.226562 30.804688 33.566406 30.691406 34.097656 L 30.148438 36.625 C 26.625 38.222656 22.578125 38.203125 19.070312 36.574219 L 18.527344 34.046875 C 18.414062 33.515625 17.890625 33.171875 17.359375 33.289062 L 15.128906 33.765625 C 14.714844 33.339844 14.328125 32.886719 13.976562 32.40625 L 24.832031 32.40625 C 24.953125 32.40625 25.039062 32.386719 25.039062 32.269531 L 25.039062 28.429688 C 25.039062 28.320312 24.953125 28.296875 24.832031 28.296875 L 21.65625 28.296875 Z M 16.648438 34.65625 C 17.234375 34.671875 17.699219 35.152344 17.699219 35.734375 C 17.699219 36.332031 17.214844 36.816406 16.617188 36.816406 C 16.023438 36.816406 15.539062 36.332031 15.539062 35.734375 C 15.539062 35.445312 15.65625 35.164062 15.867188 34.960938 C 16.074219 34.757812 16.359375 34.648438 16.648438 34.65625 Z M 32.640625 34.703125 C 33.222656 34.722656 33.6875 35.199219 33.6875 35.785156 C 33.6875 36.382812 33.203125 36.863281 32.609375 36.863281 C 32.011719 36.863281 31.527344 36.382812 31.527344 35.785156 C 31.527344 35.492188 31.644531 35.214844 31.855469 35.011719 C 32.0625 34.804688 32.347656 34.695312 32.640625 34.703125 Z M 32.640625 34.703125 "/>
-<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 115.68375 70.95375 C 115.68375 95.6025 95.70375 115.5825 71.055 115.5825 C 46.40625 115.5825 26.415 95.6025 26.415 70.95375 C 26.415 46.305 46.40625 26.325 71.055 26.325 C 95.70375 26.325 115.68375 46.305 115.68375 70.95375 Z M 114.84 66.645 L 121.80375 70.95375 L 114.84 75.2625 L 120.825 80.85375 L 113.16375 83.7225 L 117.945 90.37125 L 109.845 91.6875 L 113.25375 99.14625 L 105.06375 98.865 L 106.9425 106.84125 L 98.955 104.9625 L 99.2475 113.1525 L 91.78875 109.755 L 90.4725 117.84375 L 83.82375 113.0625 L 80.955 120.72375 L 75.36375 114.73875 L 71.055 121.7025 L 66.735 114.73875 L 61.155 120.72375 L 58.275 113.0625 L 51.62625 117.84375 L 50.31 109.755 L 42.85125 113.1525 L 43.14375 104.9625 L 35.15625 106.84125 L 37.035 98.865 L 28.845 99.14625 L 32.25375 91.6875 L 24.165 90.37125 L 28.935 83.7225 L 21.285 80.85375 L 27.25875 75.2625 L 20.295 70.95375 L 27.25875 66.645 L 21.285 61.05375 L 28.935 58.185 L 24.165 51.525 L 32.25375 50.20875 L 28.845 42.75 L 37.035 43.0425 L 35.15625 35.055 L 43.14375 36.945 L 42.85125 28.755 L 50.31 32.1525 L 51.62625 24.06375 L 58.275 28.845 L 61.155 21.18375 L 66.735 27.1575 L 71.055 20.205 L 75.36375 27.1575 L 80.955 21.18375 L 83.82375 28.845 L 90.4725 24.06375 L 91.78875 32.1525 L 99.2475 28.755 L 98.955 36.945 L 106.9425 35.055 L 105.06375 43.0425 L 113.25375 42.75 L 109.845 50.20875 L 117.945 51.525 L 113.16375 58.185 L 120.825 61.05375 Z M 114.84 66.645 " transform="matrix(0.347222,0,0,0.347222,0,0)"/>
-</g>
-</svg>
diff --git a/backend/data/icons/scss.svg b/backend/data/icons/scss.svg
deleted file mode 100644
index e68fea23..00000000
--- a/backend/data/icons/scss.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="scss-logo-title scss-logo-description">
-<title id="scss-logo-title">Sass or SCSS Logo</title>
-<desc id="scss-logo-description">The word Sass in pink cursive font</desc>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M0.476196 21.9359C0.476196 22.2105 0.557056 22.3918 0.602368 22.568C0.897681 23.7137 1.53245 24.6969 2.28557 25.5937C3.35823 26.8719 4.6719 27.9008 6.0176 28.8684C7.18479 29.7074 8.37581 30.5277 9.54768 31.3605C9.74885 31.5035 9.93909 31.668 10.1574 31.8434C9.96956 31.9449 9.81331 32.0344 9.65081 32.1168C8.10432 32.9012 6.61643 33.7805 5.24495 34.8457C4.41838 35.4879 3.61917 36.1703 3.05471 37.0621C2.14651 38.4965 1.82502 40.0246 2.50198 41.6562C2.69963 42.1328 3.0012 42.5445 3.42659 42.8488C3.56448 42.9473 3.71917 43.0449 3.88049 43.0832C4.29377 43.1805 4.71487 43.2441 5.13323 43.3211L6.31799 43.3203C7.62815 43.2035 8.82073 42.7547 9.89846 42.0109C11.5828 40.8484 12.7176 39.2898 13.2055 37.2895C13.5602 35.8355 13.5746 34.3801 13.1567 32.9328C13.1165 32.7988 13.0704 32.6666 13.0184 32.5367C12.9676 32.4066 12.9078 32.2801 12.8375 32.118L15.5235 30.5734L15.5637 30.6078C15.5149 30.7676 15.4629 30.927 15.4188 31.0883C15.0996 32.2539 14.8875 33.4398 14.9637 34.6496C15.0449 35.9387 15.4047 37.1453 16.1594 38.2223C16.7696 39.0934 18.2235 39.1258 18.8719 38.2516C19.102 37.941 19.325 37.6164 19.4926 37.2699C19.9305 36.3656 20.336 35.4453 20.7543 34.5313L20.8274 34.3641C20.7973 34.7969 20.7621 35.177 20.7461 35.5574C20.7211 36.1516 20.7559 36.7422 20.959 37.3074C21.1328 37.791 21.4285 38.1523 21.9824 38.216C22.3614 38.2594 22.6633 38.0859 22.9418 37.866C23.3732 37.5249 23.7308 37.0998 23.993 36.6164C24.7356 35.2527 25.4981 33.8973 26.1711 32.4992C26.8992 30.9871 27.536 29.4309 28.2121 27.893L28.3239 27.6203C28.4836 28.248 28.5949 28.8629 28.8 29.4449C29.0383 30.1203 29.3332 30.7797 29.6543 31.4207C29.8063 31.7234 29.7887 31.9199 29.5781 32.1738C28.6969 33.2363 27.8309 34.3117 26.9641 35.3859C26.7723 35.623 26.5813 35.8645 26.4215 36.1234C26.3246 36.287 26.2609 36.468 26.234 36.6562C26.2071 36.8295 26.2484 37.0065 26.3491 37.15C26.4498 37.2935 26.6022 37.3925 26.7742 37.4262C27.1216 37.5008 27.4777 37.5261 27.8321 37.5016C29.0418 37.4125 30.1403 36.9879 31.1114 36.2684C32.3696 35.3363 32.7735 34.0645 32.4688 32.557C32.3864 32.148 32.2406 31.7504 32.0989 31.3563C32.0352 31.1785 32.0309 31.0539 32.1469 30.8883C33.1528 29.452 34.0121 27.9281 34.8114 26.3691C34.843 26.3078 34.8754 26.2465 34.9309 26.1809C35.1899 27.5285 35.5797 28.8273 36.2781 30.0059C35.9219 30.3492 35.5692 30.6605 35.25 31.0035C34.5473 31.759 33.9379 32.5793 33.6199 33.5797C33.4832 34.0109 33.3781 34.4492 33.4391 34.9098C33.5336 35.625 34.1196 36.0898 34.8231 35.927C36.3285 35.5785 37.6281 34.8691 38.5778 33.6125C39.2168 32.7664 39.275 31.8227 39.0074 30.834C38.934 30.5652 38.8469 30.3008 38.7531 29.9926C39.1246 29.8773 39.4867 29.7391 39.8614 29.6535C41.8063 29.2098 43.7301 29.2871 45.6043 29.9895C46.6985 30.3996 47.5824 31.0859 48.1067 32.1656C48.7469 33.4855 48.393 34.7379 47.1489 35.5723C47.0328 35.65 46.9 35.7113 46.8039 35.8086C46.7732 35.8443 46.7502 35.886 46.7364 35.931C46.7226 35.9761 46.7183 36.0235 46.7239 36.0703C46.7321 36.1184 46.859 36.1785 46.9321 36.1777C47.341 36.1746 47.6727 35.9602 47.991 35.7398C48.7887 35.1879 49.3707 34.4453 49.4961 33.4676L49.5207 33.3941L49.4906 32.7574C49.4785 32.7207 49.4996 32.6844 49.4969 32.6566C49.3274 31.2328 48.5668 30.1285 47.4606 29.2629C46.1793 28.2609 44.6664 27.8484 43.0664 27.7832C41.7688 27.7273 40.4728 27.9268 39.252 28.3703C38.9016 28.4973 38.5543 28.6477 38.202 28.7895C38.1547 28.7039 38.1039 28.6219 38.0621 28.5371C37.7004 27.7965 37.2621 27.0887 37.1653 26.2395C37.0965 25.6363 37.0121 25.034 37.1555 24.4375C37.2934 23.8637 37.4731 23.2996 37.6422 22.7336C37.7293 22.4422 37.668 22.2789 37.3899 22.1477C37.2927 22.1 37.1893 22.0661 37.0828 22.0469C36.3992 21.9477 35.725 22.0043 35.0629 22.1969C34.8285 22.2652 34.6582 22.3965 34.6063 22.6559C34.5766 22.8047 34.516 22.9473 34.4739 23.0941C34.3008 23.7047 34.1781 24.327 33.8985 24.9086C33.1977 26.3676 32.3977 27.7715 31.5789 29.1652C31.4903 29.3156 31.3969 29.4633 31.2852 29.6457C30.9977 29.0441 30.691 28.5043 30.5981 27.8715C30.493 27.1559 30.4102 26.4414 30.5883 25.7313C30.7207 25.2016 30.8938 24.6816 31.0531 24.159C31.1285 23.9105 31.0938 23.7801 30.8688 23.6492C30.7551 23.5832 30.6266 23.5246 30.4985 23.5055C29.7975 23.3987 29.0813 23.4572 28.4071 23.6766C28.1949 23.7453 28.0836 23.8824 28.0188 24.1012C27.8281 24.7465 27.6656 25.4074 27.3981 26.0211C26.3145 28.5055 25.1996 30.977 24.086 33.448C23.8535 33.9641 23.5813 34.4621 23.3192 34.9645C23.2528 35.0918 23.1559 35.2039 23.0731 35.3234C23.0067 35.2449 22.9809 35.191 22.9813 35.1371C22.9832 34.8195 22.9453 34.4926 23.0059 34.1855C23.1918 33.257 23.3973 32.3324 23.6223 31.4125C23.8059 30.6523 24.0196 29.8992 24.2231 29.1441C24.2914 28.8914 24.2926 28.6551 24.111 28.4426C23.8059 28.0867 23.1684 28.0086 22.7903 28.2828L22.6231 28.3773L22.6555 28.1078C22.7352 27.5301 22.7512 26.9543 22.5926 26.3852C22.3949 25.6758 21.8887 25.2676 21.1528 25.2902C20.8098 25.3008 20.4496 25.3594 20.1321 25.4844C18.7965 26.0078 17.7696 26.9348 16.8953 28.05C16.8142 28.1535 16.7138 28.2403 16.5996 28.3055C15.4696 28.932 14.336 29.5508 13.2028 30.1719L11.9414 30.8629C11.6031 30.5402 11.2957 30.2055 10.9469 29.9215C9.88167 29.0527 8.79924 28.2055 7.72659 27.3465C6.77581 26.5852 5.85471 25.7922 5.15002 24.784C4.62581 24.034 4.28792 23.2133 4.25549 22.2859C4.21448 21.1043 4.54963 20.0246 5.1512 19.0195C5.92073 17.7336 6.97034 16.7016 8.12424 15.7668C9.34495 14.7785 10.6653 13.9395 12.0336 13.1734C13.9481 12.102 15.9172 11.1535 18.0285 10.5273C20.1934 9.88516 22.3899 9.51758 24.6555 9.77383C25.5461 9.87461 26.411 10.0785 27.2051 10.5141C27.8133 10.8473 28.3121 11.2836 28.5442 11.9656C28.7731 12.6367 28.766 13.3168 28.6074 13.9984C28.2852 15.3789 27.5293 16.5168 26.5781 17.5336C25.018 19.2004 23.1149 20.3352 20.9723 21.0848C19.7403 21.5162 18.4586 21.7897 17.1578 21.8984C16.0918 21.9879 15.0481 21.8934 14.0387 21.5227C13.3703 21.277 12.7883 20.9012 12.3203 20.3559C12.2367 20.2582 12.1297 20.1523 11.9739 20.2438C11.8211 20.3336 11.7942 20.4789 11.8453 20.6262C11.9309 20.8707 12.0098 21.1254 12.143 21.3441C12.4778 21.893 12.966 22.291 13.5035 22.6324C14.536 23.2891 15.6899 23.5098 16.8864 23.5609C18.702 23.6395 20.4735 23.3684 22.2199 22.8813C24.7133 22.1859 26.8813 20.9578 28.6199 19.0203C30.0676 17.407 31.1016 15.5863 31.3231 13.3879C31.4313 12.3148 31.316 11.2637 30.8137 10.2848C30.2688 9.22422 29.4024 8.43555 28.3664 7.89219C26.8578 7.10117 25.2297 6.64062 23.5492 6.64062H21.8656C19.8305 6.64062 17.8629 7.22383 15.9504 7.91953C14.5028 8.44648 13.0832 9.06836 11.7051 9.75664C8.70393 11.2562 5.90901 13.0645 3.61331 15.5508C2.46956 16.7895 1.5012 18.1562 0.944165 19.7656C0.776331 20.2462 0.631505 20.7345 0.510181 21.2289M11.3848 35.2965C11.2547 37.0383 10.4653 38.4504 9.17502 39.5941C8.44924 40.2371 7.61682 40.6949 6.64729 40.8559C6.29573 40.9141 5.93596 40.9281 5.59495 40.7824C5.10862 40.5746 4.99963 40.143 4.99026 39.6832C4.97581 38.9504 5.23245 38.2879 5.5844 37.6574C6.04377 36.8355 6.71721 36.209 7.43635 35.6238C8.56917 34.7016 9.79807 33.9211 11.0567 33.1844L11.1516 33.1453C11.3461 33.8641 11.4387 34.5738 11.3848 35.2965ZM21.2121 27.7266C21.1203 28.2828 21.0055 28.8395 20.843 29.3785C20.2813 31.2445 19.5598 33.0527 18.7797 34.8367C18.6356 35.1668 18.4258 35.468 18.2434 35.7809C18.2123 35.8289 18.1752 35.8728 18.1328 35.9113C17.9071 36.1344 17.693 36.1227 17.5789 35.8309C17.4461 35.4918 17.3645 35.1289 17.2942 34.7699C17.2469 34.5289 17.2582 34.2758 17.2434 34.0289C17.2586 32.2734 17.7942 30.6781 18.7028 29.193C19.0774 28.5805 19.4852 27.9969 20.1082 27.6094C20.3021 27.489 20.5118 27.3962 20.7313 27.3336C21.0633 27.2402 21.2672 27.3938 21.2121 27.7266ZM27.9168 36.2687L30.3266 33.4551C30.427 34.5 28.6508 36.5859 27.9168 36.2687ZM35.6133 34.3754C35.443 34.473 35.2574 34.5434 35.0828 34.6336C34.9231 34.7164 34.8703 34.6328 34.8656 34.4953C34.8634 34.4001 34.8756 34.3052 34.902 34.2137C35.2274 33.066 35.8262 32.0863 36.7172 31.2895L36.7797 31.2574C37.2035 32.443 36.7137 33.7449 35.6133 34.3754Z" fill="#CB6699"/>
-</svg>
diff --git a/backend/data/icons/typescript.svg b/backend/data/icons/typescript.svg
deleted file mode 100644
index c1d6592b..00000000
--- a/backend/data/icons/typescript.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="50px" height="50px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill="#000000">
-  <g id="SVGRepo_bgCarrier" stroke-width="0"/>
-  <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
-  <g id="SVGRepo_iconCarrier">
-    <rect x="2" y="2" width="28" height="28" rx="1.312" style="fill:#3178c6"/>
-    <path d="M18.245,23.759v3.068a6.492,6.492,0,0,0,1.764.575,11.56,11.56,0,0,0,2.146.192,9.968,9.968,0,0,0,2.088-.211,5.11,5.11,0,0,0,1.735-.7,3.542,3.542,0,0,0,1.181-1.266,4.469,4.469,0,0,0,.186-3.394,3.409,3.409,0,0,0-.717-1.117,5.236,5.236,0,0,0-1.123-.877,12.027,12.027,0,0,0-1.477-.734q-.6-.249-1.08-.484a5.5,5.5,0,0,1-.813-.479,2.089,2.089,0,0,1-.516-.518,1.091,1.091,0,0,1-.181-.618,1.039,1.039,0,0,1,.162-.571,1.4,1.4,0,0,1,.459-.436,2.439,2.439,0,0,1,.726-.283,4.211,4.211,0,0,1,.956-.1,5.942,5.942,0,0,1,.808.058,6.292,6.292,0,0,1,.856.177,5.994,5.994,0,0,1,.836.3,4.657,4.657,0,0,1,.751.422V13.9a7.509,7.509,0,0,0-1.525-.4,12.426,12.426,0,0,0-1.9-.129,8.767,8.767,0,0,0-2.064.235,5.239,5.239,0,0,0-1.716.733,3.655,3.655,0,0,0-1.171,1.271,3.731,3.731,0,0,0-.431,1.845,3.588,3.588,0,0,0,.789,2.34,6,6,0,0,0,2.395,1.639q.63.26,1.175.509a6.458,6.458,0,0,1,.942.517,2.463,2.463,0,0,1,.626.585,1.2,1.2,0,0,1,.23.719,1.1,1.1,0,0,1-.144.552,1.269,1.269,0,0,1-.435.441,2.381,2.381,0,0,1-.726.292,4.377,4.377,0,0,1-1.018.105,5.773,5.773,0,0,1-1.969-.35A5.874,5.874,0,0,1,18.245,23.759Zm-5.154-7.638h4V13.594H5.938v2.527H9.92V27.375h3.171Z" style="fill:#ffffff;fill-rule:evenodd"/>
-  </g>
-</svg>
diff --git a/backend/dist/data/consolidated/_index.json b/backend/dist/data/consolidated/_index.json
deleted file mode 100644
index fa9ea65c..00000000
--- a/backend/dist/data/consolidated/_index.json
+++ /dev/null
@@ -1,91 +0,0 @@
-[
-    {
-        "name": "BASH",
-        "icon": "https://api.quicksnip.dev/icons/bash.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "C",
-        "icon": "https://api.quicksnip.dev/icons/c.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "CPP",
-        "icon": "https://api.quicksnip.dev/icons/cpp.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "CSHARP",
-        "icon": "https://api.quicksnip.dev/icons/csharp.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "CSS",
-        "icon": "https://api.quicksnip.dev/icons/css.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "HASKELL",
-        "icon": "https://api.quicksnip.dev/icons/haskell.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "HTML",
-        "icon": "https://api.quicksnip.dev/icons/html.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "JAVA",
-        "icon": "https://api.quicksnip.dev/icons/java.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "JAVASCRIPT",
-        "icon": "https://api.quicksnip.dev/icons/javascript.svg",
-        "subLanguages": [
-            {
-                "name": "REACT",
-                "icon": "https://api.quicksnip.dev/icons/javascript--react.svg"
-            }
-        ]
-    },
-    {
-        "name": "PYTHON",
-        "icon": "https://api.quicksnip.dev/icons/python.svg",
-        "subLanguages": [
-            {
-                "name": "FASTAPI",
-                "icon": "https://api.quicksnip.dev/icons/python--fastapi.svg"
-            },
-            {
-                "name": "TKINTER",
-                "icon": "https://api.quicksnip.dev/icons/python--tkinter.svg"
-            }
-        ]
-    },
-    {
-        "name": "REGEX",
-        "icon": "https://api.quicksnip.dev/icons/regex.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "RUBY",
-        "icon": "https://api.quicksnip.dev/icons/ruby.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "RUST",
-        "icon": "https://api.quicksnip.dev/icons/rust.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "SCSS",
-        "icon": "https://api.quicksnip.dev/icons/scss.svg",
-        "subLanguages": []
-    },
-    {
-        "name": "TYPESCRIPT",
-        "icon": "https://api.quicksnip.dev/icons/typescript.svg",
-        "subLanguages": []
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/bash.json b/backend/dist/data/consolidated/bash.json
deleted file mode 100644
index 854b733b..00000000
--- a/backend/dist/data/consolidated/bash.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
-    {
-        "name": "System",
-        "snippets": [
-            {
-                "title": "Kill Previous Instances",
-                "description": "Kill all previous instances of a script",
-                "author": "saminjay",
-                "tags": [
-                    "kill",
-                    "process",
-                    "background"
-                ],
-                "contributors": [],
-                "code": "function kill_prev() {\n    # $$ contains current pid (grep ignore so it doesn't suicide)\n    local processes\n    readarray -t processes < <(pgrep -f \"$0\" | grep -v \"$$\")\n    kill \"${processes[@]}\" >/dev/null 2>&1\n}\n\n# Usage:\n# Add this function to your background running script\n# It will make sure that only one instance of your script is running at a time\nkill_prev\n",
-                "extension": "bash"
-            },
-            {
-                "title": "System Resource Monitor",
-                "description": "Monitors system resources (CPU, RAM, disk, users)",
-                "author": "sponkurtus2",
-                "tags": [
-                    "file",
-                    "system"
-                ],
-                "contributors": [],
-                "code": "system_resources () {\n      echo \"CPU Load: $(top -bn1 | grep \"Cpu(s)\" | awk '{print $2}')%\"\n      echo \"Memory Used: $(free -m | awk 'NR==2{printf \"%.2f%%\", $3*100/$2}')\"\n      echo \"Disk Used: $(df -h / | awk 'NR==2{print $5}')\"\n      echo \"Active Users: $(who | wc -l)\"\n}\n\nsystem_resources \"$@\"\n\n# Usage:\nchmod a+x system-resource-monitor.sh # First make it executable for all the users\n\n./system-resource-monitor.sh  # It will print the following system resources (CPU, RAM, disk, and active users)\n",
-                "extension": "bash"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/c.json b/backend/dist/data/consolidated/c.json
deleted file mode 100644
index 4c307b14..00000000
--- a/backend/dist/data/consolidated/c.json
+++ /dev/null
@@ -1,349 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "0xHouss",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "#include <stdio.h> // Includes the input/output library\n\nint main() { // Defines the main function\n  printf(\"Hello, World!\\n\") // Outputs Hello, World! and a newline\n\n  return 0; // indicate the program executed successfully\n}\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Bit Manipulation",
-        "snippets": [
-            {
-                "title": "Check Power of Two",
-                "description": "Checks if a given number is a power of two using bitwise operations.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "power-of-two"
-                ],
-                "contributors": [],
-                "code": "#include <stdbool.h> // Include the standard boolean library\n\nbool is_power_of_two(int n) {\n    return n > 0 && (n & (n - 1)) == 0; // Bitwise check for power of two\n}\n\n// Usage:\nis_power_of_two(16); // Returns: true\nis_power_of_two(18); // Returns: false\n",
-                "extension": "c"
-            },
-            {
-                "title": "Clear ith bit",
-                "description": "Clear the ith bit of a number and returns the resulting number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "clear"
-                ],
-                "contributors": [],
-                "code": "int clear_ith_bit(int n, int i) {\n    return n & ~(1 << i);\n}\n\n\n// Usage:\nclear_ith_bit(10, 1); // Returns: 8\nclear_ith_bit(10, 3); // Returns: 2\n",
-                "extension": "c"
-            },
-            {
-                "title": "Count Set Bits",
-                "description": "Counts the number of set bits in an int",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "int count_set_bits(int n) {\n    int count = 0;\n    while (n) {\n        n &= (n - 1);\n        count++;\n    }\n    return count;\n}\n\n\n// Usage:\ncount_set_bits(5);   // Returns: 2\ncount_set_bits(255); // Returns: 8\ncount_set_bits(8);   // Returns: 1\n",
-                "extension": "c"
-            },
-            {
-                "title": "Get ith bit",
-                "description": "Get the i-th bit of a number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "get"
-                ],
-                "contributors": [],
-                "code": "int get_ith_bit(int n, int i) {\n    return (n >> i) & 1;\n}\n\n\n// Usage:\nget_ith_bit(10, 0); // Returns: 0\nget_ith_bit(10, 1); // Returns: 1\nget_ith_bit(10, 2); // Returns: 0\nget_ith_bit(10, 3); // Returns: 1\n",
-                "extension": "c"
-            },
-            {
-                "title": "Is Odd",
-                "description": "Check if a number is odd",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "is-odd"
-                ],
-                "contributors": [],
-                "code": "bool is_odd(int n) {\n    return n & 1;\n}\n\n\n// Usage:\nis_odd(10); // Returns: false\nis_odd(11); // Returns: true\n",
-                "extension": "c"
-            },
-            {
-                "title": "Reverse Bits",
-                "description": "Reverses the bits of a given unsigned integer.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "reverse-bits"
-                ],
-                "contributors": [],
-                "code": "unsigned int reverse_bits(unsigned int n) {\n    unsigned int result = 0;\n    for (int i = 0; i < 32; ++i) {\n        result <<= 1;        // Shift result left by 1\n        result |= n & 1;     // Add the least significant bit of n to result\n        n >>= 1;            // Shift n right by 1\n    }\n    return result;\n}\n\n// Usage:\nreverse_bits(43261596); // Returns: 964176192 (Binary: 00000010100101000001111010011100 -> 00111001011110000010100101000000)\n",
-                "extension": "c"
-            },
-            {
-                "title": "Set ith bit",
-                "description": "Set the i-th bit of a number and returns the resulting number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "set"
-                ],
-                "contributors": [],
-                "code": "int set_ith_bit(int n, int i) {\n    return n | (1 << i);\n}\n\n\n// Usage:\nset_ith_bit(10, 0); // Returns: 11\nset_ith_bit(10, 2); // Returns: 14\nset_ith_bit(1, 8);  // Returns: 257\nset_ith_bit(1, 3);  // Returns: 9\n",
-                "extension": "c"
-            },
-            {
-                "title": "Swap Numbers",
-                "description": "Swap two numbers without a temporary variable",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "swap"
-                ],
-                "contributors": [],
-                "code": "void swap(int *a, int *b) {\n    *a ^= *b;\n    *b ^= *a;\n    *a ^= *b;\n}\n\n\n// Usage:\nint x = 5, y = 10;\nswap(&x, &y);\nprintf(\"x = %d, y = %d\\n\", x, y); // x = 10, y = 5\n",
-                "extension": "c"
-            },
-            {
-                "title": "Toggle ith bit",
-                "description": "Toggle the i-th bit of a number and returns the resulting number",
-                "author": "aelshinawy",
-                "tags": [
-                    "bit-manipulation",
-                    "number",
-                    "toggle"
-                ],
-                "contributors": [],
-                "code": "int toggle_ith_bit(int n, int i) {\n    return n ^ (1 << i);\n}\n\n\n// Usage:\ntoggle_ith_bit(10, 0); // Returns: 11\ntoggle_ith_bit(10, 1); // Returns: 8\ntoggle_ith_bit(8, 1);  // Returns: 10\n",
-                "extension": "c"
-            },
-            {
-                "title": "XOR of Range",
-                "description": "Finds XOR of all numbers from 1 to n using properties of XOR.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "xor"
-                ],
-                "contributors": [],
-                "code": "int xor_upto_n(int n) {\n    if (n % 4 == 0) return n;\n    if (n % 4 == 1) return 1;\n    if (n % 4 == 2) return n + 1;\n    return 0;\n}\n\n// Usage:\nxor_upto_n(5); // Returns: 1 (1 ^ 2 ^ 3 ^ 4 ^ 5 = 1)\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Mathematical Functions",
-        "snippets": [
-            {
-                "title": "Check Perfect Number",
-                "description": "Checks if a number is a perfect number. A perfect number is a positive integer that is equal to the sum of its proper divisors (excluding itself).",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "perfect-number"
-                ],
-                "contributors": [],
-                "code": "#include <stdbool.h>\n\n// Function to check if a number is a perfect number\nbool is_perfect(int n) {\n    if (n <= 1) return false;\n\n    int sum = 1; // 1 is a divisor for all n > 1\n    for (int i = 2; i * i <= n; ++i) {\n        if (n % i == 0) {\n            sum += i;\n            if (i != n / i) sum += n / i;\n        }\n    }\n    return sum == n;\n}\n\n// Usage\nis_perfect(28); // Returns: true\nis_perfect(12); // Returns: false\n",
-                "extension": "c"
-            },
-            {
-                "title": "Compound Interest",
-                "description": "Calculates the compound interest for a given principal, rate, time, and number of times interest applied per time period.",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "finance"
-                ],
-                "contributors": [],
-                "code": "#include <math.h>\n\n// Function to calculate compound interest\ndouble compound_interest(double principal, double rate, double time, int n) {\n    return principal * pow(1 + rate / n, n * time);\n}\n\n// Usage:\ndouble principal = 1000.0;  // Initial amount\ndouble rate = 0.05;         // Annual interest rate (5%)\ndouble time = 2;            // Time in years\nint n = 4;                  // Compounded quarterly\n\ncompound_interest(principal, rate, time, n); // Returns: 1104.081632653061\n",
-                "extension": "c"
-            },
-            {
-                "title": "Factorial Function",
-                "description": "Calculates the factorial of a number.",
-                "author": "0xHouss",
-                "tags": [
-                    "math",
-                    "factorial"
-                ],
-                "contributors": [],
-                "code": "int factorial(int x) {\n  int y = 1;\n\n  for (int i = 2; i <= x; i++)\n    y *= i;\n\n  return y;\n}\n\n// Usage:\nfactorial(4); // Returns: 24\n",
-                "extension": "c"
-            },
-            {
-                "title": "Fibonacci Number",
-                "description": "Calculates the nth Fibonacci number using recursion.",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "fibonacci",
-                    "recursion"
-                ],
-                "contributors": [],
-                "code": "// Function to calculate the nth Fibonacci number\nint fibonacci(int n) {\n    if (n <= 1) return n;\n    return fibonacci(n - 1) + fibonacci(n - 2);\n}\n\n// Usage:\nfibonacci(6); // Returns: 8\n",
-                "extension": "c"
-            },
-            {
-                "title": "Linear Mapping",
-                "description": "remaps a value from one range to another",
-                "author": "JasimAlrawie",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "float linearMapping(float value, float minIn, float maxIn, float minOut, float maxOut) {\n    return (value - minIn) * (maxOut - minOut)/(maxIn - minIn) + minOut;\n}\n\n\n// Usage:\nlinearMapping(value, 0, 1, 0, 255);    // remaps the value from (0,1) to (0,255)\nlinearMapping(value, 0, PI*2, 0, 360); // remaps the value from rad to deg\nlinearMapping(value, -1, 1, 1, 8);     // remaps the value from (-1,1) to (1,8)\n",
-                "extension": "c"
-            },
-            {
-                "title": "Sum of Digits",
-                "description": "Calculates the sum of the digits of an integer.",
-                "author": "ashukr07",
-                "tags": [
-                    "math",
-                    "digits"
-                ],
-                "contributors": [],
-                "code": "// Function to calculate the sum of the digits of an integer\nint sum_of_digits(int n) {\n    int sum = 0;\n    while (n != 0) {\n        sum += n % 10;\n        n /= 10;\n    }\n    return sum;\n}\n\n// Usage:\nsum_of_digits(123); // Returns: 6\n",
-                "extension": "c"
-            },
-            {
-                "title": "Swap numbers",
-                "description": "Swaps two numbers without using third variable",
-                "author": "Emosans",
-                "tags": [
-                    "swap",
-                    "numbers"
-                ],
-                "contributors": [],
-                "code": "#include<stdio.h>\nvoid swap(int* num1,int* num2){\n    *num1 = *num1 + *num2;\n    *num2 = *num1 - *num2;\n    *num1 = *num1 - *num2;\n}\n\n// Usage:\nint a = 3,b = 4;\nswap(&a,&b); // swaps the values of the a and b variables\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Search",
-        "snippets": [
-            {
-                "title": "Binary Search ",
-                "description": "Searches for an element in a sorted array using the Binary Search algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "search",
-                    "binarysearch",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "int binarySearch(int arr[], int low, int high, int x) {\n  while (low <= high) {\n    int mid = low + (high - low) / 2;\n\n    // Check if x is present at mid\n    if (arr[mid] == x) {\n      return mid;\n    }\n\n    // If x is smaller, search the left half\n    if (arr[mid] > x) {\n      high = mid - 1;\n    } else { // If x is larger, search the right half\n      low = mid + 1;\n    }\n  }\n  return -1; // Element not found\n}\n\n// Usage:\nint arr[] = {2, 3, 4, 10, 40};\nint n = sizeof(arr) / sizeof(arr[0]);\nint x = 10;\nint result = binarySearch(arr, 0, n - 1, x);\n// result = 3 (index of the element 10)\n\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Linear Search ",
-                "description": "Searches for an element in an array using the Linear Search algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "search",
-                    "linearsearch",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "int linearSearch(int arr[], int n, int x) {\n  for (int i = 0; i < n; i++) {\n    if (arr[i] == x) {\n      return i; // Element found at index i\n    }\n  }\n  return -1; // Element not found\n}\n\n// Usage:\nint arr[] = {10, 20, 30, 40, 50};\nint n = sizeof(arr) / sizeof(arr[0]);\nint x = 30;\nint result = linearSearch(arr, n, x);\n// result = 2 (index of the element 30)\n\n",
-                "extension": "c"
-            }
-        ]
-    },
-    {
-        "name": "Sorting",
-        "snippets": [
-            {
-                "title": "Bubble Sort ",
-                "description": "Sorts an array of integers using the Bubble Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "bubblesort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "void bubbleSort(int arr[], int n) {\n  for (int i = 0; i < n - 1; i++) {\n    for (int j = 0; j < n - i - 1; j++) {\n      if (arr[j] > arr[j + 1]) {\n        // Swap arr[j] and arr[j + 1]\n        int temp = arr[j];\n        arr[j] = arr[j + 1];\n        arr[j + 1] = temp;\n      }\n    }\n  }\n}\n\n// Usage:\nint arr[] = {64, 34, 25, 12, 22, 11, 90};\nint n = sizeof(arr) / sizeof(arr[0]);\nbubbleSort(arr, n);\n// Now arr[] is sorted: {11, 12, 22, 25, 34, 64, 90}\n",
-                "extension": "c"
-            },
-            {
-                "title": "Insertion Sort ",
-                "description": "Sorts an array of integers using the Insertion Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "insertionsort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "void insertionSort(int arr[], int n) {\n  for (int i = 1; i < n; i++) {\n    int key = arr[i];\n    int j = i - 1;\n\n    // Move elements of arr[0..i-1] that are greater than key\n    // to one position ahead of their current position\n    while (j >= 0 && arr[j] > key) {\n      arr[j + 1] = arr[j];\n      j--;\n    }\n    arr[j + 1] = key;\n  }\n}\n\n// Usage:\nint arr[] = {12, 11, 13, 5, 6};\nint n = sizeof(arr) / sizeof(arr[0]);\ninsertionSort(arr, n);\n// Now arr[] is sorted: {5, 6, 11, 12, 13}\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Merge Sort ",
-                "description": "Sorts an array of integers using the Merge Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "mergesort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "#include <stdio.h>\n\nvoid merge(int arr[], int l, int m, int r) {\n  int n1 = m - l + 1;\n  int n2 = r - m;\n\n  // Temporary arrays\n  int L[n1], R[n2];\n\n  // Copy data to temporary arrays L[] and R[]\n  for (int i = 0; i < n1; i++)\n    L[i] = arr[l + i];\n  for (int j = 0; j < n2; j++)\n    R[j] = arr[m + 1 + j];\n\n  int i = 0, j = 0, k = l;\n\n  // Merge the temporary arrays back into arr[l..r]\n  while (i < n1 && j < n2) {\n    if (L[i] <= R[j]) {\n      arr[k] = L[i];\n      i++;\n    } else {\n      arr[k] = R[j];\n      j++;\n    }\n    k++;\n  }\n\n  // Copy remaining elements of L[], if any\n  while (i < n1) {\n    arr[k] = L[i];\n    i++;\n    k++;\n  }\n\n  // Copy remaining elements of R[], if any\n  while (j < n2) {\n    arr[k] = R[j];\n    j++;\n    k++;\n  }\n}\n\nvoid mergeSort(int arr[], int l, int r) {\n  if (l < r) {\n    int m = l + (r - l) / 2;\n\n    // Sort first and second halves\n    mergeSort(arr, l, m);\n    mergeSort(arr, m + 1, r);\n\n    merge(arr, l, m, r);\n  }\n}\n\n// Usage:\nint arr[] = {38, 27, 43, 3, 9, 82, 10};\nint n = sizeof(arr) / sizeof(arr[0]);\nmergeSort(arr, 0, n - 1);\n// Now arr[] is sorted: {3, 9, 10, 27, 38, 43, 82}\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Quick Sort ",
-                "description": "Sorts an array of integers using the Quick Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "quicksort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "int partition(int arr[], int low, int high) {\n  int pivot = arr[high]; // Pivot element\n  int i = low - 1;\n\n  for (int j = low; j < high; j++) {\n    if (arr[j] < pivot) {\n      i++;\n      // Swap arr[i] and arr[j]\n      int temp = arr[i];\n      arr[i] = arr[j];\n      arr[j] = temp;\n    }\n  }\n\n  // Swap arr[i + 1] and arr[high] (pivot)\n  int temp = arr[i + 1];\n  arr[i + 1] = arr[high];\n  arr[high] = temp;\n\n  return i + 1;\n}\n\nvoid quickSort(int arr[], int low, int high) {\n  if (low < high) {\n    int pi = partition(arr, low, high);\n\n    // Recursively sort elements before and after partition\n    quickSort(arr, low, pi - 1);\n    quickSort(arr, pi + 1, high);\n  }\n}\n\n// Usage:\nint arr[] = {10, 7, 8, 9, 1, 5};\nint n = sizeof(arr) / sizeof(arr[0]);\nquickSort(arr, 0, n - 1);\n// Now arr[] is sorted: {1, 5, 7, 8, 9, 10}\n\n",
-                "extension": "c"
-            },
-            {
-                "title": "Selection Sort ",
-                "description": "Sorts an array of integers using the Selection Sort algorithm.",
-                "author": "0xHouss",
-                "tags": [
-                    "sorting",
-                    "selectionsort",
-                    "array",
-                    "algorithm"
-                ],
-                "contributors": [],
-                "code": "void selectionSort(int arr[], int n) {\n  for (int i = 0; i < n - 1; i++) {\n    int minIdx = i;\n\n    // Find the minimum element in the unsorted part of the array\n    for (int j = i + 1; j < n; j++) {\n      if (arr[j] < arr[minIdx]) {\n        minIdx = j;\n      }\n    }\n\n    // Swap the found minimum element with the first element of the unsorted part\n    int temp = arr[minIdx];\n    arr[minIdx] = arr[i];\n    arr[i] = temp;\n  }\n}\n\n// Usage:\nint arr[] = {64, 25, 12, 22, 11};\nint n = sizeof(arr) / sizeof(arr[0]);\nselectionSort(arr, n);\n// Now arr[] is sorted: {11, 12, 22, 25, 64}\n\n",
-                "extension": "c"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/cpp.json b/backend/dist/data/consolidated/cpp.json
deleted file mode 100644
index 1ca213c6..00000000
--- a/backend/dist/data/consolidated/cpp.json
+++ /dev/null
@@ -1,272 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "#include <iostream> // Includes the input/output stream library\n\nint main() { // Defines the main function\n    std::cout << \"Hello, World!\" << std::endl; // Outputs Hello, World! and a newline\n    return 0; // indicate the program executed successfully\n}\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Bit Manipulation",
-        "snippets": [
-            {
-                "title": "Find Non-Repeating Number",
-                "description": "Finds the number that appears only once in an array where every other number appears twice.",
-                "author": "ashukr07",
-                "tags": [
-                    "bit-manipulation",
-                    "xor"
-                ],
-                "contributors": [],
-                "code": "#include <vector>\n\nint find_non_repeating(const std::vector<int> nums) {\n    int result = 0;\n    for (const int num : nums) {\n        result ^= num;\n    }\n    return result;\n}\n\n// Usage:\nstd::vector<int> nums = {4, 1, 2, 1, 2};\nfind_non_repeating(nums); // Returns: 4\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Data Structure Conversion",
-        "snippets": [
-            {
-                "title": "Vector to Queue",
-                "description": "Convert vector into queue quickly",
-                "author": "mrityunjay2003",
-                "tags": [
-                    "data structures",
-                    "queue",
-                    "vector"
-                ],
-                "contributors": [
-                    "majvax"
-                ],
-                "code": "#include<queue>\n#include<vector>\n#include<deque>\n\ntemplate <typename T>\nstd::queue<T> vectorToQueue(const std::vector<T>& v) {\n    return std::queue<T>(std::deque<T>(v.begin(), v.end()));\n}\n\n\n\n// Usage:\nstd::vector<int> vec = { 1, 2, 3, 4, 5 };\nvectorToQueue(vec); // Returns: std::queue<int> { 1, 2, 3, 4, 5 }\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Debugging",
-        "snippets": [
-            {
-                "title": "Vector Print",
-                "description": "Overloads the << operator to print the contents of a vector just like in python.",
-                "author": "Mohamed-faaris",
-                "tags": [
-                    "printing",
-                    "debuging",
-                    "vector"
-                ],
-                "contributors": [],
-                "code": "#include <iostream> \n#include <vector>   \n\ntemplate <typename T>\nstd::ostream& operator<<(std::ostream& os, const std::vector<T>& vec) {\n    os << \"[\"; \n    for (size_t i = 0; i < vec.size(); ++i) {\n        os << vec[i]; // Print each vector element\n        if (i != vec.size() - 1) {\n            os << \", \"; // Add separator\n        }\n    }\n    os << \"]\"; \n    return os; // Return the stream\n}\n\n// Usage:\nstd::vector<int> numbers = {1, 2, 3, 4, 5};\nstd::cout << numbers << std::endl; // Outputs: [1, 2, 3, 4, 5]\n\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find files recursively",
-                "description": "Find all the files in a directory and subdirectories using a predicate function.",
-                "author": "majvax",
-                "tags": [
-                    "filesystem",
-                    "file_search",
-                    "c++17"
-                ],
-                "contributors": [],
-                "code": "#include <filesystem>\n#include <vector>\n#include <string>\n\ntemplate <typename P>\nstd::vector<std::filesystem::path> find_files_recursive(const std::string& path, P&& predicate) {\n    std::vector<std::filesystem::path> files;\n    std::error_code ec;\n\n    if (!std::filesystem::exists(path, ec) || ec)\n        return files;\n    if (!std::filesystem::is_directory(path, ec) || ec)\n        return files;\n\n    auto it = std::filesystem::recursive_directory_iterator(path, ec);\n    if (ec)\n        return files;\n\n    for (const auto& entry : it)\n        if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n            files.push_back(entry.path());\n\n    return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n    return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files_recursive(\"Path\", [](const auto& p) {\n    return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include <chrono>\n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n    std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files_recursive(\"Path\", [jan_1_2025](const auto& p) {\n    return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Find files",
-                "description": "Find all the files in a directory using a predicate function.",
-                "author": "majvax",
-                "tags": [
-                    "filesystem",
-                    "file_search",
-                    "c++17"
-                ],
-                "contributors": [],
-                "code": "#include <filesystem>\n#include <vector>\n#include <string>\n\ntemplate <typename P>\nstd::vector<std::filesystem::path> find_files(const std::string& path, P&& predicate) {\n    std::vector<std::filesystem::path> files;\n    std::error_code ec;\n\n    if (!std::filesystem::exists(path, ec) || ec)\n        return files;\n    if (!std::filesystem::is_directory(path, ec) || ec)\n        return files;\n\n    auto it = std::filesystem::directory_iterator(path, ec);\n    if (ec)\n        return files;\n\n    for (const auto& entry : it)\n        if (!std::filesystem::is_directory(entry) && predicate(entry.path()))\n            files.push_back(entry.path());\n\n    return files;\n}\n\n\n\n// Usage:\n\n// Find all files with size greater than 10MB\nauto files = find_files(\"Path\", [](const auto& p) {\n    return std::filesystem::file_size(p) > 10 * 1024 * 1024;\n});\n\n// Find all files with \".pdf\" as extension\nauto files = find_files(\"Path\", [](const auto& p) {\n    return p.extension() == \".pdf\";\n});\n\n// Find all files writed after The New Year\n#include <chrono>\n// need std=c++20\nauto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(\n    std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}\n);\nauto files = find_files(\"Path\", [jan_1_2025](const auto& p) {\n    return std::filesystem::last_write_time(p) > jan_1_2025;\n}),\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "List Directories",
-                "description": "Lists all the directories in a path.",
-                "author": "majvax",
-                "tags": [
-                    "filesystem",
-                    "directories",
-                    "c++17"
-                ],
-                "contributors": [],
-                "code": "#include <filesystem>\n#include <vector>\n#include <string>\n\nstd::vector<std::filesystem::path> list_directories(const std::string& path) {\n    std::vector<std::filesystem::path> files;\n    std::error_code ec;\n\n    if (!std::filesystem::exists(path, ec) || ec)\n        return files;\n    if (!std::filesystem::is_directory(path, ec) || ec)\n        return files;\n\n    auto it = std::filesystem::directory_iterator(path, ec);\n    if (ec)\n        return files;\n\n    for (const auto& entry : it)\n        if (std::filesystem::is_directory(entry))\n            files.push_back(entry.path());\n\n    return files;\n}\n\n\n\n// Usage:\nauto directories = list_directories(\"Path\");\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Math And Numbers",
-        "snippets": [
-            {
-                "title": "Binary to Unsigned Integer Conversion",
-                "description": "Converts a binary number represented as a string to its decimal equivalent.",
-                "author": "ashukr07",
-                "tags": [
-                    "binary",
-                    "conversion",
-                    "c++20"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <bitset>\n#include <stdexcept>\n\ntemplate <std::unsigned_integral T>\nT binary_to_uintegral(const std::string& binary) {\n    if (binary.size() > sizeof(T) * 8)\n        throw std::invalid_argument(\"binary string is too long\");\n    return static_cast<T>(std::bitset<sizeof(T) * 8>(binary).to_ullong());\n}\n\n// Usage:\nstd::string binary(64, '1'); // Binary 8 bytes long with all bits set to 1\nbinary_to_uintegral<unsigned long long>(binary); // Returns: 18446744073709551615\nbinary_to_uintegral<long long>(binary); // Compiles error: signed/unsigned mismatch\nbinary_to_uintegral<unsigned long long>(std::string(65, '1')); // Throws: std::invalid_argument\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Check Prime Number",
-                "description": "Check if an integer is a prime number",
-                "author": "MihneaMoso",
-                "tags": [
-                    "number",
-                    "prime"
-                ],
-                "contributors": [],
-                "code": "bool is_prime(int n) {\n    if (n < 2) return false;\n    if (n == 2 || n == 3) return true;\n    if (n % 2 == 0) return false;\n    for (int i = 3; i * i <= n; i += 2) {\n        if (n % i == 0) return false;\n    }\n    return true;\n}\n\n// Usage:\nis_prime(29); // Returns: true\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Filter",
-                "description": "Filter a string with a predicate function",
-                "author": "majvax",
-                "tags": [
-                    "string",
-                    "filtering",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <string>\n\ntemplate <typename P>\nstd::string filter(const std::string& str, P&& predicate) {\n    return str\n        | std::ranges::views::filter(std::forward<P>(predicate))\n        | std::ranges::to<std::string>();\n}\n\n\n\n// Usage:\nstd::string str = \"Hello, World!\";\nstd::string filtered = filter(str, [](char c){ return std::isalpha(c); });\nstd::cout << filtered << std::endl; // HelloWorld\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Palindrome",
-                "description": "Check if a string is a palindrome or not.",
-                "author": "majvax",
-                "tags": [
-                    "string",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <ranges>\n#include <algorithm>\n\nbool is_palindrome(const std::string& str) {\n    std::string sanitized_string = str\n        | std::ranges::views::filter([](char c){ return std::isalnum(c); })\n        | std::ranges::views::transform([](char c){ return std::tolower(c); })\n        | std::ranges::to<std::string>();\n    \n    return std::ranges::equal(sanitized_string, sanitized_string | std::views::reverse);\n}\n\n\n\n// Usage:\nbool pal = is_palindrome(\"A man, a plan, a canal, Panama\"); // true\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Reverse String",
-                "description": "Reverses the characters in a string.",
-                "author": "Vaibhav-kesarwani",
-                "tags": [
-                    "array",
-                    "reverse",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <algorithm>\n\nstd::string reverseString(const std::string& input) {\n    std::string reversed = input;\n    std::reverse(reversed.begin(), reversed.end());\n    return reversed;\n}\n\nreverseString(\"quicksnip\"); // Returns: \"pinskciuq\"\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Split String",
-                "description": "Splits a string by a delimiter",
-                "author": "saminjay",
-                "tags": [
-                    "string",
-                    "split"
-                ],
-                "contributors": [],
-                "code": "#include <string>\n#include <vector>\n\nstd::vector<std::string> split_string(std::string str, std::string delim) {\n    std::vector<std::string> splits;\n    int i = 0, j;\n    int inc = delim.length();\n    while (j != std::string::npos) {\n        j = str.find(delim, i);\n        splits.push_back(str.substr(i, j - i));\n        i = j + inc;\n    }\n    return splits;\n}\n\n// Usage:\nsplit_string(\"quick_-snip\", \"_-\"); // Returns: std::vector<std::string> { \"quick\", \"snip\" }\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Transform",
-                "description": "Transform a string with a function",
-                "author": "majvax",
-                "tags": [
-                    "string",
-                    "transform",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <string>\n\ntemplate <typename F>\nstd::string transform(const std::string& str, F&& transformer) {\n    return str\n        | std::ranges::views::transform(std::forward<F>(transformer))\n        | std::ranges::to<std::string>();\n}\n\n\n\n// Usage:\nstd::string str = \"Hello, World!\";\nstd::string transformed = transform(str, [](char c){ return std::toupper(c); });\nstd::cout << transformed << std::endl; // HELLO, WORLD!\n",
-                "extension": "cpp"
-            }
-        ]
-    },
-    {
-        "name": "Vector Manipulation.md",
-        "snippets": [
-            {
-                "title": "Filter",
-                "description": "Filters a vector using a predicate function.",
-                "author": "majvax",
-                "tags": [
-                    "array",
-                    "filter",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <vector>\n\ntemplate <typename T, typename P>\nauto filter(const std::vector<T>& vec, P&& predicate) {\n    return vec\n        | std::views::filter(std::forward<P>(predicate))\n        | std::ranges::to<std::vector<T>>();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {1, 2, 3, 4, 5};\nstd::vector<int> filtered = filter(vec, [](int i){ return i % 2 == 0; });\n// filtered contains 2 and 4\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Remove duplicates",
-                "description": "Removes duplicates from an vector of ints",
-                "author": "AnkushRoy-code",
-                "tags": [
-                    "vector",
-                    "remove",
-                    "duplicate"
-                ],
-                "contributors": [],
-                "code": "#include <algorithm>\n#include <vector>\n\nbool removeDuplicates(std::vector<int> &input) noexcept {\n    if (input.empty()) return false;\n    const auto size = input.size();\n    std::sort(input.begin(), input.end());\n\n    auto last = std::unique(input.begin(), input.end()); // remove duplicates\n    input.erase(last, input.end()); // resize vector and delete the undefined elements\n\n    return size != input.size();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {4, 2, 2, 8, 5, 6, 9, 9, 9, 8, 8, 4};\nremoveDuplicates(vec); // returns {2, 4, 5, 6, 8, 9}\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Remove n Occurences",
-                "description": "Removes duplicates from an vector of ints",
-                "author": "AnkushRoy-code",
-                "tags": [
-                    "vector",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "#include <algorithm>\n#include <unordered_map>\n#include <vector>\n\nbool removeOccurrences(std::vector<int>& vec, const unsigned int n) noexcept {\n    if (vec.empty() || n == 0) return false;\n\n    const auto size = vec.size();\n    std::unordered_map<int, int> frequency; // count frequencies\n    for (int num : vec) {\n        frequency[num]++;\n    }\n\n    vec.erase( // remove elements with n number of occurrences\n        std::remove_if(vec.begin(), vec.end(), [&frequency, n](const int x) {\n            return frequency[x] == n;\n        }),\n        vec.end()\n    );\n    return size != vec.size();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {4, 2, 4, 8, 5, 6, 8, 8, 4, 3 };\n\nint n = 3; // Remove elements that occur exactly 3 times\nremoveOccurrences(vec, n); // returns {2, 5, 6, 3}\n",
-                "extension": "cpp"
-            },
-            {
-                "title": "Transform",
-                "description": "Transforms a vector using a function.",
-                "author": "majvax",
-                "tags": [
-                    "array",
-                    "transform",
-                    "c++23"
-                ],
-                "contributors": [],
-                "code": "#include <ranges>\n#include <vector>\n\ntemplate <typename T, typename F>\nauto transform(const std::vector<T>& vec, F&& transformer) {\n    using U = std::invoke_result_t<F, T>;\n    return vec\n        | std::views::transform(std::forward<F>(transformer))\n        | std::ranges::to<std::vector<U>>();\n}\n\n\n\n// Usage:\nstd::vector<int> vec = {1, 2, 3, 4, 5};\nstd::vector<int> transformed = transform(vec, [](int i){ return i * 2; });\n// transformed contains 2, 4, 6, 8, 10\n",
-                "extension": "cpp"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/csharp.json b/backend/dist/data/consolidated/csharp.json
deleted file mode 100644
index 5afc5f5f..00000000
--- a/backend/dist/data/consolidated/csharp.json
+++ /dev/null
@@ -1,123 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "public class Program {\n  public static void Main(string[] args) {\n    System.Console.WriteLine(\"Hello, World!\");\n  }\n}\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "Guid Utilities",
-        "snippets": [
-            {
-                "title": "Generate GUID",
-                "description": "Generates a new GUID",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "guid",
-                    "generate"
-                ],
-                "contributors": [],
-                "code": "public static string GenerateGuid() {\n  return Guid.NewGuid().ToString();\n}\n\n// Usage:\nGenerateGuid(); // Returns: 1c4c38d8-64e4-431b-884a-c6eec2ab02cd (Uuid is random)\n",
-                "extension": "csharp"
-            },
-            {
-                "title": "Validate GUID",
-                "description": "Checks if a string is a valid GUID.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "guid",
-                    "validate"
-                ],
-                "contributors": [],
-                "code": "public static bool IsGuid(string str) {\n  return Guid.TryParse(str, out _);\n}\n\n// Usage:\nIsGuid(\"1c4c38d8-64e4-431b-884a-c6eec2ab02cd\"); // Returns: true\nIsGuid(\"quicksnip\"); // Returns: false\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "Jwt Utilities",
-        "snippets": [
-            {
-                "title": "Decode JWT",
-                "description": "Decodes a JWT.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "jwt",
-                    "decode"
-                ],
-                "contributors": [],
-                "code": "public static string DecodeJwt(string token) {\n  return new JwtSecurityTokenHandler().ReadJwtToken(token).ToString();\n}\n\n// Usage:\nstring token = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\";\nDecodeJwt(token); // Returns: \"{\\\"alg\\\":\\\"HS256\\\",\\\"typ\\\":\\\"JWT\\\"}.{\\\"sub\\\":\\\"1234567890\\\",\\\"name\\\":\\\"John Doe\\\",\\\"iat\\\":1516239022}\"\n",
-                "extension": "csharp"
-            },
-            {
-                "title": "Validate JWT",
-                "description": "Validates a JWT.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "jwt",
-                    "validate"
-                ],
-                "contributors": [],
-                "code": "public static bool ValidateJwt(string token, string secret) {\n  var tokenHandler = new JwtSecurityTokenHandler();\n  var validationParameters = new TokenValidationParameters {\n    ValidateIssuerSigningKey = true,\n    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)),\n    ValidateIssuer = false,\n    ValidateAudience = false\n  };\n  try {\n    tokenHandler.ValidateToken(token, validationParameters, out _);\n    return true;\n  }\n  catch {\n    return false\n  }\n}\n\n// Usage:\nstring JWT = \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\";\nstring correctSecret = \"your-256-bit-secret\";\nstring wrongSecret = \"this-is-not-the-right-secret\";\n\nValidateJwt(JWT, correctSecret); // Returns: true\nValidateJwt(JWT, wrongSecret); // Returns: false\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "List Utilities",
-        "snippets": [
-            {
-                "title": "Swap items at index",
-                "description": "Swaps two items at determined indexes",
-                "author": "omegaleo",
-                "tags": [
-                    "list",
-                    "swapping"
-                ],
-                "contributors": [],
-                "code": "public static IList<T> Swap<T>(this IList<T> list, int indexA, int indexB)\n{\n    (list[indexA], list[indexB]) = (list[indexB], list[indexA]);\n    return list;\n}\n\nvar list = new List<string>() {\"Test\", \"Test2\"};\n\nlist.Swap(0, 1); // Swaps \"Test\" and \"Test2\" in place\n",
-                "extension": "csharp"
-            }
-        ]
-    },
-    {
-        "name": "String Utilities",
-        "snippets": [
-            {
-                "title": "Capitalize first letter",
-                "description": "Makes the first letter of a string uppercase.",
-                "author": "chaitanya-jvnm",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "public static string Capitalize(this string str) {\n  return str.Substring(0, 1).ToUpper() + str.Substring(1);\n}\n\n// Usage:\n\"quicksnip\".Capitalize(); // Returns: \"Quicksnip\"\n",
-                "extension": "csharp"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Cut off a string once it reaches a determined amount of characters and add '...' to the end of the string",
-                "author": "omegaleo",
-                "tags": [
-                    "string",
-                    "truncate"
-                ],
-                "contributors": [],
-                "code": "public static string Truncate(this string value, int maxChars)\n{\n    return value.Length <= maxChars ? value : value.Substring(0, maxChars) + \"...\";\n}\n\n// Usage:\n\"Quicksnip\".Truncate(5); // Returns: \"Quick...\"\n",
-                "extension": "csharp"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/css.json b/backend/dist/data/consolidated/css.json
deleted file mode 100644
index c1b8835e..00000000
--- a/backend/dist/data/consolidated/css.json
+++ /dev/null
@@ -1,274 +0,0 @@
-[
-    {
-        "name": "Animations",
-        "snippets": [
-            {
-                "title": "Blink Animation",
-                "description": "Adds an infinite blinking animation to an element",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "animation",
-                    "blink",
-                    "infinite"
-                ],
-                "contributors": [],
-                "code": ".blink {\n    animation: blink 1s linear infinite;\n}\n\n@keyframes blink{\n    0%{\n        opacity: 0;\n    }\n    50%{\n        opacity: 1;\n    }\n    100%{\n        opacity: 0;\n    }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Pulse Animation",
-                "description": "Adds a smooth pulsing animation with opacity and scale effects",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "animation",
-                    "pulse",
-                    "pulse-scale"
-                ],
-                "contributors": [
-                    "alanb4rt"
-                ],
-                "code": ".pulse {\n  animation: pulse 1s ease-in-out infinite alternate;\n}\n\n@keyframes pulse {\n  from {\n    opacity: 0.5;\n    transform: scale(1);\n  }\n  to {\n    opacity: 1;\n    transform: scale(1.05);\n  }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Shake Animation",
-                "description": "Adds a shake animation ( commonly used to mark invalid fields )",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "shake",
-                    "shake-horizontal"
-                ],
-                "contributors": [],
-                "code": ".shake {\n    animation: shake .5s ease-in-out;\n}\n\n@keyframes shake {\n  0%, 100% {\n    transform: translateX(0);\n  }\n  25% {\n    transform: translateX(-10px);\n  }\n  50% {\n    transform: translateX(10px);\n  }\n  75% {\n    transform: translateX(-10px);\n  }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Slide-in Animation",
-                "description": "Adds a slide-in from the right side of the screen",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "animation",
-                    "slide-in",
-                    "slide-right"
-                ],
-                "contributors": [],
-                "code": ".slide-in {\n    animation: slide-in 1s ease-in-out;\n}\n\n@keyframes slide-in {\n    from {\n        scale: 300% 1;\n        translate: 150vw 0;\n    }\n\n    to {\n        scale: 100% 1;\n        translate: 0 0;\n    }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Typewriter Animation",
-                "description": "Adds a typewriter animation + blinking cursor",
-                "author": "AlsoKnownAs-Ax",
-                "tags": [
-                    "blinking",
-                    "typewriter"
-                ],
-                "contributors": [],
-                "code": "    <div class=\"typewriter\">\n      <div>\n          <p>Typerwriter Animation</p>\n      </div>\n    </div>\n```\n\n```css\n    .typewriter{\n        display: flex;\n        justify-content: center;\n    }\n\n    .typewriter p {\n        overflow: hidden;\n        font-size: 1.5rem;\n        font-family: monospace;\n        border-right: 1px solid;\n        margin-inline: auto;\n        white-space: nowrap;\n        /* The cursor will inherit the text's color by default */\n        /* border-color: red */                \n        /* Steps: number of chars (better to set directly in js)*/\n        animation: typing 3s steps(21) forwards,\n        blink 1s step-end infinite;\n    }\n\n    @keyframes typing{\n        from{\n            width: 0%\n        }\n        to{\n            width: 100%\n        }\n    }\n\n    @keyframes blink{\n        50%{\n            border-color: transparent;\n        }\n    }\n",
-                "extension": "html"
-            }
-        ]
-    },
-    {
-        "name": "Buttons",
-        "snippets": [
-            {
-                "title": "3D Button Effect",
-                "description": "Adds a 3D effect to a button when clicked.",
-                "author": "technoph1le",
-                "tags": [
-                    "button",
-                    "3D",
-                    "effect"
-                ],
-                "contributors": [],
-                "code": ".button {\n  background-color: #28a745;\n  color: white;\n  padding: 10px 20px;\n  border: none;\n  border-radius: 5px;\n  box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n  transition: transform 0.1s;\n}\n\n.button:active {\n  transform: translateY(2px);\n  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Button Hover Effect",
-                "description": "Creates a hover effect with a color transition.",
-                "author": "technoph1le",
-                "tags": [
-                    "button",
-                    "hover",
-                    "transition"
-                ],
-                "contributors": [],
-                "code": ".button {\n  background-color: #007bff;\n  color: white;\n  padding: 10px 20px;\n  border: none;\n  border-radius: 5px;\n  cursor: pointer;\n  transition: background-color 0.3s ease;\n}\n\n.button:hover {\n  background-color: #0056b3;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "MacOS Button",
-                "description": "A macOS-like button style, with hover and shading effects.",
-                "author": "e3nviction",
-                "tags": [
-                    "button",
-                    "macos",
-                    "hover",
-                    "transition"
-                ],
-                "contributors": [],
-                "code": ".button {\n font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,;\n background: #0a85ff;\n color: #fff;\n padding: 8px 12px;\n border: none;\n margin: 4px;\n border-radius: 10px;\n cursor: pointer;\n box-shadow: inset 0 1px 1px #fff2, 0px 2px 3px -2px rgba(0, 0, 0, 0.3) !important; /*This is really performance heavy*/\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n text-decoration: none;\n transition: all 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275);\n}\n.button:hover {\n background: #0974ee;\n color: #fff\n}\n",
-                "extension": "css"
-            }
-        ]
-    },
-    {
-        "name": "Effects",
-        "snippets": [
-            {
-                "title": "Blur Background",
-                "description": "Applies a blur effect to the background of an element.",
-                "author": "technoph1le",
-                "tags": [
-                    "blur",
-                    "background",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": ".blur-background {\n  backdrop-filter: blur(10px);\n  background: rgba(255, 255, 255, 0.5);\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Hover Glow Effect",
-                "description": "Adds a glowing effect on hover.",
-                "author": "technoph1le",
-                "tags": [
-                    "hover",
-                    "glow",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": ".glow {\n  background-color: #f39c12;\n  padding: 10px 20px;\n  border-radius: 5px;\n  transition: box-shadow 0.3s ease;\n}\n\n.glow:hover {\n  box-shadow: 0 0 15px rgba(243, 156, 18, 0.8);\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Hover to Reveal Color",
-                "description": "A card with an image that transitions from grayscale to full color on hover.",
-                "author": "Haider-Mukhtar",
-                "tags": [
-                    "hover",
-                    "image",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": ".card {\n  height: 300px;\n  width: 200px;\n  border-radius: 5px;\n  overflow: hidden;\n}\n\n.card img{\n  height: 100%;\n  width: 100%;\n  object-fit: cover;\n  filter: grayscale(100%);\n  transition: all 0.3s;\n  transition-duration: 200ms;\n  cursor: pointer;\n}\n\n.card:hover img {\n  filter: grayscale(0%);\n  scale: 1.05;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "RGB Border Color Animation",
-                "description": "changes border of an Element to rgb onhover (Can be changed)'",
-                "author": "Brianali-codes",
-                "tags": [
-                    "animation",
-                    "effects",
-                    "borders"
-                ],
-                "contributors": [],
-                "code": ".yourElement {\n    /* Your Elements styles go here*/\n    border-style: solid;\n    border-radius: 10px;\n    color: rgb(0, 0, 0);\n\n}\n.yourElement:hover {\n\n    animation: change-color;\n    animation-duration: 0.5s;         /* you can alter the duration of the animation here. */\n    animation-iteration-count: infinite;         /* Choose to play animation infinitely or once on hover. */\n}\n\n@keyframes change-color {\n    0% {\n        border-color: red;\n    }\n\n    50% {\n        border-color: green;\n    }\n\n    100% {\n        border-color: blue;\n    }\n}\n\n\n",
-                "extension": "css"
-            }
-        ]
-    },
-    {
-        "name": "Layouts",
-        "snippets": [
-            {
-                "title": "CSS Reset",
-                "description": "Resets some default browser styles, ensuring consistency across browsers.",
-                "author": "AmeerMoustafa",
-                "tags": [
-                    "reset",
-                    "browser",
-                    "layout"
-                ],
-                "contributors": [],
-                "code": "* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Equal-Width Columns",
-                "description": "Creates columns with equal widths using flexbox.",
-                "author": "technoph1le",
-                "tags": [
-                    "flexbox",
-                    "columns",
-                    "layout"
-                ],
-                "contributors": [],
-                "code": ".columns {\n  display: flex;\n  justify-content: space-between;\n}\n\n.column {\n  flex: 1;\n  margin: 0 10px;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Grid layout",
-                "description": "Equal sized items in a responsive grid",
-                "author": "xshubhamg",
-                "tags": [
-                    "layout",
-                    "grid"
-                ],
-                "contributors": [
-                    "tryoxiss"
-                ],
-                "code": ".grid-container {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));\n/* Explanation:\n- `auto-fit`: Automatically fits as many columns as possible within the container.\n- `minmax(min(250px, 100%), 1fr)`: Defines a minimum column size of 250px and a maximum size of 1fr (fraction of available space). However, that minimum column size is allowed to shrink to fit all avalible space if the space is otherwise less than the minimum.\n  - NOTE: the `min(x, 100%)` trick does not do much for very small sizes like 250px, but it will help massively if you increase the min column size yourself.\n*/\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Responsive Design",
-                "description": "The different responsive breakpoints.",
-                "author": "kruimol",
-                "tags": [
-                    "responsive",
-                    "media queries"
-                ],
-                "contributors": [],
-                "code": "/* Phone */\n.element {\n  margin: 0 10%\n}\n\n/* Tablet */\n@media (min-width: 640px) {\n  .element {\n    margin: 0 20%\n  }\n}\n\n/* Desktop base */\n@media (min-width: 768px) {\n  .element {\n    margin: 0 30%\n  }\n}\n\n/* Desktop large */\n@media (min-width: 1024px) {\n  .element {\n    margin: 0 40%\n  }\n}\n\n/* Desktop extra large */\n@media (min-width: 1280px) {\n  .element {\n    margin: 0 60%\n  }\n}\n\n/* Desktop bige */\n@media (min-width: 1536px) {\n  .element {\n    margin: 0 80%\n  }\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Sticky Footer",
-                "description": "Ensures the footer always stays at the bottom of the page.",
-                "author": "technoph1le",
-                "tags": [
-                    "layout",
-                    "footer",
-                    "sticky"
-                ],
-                "contributors": [],
-                "code": "body {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n}\n\nfooter {\n  margin-top: auto;\n}\n",
-                "extension": "css"
-            }
-        ]
-    },
-    {
-        "name": "Typography",
-        "snippets": [
-            {
-                "title": "Letter Spacing",
-                "description": "Adds space between letters for better readability.",
-                "author": "technoph1le",
-                "tags": [
-                    "typography",
-                    "spacing"
-                ],
-                "contributors": [],
-                "code": "p {\n  letter-spacing: 0.05em;\n}\n",
-                "extension": "css"
-            },
-            {
-                "title": "Responsive Font Sizing",
-                "description": "Adjusts font size based on viewport width.",
-                "author": "technoph1le",
-                "tags": [
-                    "font",
-                    "responsive",
-                    "typography"
-                ],
-                "contributors": [],
-                "code": "h1 {\n  font-size: calc(1.5rem + 2vw);\n}\n",
-                "extension": "css"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/haskell.json b/backend/dist/data/consolidated/haskell.json
deleted file mode 100644
index ff27eac2..00000000
--- a/backend/dist/data/consolidated/haskell.json
+++ /dev/null
@@ -1,240 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Binary Search",
-                "description": "Searches for an element in a sorted array using binary search.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "binary-search",
-                    "search"
-                ],
-                "contributors": [],
-                "code": "binarySearch :: Ord a => a -> [a] -> Maybe Int\nbinarySearch _ [] = Nothing\nbinarySearch target xs = go 0 (length xs - 1)\n  where\n    go low high\n        | low > high = Nothing\n        | midElem < target = go (mid + 1) high\n        | midElem > target = go low (mid - 1)\n        | otherwise = Just mid\n      where\n        mid = (low + high) `div` 2\n        midElem = xs !! mid\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let array = [1, 2, 3, 4, 5]\n    print $ binarySearch 3 array -- Output: Just 2\n    print $ binarySearch 6 array -- Output: Nothing\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Chunk Array",
-                "description": "Splits an array into chunks of a specified size.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "chunk",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "chunkArray :: Int -> [a] -> [[a]]\nchunkArray _ [] = []\nchunkArray n xs = take n xs : chunkArray n (drop n xs)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let array = [1, 2, 3, 4, 5, 6]\n    print $ chunkArray 2 array -- Output: [[1, 2], [3, 4], [5, 6]]\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Matrix Transpose",
-                "description": "Transposes a 2D matrix.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "matrix",
-                    "transpose"
-                ],
-                "contributors": [],
-                "code": "transposeMatrix :: [[a]] -> [[a]]\ntransposeMatrix [] = []\ntransposeMatrix ([]:_) = []\ntransposeMatrix xs = map head xs : transposeMatrix (map tail xs)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n    print $ transposeMatrix matrix -- Output: [[1,4,7],[2,5,8],[3,6,9]]\n",
-                "extension": "hs"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "putStrLn \"Hello, World!\"\n",
-                "extension": "haskell"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find Files in Directory by Type",
-                "description": "Finds all files in a directory with a specific extension.",
-                "author": "ACR1209",
-                "tags": [
-                    "file",
-                    "search",
-                    "extension",
-                    "filesystem"
-                ],
-                "contributors": [],
-                "code": "import System.Directory (listDirectory)\nimport System.FilePath (takeExtension)\n\nfindFilesByExtension :: FilePath -> String -> IO [FilePath]\nfindFilesByExtension dir ext = do\n    files <- listDirectory dir\n    return $ filter (\\f -> takeExtension f == ext) files\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let directory = \".\"\n    let ext = \".txt\"\n    files <- findFilesByExtension directory ext\n    mapM_ putStrLn files -- Output: list of txt files on the current directory\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Read File in Chunks",
-                "description": "Reads a file in chunks grouped by lines.",
-                "author": "ACR1209",
-                "tags": [
-                    "file",
-                    "read",
-                    "chunks",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "import System.IO (openFile, IOMode(ReadMode), hGetContents)\nimport Data.List (unfoldr)\n\nreadFileInChunks :: FilePath -> Int -> IO [[String]]\nreadFileInChunks filePath chunkSize = do\n    handle <- openFile filePath ReadMode\n    contents <- hGetContents handle\n    let linesList = lines contents\n    return $ go linesList\n  where\n    go [] = []\n    go xs = take chunkSize xs : go (drop chunkSize xs)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let file = \"example.txt\"\n    let chunkSize = 3 -- Number of lines per chunk\n    chunks <- readFileInChunks file chunkSize\n    mapM_ (putStrLn . unlines) chunks\n\n",
-                "extension": "hs"
-            }
-        ]
-    },
-    {
-        "name": "Monads",
-        "snippets": [
-            {
-                "title": "Either Monad for Error Handling",
-                "description": "Using the Either monad to handle errors in a computation.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "either",
-                    "error handling"
-                ],
-                "contributors": [],
-                "code": "safeDiv :: Int -> Int -> Either String Int\nsafeDiv _ 0 = Left \"Division by zero error\"\nsafeDiv x y = Right (x `div` y)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let result = do\n            a <- safeDiv 10 2\n            b <- safeDiv a 0  -- This will trigger an error\n            return b\n    print result  -- Output: Left \"Division by zero error\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Maybe Monad",
-                "description": "Using the Maybe monad to handle computations that might fail.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "maybe"
-                ],
-                "contributors": [],
-                "code": "safeDiv :: Int -> Int -> Maybe Int\nsafeDiv _ 0 = Nothing\nsafeDiv x y = Just (x `div` y)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let result = do\n            a <- safeDiv 10 2\n            b <- safeDiv a 2\n            return b\n    print result  -- Output: Just 2\n",
-                "extension": "hs"
-            },
-            {
-                "title": "State Monad",
-                "description": "Managing mutable state using the State monad.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "state",
-                    "state-management"
-                ],
-                "contributors": [],
-                "code": "import Control.Monad.State\n\nincrement :: State Int Int\nincrement = do\n    count <- get\n    put (count + 1)\n    return count\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let (res1, intermediateState) = runState increment 0\n    print res1      -- Output: 0\n    let (result, finalState) = runState increment intermediateState\n    print result    -- Output: 1\n    print finalState  -- Output: 2\n\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Writer Monad",
-                "description": "Using the Writer monad to accumulate logs or other outputs alongside a computation.",
-                "author": "ACR1209",
-                "tags": [
-                    "monads",
-                    "writer",
-                    "logs"
-                ],
-                "contributors": [],
-                "code": "import Control.Monad.Writer\n\naddAndLog :: Int -> Int -> Writer [String] Int\naddAndLog x y = do\n    tell [\"Adding \" ++ show x ++ \" and \" ++ show y]\n    return (x + y)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let (result, logs) = runWriter $ do\n            res1 <- addAndLog 3 5\n            addAndLog res1 1\n    print result  -- Output: 9\n    print logs  -- Output: [\"Adding 3 and 5\", \"Adding 8 and 1\"]\n",
-                "extension": "hs"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "CamelCase to snake_case",
-                "description": "Converts a Camel Case string to Snake case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "camel-case",
-                    "snake-case",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (isUpper, toLower)\n\ncamelToSnake :: String -> String\ncamelToSnake [] = []\ncamelToSnake (x:xs)\n    | isUpper x = '_' : toLower x : camelToSnake xs\n    | otherwise = x : camelToSnake xs\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let camelCase = \"camelCaseToSnakeCase\"\n    print $ camelToSnake camelCase -- Output: \"camel_case_to_snake_case\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "capitalize",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (toUpper)\n\ncapitalizeWords :: String -> String\ncapitalizeWords = unwords . map capitalize . words\n  where\n    capitalize []     = []\n    capitalize (x:xs) = toUpper x : xs\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let sentence = \"haskell is awesome\"\n    print $ capitalizeWords sentence -- Output: \"Haskell Is Awesome\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Count Word Occurrences in String",
-                "description": "Counts the occurrences of each word in a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "occurrences",
-                    "word-count"
-                ],
-                "contributors": [],
-                "code": "import Data.List (group, sort)\n\ncountWordOccurrences :: String -> [(String, Int)]\ncountWordOccurrences = map (\\(w:ws) -> (w, length (w:ws))) . group . sort . words\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let text = \"haskell is awesome and haskell is fun\"\n    print $ countWordOccurrences text -- Output: [(\"and\",1),(\"awesome\",1),(\"fun\",1),(\"haskell\",2),(\"is\",2)]\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes all punctuation from a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (isPunctuation)\n\nremovePunctuation :: String -> String\nremovePunctuation = filter (not . isPunctuation)\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let text = \"Hello, Haskell! How's it going?\"\n    print $ removePunctuation text -- Output: \"Hello Haskell Hows it going\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Snake_Case to CamelCase",
-                "description": "Converts a Snake Case string to Camel Case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "snake-case",
-                    "camel-case",
-                    "utilty"
-                ],
-                "contributors": [],
-                "code": "import Data.Char (toUpper)\n\nsnakeToCamel :: String -> String\nsnakeToCamel [] = []\nsnakeToCamel ('_':x:xs) = toUpper x : snakeToCamel xs\nsnakeToCamel (x:xs) = x : snakeToCamel xs\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let snakeCase = \"snake_case_to_camel_case\"\n    print $ snakeToCamel snakeCase -- Output: \"snakeCaseToCamelCase\"\n",
-                "extension": "hs"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Truncates a string to a specified length, optionally adding an ellipsis.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "truncate",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "truncateString :: Int -> String -> String\ntruncateString maxLength str\n    | length str <= maxLength = str\n    | otherwise = take (maxLength - 3) str ++ \"...\"\n\n-- Usage:\nmain :: IO ()\nmain = do\n    let longString = \"Haskell is a powerful functional programming language.\"\n    print $ truncateString 20 longString -- Output: \"Haskell is a powe...\"\n    print $ truncateString 54 longString -- Output: \"Haskell is a powerful functional programming language.\"\n",
-                "extension": "hs"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/html.json b/backend/dist/data/consolidated/html.json
deleted file mode 100644
index e62ed638..00000000
--- a/backend/dist/data/consolidated/html.json
+++ /dev/null
@@ -1,37 +0,0 @@
-[
-    {
-        "name": "Basic Layouts",
-        "snippets": [
-            {
-                "title": "Grid Layout with Navigation",
-                "description": "Full-height grid layout with header navigation using nesting syntax.",
-                "author": "GreenMan36",
-                "tags": [
-                    "css",
-                    "layout",
-                    "sticky",
-                    "grid",
-                    "full-height"
-                ],
-                "contributors": [],
-                "code": "<!DOCTYPE html>\n<html>\n  <head>\n    <style>\n      body {\n        margin: 0;\n        min-height: 100vh;\n        display: grid;\n        grid-template-rows: auto 1fr auto;\n        background: red; /* Shouldn't be visible */\n      }\n\n      .header {\n        background: #3b82f6;\n        padding: 1rem;\n        display: flex;\n        & .menu {\n          margin-left: auto;\n        }\n        & .menu ul {\n          margin-left: auto;\n          display: flex;\n          gap: 1rem;\n        }\n      }\n\n      .main {\n        background: #f3f4f6;\n        padding: 1rem;\n      }\n\n      .footer {\n        background: #1f2937;\n        padding: 1rem;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"header\">\n      Header\n      <nav class=\"menu\">\n        <ul>\n          <li><a href=\"#\">Home</a></li>\n          <li><a href=\"#\">About</a></li>\n          <li><a href=\"#\">Contact</a></li>\n        </ul>\n      </nav>\n    </div>\n    <div class=\"main\">Main Content</div>\n    <div class=\"footer\">Footer</div>\n  </body>\n</html>\n",
-                "extension": "html"
-            },
-            {
-                "title": "Sticky Header-Footer Layout",
-                "description": "Full-height layout with sticky header and footer, using modern viewport units and flexbox.",
-                "author": "GreenMan36",
-                "tags": [
-                    "css",
-                    "layout",
-                    "sticky",
-                    "flexbox",
-                    "viewport"
-                ],
-                "contributors": [],
-                "code": "<!DOCTYPE html>\n<html style=\"margin: 0\">\n  <head>\n    <style type=\"text/css\">\n      body {\n        margin: 0;\n        display: flex;\n        flex-direction: column;\n        min-height: 100svh; /* Smallest viewport height */\n        min-height: 100vh;  /* Standard viewport height */\n        min-height: 100dvh; /* Dynamic viewport height */\n        min-height: 100lvh; /* Largest viewport height */\n        background-color: red;\n      }\n\n      .header {\n        position: sticky;\n        top: 0;\n        left: 0;\n        right: 0;\n        background-color: blue;\n      }\n\n      .body {\n        flex-grow: 1;\n        background-color: whitesmoke;\n      }\n\n      .footer {\n        position: sticky;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        background-color: blue;\n      }\n    </style>\n  <head>\n  <body>\n    <div class=\"header\">header</div>\n    <div class=\"body\">body/content</div>\n    <div class=\"footer\">footer</div>\n  </body>\n</html>\n",
-                "extension": "html"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/java.json b/backend/dist/data/consolidated/java.json
deleted file mode 100644
index 8c66af67..00000000
--- a/backend/dist/data/consolidated/java.json
+++ /dev/null
@@ -1,670 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Remove duplicates",
-                "description": "Removes duplicate elements from an list",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "list",
-                    "duplicates",
-                    "unique"
-                ],
-                "contributors": [],
-                "code": "import java.util.List;\nimport java.util.stream.Collectors;\n\npublic static <T> List<T> removeDuplicates(List<T> list) {\n    return list.stream()\n        .distinct()\n        .collect(Collectors.toList());\n}\n\n// Usage:\nList<Integer> list = List.of(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);\nList<Integer> result = removeDuplicates(list);\nSystem.out.println(\"List with duplicates removed: \" + result); // [1, 2, 3, 4, 5]\n",
-                "extension": "java"
-            },
-            {
-                "title": "Zip Two Lists",
-                "description": "Zips two lists into a list of paired elements, combining corresponding elements from both lists.",
-                "author": "davidanukam",
-                "tags": [
-                    "lists",
-                    "zip",
-                    "stream-api",
-                    "collections"
-                ],
-                "contributors": [],
-                "code": "import java.util.*; // Importing utility classes for List and Arrays\nimport java.util.stream.IntStream; // Importing IntStream for range and mapping\nimport java.util.stream.Collectors; // Importing Collectors for collecting stream results\n\npublic <A, B> List<List<Object>> zip(List<A> list1, List<B> list2) {\n    // Create pairs by iterating through the indices of both lists\n    return IntStream.range(0, Math.min(list1.size(), list2.size())) // Limit the range to the smaller list\n            .mapToObj(i -> Arrays.asList(list1.get(i), list2.get(i))) // Pair elements from both lists at index i\n            .collect(Collectors.toList()); // Collect the pairs into a List\n}\n\n// Usage:\nList<String> arr1 = Arrays.asList(\"a\", \"b\", \"c\");\nList<Integer> arr2 = Arrays.asList(1, 2, 3);\nList<List<Object>> zipped = zip(arr1, arr2);\n\nSystem.out.println(zipped); // Output: [[a, 1], [b, 2], [c, 3]]\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello-World",
-                "description": "Prints Hello world in the console",
-                "author": "SarvariHarshitha",
-                "tags": [
-                    "java",
-                    "console",
-                    "printing"
-                ],
-                "contributors": [],
-                "code": "// This is the main class of the Java program\npublic class Main {\n    // The main method is the entry point of the program\n    public static void main(String args[]) {\n        // This statement prints \"Hello, World!\" to the console\n        System.out.println(\"Hello, World!\");\n    }\n}\n\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Bit Manipulation",
-        "snippets": [
-            {
-                "title": "Bit Counting",
-                "description": "Counts the set bits in the binary representation of an integer",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "bits",
-                    "bit-counting"
-                ],
-                "contributors": [],
-                "code": "public static int countBits(int number) {\n    int bits = 0;\n        \n    while (number > 0) {\n        bits += number & 1;\n        number >>= 1;\n    }\n\n    return bits;\n}\n\n// Usage:\nint number = 5;\nSystem.out.println(countBits(5)); // 2 (101)\n",
-                "extension": "java"
-            },
-            {
-                "title": "Is Power Of Two",
-                "description": "Checks if a number is a power of two",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "bit",
-                    "power-of-two"
-                ],
-                "contributors": [],
-                "code": "public static boolean isPowerOfTwo(int number) {\n    return (number > 0) && ((number & (number - 1)) == 0);\n}\n\n// Usage:\nint number = 16;\nSystem.out.println(isPowerOfTwo(number)); // true (2^4)\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Date Time",
-        "snippets": [
-            {
-                "title": "Date Time Formatting American",
-                "description": "Formats a timestamp to a human-readable date-time string in the format \"MM/dd/yyyy hh:mm:ss a\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "date",
-                    "time",
-                    "date-time",
-                    "formatting",
-                    "american"
-                ],
-                "contributors": [],
-                "code": "import java.time.Instant;\nimport java.time.ZoneId;\nimport java.time.format.DateTimeFormatter;\nimport java.util.concurrent.TimeUnit;\n\n// using the system default time zone\npublic static String formatDateTimeAmerican(long time, TimeUnit timeUnit) {\n    return formatDateTimeAmerican(time, timeUnit, ZoneId.systemDefault());\n}\n\npublic static String formatDateTimeAmerican(long time, TimeUnit timeUnit, ZoneId timeZone) {\n    return DateTimeFormatter.ofPattern(\"MM/dd/yyyy hh:mm:ss a\")\n            .withZone(\n                timeZone != null ? timeZone : ZoneId.systemDefault()\n            )\n            .format(Instant.ofEpochSecond(\n                timeUnit.toSeconds(time)\n            ));\n}\n\n// Usage:\nSystem.out.println(formatDateTimeAmerican(1735689599, TimeUnit.SECONDS)); // \"12/31/2024 | 11:59:59 PM\" for GMT+0000\nSystem.out.println(formatDateTimeAmerican(1735689599, TimeUnit.SECONDS, ZoneId.of(\"GMT+0000\"))); // \"12/31/2024 | 11:59:59 PM\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Date Time Formatting European",
-                "description": "Formats a timestamp to a human-readable date-time string in the format \"dd.MM.yyyy HH:mm:ss\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "date",
-                    "time",
-                    "date-time",
-                    "formatting",
-                    "european"
-                ],
-                "contributors": [],
-                "code": "import java.time.Instant;\nimport java.time.ZoneId;\nimport java.time.format.DateTimeFormatter;\nimport java.util.concurrent.TimeUnit;\n\n// using the system default time zone\npublic static String formatDateTimeEuropean(long time, TimeUnit timeUnit) {\n    return formatDateTimeEuropean(time, timeUnit, ZoneId.systemDefault());\n}\n\npublic static String formatDateTimeEuropean(long time, TimeUnit timeUnit, ZoneId timeZone) {\n    return DateTimeFormatter.ofPattern(\"dd.MM.yyyy HH:mm:ss\")\n            .withZone(\n                timeZone != null ? timeZone : ZoneId.systemDefault()\n            )\n            .format(Instant.ofEpochSecond(\n                    timeUnit.toSeconds(time)\n            ));\n}\n\n// Usage:\nSystem.out.println(formatDateTimeEuropean(1735689599, TimeUnit.SECONDS)); // \"31.12.2024 | 23:59:59\" for GMT+0000\nSystem.out.println(formatDateTimeEuropean(1735689599, TimeUnit.SECONDS, ZoneId.of(\"GMT+0000\"))); // \"31.12.2024 | 23:59:59\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Duration Formatting Hours Minutes Seconds",
-                "description": "Converts a given time duration to a human-readable string in the format \"hh:mm(:ss)\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "time",
-                    "formatting",
-                    "hours",
-                    "minutes",
-                    "seconds"
-                ],
-                "contributors": [],
-                "code": "import java.util.concurrent.TimeUnit;\n    \npublic static String formatDurationToHoursMinutesAndSeconds(int time, TimeUnit timeUnit, boolean showSeconds) {\n    long totalSeconds = timeUnit.toSeconds(time);\n\n    if (totalSeconds < 0)\n        throw new IllegalArgumentException(\"Duration must be a non-negative value.\");\n\n    // These variables can be directly used in the return statement,\n    // but are kept as separate variables here for better readability.\n    long hours = totalSeconds / 3600;\n    long minutes = (totalSeconds % 3600) / 60;\n    long seconds = totalSeconds % 60;\n\n    if (showSeconds) {\n        return String.format(\"%02d:%02d:%02d\", hours, minutes, seconds);\n    } else {\n        return String.format(\"%02d:%02d\", hours, minutes);\n    }\n}\n\n// Usage:\nSystem.out.println(formatDurationToHoursMinutesAndSeconds(3810, TimeUnit.SECONDS, true)); // \"01:03:30\"\nSystem.out.println(formatDurationToHoursMinutesAndSeconds(3810, TimeUnit.SECONDS, false)); // \"01:03\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Duration Formatting Minutes Seconds",
-                "description": "Converts a given time duration to a human-readable string in the format \"mm:ss\"",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "time",
-                    "formatting",
-                    "minutes",
-                    "seconds"
-                ],
-                "contributors": [],
-                "code": "import java.util.concurrent.TimeUnit;\n\npublic static String formatDurationToMinutesAndSeconds(int time, TimeUnit timeUnit) {\n    long totalSeconds = timeUnit.toSeconds(time);\n\n    if (totalSeconds < 0)\n        throw new IllegalArgumentException(\"Duration must be a non-negative value.\");\n\n    // These variables can be directly used in the return statement,\n    // but are kept here as separate variables for better readability.\n    long minutes = totalSeconds / 60;\n    long seconds = totalSeconds % 60;\n\n    return String.format(\"%02d:%02d\", minutes, seconds);\n}\n\n// Usage:\nSystem.out.println(formatDurationToMinutesAndSeconds(120, TimeUnit.SECONDS)); // \"02:00\"\nSystem.out.println(formatDurationToMinutesAndSeconds(75, TimeUnit.SECONDS)); // \"01:15\"\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "Math",
-        "snippets": [
-            {
-                "title": "Checksum",
-                "description": "Calculates the checksum of an int",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "checksum"
-                ],
-                "contributors": [],
-                "code": "public static int checksum(int number) {\n    number = Math.abs(number);\n    int sum = 0;\n\n    while (number != 0) {\n        sum += number % 10;\n        number /= 10;\n    }\n\n    return sum;\n}\n\n// Usage:\nint number = 12345;\nSystem.out.println(checksum(number)); // 15 = 1+2+3+4+5\n",
-                "extension": "java"
-            },
-            {
-                "title": "Factorial",
-                "description": "Computes the factorial of a given number",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "factorial"
-                ],
-                "contributors": [],
-                "code": "import java.math.BigInteger;\n\npublic static BigInteger factorial(int number) {\n    BigInteger result = BigInteger.ONE;\n\n    for (int currentNumber = 1; currentNumber <= number; currentNumber++) {\n        result = result.multiply(BigInteger.valueOf(currentNumber));\n    }\n\n    return result;\n}\n\n// Usage:\nint number = 6;\nSystem.out.println(factorial(number)); // 720 = 6*5*4*3*2\n",
-                "extension": "java"
-            },
-            {
-                "title": "Fibonacci",
-                "description": "Calculates the nth fibonacci number",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "fibonacci"
-                ],
-                "contributors": [],
-                "code": "public static int fibonacci(int number) {\n    if (number <= 1) \n        return number;\n        \n    return fibonacci(number - 1) + fibonacci(number - 2);\n}\n\n// Usage:\nint number = 5;\nSystem.out.println(fibonacci(number)) // 3 (0, 1, 1, 2, 3)\n",
-                "extension": "java"
-            },
-            {
-                "title": "Greatest Common Divisor",
-                "description": "Calculates the greatest common divisor (gcd) of two numbers",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "greatest-common-devisor",
-                    "gcd",
-                    "euclidean-algorithm"
-                ],
-                "contributors": [],
-                "code": "public static int gcd(int number1, int number2) {\n    while (number2 != 0) {\n        int remainder = number2;\n        number2 = number1 % number2;\n        number1 = remainder;\n    }\n\n    return number1;\n}\n\n// Usage:\nint a = 16;\nint b = 12;\nSystem.out.println(gcd(a, b)); // 4\n",
-                "extension": "java"
-            },
-            {
-                "title": "Least Common Multiple",
-                "description": "Calculates the least common multiple (lcm) of two numbers",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "least-common-multiple",
-                    "lcm",
-                    "euclidean-algorithm"
-                ],
-                "contributors": [],
-                "code": "public static int lcm(int number1, int number2) {\n    int gcdNumber1 = number1;\n    int gcdNumber2 = number2;\n    \n    while (gcdNumber2 != 0) {\n        int remainder = gcdNumber2;\n        gcdNumber2 = gcdNumber1 % gcdNumber2;\n        gcdNumber1 = remainder;\n    }\n    \n    return (number1 / gcdNumber1) * number2;\n}\n\n// Usage:\nint a = 16;\nint b = 12;\nSystem.out.println(lcm(a, b)); // 48\n",
-                "extension": "java"
-            },
-            {
-                "title": "Prime Check",
-                "description": "Checks if a number is a prime",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "math",
-                    "number",
-                    "prime"
-                ],
-                "contributors": [],
-                "code": "public static boolean isPrime(int number) {\n    if (number <= 1) \n        return false;\n\n    if (number <= 3) \n        return true;\n\n    boolean prime = true;\n    for (int divisor = 3; divisor < number; divisor++) {\n        if (number % divisor != 0)\n            continue;\n\n        prime = false;\n        break;\n    }\n\n    return prime;\n}\n\n// Usage:\nint number = 31;\nSystem.out.println(isPrime(number)); // true\n",
-                "extension": "java"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Ascii To String",
-                "description": "Converts a list of ascii numbers into a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "ascii",
-                    "encoding",
-                    "decode",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "import java.util.List;\n\npublic static String asciiToString(List<Integer> asciiCodes) {\n    StringBuilder text = new StringBuilder();\n\n    for (int asciiCode : asciiCodes) {\n        text.append((char) asciiCode);\n    }\n\n    return text.toString();\n}\n\n// Usage:\nSystem.out.println(asciiToString(List.of(104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100))); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "camelCase to snake_case",
-                "description": "Converts a camelCase string into snake_case",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "camel-case",
-                    "snake-case"
-                ],
-                "contributors": [],
-                "code": "public static String camelToSnake(String camelCase) {\n    return camelCase.replaceAll(\"([a-z])([A-Z])\", \"$1_$2\").toLowerCase();\n}\n\n// Usage:\nSystem.out.println(camelToSnake(\"helloWorld\")); // \"hello_world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "capitalize",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "public static String capitalizeWords(String text) {\n    String[] words = text.split(\"(?<=\\\\S)(?=\\\\s+)|(?<=\\\\s+)(?=\\\\S)\"); // this is needed to preserve spaces (text.split(\" \") would remove multiple spaces)\n    StringBuilder capitalizedText = new StringBuilder();\n    \n    for (String word : words) {\n        if (word.trim().isEmpty()) {\n            capitalizedText.append(word);\n            continue;\n        }\n        capitalizedText.append(Character.toUpperCase(word.charAt(0)))\n                .append(word.substring(1));\n    }\n    \n    return capitalizedText.toString();\n}\n\n// Usage:\nSystem.out.println(capitalizeWords(\"hello  world\")); // \"Hello  World\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Check Anagram",
-                "description": "Checks if two strings are anagrams, meaning they contain the same characters ignoring order, spaces and case sensitivity",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "anagram",
-                    "compare",
-                    "arrays"
-                ],
-                "contributors": [],
-                "code": "import java.util.Arrays;\n\npublic static boolean isAnagram(String text1, String text2) {\n    String text1Normalized = text1.replaceAll(\"\\\\s+\", \"\");\n    String text2Normalized = text2.replaceAll(\"\\\\s+\", \"\");\n\n    if (text1Normalized.length() != text2Normalized.length())\n        return false;\n        \n    char[] text1Array = text1Normalized.toCharArray();\n    char[] text2Array = text2Normalized.toCharArray();\n    Arrays.sort(text1Array);\n    Arrays.sort(text2Array);\n    return Arrays.equals(text1Array, text2Array);\n}\n\n// Usage:\nSystem.out.println(isAnagram(\"listen\", \"silent\")); // true\nSystem.out.println(isAnagram(\"hello\", \"world\"));   // false\n",
-                "extension": "java"
-            },
-            {
-                "title": "Check Palindrome",
-                "description": "Checks if a string reads the same backward as forward, ignoring whitespaces and case sensitivity",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "palindrome",
-                    "compare",
-                    "reverse"
-                ],
-                "contributors": [],
-                "code": "public static boolean isPalindrome(String text) {\n    String cleanText = text.toLowerCase().replaceAll(\"\\\\s+\", \"\");\n        \n    return new StringBuilder(cleanText)\n            .reverse()\n            .toString()\n            .equals(cleanText);\n}\n\n// Usage:\nSystem.out.println(isPalindrome(\"A man a plan a canal Panama\")); // true\n",
-                "extension": "java"
-            },
-            {
-                "title": "Count Character Frequency",
-                "description": "Counts the frequency of each character in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "character",
-                    "frequency",
-                    "character-frequency"
-                ],
-                "contributors": [],
-                "code": "public static Map<Character, Integer> characterFrequency(String text, boolean countSpaces, boolean caseSensitive) {\n    Map<Character, Integer> frequencyMap = new HashMap<>();\n\n    for (char character : text.toCharArray()) {\n        if (character == ' ' && !countSpaces)\n            continue;\n\n        if (!caseSensitive)\n            character = Character.toLowerCase(character);\n\n        frequencyMap.put(character, frequencyMap.getOrDefault(character, 0) + 1);\n    }\n\n    return frequencyMap;\n}\n\n// Usage:\nSystem.out.println(characterFrequency(\"hello world\", false, false)); // {r=1, d=1, e=1, w=1, h=1, l=3, o=2}\n",
-                "extension": "java"
-            },
-            {
-                "title": "Count Character Occurrences",
-                "description": "Counts the occurrences of the specified characters in a given string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "characters",
-                    "counter",
-                    "occurence"
-                ],
-                "contributors": [],
-                "code": "import java.util.List;\n\npublic static int countCharacterOccurrences(String text, List<Character> characters) {\n    int count = 0;\n    \n    for (char character : text.toCharArray()) {\n        if (characters.indexOf(character) == -1)\n            continue;\n                \n        count++;\n    }\n    \n    return count;\n}\n\n// Usage:\nSystem.out.println(countCharacterOccurrences(\"hello world\", List.of('l', 'o'))); // 5\n",
-                "extension": "java"
-            },
-            {
-                "title": "Count Words",
-                "description": "Counts the number of words in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "word",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "public static int countWords(String text) {\n    return text.split(\"\\\\s+\").length;\n}\n\n// Usage:\nSystem.out.println(countWords(\"hello world\")); // 2\n",
-                "extension": "java"
-            },
-            {
-                "title": "Extract Text Between Delimiters",
-                "description": "Extracts a text between two given delimiters from a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "delimiters",
-                    "start",
-                    "end"
-                ],
-                "contributors": [],
-                "code": "public static String extractBetweenDelimiters(String text, String start, String end) {\n    int startIndex = text.indexOf(start);\n    int endIndex = text.indexOf(end, startIndex + start.length());\n    \n    if (startIndex == -1 || endIndex == -1)\n        return \"\";\n    \n    return text.substring(startIndex + start.length(), endIndex);\n}\n\n// Usage:\nSystem.out.println(extractBetweenDelimiters(\"hello, world!\", \",\", \"!\")); // \" world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Find Longest Word",
-                "description": "Returns the longest word in a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "length",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "public static String findLongestWord(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    String longestWord = words[0];\n    \n    for (String word : words) {\n        if (word.length() <= longestWord.length())\n            continue;\n            \n        longestWord = word;\n    }\n\n    return longestWord;\n}\n\n// Usage:\nSystem.out.println(findLongestWord(\"hello world123\")); // \"world123\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Find Unique Characters",
-                "description": "Returns a set of unique characters from a string, with options to include spaces and control case sensitivity",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "unique",
-                    "characters",
-                    "case-sensitive"
-                ],
-                "contributors": [],
-                "code": "public static Set<Character> findUniqueCharacters(String text, boolean countSpaces, boolean caseSensitive) {\n    Set<Character> uniqueCharacters = new TreeSet<>();\n    \n    for (char character : text.toCharArray()) {\n        if (character == ' ' && !countSpaces)\n            continue;\n        if (!caseSensitive)\n            character = Character.toLowerCase(character);\n        uniqueCharacters.add(character);\n    }\n    \n    return uniqueCharacters;\n}\n\n// Usage:\nSystem.out.println(findUniqueCharacters(\"hello world\", false, true)); // Output: [d, e, h, l, o, r, w]\n",
-                "extension": "java"
-            },
-            {
-                "title": "Mask Text",
-                "description": "Masks portions of a string, leaving specific parts at the beginning and end visible while replacing the rest with a specified character",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "mask",
-                    "hide"
-                ],
-                "contributors": [],
-                "code": "public static String partialMask(String text, int maskLengthStart, int maskLengthEnd, char mask) \n    if (text == null)\n        return null;\n    \n    StringBuilder maskedText = new StringBuilder();\n    maskedText.append(text, 0, maskLengthStart);\n    \n    for (int currentChar = maskLengthStart; currentChar < text.length(); currentChar++) {\n        maskedText.append(mask);\n    }\n    maskedText.append(text, text.length() - maskLengthEnd, text.length());\n    return maskedText.toString();\n}\n\n// Usage:\nSystem.out.println(partialMask(\"1234567890\", 4, 2, '*')); // \"1234****90\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Normalize Whitespace",
-                "description": "Replaces consecutive whitespaces with a single space",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "whitespace",
-                    "normalize"
-                ],
-                "contributors": [],
-                "code": "public static String normalizeWhitespace(String text) {\n    return text.replaceAll(\" {2,}\", \" \");\n}\n\n// Usage:\nSystem.out.println(normalizeWhitespace(\"hello   world\")); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Password Generator",
-                "description": "Generates a random string with specified length and character set, including options for letters, numbers, and special characters ",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "password",
-                    "generator",
-                    "security",
-                    "random",
-                    "token"
-                ],
-                "contributors": [],
-                "code": "public static String randomString(int length, boolean useLetters, boolean useNumbers, boolean useSpecialCharacters) {\n    String characters = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n    String numbers = \"0123456789\";\n    String specialCharacters = \"!@#$%^&*()_+-=[]{}|;:,.<>?\";\n    \n    String allowedCharacters = \"\";\n    \n    if (useLetters)\n        allowedCharacters += characters;\n\n    if (useNumbers)\n        allowedCharacters += numbers;\n\n    if (useSpecialCharacters)\n        allowedCharacters += specialCharacters;\n\n    SecureRandom random = new SecureRandom();\n    StringBuilder result = new StringBuilder(length);\n\n    for (int i = 0; i < length; i++) {\n        int index = random.nextInt(allowedCharacters.length());\n        result.append(allowedCharacters.charAt(index));\n    }\n\n    return result.toString();\n}\n\n// Usage:\nSystem.out.println(randomString(10, true, true, false)); // Random string containing letters, numbers but no special characters with 10 characters\n",
-                "extension": "java"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes punctuation (, . !) from a string",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "clean",
-                    "normalization"
-                ],
-                "contributors": [],
-                "code": "public static String removePunctuation(String text) {\n    return text.replaceAll(\"[,!.?;:]\", \"\");\n}\n\n// Usage:\nSystem.out.println(removePunctuation(\"hello, world!\")); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Remove Special Characters",
-                "description": "Removes any character which is not alphabetic (A-Z, a-z) or numeric (0-9)",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "special-characters",
-                    "clean",
-                    "normalization"
-                ],
-                "contributors": [],
-                "code": "public static String removeSpecialCharacters(String text) {\n    return text.replaceAll(\"[^a-zA-Z0-9]\", \"\");\n}\n\n// Usage:\nSystem.out.println(removeSpecialCharacters(\"hello, world!#%\")); // \"hello world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Reverse Word Contents",
-                "description": "Reverses the characters of each word in a string while preserving word order",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "reverse",
-                    "words",
-                    "transformation",
-                    "order"
-                ],
-                "contributors": [],
-                "code": "public static String reverseWords(String text) {\n    String[] words = text.split(\"\\\\s+\"); \n    StringBuilder reversedText = new StringBuilder();\n\n    for (String word : words) {\n        StringBuilder reversedWord = new StringBuilder(word).reverse();\n        reversedText.append(reversedWord).append(\" \");\n    }\n\n    return reversedText.toString().trim();\n}\n\n// Usage:\nSystem.out.println(reverseWordContents(\"hello world\")); // \"olleh dlrow\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Reverse Word Order",
-                "description": "Reverses the order of words in a sentence while preserving the content of each word",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "reverse",
-                    "words",
-                    "transformation",
-                    "sentence"
-                ],
-                "contributors": [],
-                "code": "public static String reverseWords(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    StringBuilder reversedSentence = new StringBuilder();\n\n    for (int currentWord = words.length - 1; currentWord >= 0; currentWord--) {\n        reversedSentence.append(words[currentWord]).append(\" \");\n    }\n\n    return reversedSentence.toString().trim();\n}\n\n// Usage:\nSystem.out.println(reverseWords(\"hello world\")); // Output: world hello\n",
-                "extension": "java"
-            },
-            {
-                "title": "Slugify String",
-                "description": "Converts a string into a URL-friendly slug format",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "slug",
-                    "slugify"
-                ],
-                "contributors": [],
-                "code": "public static String slugify(String text, String separator) {\n    if (text == null)\n        return \"\";\n\n    // used to decompose accented characters to their base characters (e.g. \"é\" to \"e\")\n    String normalizedString = Normalizer.normalize(text, Normalizer.Form.NFD);\n    normalizedString = normalizedString.replaceAll(\"[\\\\p{InCombiningDiacriticalMarks}]\", \"\");\n\n    String slug = normalizedString.trim()\n            .toLowerCase()\n            .replaceAll(\"\\\\s+\", separator)\n            .replaceAll(\"[^a-z0-9\\\\-_\" + separator + \"]\", \"\")\n            .replaceAll(\"_\", separator)\n            .replaceAll(\"-\", separator)\n            .replaceAll(separator + \"+\", separator)\n            .replaceAll(separator + \"$\", \"\");\n\n    return slug;\n}\n\n// Usage:\nSystem.out.println(slugify(\"Hello World-#123-é\", \"-\")); // \"hello-world-123-e\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "snake_case to camelCase",
-                "description": "Converts a snake_case string into camelCase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "camel-case",
-                    "snake-case"
-                ],
-                "contributors": [],
-                "code": "import java.util.regex.Pattern;\n\npublic static String snakeToCamel(String snakeCase) {\n    return Pattern.compile(\"(_)([a-z])\")\n        .matcher(snakeCase)\n        .replaceAll(match -> match.group(2).toUpperCase());\n}\n\n// Usage:\nSystem.out.println(snakeToCamel(\"hello_world\")); // \"helloWorld\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Spaces To Tabs",
-                "description": "Converts spaces into tabs",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "tab",
-                    "space",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String convertSpacesToTab(String text, int spacesPerTab) {\n    return text.replaceAll(\" \".repeat(spacesPerTab), \"\\t\");\n}\n\n// Usage:\nSystem.out.println(convertSpacesToTab(\"hello    world\", 4)); // Output: hello\\tworld\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To Ascii",
-                "description": "Converts a string into ascii numbers",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "ascii",
-                    "encoding",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "import java.util.ArrayList;\nimport java.util.List;\n\npublic static List<Integer> stringToAscii(String text) {\n    List<Integer> asciiCodes = new ArrayList<>();\n\n    for (char character : text.toCharArray()) {\n        asciiCodes.add((int) character);\n    }\n\n    return asciiCodes;\n}\n\n// Usage:\nSystem.out.println(stringToAscii(\"hello world\")); // [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To camelCase",
-                "description": "Converts a string into camelCase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "camel-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToCamelCase(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    StringBuilder camelCase = new StringBuilder(\n        words[0].substring(0, 1).toLowerCase() + words[0].substring(1)\n    );\n\n    for (int i = 1; i < words.length; i++) {\n        camelCase.append(words[i].substring(0, 1).toUpperCase());\n        camelCase.append(words[i].substring(1));\n    }\n\n    return camelCase.toString();\n}\n\n// Usage:\nSystem.out.println(stringToCamelCase(\"Hello world test\")); // \"helloWorldTest\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To param-case",
-                "description": "Converts a string into param-case",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "param-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToParamCase(String text) {\n    return text.toLowerCase().replaceAll(\"\\\\s+\", \"-\");\n}\n\n// Usage:\nSystem.out.println(stringToParamCase(\"Hello World 123\")); // \"hello-world-123\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To PascalCase",
-                "description": "Converts a string into PascalCase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "pascal-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToPascalCase(String text) {\n    String[] words = text.split(\"\\\\s+\");\n    StringBuilder pascalCase = new StringBuilder();\n\n    for (String word : words) {\n        pascalCase.append(word.substring(0, 1).toUpperCase());\n        pascalCase.append(word.substring(1).toLowerCase());\n    }\n\n    return pascalCase.toString();\n}\n\n// Usage:\nSystem.out.println(stringToPascalCase(\"hello world\")); // \"HelloWorld\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To snake_case",
-                "description": "Converts a string into snake_case",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "snake-case"
-                ],
-                "contributors": [],
-                "code": "public static String stringToSnakeCase(String text) {\n    return text.toLowerCase().replaceAll(\"\\\\s+\", \"_\");\n}\n\n// Usage:\nSystem.out.println(stringToSnakeCase(\"Hello World 123\")); // \"hello_world_123\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To Titlecase",
-                "description": "Converts a string into Title Case, where the first letter of each word is capitalized and the remaining letters are lowercase",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "conversion",
-                    "title-case"
-                ],
-                "contributors": [],
-                "code": "public static String convertToTitleCase(String text) {\n    String[] words = text.split(\"(?<=\\\\S)(?=\\\\s+)|(?<=\\\\s+)(?=\\\\S)\"); // this is needed to preserve spaces (text.split(\" \") would remove multiple spaces)\n    StringBuilder capitalizedText = new StringBuilder();\n\n    for (String word : words) {\n        if (word.trim().isEmpty()) {\n            capitalizedText.append(word);\n            continue;\n        }\n\n        capitalizedText.append(Character.toUpperCase(word.charAt(0)))\n                .append(word.substring(1).toLowerCase());\n    }\n\n    return capitalizedText.toString().trim();\n}\n\n// Usage:\nSystem.out.println(convertToTitleCase(\"heLlo wOrld\")); // \"Hello World\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "String To Unicode",
-                "description": "Converts characters of a string into their unicode representation",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "unicode",
-                    "encoding",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String stringToUnicode(String text) {\n    StringBuilder unicodeText = new StringBuilder();\n\n    for (char character : text.toCharArray()) {\n        unicodeText.append(String.format(\"\\\\u%04x\", (int) character));\n    }\n\n    return unicodeText.toString();\n}\n\n// Usage:\nSystem.out.println(stringToUnicode(\"hello world\")); // \\u0068\\u0065\\u006C\\u006C\\u006F\\u0020\\u0077\\u006F\\u0072\\u006C\\u0064\n",
-                "extension": "java"
-            },
-            {
-                "title": "Tabs To Spaces",
-                "description": "Converts tabs into spaces",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "tab",
-                    "space",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String convertTabToSpace(String text, int spacesPerTab) {\n    return text.replaceAll(\"\\t\", \" \".repeat(spacesPerTab));\n}\n\n// Usage:\nSystem.out.println(convertTabToSpace(\"hello\\tworld\", 2)); // \"hello  world\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Truncates a string after a specified length (can also be used for hiding information)",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "truncate",
-                    "mask",
-                    "hide"
-                ],
-                "contributors": [],
-                "code": "public static String truncate(String text, int length, String suffix) {\n    if (text.length() <= length)\n        return text;\n    \n    return text.substring(0, length).trim() + (suffix != null ? suffix : \"\");\n}\n\n// Usage:\nSystem.out.println(truncate(\"hello world\", 5, \"...\")); // \"hello...\"\n",
-                "extension": "java"
-            },
-            {
-                "title": "Unicode To String",
-                "description": "Converts a unicode String into its normal representation",
-                "author": "Mcbencrafter",
-                "tags": [
-                    "string",
-                    "unicode",
-                    "encoding",
-                    "decoding",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "public static String unicodeToString(String unicode) {\n    StringBuilder string = new StringBuilder();\n    String[] hex = unicode.split(\"\\\\\\\\u\");\n\n    for (int symbol = 1; symbol < hex.length; symbol++) {\n        int data = Integer.parseInt(hex[symbol], 16);\n        string.append((char) data);\n    }\n\n    return string.toString();\n}\n\n// Usage:\nSystem.out.println(unicodeToString(\"\\\\u0068\\\\u0065\\\\u006c\\\\u006c\\\\u006f\\\\u0020\\\\u0077\\\\u006f\\\\u0072\\\\u006c\\\\u0064\")); // \"hello world\"\n",
-                "extension": "java"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/javascript--react.json b/backend/dist/data/consolidated/javascript--react.json
deleted file mode 100644
index 5e1df433..00000000
--- a/backend/dist/data/consolidated/javascript--react.json
+++ /dev/null
@@ -1,19 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Show Hello World on the page.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "import React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst App = () => {\n    return (\n        <div>\n            <h1>Hello, World!</h1>\n        </div>\n    );\n};\n\nReactDOM.render(<App />, document.getElementById('root'));\n",
-                "extension": "tsx"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/javascript.json b/backend/dist/data/consolidated/javascript.json
deleted file mode 100644
index 95f42b30..00000000
--- a/backend/dist/data/consolidated/javascript.json
+++ /dev/null
@@ -1,1120 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Compare Arrays",
-                "description": "Deeply compares two arrays to check if they are equal to each other (supports nested arrays and objects).",
-                "author": "KCSquid",
-                "tags": [
-                    "array",
-                    "object",
-                    "compare",
-                    "equal"
-                ],
-                "contributors": [],
-                "code": "const compareArrays = (a, b) => {\n  if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n  return a.every((v, i) => \n    Array.isArray(v) && Array.isArray(b[i]) ? compareArrays(v, b[i]) :\n    typeof v === \"object\" && typeof b[i] === \"object\" ? compareObjects(v, b[i]) :\n    v === b[i]\n  );\n};\n\nconst compareObjects = (a, b) => {\n  if (typeof a !== \"object\" || typeof b !== \"object\" || Object.keys(a).length !== Object.keys(b).length) return false;\n  return Object.keys(a).every(k => \n    Array.isArray(a[k]) && Array.isArray(b[k]) ? compareArrays(a[k], b[k]) :\n    typeof a[k] === \"object\" && typeof b[k] === \"object\" ? compareObjects(a[k], b[k]) :\n    a[k] === b[k]\n  );\n};\n\n// Usage:\ncompareArrays([1, 2, 3], [1, 2, 3]); // Returns: true\ncompareArrays([1, 2, 3], [3, 2, 1]); // Returns: false\ncompareArrays([{a:1}], [{a:1}]);     // Returns: true\ncompareArrays([{a:1}], null);        // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Partition Array",
-                "description": "Splits an array into two arrays based on a callback function.",
-                "author": "Swaraj-Singh-30",
-                "tags": [
-                    "array",
-                    "partition",
-                    "reduce"
-                ],
-                "contributors": [],
-                "code": "const partition = (arr, callback) =>\n  arr.reduce(\n    ([pass, fail], elem) => (callback(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]]),\n    [[], []]\n  );\n\n// Usage:\nconst numbers = [1, 2, 3, 4, 5, 6];\nconst isEven = (n) => n % 2 === 0;\npartition(numbers, isEven); // Returns: [[2, 4, 6], [1, 3, 5]]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Duplicates",
-                "description": "Removes duplicate values from an array.",
-                "author": "technoph1le",
-                "tags": [
-                    "array",
-                    "deduplicate"
-                ],
-                "contributors": [],
-                "code": "const removeDuplicates = (arr) => [...new Set(arr)];\n\n// Usage:\nconst numbers = [1, 2, 2, 3, 4, 4, 5];\nremoveDuplicates(numbers); // Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Falsy Values",
-                "description": "Removes falsy values from an array.",
-                "author": "mubasshir",
-                "tags": [
-                    "array",
-                    "falsy",
-                    "filter"
-                ],
-                "contributors": [],
-                "code": "const removeFalsy = (arr) => arr.filter(Boolean);\n\n// Usage:\nconst array = [0, 1, false, 2, \"\", 3, null];\nremoveFalsy(array); // Returns: [1, 2, 3]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Shuffle Array",
-                "description": "Shuffles an Array.",
-                "author": "loxt-nixo",
-                "tags": [
-                    "array",
-                    "shuffle"
-                ],
-                "contributors": [],
-                "code": "function shuffleArray(array) {\n    for (let i = array.length - 1; i >= 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        [array[i], array[j]] = [array[j], array[i]];\n    }\n}\n\n// Usage:\nconst array = [1, 2, 3, 4, 5];\nshuffleArray(array); // Shuffles `array` in place\n",
-                "extension": "js"
-            },
-            {
-                "title": "Zip Arrays",
-                "description": "Combines two arrays by pairing corresponding elements from each array.",
-                "author": "Swaraj-Singh-30",
-                "tags": [
-                    "array",
-                    "map"
-                ],
-                "contributors": [],
-                "code": "const zip = (arr1, arr2) => arr1.map((value, index) => [value, arr2[index]]);\n\n// Usage:\nconst arr1 = ['a', 'b', 'c'];\nconst arr2 = [1, 2, 3];\nconsole.log(zip(arr1, arr2)); // Output: [['a', 1], ['b', 2], ['c', 3]]\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "console.log(\"Hello, World!\"); // Prints Hello, World! to the console\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Color Manipulation",
-        "snippets": [
-            {
-                "title": "Hex to RGB Color",
-                "description": "Converts hexadecimal color code to RGB color values.",
-                "author": "pvictordev",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function hexToRgb(hex) {\n  let sanitizedHex = hex.startsWith(\"#\") ? hex.slice(1) : hex;\n\n  if (sanitizedHex.length === 3) {\n    sanitizedHex = [...sanitizedHex].map((char) => char + char).join(\"\");\n  }\n\n  const bigint = parseInt(sanitizedHex, 16);\n\n  return {\n    r: (bigint >> 16) & 0xff, \n    g: (bigint >> 8) & 0xff,  \n    b: bigint & 0xff,       \n  };\n}\n\n// Usage:\nconsole.log(hexToRgb(\"#ff5733\")); // { r: 255, g: 87, b: 51 }\nconsole.log(hexToRgb(\"#ffff\")); // { r: 0, g: 255, b: 255 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "HSL to RGB Color",
-                "description": "Converts HSL color values to RGB color values.",
-                "author": "pvictordev",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function hslToRgb(h, s, l) {\n  s /= 100;\n  l /= 100;\n  const c = (1 - Math.abs(2 * l - 1)) * s;\n  const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n  const m = l - c / 2;\n\n  const [r, g, b] = \n    h < 60  ? [c, x, 0] :\n    h < 120 ? [x, c, 0] :\n    h < 180 ? [0, c, x] :\n    h < 240 ? [0, x, c] :\n    h < 300 ? [x, 0, c] :\n              [c, 0, x];\n\n  return {\n    r: Math.round((r + m) * 255),\n    g: Math.round((g + m) * 255),\n    b: Math.round((b + m) * 255),\n  };\n}\n\n// Usage:\nconsole.log(hslToRgb(14, 100, 60)); // { r: 255, g: 87, b: 51 }\nconsole.log(hslToRgb(0, 0, 100)); // { r: 255, g: 255, b: 255 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "RGB to Hex Color",
-                "description": "Converts RGB color values to hexadecimal color code.",
-                "author": "jjcantu",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function rgbToHex(r, g, b) {\n  const toHex = (n) => {\n    const hex = n.toString(16);\n    return hex.length === 1 ? \"0\" + hex : hex;\n  };\n\n  return \"#\" + toHex(r) + toHex(g) + toHex(b);\n}\n\n// Usage:\nconsole.log(rgbToHex(255, 128, 0)); // Output: \"#ff8000\"\nconsole.log(rgbToHex(0, 255, 0)); // Output: \"#00ff00\"\n",
-                "extension": "js"
-            },
-            {
-                "title": "RGB to HSL Color",
-                "description": "Converts RGB color values to HSL color values.",
-                "author": "pvictordev",
-                "tags": [
-                    "color",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "function rgbToHsl(r, g, b) {\n  [r, g, b] = [r, g, b].map((v) => v / 255);\n\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const delta = max - min;\n\n  const l = (max + min) / 2;\n\n  if (delta === 0) return { h: 0, s: 0, l: Math.round(l * 100) };\n\n  const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n  const h = \n    max === r ? ((g - b) / delta + (g < b ? 6 : 0)) :\n    max === g ? (b - r) / delta + 2 :\n                (r - g) / delta + 4;\n\n  return {\n    h: Math.round(h * 60), \n    s: Math.round(s * 100),\n    l: Math.round(l * 100), \n  };\n}\n\n// Usage:\nconsole.log(rgbToHsl(255, 87, 51)); // { h: 14, s: 100, l: 60 }\nconsole.log(rgbToHsl(255, 255, 255)); // { h: 0, s: 0, l: 100 }\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Date And Time",
-        "snippets": [
-            {
-                "title": "Check Leap Year",
-                "description": "Determines if a given year is a leap year.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "leap-year"
-                ],
-                "contributors": [],
-                "code": "const isLeapYear = (year) => (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n\n// Usage:\nisLeapYear(2024); // Returns: true\nisLeapYear(2023); // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert to Unix Timestamp",
-                "description": "Converts a date to a Unix timestamp in seconds.",
-                "author": "Yugveer06",
-                "tags": [
-                    "date",
-                    "unix",
-                    "timestamp"
-                ],
-                "contributors": [],
-                "code": "function convertToUnixSeconds(input) {\n  if (typeof input === 'string') {\n    if (!input.trim()) {\n      throw new Error('Date string cannot be empty or whitespace');\n    }\n  } else if (!input) {\n    throw new Error('Input is required');\n  }\n\n  let date;\n\n  if (typeof input === 'string') {\n    date = new Date(input);\n  } else if (input instanceof Date) {\n    date = input;\n  } else {\n    throw new Error('Input must be a valid date string or Date object');\n  }\n\n  if (isNaN(date.getTime())) {\n    throw new Error('Invalid date provided');\n  }\n\n  return Math.floor(date.getTime() / 1000);\n}\n\n// Usage:\nconvertToUnixSeconds('2025-01-01T12:00:00Z'); // Returns: 1735732800\nconvertToUnixSeconds(new Date('2025-01-01T12:00:00Z')); // Returns: 1735732800\nconvertToUnixSeconds(new Date()); // Returns: Current Unix timestamp in seconds\n",
-                "extension": "js"
-            },
-            {
-                "title": "Format Date",
-                "description": "Formats a date in 'YYYY-MM-DD' format.",
-                "author": "technoph1le",
-                "tags": [
-                    "date",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const formatDate = (date) => date.toISOString().split('T')[0];\n\n// Usage:\nformatDate(new Date(2024, 11, 10)); // Returns: '2024-12-10'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Day of the Year",
-                "description": "Calculates the day of the year (1-365 or 1-366 for leap years) for a given date.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "day-of-year"
-                ],
-                "contributors": [],
-                "code": "const getDayOfYear = (date) => {\n  const startOfYear = new Date(date.getFullYear(), 0, 0);\n  const diff = date - startOfYear + (startOfYear.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000;\n  return Math.floor(diff / (1000 * 60 * 60 * 24));\n};\n\n// Usage:\ngetDayOfYear(new Date('2024-12-31')) // Returns: 366 (Leap year)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Days in Month",
-                "description": "Calculates the number of days in a specific month of a given year.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "days-in-month"
-                ],
-                "contributors": [],
-                "code": "const getDaysInMonth = (year, month) => new Date(year, month + 1, 0).getDate();\n\n// Usage:\ngetDaysInMonth(2024, 1); // Returns: 29 (February in a leap year)\ngetDaysInMonth(2023, 1); // Returns: 28\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Time Difference",
-                "description": "Calculates the time difference in days between two dates.",
-                "author": "technoph1le",
-                "tags": [
-                    "date",
-                    "time-difference"
-                ],
-                "contributors": [],
-                "code": "const getTimeDifference = (date1, date2) => {\n  const diff = Math.abs(date2 - date1);\n  return Math.ceil(diff / (1000 * 60 * 60 * 24));\n};\n\n// Usage:\nconst date1 = new Date('2024-01-01');\nconst date2 = new Date('2024-12-31');\ngetTimeDifference(date1, date2); // Returns: 365\n",
-                "extension": "js"
-            },
-            {
-                "title": "Relative Time Formatter",
-                "description": "Displays how long ago a date occurred or how far in the future a date is.",
-                "author": "Yugveer06",
-                "tags": [
-                    "date",
-                    "time",
-                    "relative",
-                    "future",
-                    "past"
-                ],
-                "contributors": [],
-                "code": "const getRelativeTime = (date) => {\n  const now = Date.now();\n  const diff = date.getTime() - now;\n  const seconds = Math.abs(Math.floor(diff / 1000));\n  const minutes = Math.abs(Math.floor(seconds / 60));\n  const hours = Math.abs(Math.floor(minutes / 60));\n  const days = Math.abs(Math.floor(hours / 24));\n  const years = Math.abs(Math.floor(days / 365));\n\n  if (Math.abs(diff) < 1000) return 'just now';\n\n  const isFuture = diff > 0;\n\n  if (years > 0) return `${isFuture ? 'in ' : ''}${years} ${years === 1 ? 'year' : 'years'}${isFuture ? '' : ' ago'}`;\n  if (days > 0) return `${isFuture ? 'in ' : ''}${days} ${days === 1 ? 'day' : 'days'}${isFuture ? '' : ' ago'}`;\n  if (hours > 0) return `${isFuture ? 'in ' : ''}${hours} ${hours === 1 ? 'hour' : 'hours'}${isFuture ? '' : ' ago'}`;\n  if (minutes > 0) return `${isFuture ? 'in ' : ''}${minutes} ${minutes === 1 ? 'minute' : 'minutes'}${isFuture ? '' : ' ago'}`;\n\n  return `${isFuture ? 'in ' : ''}${seconds} ${seconds === 1 ? 'second' : 'seconds'}${isFuture ? '' : ' ago'}`;\n}\n\n// Usage:\nconst pastDate = new Date('2021-12-29 13:00:00');\nconst futureDate = new Date('2099-12-29 13:00:00');\ngetRelativeTime(pastDate); // x years ago\ngetRelativeTime(new Date()); // just now\ngetRelativeTime(futureDate); // in x years\n",
-                "extension": "js"
-            },
-            {
-                "title": "Start of the Day",
-                "description": "Returns the start of the day (midnight) for a given date.",
-                "author": "axorax",
-                "tags": [
-                    "date",
-                    "start-of-day"
-                ],
-                "contributors": [],
-                "code": "const startOfDay = (date) => new Date(date.setHours(0, 0, 0, 0));\n\n// Usage:\nconst today = new Date();\nstartOfDay(today); // Returns: Date object for midnight\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Dom Manipulation",
-        "snippets": [
-            {
-                "title": "Change Element Style",
-                "description": "Changes the inline style of an element.",
-                "author": "axorax",
-                "tags": [
-                    "dom",
-                    "style"
-                ],
-                "contributors": [],
-                "code": "const changeElementStyle = (element, styleObj) => {\n  Object.entries(styleObj).forEach(([property, value]) => {\n    element.style[property] = value;\n  });\n};\n\n// Usage:\nconst element = document.querySelector('.my-element');\nchangeElementStyle(element, { color: 'red', backgroundColor: 'yellow' });\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Element",
-                "description": "Removes a specified element from the DOM.",
-                "author": "axorax",
-                "tags": [
-                    "dom",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "const removeElement = (element) => {\n  if (element && element.parentNode) {\n    element.parentNode.removeChild(element);\n  }\n};\n\n// Usage:\nconst element = document.querySelector('.my-element');\nremoveElement(element);\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Function Utilities",
-        "snippets": [
-            {
-                "title": "Compose Functions",
-                "description": "Composes multiple functions into a single function, where the output of one function becomes the input of the next.",
-                "author": "axorax",
-                "tags": [
-                    "function",
-                    "compose"
-                ],
-                "contributors": [],
-                "code": "const compose = (...funcs) => (initialValue) => {\n  return funcs.reduce((acc, func) => func(acc), initialValue);\n};\n\n// Usage:\nconst add2 = (x) => x + 2;\nconst multiply3 = (x) => x * 3;\nconst composed = compose(multiply3, add2);\ncomposed(5); // Returns: 17 ((5 * 3) + 2)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Curry Function",
-                "description": "Transforms a function into its curried form.",
-                "author": "axorax",
-                "tags": [
-                    "curry",
-                    "function"
-                ],
-                "contributors": [],
-                "code": "const curry = (func) => {\n  const curried = (...args) => {\n    if (args.length >= func.length) {\n      return func(...args);\n    }\n    return (...nextArgs) => curried(...args, ...nextArgs);\n  };\n  return curried;\n};\n\n// Usage:\nconst add = (a, b, c) => a + b + c;\nconst curriedAdd = curry(add);\ncurriedAdd(1)(2)(3); // Returns: 6\ncurriedAdd(1, 2)(3); // Returns: 6\n",
-                "extension": "js"
-            },
-            {
-                "title": "Debounce Function",
-                "description": "Delays a function execution until after a specified time.",
-                "author": "technoph1le",
-                "tags": [
-                    "debounce",
-                    "performance"
-                ],
-                "contributors": [],
-                "code": "const debounce = (func, delay) => {\n  let timeout;\n\n  return (...args) => {\n    clearTimeout(timeout);\n    timeout = setTimeout(() => func(...args), delay);\n  };\n};\n\n// Usage:\nwindow.addEventListener(\n  'resize',\n  debounce(() => console.log('Resized!'), 500), // Will only output after resizing has stopped for 500ms\n);\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Contrast Color",
-                "description": "Returns either black or white text color based on the brightness of the provided hex color.",
-                "author": "yaya12085",
-                "tags": [
-                    "color",
-                    "hex",
-                    "contrast",
-                    "brightness"
-                ],
-                "contributors": [],
-                "code": "const getContrastColor = (hexColor) => {\n  // Expand short hex color to full format\n  if (hexColor.length === 4) {\n    hexColor = `#${hexColor[1]}${hexColor[1]}${hexColor[2]}${hexColor[2]}${hexColor[3]}${hexColor[3]}`;\n  }\n  const r = parseInt(hexColor.slice(1, 3), 16);\n  const g = parseInt(hexColor.slice(3, 5), 16);\n  const b = parseInt(hexColor.slice(5, 7), 16);\n  const brightness = (r * 299 + g * 587 + b * 114) / 1000;\n  return brightness >= 128 ? \"#000000\" : \"#FFFFFF\";\n};\n\n// Usage:\ngetContrastColor('#fff'); // Returns: #000000 (black)\ngetContrastColor('#123456'); // Returns: #FFFFFF (white)\ngetContrastColor('#ff6347'); // Returns: #000000 (black)\ngetContrastColor('#f4f'); // Returns: #000000 (black)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Memoize Function",
-                "description": "Caches the result of a function based on its arguments to improve performance.",
-                "author": "axorax",
-                "tags": [
-                    "memoization",
-                    "optimization"
-                ],
-                "contributors": [],
-                "code": "const memoize = (func) => {\n  const cache = new Map();\n  return (...args) => {\n    const key = JSON.stringify(args);\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    const result = func(...args);\n    cache.set(key, result);\n    return result;\n  };\n};\n\n// Usage:\nconst factorial = memoize((n) => (n <= 1 ? 1 : n * factorial(n - 1)));\nfactorial(5); // Returns: 120\nfactorial(5); // Returns: 120 (retrieved from cache)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Once Function",
-                "description": "Ensures a function is only called once.",
-                "author": "axorax",
-                "tags": [
-                    "function",
-                    "once"
-                ],
-                "contributors": [],
-                "code": "const once = (func) => {\n  let called = false;\n  return (...args) => {\n    if (!called) {\n      called = true;\n      return func(...args);\n    }\n  };\n};\n\n// Usage:\nconst initialize = once(() => console.log('Initialized!'));\ninitialize(); // Output: Initialized!\ninitialize(); // No output\n",
-                "extension": "js"
-            },
-            {
-                "title": "Rate Limit Function",
-                "description": "Limits how often a function can be executed within a given time window.",
-                "author": "axorax",
-                "tags": [
-                    "function",
-                    "rate-limiting"
-                ],
-                "contributors": [],
-                "code": "const rateLimit = (func, limit, timeWindow) => {\n  let queue = [];\n  setInterval(() => {\n    if (queue.length) {\n      const next = queue.shift();\n      func(...next.args);\n    }\n  }, timeWindow);\n  return (...args) => {\n    if (queue.length < limit) {\n      queue.push({ args });\n    }\n  };\n};\n\n// Usage:\nconst fetchData = () => console.log('Fetching data...');\nconst rateLimitedFetch = rateLimit(fetchData, 2, 1000);\nsetInterval(() => rateLimitedFetch(), 200); // Limits fetchData calls to twice a seconds\n",
-                "extension": "js"
-            },
-            {
-                "title": "Repeat Function Invocation",
-                "description": "Invokes a function a specified number of times.",
-                "author": "technoph1le",
-                "tags": [
-                    "function",
-                    "repeat"
-                ],
-                "contributors": [],
-                "code": "const times = (func, n) => {\n  Array.from(Array(n)).forEach(() => {\n    func();\n  });\n};\n\n// Usage:\nconst randomFunction = () => console.log('Function called!');\ntimes(randomFunction, 3); // Logs 'Function called!' three times\n",
-                "extension": "js"
-            },
-            {
-                "title": "Sleep Function",
-                "description": "Waits for a specified amount of milliseconds before resolving.",
-                "author": "0xHouss",
-                "tags": [
-                    "javascript",
-                    "sleep",
-                    "delay",
-                    "utility",
-                    "promises"
-                ],
-                "contributors": [],
-                "code": "const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\n// Usage:\nconsole.log('Hello');\nawait sleep(2000); // Waits for 2 seconds\nconsole.log('World!');\n",
-                "extension": "js"
-            },
-            {
-                "title": "Throttle Function",
-                "description": "Ensures a function is only called at most once in a specified time interval. Useful for optimizing events like scrolling or resizing.",
-                "author": "WizardOfDigits",
-                "tags": [
-                    "throttle",
-                    "performance",
-                    "optimization"
-                ],
-                "contributors": [],
-                "code": "const throttle = (func, limit) => {\n  let inThrottle;\n  return (...args) => {\n    if (!inThrottle) {\n      func(...args);\n      inThrottle = true;\n      setTimeout(() => (inThrottle = false), limit);\n    }\n  };\n};\n\n// Usage:\n// Ensures the function can only be called once every 1000 milliseconds\nconst logScroll = throttle(() => console.log(\"Scroll event triggered\"), 1000);\n\n// Attach to scroll event\nwindow.addEventListener(\"scroll\", logScroll);\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Local Storage",
-        "snippets": [
-            {
-                "title": "Add Item to localStorage",
-                "description": "Stores a value in localStorage under the given key.",
-                "author": "technoph1le",
-                "tags": [
-                    "localStorage",
-                    "storage"
-                ],
-                "contributors": [],
-                "code": "const addToLocalStorage = (key, value) => {\n  localStorage.setItem(key, JSON.stringify(value));\n};\n\n// Usage:\naddToLocalStorage('user', { name: 'John', age: 30 });\n",
-                "extension": "js"
-            },
-            {
-                "title": "Check if Item Exists in localStorage",
-                "description": "Checks if a specific item exists in localStorage.",
-                "author": "axorax",
-                "tags": [
-                    "localStorage",
-                    "storage"
-                ],
-                "contributors": [],
-                "code": "const isItemInLocalStorage = (key) => {\n  return localStorage.getItem(key) !== null;\n};\n\n// Usage:\nconsole.log(isItemInLocalStorage('user')); // Output: true or false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Retrieve Item from localStorage",
-                "description": "Retrieves a value from localStorage by key and parses it.",
-                "author": "technoph1le",
-                "tags": [
-                    "localStorage",
-                    "storage"
-                ],
-                "contributors": [],
-                "code": "const getFromLocalStorage = (key) => {\n  const item = localStorage.getItem(key);\n  return item ? JSON.parse(item) : null;\n};\n\n// Usage:\ngetFromLocalStorage('user'); // Returns: { name: 'John', age: 30 }\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Mathematical Functions",
-        "snippets": [
-            {
-                "title": "Combinations",
-                "description": "Calculates the number of combinations (denoted as C(n,r) or \"n choose r\"), which determines how many ways you can select r items from n items without considering the order.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function combinations(n, r) {\n    if (n < 0 || r < 0 || n < r) {\n        throw new Error('Invalid input: n and r must be non-negative and n must be greater than or equal to r.');\n    }\n\n    function factorial(x) {\n        if (x === 0 || x === 1) return 1;\n        let result = 1;\n        for (let i = 2; i <= x; i++) {\n            result *= i;\n        }\n        return result;\n    }\n\n    const numerator = factorial(n);\n    const denominator = factorial(r) * factorial(n - r);\n    return numerator / denominator;\n}\n\n// Usage:\ncombinations(24,22); // Returns:    276\ncombinations(5,3);   // Returns:     10\n",
-                "extension": "js"
-            },
-            {
-                "title": "Cross Product",
-                "description": "Computes the cross product of two 3D vectors, which results in a vector perpendicular to both.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "vector-algebra"
-                ],
-                "contributors": [],
-                "code": "function crossProduct(a, b) {\n    if (a.length !== 3 || b.length !== 3) {\n        throw new Error('Vectors must be 3-dimensional');\n    }\n\n    return [\n        a[1] * b[2] - a[2] * b[1],\n        a[2] * b[0] - a[0] * b[2],\n        a[0] * b[1] - a[1] * b[0]\n    ];\n}\n\n// Usage:\ncrossProduct([1, 2, 3], [4, 5, 6]); // Returns: [-3, 6, -3] \n",
-                "extension": "js"
-            },
-            {
-                "title": "Dot Product",
-                "description": "Computes the dot product of two vectors, which is the sum of the products of corresponding elements.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "vector-algebra"
-                ],
-                "contributors": [],
-                "code": "function dotProduct(a, b) {\n    if (a.length !== b.length) {\n        throw new Error('Vectors must be of the same length');\n    }\n\n    return a.reduce((sum, value, index) => sum + value * b[index], 0);\n}\n\n// Usage:\ndotProduct([1, 2, 3], [4, 5, 6]); // Returns: 32\n",
-                "extension": "js"
-            },
-            {
-                "title": "Error function",
-                "description": "Computes the error function (erf(x)) for a given input x, which is a mathematical function used frequently in probability, statistics, and partial differential equations.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math"
-                ],
-                "contributors": [],
-                "code": "function erf(x) {\n    const sign = Math.sign(x);\n    const absX = Math.abs(x);\n    const t = 1 / (1 + 0.3275911 * absX);\n    const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741, a4 = -1.453152027, a5 = 1.061405429;\n    const poly = t * (a1 + t * (a2 + t * (a3 + t * (a4 + t * a5))));\n    return sign * (1 - poly * Math.exp(-absX * absX));\n}\n\n// Usage:\nerf(-1); // Returns:    -0.8427006897475899\nerf(1);  // Returns:     0.8427006897475899\n",
-                "extension": "js"
-            },
-            {
-                "title": "Greatest Common Divisor",
-                "description": "Calculates the largest positive integer that divides each of the integers without leaving a remainder. Useful for calculating aspect ratios.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "division",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function gcd(a, b) {\n    while (b !== 0) {\n        let temp = b;\n        b = a % b;\n        a = temp;\n    }\n    return a;\n}\n\n// Usage:\ngcd(1920, 1080); // Returns:    120\ngcd(1920, 1200); // Returns:    240\ngcd(5,12);       // Returns:      1\n",
-                "extension": "js"
-            },
-            {
-                "title": "Least common multiple",
-                "description": "Computes the least common multiple (LCM) of two numbers 𝑎 and b. The LCM is the smallest positive integer that is divisible by both a and b.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function lcm(a, b) {\n    function gcd(x, y) {\n        while (y !== 0) {\n            const temp = y;\n            y = x % y;\n            x = temp;\n        }\n        return Math.abs(x);\n    }\n    return Math.abs(a * b) / gcd(a, b);\n}\n\n// Usage:\nlcm(12,16); // Returns:    48\nlcm(8,20);  // Returns:    40\nlcm(16,17); // Returns:   272\n",
-                "extension": "js"
-            },
-            {
-                "title": "Linear Mapping",
-                "description": "remaps a value from one range to another",
-                "author": "JasimAlrawie",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function linearMapping(value, minIn, maxIn, minOut, maxOut) {\n    return (value - minIn) * (maxOut - minOut)/(maxIn - minIn) + minOut\n}\n\n// Usage:\nlinearMapping(value, 0, 1, 0, 255)    // remaps the value from (0,1) to (0,255)\nlinearMapping(value, 0, PI*2, 0, 360) // remaps the value from rad to deg\nlinearMapping(value, -1, 1, 1, 8)     // remaps the value from (-1,1) to (1,8)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Matrix Multiplication",
-                "description": "Multiplies two matrices, where the number of columns in the first matrix equals the number of rows in the second.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "matrix-algebra"
-                ],
-                "contributors": [],
-                "code": "function matrixMultiply(A, B) {\n    const rowsA = A.length;\n    const colsA = A[0].length;\n    const rowsB = B.length;\n    const colsB = B[0].length;\n\n    if (colsA !== rowsB) {\n        throw new Error('Number of columns of A must equal the number of rows of B');\n    }\n\n    let result = Array.from({ length: rowsA }, () => Array(colsB).fill(0));\n\n    for (let i = 0; i < rowsA; i++) {\n        for (let j = 0; j < colsB; j++) {\n            for (let k = 0; k < colsA; k++) {\n                result[i][j] += A[i][k] * B[k][j];\n            }\n        }\n    }\n\n    return result;\n}\n\n// Usage:\nmatrixMultiply([[1, 2], [3, 4]], [[5, 6], [7, 8]]); // Returns: [[19, 22], [43, 50]]\n",
-                "extension": "js"
-            },
-            {
-                "title": "Modular Inverse",
-                "description": "Computes the modular multiplicative inverse of a number a under modulo m, which is the integer x such that (a*x) mod m=1.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function modInverse(a, m) {\n    function extendedGCD(a, b) {\n        if (b === 0) {\n            return { gcd: a, x: 1, y: 0 };\n        }\n        const { gcd, x: x1, y: y1 } = extendedGCD(b, a % b);\n        const x = y1;\n        const y = x1 - Math.floor(a / b) * y1;\n        return { gcd, x, y };\n    }\n\n    const { gcd, x } = extendedGCD(a, m);\n\n    if (gcd !== 1) {\n        return null;\n    }\n\n    return (x % m + m) % m;\n}\n\n// Usage:\nmodInverse(3, 26);  // Returns: 9\nmodInverse(10, 17); // Returns: 12\nmodInverse(6, 9);   // Returns: null\n",
-                "extension": "js"
-            },
-            {
-                "title": "Prime Number",
-                "description": "Checks if a number is a prime number or not.",
-                "author": "JanluOfficial",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "function isPrime(num) {\n    if (num <= 1) return false; // 0 and 1 are not prime numbers\n    if (num <= 3) return true;  // 2 and 3 are prime numbers\n    if (num % 2 === 0 || num % 3 === 0) return false; // Exclude multiples of 2 and 3\n\n    // Check divisors from 5 to √num, skipping multiples of 2 and 3\n    for (let i = 5; i * i <= num; i += 6) {\n        if (num % i === 0 || num % (i + 2) === 0) return false;\n    }\n    return true;\n}\n\n// Usage:\nisPrime(69); // Returns:  false\nisPrime(17); // Returns:  true\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Number Formatting",
-        "snippets": [
-            {
-                "title": "Convert Number to Currency",
-                "description": "Converts a number to a currency format with a specific locale.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "currency"
-                ],
-                "contributors": [],
-                "code": "const convertToCurrency = (num, locale = 'en-US', currency = 'USD') => {\n  return new Intl.NumberFormat(locale, {\n    style: 'currency',\n    currency: currency\n  }).format(num);\n};\n\n// Usage:\nconvertToCurrency(1234567.89); // Returns: '$1,234,567.89'\nconvertToCurrency(987654.32, 'de-DE', 'EUR'); // Returns: '987.654,32 €'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert Number to Roman Numerals",
-                "description": "Converts a number to Roman numeral representation.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "roman"
-                ],
-                "contributors": [],
-                "code": "const numberToRoman = (num) => {\n  const romanNumerals = {\n    1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L',\n    90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'\n  };\n  let result = '';\n  Object.keys(romanNumerals).reverse().forEach(value => {\n    while (num >= value) {\n      result += romanNumerals[value];\n      num -= value;\n    }\n  });\n  return result;\n};\n\n// Usage:\nnumberToRoman(1994); // Returns: 'MCMXCIV'\nnumberToRoman(58); // Returns: 'LVIII'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert to Scientific Notation",
-                "description": "Converts a number to scientific notation.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "scientific"
-                ],
-                "contributors": [],
-                "code": "const toScientificNotation = (num) => {\n  if (isNaN(num)) {\n    throw new Error('Input must be a number');\n  }\n  if (num === 0) {\n    return '0e+0';\n  }\n  const exponent = Math.floor(Math.log10(Math.abs(num)));\n  const mantissa = num / Math.pow(10, exponent);\n  return `${mantissa.toFixed(2)}e${exponent >= 0 ? '+' : ''}${exponent}`;\n};\n\n// Usage:\ntoScientificNotation(12345); // Returns: '1.23e+4'\ntoScientificNotation(0.0005678); // Returns: '5.68e-4'\ntoScientificNotation(1000); // Returns: '1.00e+3'\ntoScientificNotation(0); // Returns: '0e+0'\ntoScientificNotation(-54321); // Returns: '-5.43e+4'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Format File Size",
-                "description": "Converts bytes into human-readable file size format.",
-                "author": "jjcantu",
-                "tags": [
-                    "format",
-                    "size"
-                ],
-                "contributors": [],
-                "code": "function formatFileSize(bytes) {\n  if (bytes === 0) return '0 Bytes';\n  \n  const k = 1024;\n  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n  const i = Math.floor(Math.log(bytes) / Math.log(k));\n  \n  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n// Usage:\nconsole.log(formatFileSize(1234)); // Output: \"1.21 KB\"\nconsole.log(formatFileSize(1234567)); // Output: \"1.18 MB\"\n",
-                "extension": "js"
-            },
-            {
-                "title": "Format Number with Commas",
-                "description": "Formats a number with commas for better readability (e.g., 1000 -> 1,000).",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const formatNumberWithCommas = (num) => {\n  return num.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\n// Usage:\nformatNumberWithCommas(1000); // Returns: '1,000'\nformatNumberWithCommas(1234567); // Returns: '1,234,567'\nformatNumberWithCommas(987654321); // Returns: '987,654,321'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Number Formatter",
-                "description": "Formats a number with suffixes (K, M, B, etc.).",
-                "author": "realvishalrana",
-                "tags": [
-                    "number",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const nFormatter = (num) => {\n  if (!num) return;\n  num = parseFloat(num.toString().replace(/[^0-9.]/g, ''));\n  const suffixes = ['', 'K', 'M', 'B', 'T', 'P', 'E'];\n  let index = 0;\n  while (num >= 1000 && index < suffixes.length - 1) {\n    num /= 1000;\n    index++;\n  }\n  return num.toFixed(2).replace(/\\.0+$|(\\.[0-9]*[1-9])0+$/, '$1') + suffixes[index];\n};\n\n// Usage:\nnFormatter(1234567); // Returns: '1.23M'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Number to Words Converter",
-                "description": "Converts a number to its word representation in English.",
-                "author": "axorax",
-                "tags": [
-                    "number",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "const numberToWords = (num) => {\n  const below20 = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'];\n  const tens = ['', '', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety'];\n  const above1000 = ['Hundred', 'Thousand', 'Million', 'Billion'];\n  if (num < 20) return below20[num];\n  let words = '';\n  for (let i = 0; num > 0; i++) {\n    if (i > 0 && num % 1000 !== 0) words = above1000[i] + ' ' + words;\n    if (num % 100 >= 20) {\n      words = tens[Math.floor(num / 10)] + ' ' + words;\n      num %= 10;\n    }\n    if (num < 20) words = below20[num] + ' ' + words;\n    num = Math.floor(num / 100);\n  }\n  return words.trim();\n};\n\n// Usage:\nnumberToWords(123); // Returns: 'One Hundred Twenty Three'\nnumberToWords(2045); // Returns: 'Two Thousand Forty Five'\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "Object Manipulation",
-        "snippets": [
-            {
-                "title": "Check if Object is Empty",
-                "description": "Checks whether an object has no own enumerable properties.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "check",
-                    "empty"
-                ],
-                "contributors": [],
-                "code": "function isEmptyObject(obj) {\n  return Object.keys(obj).length === 0;\n}\n\n// Usage:\nisEmptyObject({}); // Returns: true\nisEmptyObject({ a: 1 }); // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Compare Two Objects Shallowly",
-                "description": "Compares two objects shallowly and returns whether they are equal.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "compare",
-                    "shallow"
-                ],
-                "contributors": [],
-                "code": "function shallowEqual(obj1, obj2) {\n  const keys1 = Object.keys(obj1);\n  const keys2 = Object.keys(obj2);\n  if (keys1.length !== keys2.length) return false;\n  return keys1.every(key => obj1[key] === obj2[key]);\n}\n\n// Usage:\nconst obj1 = { a: 1, b: 2 };\nconst obj2 = { a: 1, b: 2 };\nconst obj3 = { a: 1, b: 3 };\nshallowEqual(obj1, obj2); // Returns: true\nshallowEqual(obj1, obj3); // Returns: false\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert Object to Query String",
-                "description": "Converts an object to a query string for use in URLs.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "query string",
-                    "url"
-                ],
-                "contributors": [],
-                "code": "function toQueryString(obj) {\n  return Object.entries(obj)\n    .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))\n    .join('&');\n}\n\n// Usage:\nconst params = { search: 'test', page: 1 };\ntoQueryString(params); // Returns: 'search=test&page=1'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Count Properties in Object",
-                "description": "Counts the number of own properties in an object.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "count",
-                    "properties"
-                ],
-                "contributors": [],
-                "code": "function countProperties(obj) {\n  return Object.keys(obj).length;\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\ncountProperties(obj); // Returns: 3\n",
-                "extension": "js"
-            },
-            {
-                "title": "Deep Clone Object",
-                "description": "Creates a deep copy of an object or array without reference.",
-                "author": "jjcantu",
-                "tags": [
-                    "object",
-                    "clone"
-                ],
-                "contributors": [],
-                "code": "function deepClone(obj) {\n  if (obj === null || typeof obj !== 'object') return obj;\n  \n  const clone = Array.isArray(obj) ? [] : {};\n  \n  for (let key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      clone[key] = deepClone(obj[key]);\n    }\n  }\n  \n  return clone;\n}\n\n// Usage:\nconst original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };\nconst cloned = deepClone(original);\nconsole.log(cloned); // Output: 'original' but cloned\n",
-                "extension": "js"
-            },
-            {
-                "title": "Filter Object",
-                "description": "Filter out entries in an object where the value is falsy, including empty strings, empty objects, null, and undefined.",
-                "author": "realvishalrana",
-                "tags": [
-                    "object",
-                    "filter"
-                ],
-                "contributors": [],
-                "code": "export const filterObject = (object = {}) =>\n  Object.fromEntries(\n    Object.entries(object)\n      .filter(([key, value]) => value !== null && value !== undefined && value !== '' && (typeof value !== 'object' || Object.keys(value).length > 0))\n  );\n\n// Usage:\nconst obj1 = { a: 1, b: null, c: undefined, d: 4, e: '', f: {} };\nfilterObject(obj1); // Returns: { a: 1, d: 4 }\n\nconst obj2 = { x: 0, y: false, z: 'Hello', w: [] };\nfilterObject(obj2); // Returns: { z: 'Hello' }\n\nconst obj3 = { name: 'John', age: null, address: { city: 'New York' }, phone: '' };\nfilterObject(obj3); // Returns: { name: 'John', address: { city: 'New York' } }\n\nconst obj4 = { a: 0, b: '', c: false, d: {}, e: 'Valid' };\nfilterObject(obj4); // Returns: { e: 'Valid' }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Flatten Nested Object",
-                "description": "Flattens a nested object into a single-level object with dot notation for keys.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "flatten"
-                ],
-                "contributors": [],
-                "code": "function flattenObject(obj, prefix = '') {\n  return Object.keys(obj).reduce((acc, key) => {\n    const fullPath = prefix ? `${prefix}.${key}` : key;\n    if (typeof obj[key] === 'object' && obj[key] !== null) {\n      Object.assign(acc, flattenObject(obj[key], fullPath));\n    } else {\n      acc[fullPath] = obj[key];\n    }\n    return acc;\n  }, {});\n}\n\n// Usage:\nconst nestedObj = { a: { b: { c: 1 }, d: 2 }, e: 3 };\nflattenObject(nestedObj); // Returns: { 'a.b.c': 1, 'a.d': 2, e: 3 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Freeze Object",
-                "description": "Freezes an object to make it immutable.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "freeze",
-                    "immutable"
-                ],
-                "contributors": [],
-                "code": "function freezeObject(obj) {\n  return Object.freeze(obj);\n}\n\n// Usage:\nconst obj = { a: 1, b: 2 };\nconst frozenObj = freezeObject(obj);\nfrozenObj.a = 42;         // This will fail silently in strict mode.\nfrozenObj.a; // Returns: 1\n",
-                "extension": "js"
-            },
-            {
-                "title": "Get Nested Value",
-                "description": "Retrieves the value at a given path in a nested object.",
-                "author": "realvishalrana",
-                "tags": [
-                    "object",
-                    "nested"
-                ],
-                "contributors": [],
-                "code": "const getNestedValue = (obj, path) => {\n  const keys = path.split('.');\n  return keys.reduce((currentObject, key) => {\n    return currentObject && typeof currentObject === 'object' ? currentObject[key] : undefined;\n  }, obj);\n};\n\n// Usage:\nconst obj = { a: { b: { c: 42 } } };\ngetNestedValue(obj, 'a.b.c'); // Returns: 42\n",
-                "extension": "js"
-            },
-            {
-                "title": "Invert Object Keys and Values",
-                "description": "Creates a new object by swapping keys and values of the given object.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "invert"
-                ],
-                "contributors": [],
-                "code": "function invertObject(obj) {\n  return Object.fromEntries(\n    Object.entries(obj).map(([key, value]) => [value, key])\n  );\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\ninvertObject(obj); // Returns: { '1': 'a', '2': 'b', '3': 'c' }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Merge Objects Deeply",
-                "description": "Deeply merges two or more objects, including nested properties.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "merge",
-                    "deep"
-                ],
-                "contributors": [],
-                "code": "function deepMerge(...objects) {\n  return objects.reduce((acc, obj) => {\n    Object.keys(obj).forEach(key => {\n      if (typeof obj[key] === 'object' && obj[key] !== null) {\n        acc[key] = deepMerge(acc[key] || {}, obj[key]);\n      } else {\n        acc[key] = obj[key];\n      }\n    });\n    return acc;\n  }, {});\n}\n\n// Usage:\nconst obj1 = { a: 1, b: { c: 2 } };\nconst obj2 = { b: { d: 3 }, e: 4 };\ndeepMerge(obj1, obj2); // Returns: { a: 1, b: { c: 2, d: 3 }, e: 4 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Omit Keys from Object",
-                "description": "Creates a new object with specific keys omitted.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "omit"
-                ],
-                "contributors": [],
-                "code": "function omitKeys(obj, keys) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([key]) => !keys.includes(key))\n  );\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\nomitKeys(obj, ['b', 'c']); // Returns: { a: 1 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Pick Keys from Object",
-                "description": "Creates a new object with only the specified keys.",
-                "author": "axorax",
-                "tags": [
-                    "object",
-                    "pick"
-                ],
-                "contributors": [],
-                "code": "function pickKeys(obj, keys) {\n  return Object.fromEntries(\n    Object.entries(obj).filter(([key]) => keys.includes(key))\n  );\n}\n\n// Usage:\nconst obj = { a: 1, b: 2, c: 3 };\npickKeys(obj, ['a', 'c']); // Returns: { a: 1, c: 3 }\n",
-                "extension": "js"
-            },
-            {
-                "title": "Unique By Key",
-                "description": "Filters an array of objects to only include unique objects by a specified key.",
-                "author": "realvishalrana",
-                "tags": [
-                    "array",
-                    "unique"
-                ],
-                "contributors": [],
-                "code": "const uniqueByKey = (key, arr) =>\n  arr.filter((obj, index, self) => index === self.findIndex((t) => t?.[key] === obj?.[key]));\n\n// Usage:\nconst arr = [\n  { id: 1, name: 'John' },\n  { id: 2, name: 'Jane' },\n  { id: 1, name: 'John' }\n];\nuniqueByKey('id', arr); // Returns: [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]\n",
-                "extension": "js"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize String",
-                "description": "Capitalizes the first letter of a string.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "function capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n// Usage:\ncapitalize('hello'); // Returns: 'Hello'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Check if String is a Palindrome",
-                "description": "Checks whether a given string is a palindrome.",
-                "author": "axorax",
-                "tags": [
-                    "check",
-                    "palindrome",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "function isPalindrome(str) {\n  const cleanStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n  return cleanStr === cleanStr.split('').reverse().join('');\n}\n\n// Example usage:\nisPalindrome('A man, a plan, a canal, Panama'); // Returns: true\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Camel Case",
-                "description": "Converts a given string into camelCase.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "camelCase"
-                ],
-                "contributors": [],
-                "code": "function toCamelCase(str) {\n  return str.replace(/\\W+(.)/g, (match, chr) => chr.toUpperCase());\n}\n\n// Usage:\ntoCamelCase('hello world test'); // Returns: 'helloWorldTest'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Param Case",
-                "description": "Converts a given string into param-case.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "paramCase"
-                ],
-                "contributors": [],
-                "code": "function toParamCase(str) {\n  return str.toLowerCase().replace(/\\s+/g, '-');\n}\n\n// Usage:\ntoParamCase('Hello World Test'); // Returns: 'hello-world-test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Pascal Case",
-                "description": "Converts a given string into Pascal Case.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "pascalCase"
-                ],
-                "contributors": [],
-                "code": "function toPascalCase(str) {\n  return str.replace(/\\b\\w/g, (s) => s.toUpperCase()).replace(/\\W+(.)/g, (match, chr) => chr.toUpperCase());\n}\n\n// Usage:\ntoPascalCase('hello world test'); // Returns: 'HelloWorldTest'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Snake Case",
-                "description": "Converts a given string into snake_case.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "case",
-                    "snake_case"
-                ],
-                "contributors": [],
-                "code": "function toSnakeCase(str) {\n  return str.replace(/([a-z])([A-Z])/g, '$1_$2')\n            .replace(/\\s+/g, '_')\n            .toLowerCase();\n}\n\n// Usage:\ntoSnakeCase('Hello World Test'); // Returns: 'hello_world_test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert String to Title Case",
-                "description": "Converts a given string into Title Case.",
-                "author": "aumirza",
-                "tags": [
-                    "string",
-                    "case",
-                    "titleCase"
-                ],
-                "contributors": [],
-                "code": "function toTitleCase(str) {\n  return str.toLowerCase().replace(/\\b\\w/g, (s) => s.toUpperCase());\n}\n\n// Usage:\ntoTitleCase('hello world test'); // Returns: 'Hello World Test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Convert Tabs to Spaces",
-                "description": "Converts all tab characters in a string to spaces.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "tabs",
-                    "spaces"
-                ],
-                "contributors": [],
-                "code": "function tabsToSpaces(str, spacesPerTab = 4) {\n  return str.replace(/\\t/g, ' '.repeat(spacesPerTab));\n}\n\n// Usage:\ntabsToSpaces('Hello\\tWorld', 2); // Returns: 'Hello  World'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Count Words in a String",
-                "description": "Counts the number of words in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "manipulation",
-                    "word count",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "function countWords(str) {\n  return str.trim().split(/\\s+/).length;\n}\n\n// Usage:\ncountWords('Hello world! This is a test.'); // Returns: 6\n",
-                "extension": "js"
-            },
-            {
-                "title": "Data with Prefix",
-                "description": "Adds a prefix and postfix to data, with a fallback value.",
-                "author": "realvishalrana",
-                "tags": [
-                    "data",
-                    "prefix",
-                    "postfix",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "const dataWithPrefix = (data, fallback = '-', prefix = '', postfix = '') => {\n  return data ? `${prefix}${data}${postfix}` : fallback;\n};\n\n// Usage:\ndataWithPrefix('123', '-', '(', ')'); // Returns: '(123)'\ndataWithPrefix('', '-', '(', ')'); // Returns: '-'\ndataWithPrefix('Hello', 'N/A', 'Mr. ', ''); // Returns: 'Mr. Hello'\ndataWithPrefix(null, 'N/A', 'Mr. ', ''); // Returns: 'N/A'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Extract Initials from Name",
-                "description": "Extracts and returns the initials from a full name.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "initials",
-                    "name"
-                ],
-                "contributors": [],
-                "code": "function getInitials(name) {\n  return name.split(' ').map(part => part.charAt(0).toUpperCase()).join('');\n}\n\n// Usage:\ngetInitials('John Doe'); // Returns: 'JD'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Generate UUID",
-                "description": "Generates a UUID (v4) string.",
-                "author": "jjcantu",
-                "tags": [
-                    "uuid",
-                    "generate",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "function generateUUID() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n    const r = Math.random() * 16 | 0;\n    const v = c === 'x' ? r : (r & 0x3 | 0x8);\n    return v.toString(16);\n  });\n}\n\n// Usage:\nconsole.log(generateUUID()); // Output: \"a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5\"\n",
-                "extension": "js"
-            },
-            {
-                "title": "Mask Sensitive Information",
-                "description": "Masks parts of a sensitive string, like a credit card or email address.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "mask",
-                    "sensitive"
-                ],
-                "contributors": [],
-                "code": "function maskSensitiveInfo(str, visibleCount = 4, maskChar = '*') {\n  return str.slice(0, visibleCount) + maskChar.repeat(Math.max(0, str.length - visibleCount));\n}\n\n// Usage:\nmaskSensitiveInfo('123456789', 4); // Returns: '1234*****'\nmaskSensitiveInfo('example@mail.com', 2, '#'); // Returns: 'ex#############'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Pad String on Both Sides",
-                "description": "Pads a string on both sides with a specified character until it reaches the desired length.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "pad",
-                    "manipulation"
-                ],
-                "contributors": [],
-                "code": "function padString(str, length, char = ' ') {\n  const totalPad = length - str.length;\n  const padStart = Math.floor(totalPad / 2);\n  const padEnd = totalPad - padStart;\n  return char.repeat(padStart) + str + char.repeat(padEnd);\n}\n\n// Usage:\npadString('hello', 10, '*'); // Returns: '**hello***'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Random string",
-                "description": "Generates a random string of characters of a certain length",
-                "author": "kruimol",
-                "tags": [
-                    "function",
-                    "random"
-                ],
-                "contributors": [],
-                "code": "function makeid(length, characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {\n  return Array.from({ length }, () => characters.charAt(Math.floor(Math.random() * characters.length))).join('');\n}\n\nmakeid(3); // Returns: gDs (Random)\nmakeid(5, \"1234\" /* (optional) */); // Returns: \"35453\" (Random)\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove All Whitespace",
-                "description": "Removes all whitespace from a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "whitespace"
-                ],
-                "contributors": [],
-                "code": "function removeWhitespace(str) {\n  return str.replace(/\\s+/g, '');\n}\n\n// Usage:\nremoveWhitespace('Hello world!'); // Returns: 'Helloworld!'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Remove Vowels from a String",
-                "description": "Removes all vowels from a given string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "remove",
-                    "vowels"
-                ],
-                "contributors": [],
-                "code": "function removeVowels(str) {\n  return str.replace(/[aeiouAEIOU]/g, '');\n}\n\n// Usage:\nremoveVowels('Hello World'); // Returns: 'Hll Wrld'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Reverse String",
-                "description": "Reverses the characters in a string.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "reverse"
-                ],
-                "contributors": [],
-                "code": "const reverseString = (str) => str.split('').reverse().join('');\n\n// Usage:\nreverseString('hello'); // Returns: 'olleh'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Slugify String",
-                "description": "Converts a string into a URL-friendly slug format.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "slug"
-                ],
-                "contributors": [],
-                "code": "const slugify = (string, separator = \"-\") => {\n  return string\n    .toString() // Cast to string (optional)\n    .toLowerCase() // Convert the string to lowercase letters\n    .trim() // Remove whitespace from both sides of a string (optional)\n    .replace(/\\s+/g, separator) // Replace spaces with {separator}\n    .replace(/[^\\w\\-]+/g, \"\") // Remove all non-word chars\n    .replace(/\\_/g, separator) // Replace _ with {separator}\n    .replace(/\\-\\-+/g, separator) // Replace multiple - with single {separator}\n    .replace(/\\-$/g, \"\"); // Remove trailing -\n};\n\n// Usage:\nconst title = \"Hello, World! This is a Test.\";\nslugify(title); // Returns: 'hello-world-this-is-a-test'\nslugify(title, \"_\"); // Returns: 'hello_world_this_is_a_test'\n",
-                "extension": "js"
-            },
-            {
-                "title": "Truncate Text",
-                "description": "Truncates the text to a maximum length and appends '...' if the text exceeds the maximum length.",
-                "author": "realvishalrana",
-                "tags": [
-                    "string",
-                    "truncate",
-                    "text"
-                ],
-                "contributors": [],
-                "code": "const truncateText = (text = '', maxLength = 50) => {\n  return `${text.slice(0, maxLength)}${text.length >= maxLength ? '...' : ''}`;\n};\n\n// Usage:\nconst title = \"Hello, World! This is a Test.\";\ntruncateText(title); // Returns: 'Hello, World! This is a Test.'\ntruncateText(title, 10); // Returns: 'Hello, Wor...'\n",
-                "extension": "js"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/python--fastapi.json b/backend/dist/data/consolidated/python--fastapi.json
deleted file mode 100644
index 2cea01cb..00000000
--- a/backend/dist/data/consolidated/python--fastapi.json
+++ /dev/null
@@ -1,21 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Returns Hello, World! when it recives a GET request made to the root endpoint.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world",
-                    "web",
-                    "api"
-                ],
-                "contributors": [],
-                "code": "from typing import Union\nfrom fastapi import FastAPI\n\napp = FastAPI()\n\n\n@app.get(\"/\")\ndef read_root():\n    return {\"msg\": \"Hello, World!\"}\n\n# Usage: \n# -> Go to http://127.0.0.1:8000/ and you'll see {\"msg\", \"Hello, World!\"}\n",
-                "extension": "py"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/python--tkinter.json b/backend/dist/data/consolidated/python--tkinter.json
deleted file mode 100644
index 412122ae..00000000
--- a/backend/dist/data/consolidated/python--tkinter.json
+++ /dev/null
@@ -1,254 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Display a Pillow Image",
-                "description": "Use Pillow to show an image in a Tkinter window.",
-                "author": "Legopitstop",
-                "tags": [
-                    "app",
-                    "hello-world",
-                    "object-oriented"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Label\nfrom PIL import Image, ImageDraw, ImageTk\n\n\nclass App(Tk):\n    def __init__(self):\n        Tk.__init__(self)\n        self.geometry(\"200x200\")\n\n        # PhotoImage must be global or be assigned to a class or it will be garbage collected.\n        self.photo = ImageTk.PhotoImage(self.make_image())\n        lbl = Label(self, image=self.photo)\n        lbl.pack(expand=1)\n\n    def make_image(self):\n        width, height = 200, 200\n        image = Image.new(\"RGB\", (width, height), \"white\")\n\n        # Create a drawing context\n        draw = ImageDraw.Draw(image)\n\n        # Draw a circle\n        radius = 80\n        center = (width // 2, height // 2)\n        draw.ellipse(\n            [\n                (center[0] - radius, center[1] - radius),\n                (center[0] + radius, center[1] + radius),\n            ],\n            fill=\"red\",\n            outline=\"black\",\n            width=3,\n        )\n        return image\n\n\n# Usage:\nroot = App()\nroot.mainloop()\n\n",
-                "extension": "py"
-            },
-            {
-                "title": "Hello, World!",
-                "description": "Creates a basic Tkinter window with a \"Hello, World!\" label.",
-                "author": "Legopitstop",
-                "tags": [
-                    "app",
-                    "hello-world",
-                    "object-oriented"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Label\n\nclass App(Tk):\n    def __init__(self):\n        Tk.__init__(self)\n        self.geometry(\"200x200\")\n\n        self.lbl = Label(self, text='Hello, World!')\n        self.lbl.pack(expand=1)\n\n# Usage:\nroot = App()\nroot.mainloop()\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Entry Validation",
-        "snippets": [
-            {
-                "title": "Allow Alphanumeric",
-                "description": "A validation function to allow alphanumeric characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "alphanumeric"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_alphanumeric(value):\n    return value.isalnum() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_alphanumeric)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Decimal",
-                "description": "A validation function to allow only decimal numbers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "decimals"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_decimal(action, value):\n    if action == \"1\":\n        if value == \"\":\n            return True\n        try:\n            float(value)\n            return True\n        except ValueError:\n            return False\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_decimal)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Digits with A Max Length",
-                "description": "A validation function to allow only digits with a specified maximum length.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "max",
-                    "length"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_digits_with_max_length(action, value, max_length):\n    if action == \"1\":\n        return value == \"\" or (value.isdigit() and len(value) <= int(max_length))\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_digits_with_max_length)\n# 4 is the max length\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\", 4)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Lowercase",
-                "description": "A validation function to allow only lowercase alphabetic characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "lowercase"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_lowercase(value):\n    return value.islower() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_lowercase)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Negative Integers",
-                "description": "A validation function to allow only negative integers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "negative",
-                    "integers"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_negative_integers(value):\n    return (\n        value in (\"\", \"-\") or value.startswith(\"-\") and value[1:].isdigit()\n        if value\n        else True\n    )\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_negative_integers)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Numbers in Range",
-                "description": "A validation function to allow only numbers within a specified range.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "number",
-                    "range"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_numbers_in_range(action, value, min_value, max_value):\n    if action == \"1\":  \n        try:\n            num = float(value)\n            return float(min_value) <= num <= float(max_value)\n        except ValueError:\n            return False\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_numbers_in_range)\n# 0 is the minimum value\n# 10 is the maximum value\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\", 0, 10)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Only Alphabets",
-                "description": "A validation function to allow only alphabetic characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "alphabets"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_only_alphabets(value):\n    return value.isalpha() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_only_alphabets)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Only Digits",
-                "description": "A validation function to allow only digits.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "digits"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_only_digits(value):\n    return value.isdigit() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_only_digits)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Positive Integers",
-                "description": "A validation function to allow only positive integers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "positive",
-                    "integers"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_positive_integers(value):\n    return value.isdigit() and (value == \"\" or int(value) > 0)\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_positive_integers)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow signed Decimals",
-                "description": "A validation function to allow only signed decimal numbers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "signed",
-                    "decimals"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_signed_decimals(action, value):\n    if action == \"1\":\n        try:\n            if value in (\"\", \"-\"):\n                return True\n            float(value)\n            return True\n        except ValueError:\n            return False\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_signed_decimals)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Signed Integers",
-                "description": "A validation function to allow only signed integers.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "signed",
-                    "integers"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_signed_integers(action, value):\n    if action == \"1\":\n        return (\n            value in (\"\", \"-\")\n            or value.isdigit()\n            or (value.startswith(\"-\") and value[1:].isdigit())\n        )\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_signed_integers)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Specific Characters",
-                "description": "A validation function to allow specific characters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "regex"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_specific_characters(value, allowed_chars):\n    return all(char in allowed_chars for char in value)\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_specific_characters)\nallowed_chars = \"0123456789ABCDEFabcdef\"  # Hexadecimal characters\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\", allowed_chars)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Allow Uppercase",
-                "description": "A validation function to allow uppercase letters.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "uppercase"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef allow_uppercase(value):\n    return value.isupper() or value == \"\"\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(allow_uppercase)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Custom Regular Expression",
-                "description": "A validation function to match a regular expression pattern.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "regex",
-                    "pattern"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\nimport re\n\n\ndef custom_regular_expression(action, value, pattern):\n    if action == \"1\":\n        return re.fullmatch(pattern, value) is not None\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(custom_regular_expression)\npattern = r\"^\\d{0,4}$\"  # Allow up to 4 digits\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\", pattern)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Restrict Length",
-                "description": "A validation function to limit the length.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "length"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\n\n\ndef restrict_length(value, max_length):\n    return len(value) <= int(max_length)\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(restrict_length)\n# 10 is the maximum length allowed\nEntry(root, validate=\"key\", validatecommand=(reg, \"%P\", 10)).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            },
-            {
-                "title": "Validate File Path",
-                "description": "A validation function to ensure the file path exists.",
-                "author": "Legopitstop",
-                "tags": [
-                    "validation",
-                    "filepath",
-                    "fp"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Entry\nimport os\n\n\ndef validate_file_path(action, value):\n    if action == \"1\":\n        return value == \"\" or os.path.exists(os.path.expandvars(value))\n    return True\n\n\n# Usage:\nroot = Tk()\nroot.geometry(\"200x200\")\n\nreg = root.register(validate_file_path)\nEntry(root, validate=\"key\", validatecommand=(reg, \"%d\", \"%P\")).pack()\n\nroot.mainloop()\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Menus",
-        "snippets": [
-            {
-                "title": "Context Menu",
-                "description": "Opens a menu when you right click a widget.",
-                "author": "Legopitstop",
-                "tags": [
-                    "menu"
-                ],
-                "contributors": [],
-                "code": "from tkinter import Tk, Label, Menu\n\n\nclass App(Tk):\n    def __init__(self):\n        Tk.__init__(self)\n        self.geometry(\"200x200\")\n\n        lbl = Label(self, text=\"Right-click me!\")\n        lbl.bind(\"<Button-3>\", self.do_popup)\n        lbl.pack(expand=1, ipadx=10, ipady=10)\n\n    def do_popup(self, event):\n        menu = Menu(self, tearoff=0)\n        menu.add_command(label=\"Option 1\", command=lambda: print(\"Option 1\"))\n        menu.add_command(label=\"Option 2\", command=lambda: print(\"Option 2\"))\n        menu.post(event.x_root, event.y_root)\n\n\n# Usage:\nroot = App()\nroot.mainloop()\n",
-                "extension": "py"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/python.json b/backend/dist/data/consolidated/python.json
deleted file mode 100644
index 6e22272d..00000000
--- a/backend/dist/data/consolidated/python.json
+++ /dev/null
@@ -1,785 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "print(\"Hello, World!\") # Prints Hello, World! to the terminal.\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Datetime Utilities",
-        "snippets": [
-            {
-                "title": "Calculate Date Difference in Milliseconds",
-                "description": "Calculates the difference between two dates in milliseconds.",
-                "author": "e3nviction",
-                "tags": [
-                    "datetime",
-                    "difference"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef date_difference_in_millis(date1, date2):\n    delta = date2 - date1\n    return delta.total_seconds() * 1000\n\n# Usage:\nd1 = datetime(2023, 1, 1, 12, 0, 0)\nd2 = datetime(2023, 1, 1, 12, 1, 0)\ndate_difference_in_millis(d1, d2) # Returns: 60000\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check if Date is a Weekend",
-                "description": "Checks whether a given date falls on a weekend.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "weekend"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef is_weekend(date):\n    try:\n        return date.weekday() >= 5  # Saturday = 5, Sunday = 6\n    except AttributeError:\n        raise TypeError(\"Input must be a datetime object\")\n\n# Usage:\ndate = datetime(2023, 1, 1)\nis_weekend(date) # Returns: True (Sunday)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Day of the Week String",
-                "description": "Gets the string of the day of the week for a given date.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "weekday"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef get_day_of_week(date):\n    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']\n    try:\n        return days[date.weekday()]\n    except IndexError:\n        raise ValueError(\"Invalid date\")\n\n# Usage:\ndate = datetime(2023, 1, 1)\nget_day_of_week(date) # Returns: 'Sunday'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Generate Date Range List",
-                "description": "Generates a list of dates between two given dates.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "range"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime, timedelta\n\ndef generate_date_range(start_date, end_date):\n    if start_date > end_date:\n        raise ValueError(\"start_date must be before end_date\")\n\n    current_date = start_date\n    date_list = []\n    while current_date <= end_date:\n        date_list.append(current_date)\n        current_date += timedelta(days=1)\n\n    return date_list\n\n# Usage:\nstart = datetime(2023, 1, 1)\nend = datetime(2023, 1, 5)\ndates = generate_date_range(start, end)\nfor d in dates:\n    print(d.strftime('%Y-%m-%d'))\n# Outputs: '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Get Current Date and Time as String",
-                "description": "Fetches the current date and time as a formatted string.",
-                "author": "e3nviction",
-                "tags": [
-                    "datetime",
-                    "current",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "from datetime import datetime\n\ndef get_current_datetime_string():\n    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')\n\n# Usage:\nget_current_datetime_string() # Returns: '2023-01-01 12:00:00'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Get Number of Days in a Month",
-                "description": "Determines the number of days in a specific month and year.",
-                "author": "axorax",
-                "tags": [
-                    "datetime",
-                    "calendar"
-                ],
-                "contributors": [],
-                "code": "from calendar import monthrange\nfrom datetime import datetime\n\ndef get_days_in_month(year, month):\n    try:\n        return monthrange(year, month)[1]\n    except ValueError as e:\n        raise ValueError(f\"Invalid month or year: {e}\")\n\n# Usage:\nget_days_in_month(2023, 2) # Returns: 28 (for non-leap year February)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Measure Execution Time",
-                "description": "Measures the execution time of a code block.",
-                "author": "technoph1le",
-                "tags": [
-                    "time",
-                    "execution"
-                ],
-                "contributors": [],
-                "code": "import time\n\ndef measure_time(func, *args):\n    start = time.time()\n    result = func(*args)\n    end = time.time()\n    print(f'Execution time: {end - start:.6f} seconds')\n    return result\n\n# Usage:\ndef slow_function():\n    time.sleep(2)\n\nmeasure_time(slow_function) # Outputs an execution time of ~2s\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Error Handling",
-        "snippets": [
-            {
-                "title": "Create Custom Exception Type",
-                "description": "Create a Custom Exception Type that can be called with raise.",
-                "author": "mrcool7387",
-                "tags": [
-                    "python",
-                    "error-creation",
-                    "organisation",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "class ExceptionName(BaseException):\n    def __init__(message: str):\n        super().__init__(message)\n\n# Usage\na: int = 1\n\nif a > 0:\n  raise ExceptionName('Error Message')\n",
-                "extension": "py"
-            },
-            {
-                "title": "Retry Function Execution on Exception",
-                "description": "Retries a function execution a specified number of times if it raises an exception.",
-                "author": "axorax",
-                "tags": [
-                    "error-handling",
-                    "retry"
-                ],
-                "contributors": [],
-                "code": "import time\n\ndef retry(func, retries=3, delay=1):\n    for attempt in range(retries):\n        try:\n            return func()\n        except Exception as e:\n            print(f\"Attempt {attempt + 1} failed: {e}\")\n            time.sleep(delay)\n    raise Exception(\"All retry attempts failed\")\n\n# Usage:\ndef unstable_function():\n    raise ValueError(\"Simulated failure\")\n\n# Retry 3 times with 2 seconds delay:\ntry:\n    retry(unstable_function, retries=3, delay=2)\nexcept Exception as e:\n    print(e)  # Output: All retry attempts failed\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find Files",
-                "description": "Finds all files of the specified type within a given directory.",
-                "author": "Jackeastern",
-                "tags": [
-                    "os",
-                    "filesystem",
-                    "file_search"
-                ],
-                "contributors": [],
-                "code": "import os\n\ndef find_files(directory, file_type):\n  file_type = file_type.lower()  # Convert file_type to lowercase\n  found_files = []\n\n  for root, _, files in os.walk(directory):\n    for file in files:\n      file_ext = os.path.splitext(file)[1].lower()\n      if file_ext == file_type:\n        full_path = os.path.join(root, file)\n        found_files.append(full_path)\n\n  return found_files\n\n# Example Usage:\nfind_files('/path/to/your/directory', '.pdf') # Returns all .pdf in directory\n",
-                "extension": "py"
-            },
-            {
-                "title": "Get File Extension",
-                "description": "Gets the extension of a file.",
-                "author": "axorax",
-                "tags": [
-                    "file",
-                    "extension"
-                ],
-                "contributors": [],
-                "code": "import os\n\ndef get_file_extension(filepath):\n    return os.path.splitext(filepath)[1]\n\n# Usage:\nget_file_extension('example.txt') # Returns: '.txt'\n",
-                "extension": "py"
-            },
-            {
-                "title": "List Files in Directory",
-                "description": "Lists all files in a specified directory.",
-                "author": "axorax",
-                "tags": [
-                    "file",
-                    "list",
-                    "directory"
-                ],
-                "contributors": [],
-                "code": "import os\n\ndef list_files(directory):\n    return [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]\n\n# Usage:\nlist_files('/path/to/directory') # Returns: List of file in the directory\n",
-                "extension": "py"
-            },
-            {
-                "title": "Read File in Chunks",
-                "description": "Reads a file in chunks of a specified size.",
-                "author": "axorax",
-                "tags": [
-                    "file",
-                    "read",
-                    "chunks"
-                ],
-                "contributors": [],
-                "code": "def read_file_in_chunks(filepath, chunk_size):\n    with open(filepath, 'r') as file:\n        while chunk := file.read(chunk_size):\n            yield chunk\n\n# Usage:\nfor chunk in read_file_in_chunks('example.txt', 1024):\n    print(chunk) # Outputs: Chucks of 1024 bytes\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Json Manipulation",
-        "snippets": [
-            {
-                "title": "Filter JSON Data",
-                "description": "Filters a JSON object based on a condition and returns the filtered data.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "filter",
-                    "data"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef filter_json_data(filepath, condition):\n    with open(filepath, 'r') as file:\n        data = json.load(file)\n\n    # Filter data based on the provided condition\n    filtered_data = [item for item in data if condition(item)]\n\n    return filtered_data\n\n# Usage:\ncondition = lambda x: x['age'] > 25\nfilter_json_data('data.json', condition) # Returns: `data.json` filtered with `condition`\n",
-                "extension": "py"
-            },
-            {
-                "title": "Flatten Nested JSON",
-                "description": "Flattens a nested JSON object into a flat dictionary.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "flatten",
-                    "nested"
-                ],
-                "contributors": [],
-                "code": "def flatten_json(nested_json, prefix=''):\n    flat_dict = {}\n    for key, value in nested_json.items():\n        if isinstance(value, dict):\n            flat_dict.update(flatten_json(value, prefix + key + '.'))\n        else:\n            flat_dict[prefix + key] = value\n    return flat_dict\n\n# Usage:\nnested_json = {'name': 'John', 'address': {'city': 'New York', 'zip': '10001'}}\nflatten_json(nested_json) # Returns: {'name': 'John', 'address.city': 'New York', 'address.zip': '10001'}\n",
-                "extension": "py"
-            },
-            {
-                "title": "Merge Multiple JSON Files",
-                "description": "Merges multiple JSON files into one and writes the merged data into a new file.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "merge",
-                    "file"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef merge_json_files(filepaths, output_filepath):\n    merged_data = []\n\n    # Read each JSON file and merge their data\n    for filepath in filepaths:\n        with open(filepath, 'r') as file:\n            data = json.load(file)\n            merged_data.extend(data)\n\n    # Write the merged data into a new file\n    with open(output_filepath, 'w') as file:\n        json.dump(merged_data, file, indent=4)\n\n# Usage:\nfiles_to_merge = ['file1.json', 'file2.json']\nmerge_json_files(files_to_merge, 'merged.json')\n",
-                "extension": "py"
-            },
-            {
-                "title": "Read JSON File",
-                "description": "Reads a JSON file and parses its content.",
-                "author": "e3nviction",
-                "tags": [
-                    "json",
-                    "file",
-                    "read"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef read_json(filepath):\n    with open(filepath, 'r') as file:\n        return json.load(file)\n\n# Usage:\nread_json('data.json') # Returns: Content of file as dict\n",
-                "extension": "py"
-            },
-            {
-                "title": "Update JSON File",
-                "description": "Updates an existing JSON file with new data or modifies the existing values.",
-                "author": "axorax",
-                "tags": [
-                    "json",
-                    "update",
-                    "file"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef update_json(filepath, new_data):\n    # Read the existing JSON data\n    with open(filepath, 'r') as file:\n        data = json.load(file)\n\n    # Update the data with the new content\n    data.update(new_data)\n\n    # Write the updated data back to the JSON file\n    with open(filepath, 'w') as file:\n        json.dump(data, file, indent=4)\n\n# Usage:\nnew_data = {'age': 31}\nupdate_json('data.json', new_data) # Updates `age` in `data.json` without modifying other keys\n",
-                "extension": "py"
-            },
-            {
-                "title": "Write JSON File",
-                "description": "Writes a dictionary to a JSON file.",
-                "author": "e3nviction",
-                "tags": [
-                    "json",
-                    "file",
-                    "write"
-                ],
-                "contributors": [],
-                "code": "import json\n\ndef write_json(filepath, data):\n    with open(filepath, 'w') as file:\n        json.dump(data, file, indent=4)\n\n# Usage:\ndata = {'name': 'John', 'age': 30}\nwrite_json('data.json', data)\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "List Manipulation",
-        "snippets": [
-            {
-                "title": "Find Duplicates in a List",
-                "description": "Identifies duplicate elements in a list.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "duplicates"
-                ],
-                "contributors": [],
-                "code": "def find_duplicates(lst):\n    seen = set()\n    duplicates = set()\n    for item in lst:\n        if item in seen:\n            duplicates.add(item)\n        else:\n            seen.add(item)\n    return list(duplicates)\n\n# Usage:\ndata = [1, 2, 3, 2, 4, 5, 1]\nfind_duplicates(data) # Returns: [1, 2]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Intersection of Two Lists",
-                "description": "Finds the common elements between two lists.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "intersection"
-                ],
-                "contributors": [],
-                "code": "def list_intersection(lst1, lst2):\n    return [item for item in lst1 if item in lst2]\n\n# Usage:\nlist_a = [1, 2, 3, 4]\nlist_b = [3, 4, 5, 6]\nlist_intersection(list_a, list_b) # Returns: [3, 4]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Maximum Difference in List",
-                "description": "Finds the maximum difference between any two elements in a list.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "difference"
-                ],
-                "contributors": [],
-                "code": "def max_difference(lst):\n    if not lst or len(lst) < 2:\n        return 0\n    return max(lst) - min(lst)\n\n# Usage:\ndata = [10, 3, 5, 20, 7]\nmax_difference(data) # Returns: 17\n",
-                "extension": "py"
-            },
-            {
-                "title": "Flatten Nested List",
-                "description": "Flattens a multi-dimensional list into a single list.",
-                "author": "technoph1le",
-                "tags": [
-                    "list",
-                    "flatten"
-                ],
-                "contributors": [],
-                "code": "def flatten_list(lst):\n    return [item for sublist in lst for item in sublist]\n\n# Usage:\nnested_list = [[1, 2], [3, 4], [5]]\nflatten_list(nested_list)  # Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Flatten Unevenly Nested Lists",
-                "description": "Converts unevenly nested lists of any depth into a single flat list.",
-                "author": "agilarasu",
-                "tags": [
-                    "list",
-                    "flattening",
-                    "nested-lists",
-                    "depth"
-                ],
-                "contributors": [],
-                "code": "def flatten(nested_list):\n    for item in nested_list:\n        if isinstance(item, list):\n            yield from flatten(item)\n        else:\n            yield item\n\n# Usage:\nnested_list = [1, [2, [3, 4]], 5]\nlist(flatten(nested_list))  # Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Partition List",
-                "description": "Partitions a list into sublists of a given size.",
-                "author": "axorax",
-                "tags": [
-                    "list",
-                    "partition"
-                ],
-                "contributors": [],
-                "code": "def partition_list(lst, size):\n    for i in range(0, len(lst), size):\n        yield lst[i:i + size]\n\n# Usage:\ndata = [1, 2, 3, 4, 5, 6, 7]\nlist(partition_list(data, 3)) # Returns: [[1, 2, 3], [4, 5, 6], [7]]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Duplicates",
-                "description": "Removes duplicate elements from a list while maintaining order.",
-                "author": "technoph1le",
-                "tags": [
-                    "list",
-                    "duplicates",
-                    "filter"
-                ],
-                "contributors": [],
-                "code": "def remove_duplicates(lst):\n    return list(dict.fromkeys(lst))\n\n# Usage:\nremove_duplicates([1, 2, 2, 3, 4, 4, 5])  # Returns: [1, 2, 3, 4, 5]\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Math And Numbers",
-        "snippets": [
-            {
-                "title": "Calculate Compound Interest",
-                "description": "Calculates compound interest for a given principal amount, rate, and time period.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "compound interest",
-                    "finance"
-                ],
-                "contributors": [],
-                "code": "def compound_interest(principal, rate, time, n=1):\n    return principal * (1 + rate / n) ** (n * time)\n\n# Usage:\ncompound_interest(1000, 0.05, 5) # Returns: 1276.2815625000003\ncompound_interest(1000, 0.05, 5, 12) # Returns: 1283.68\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Perfect Square",
-                "description": "Checks if a number is a perfect square.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "perfect square",
-                    "check"
-                ],
-                "contributors": [],
-                "code": "def is_perfect_square(n):\n    if n < 0:\n        return False\n    root = int(n**0.5)\n    return root * root == n\n\n# Usage:\nis_perfect_square(16) # Returns: True\nis_perfect_square(20) # Returns: False\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Prime Number",
-                "description": "Checks if a number is a prime number.",
-                "author": "technoph1le",
-                "tags": [
-                    "math",
-                    "prime",
-                    "check"
-                ],
-                "contributors": [],
-                "code": "def is_prime(n):\n    if n <= 1:\n        return False\n    for i in range(2, int(n**0.5) + 1):\n        if n % i == 0:\n            return False\n    return True\n\n# Usage:\nis_prime(17) # Returns: True\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert Binary to Decimal",
-                "description": "Converts a binary string to its decimal equivalent.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "binary",
-                    "decimal",
-                    "conversion"
-                ],
-                "contributors": [],
-                "code": "def binary_to_decimal(binary_str):\n    return int(binary_str, 2)\n\n# Usage:\nbinary_to_decimal('1010') # Returns: 10\nbinary_to_decimal('1101') # Returns: 13\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert Bytes to Human-Readable Format",
-                "description": "Converts a size in bytes to a human-readable format.",
-                "author": "axorax",
-                "tags": [
-                    "bytes",
-                    "format"
-                ],
-                "contributors": [],
-                "code": "def bytes_to_human_readable(num):\n    for unit in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:\n        if num < 1024:\n            return f\"{num:.2f} {unit}\"\n        num /= 1024\n\n# Usage:\nbytes_to_human_readable(123456789) # Returns: '117.74 MB'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find LCM (Least Common Multiple)",
-                "description": "Calculates the least common multiple (LCM) of two numbers.",
-                "author": "axorax",
-                "tags": [
-                    "python",
-                    "math",
-                    "lcm",
-                    "gcd",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "def lcm(a, b):\n    return abs(a * b) // gcd(a, b)\n\n# Usage:\nlcm(12, 15) # Returns: 60\nlcm(7, 5) # Returns: 35\n",
-                "extension": "py"
-            },
-            {
-                "title": "Linear Mapping",
-                "description": "remaps a value from one range to another",
-                "author": "JasimAlrawie",
-                "tags": [
-                    "math",
-                    "number-theory",
-                    "algebra"
-                ],
-                "contributors": [],
-                "code": "def linear_mapping(value, min_in, max_in, min_out, max_out):\n    return (value - min_in) * (max_out - min_out) / (max_in - min_in) + min_out\n\n#Usage:\nlinear_mapping(value, 0, 1, 0, 255)    # remaps the value from (0,1) to (0,255)\nlinear_mapping(value, 0, PI*2, 0, 360) # remaps the value from rad to deg\nlinear_mapping(value, -1, 1, 1, 8)     # remaps the value from (-1,1) to (1,8)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Solve Quadratic Equation",
-                "description": "Solves a quadratic equation ax^2 + bx + c = 0 and returns the roots.",
-                "author": "axorax",
-                "tags": [
-                    "math",
-                    "quadratic",
-                    "equation",
-                    "solver"
-                ],
-                "contributors": [],
-                "code": "import cmath\n\ndef solve_quadratic(a, b, c):\n    discriminant = cmath.sqrt(b**2 - 4 * a * c)\n    root1 = (-b + discriminant) / (2 * a)\n    root2 = (-b - discriminant) / (2 * a)\n    return root1, root2\n\n# Usage:\nsolve_quadratic(1, -3, 2) # Returns: ((2+0j), (1+0j))\nsolve_quadratic(1, 2, 5) # Returns: ((-1+2j), (-1-2j))\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "Sqlite Database",
-        "snippets": [
-            {
-                "title": "Create SQLite Database Table",
-                "description": "Creates a table in an SQLite database with a dynamic schema.",
-                "author": "e3nviction",
-                "tags": [
-                    "sqlite",
-                    "database",
-                    "table"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef create_table(db_name, table_name, schema):\n    conn = sqlite3.connect(db_name)\n    cursor = conn.cursor()\n    schema_string = ', '.join([f'{col} {dtype}' for col, dtype in schema.items()])\n    cursor.execute(f'''\n        CREATE TABLE IF NOT EXISTS {table_name} (\n            {schema_string}\n        )''')\n    conn.commit()\n    conn.close()\n\n# Usage:\ndb_name = 'example.db'\ntable_name = 'users'\nschema = {\n    'id': 'INTEGER PRIMARY KEY',\n    'name': 'TEXT',\n    'age': 'INTEGER',\n    'email': 'TEXT'\n}\ncreate_table(db_name, table_name, schema)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Insert Data into Sqlite Table",
-                "description": "Inserts a row into a specified SQLite table using a dictionary of fields and values.",
-                "author": "e3nviction",
-                "tags": [
-                    "sqlite",
-                    "database"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef insert_into_table(db_path, table_name, data):\n    with sqlite3.connect(db_path) as conn:\n        columns = ', '.join(data.keys())\n        placeholders = ', '.join(['?'] * len(data))\n        sql = f\"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})\"\n        conn.execute(sql, tuple(data.values()))\n        conn.commit()\n\n# Usage:\ndb_path = 'example.db'\ntable_name = 'users'\ndata = {\n    'name': 'John Doe',\n    'email': 'john@example.com',\n    'age': 30\n}\ninsert_into_table(db_path, table_name, data)\n",
-                "extension": "py"
-            },
-            {
-                "title": "Query Data from Sqlite Table",
-                "description": "Fetches data from a specified SQLite table, with options for selecting specific columns and applying a WHERE clause.",
-                "author": "pl44t",
-                "tags": [
-                    "sqlite",
-                    "database"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef query_table(db_path, table_name, columns='*', where_clause=None):\n    with sqlite3.connect(db_path) as conn:\n        cursor = conn.cursor()\n        sql = f\"SELECT {columns} FROM {table_name}\"\n        if where_clause:\n            sql += f\" WHERE {where_clause}\"\n        cursor.execute(sql)\n        return cursor.fetchall()\n\n# Usage:\ndb_path = 'example.db'\ntable_name = 'users'\ncolumns = 'id, name, email'\nwhere_clause = 'age > 25'\nresult = query_table(db_path, table_name, columns, where_clause)\nfor row in result:\n    print(row)\n\n",
-                "extension": "py"
-            },
-            {
-                "title": "Update Records in Sqlite Table",
-                "description": "Updates records in a specified SQLite table, allowing dynamic column updates and an optional WHERE clause.",
-                "author": "pl44t",
-                "tags": [
-                    "sqlite",
-                    "database"
-                ],
-                "contributors": [],
-                "code": "import sqlite3\n\ndef update_table(db_path, table_name, updates, where_clause=None):\n    with sqlite3.connect(db_path) as conn:\n        set_clause = ', '.join([f\"{col} = ?\" for col in updates.keys()])\n        sql = f\"UPDATE {table_name} SET {set_clause}\"\n        if where_clause:\n            sql += f\" WHERE {where_clause}\"\n        conn.execute(sql, tuple(updates.values()))\n        conn.commit()\n\n# Usage:\ndb_path = 'example.db'\ntable_name = 'users'\nupdates = {'name': 'Jane Doe', 'age': 28}\nwhere_clause = \"id = 1\"\nupdate_table(db_path, table_name, updates, where_clause)\n\n",
-                "extension": "py"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "def capitalize_words(s):\n    return ' '.join(word.capitalize() for word in s.split())\n\n# Usage:\ncapitalize_words('hello world') # Returns: 'Hello World'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Anagram",
-                "description": "Checks if two strings are anagrams of each other.",
-                "author": "SteliosGee",
-                "tags": [
-                    "string",
-                    "anagram",
-                    "check"
-                ],
-                "contributors": [],
-                "code": "def is_anagram(s1, s2):\n    return sorted(s1) == sorted(s2)\n\n# Usage:\nis_anagram('listen', 'silent') # Returns: True\n",
-                "extension": "py"
-            },
-            {
-                "title": "Check Palindrome",
-                "description": "Checks if a string is a palindrome.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "palindrome"
-                ],
-                "contributors": [],
-                "code": "def is_palindrome(s):\n    s = s.lower().replace(' ', '')\n    return s == s[::-1]\n\n# Usage:\nis_palindrome('A man a plan a canal Panama') # Returns: True\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert Snake Case to Camel Case",
-                "description": "Converts a snake_case string to camelCase.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "snake-case",
-                    "camel-case",
-                    "convert"
-                ],
-                "contributors": [],
-                "code": "def snake_to_camel(s):\n    parts = s.split('_')\n    return parts[0] + ''.join(word.capitalize() for word in parts[1:])\n\n# Usage:\nsnake_to_camel('hello_world') # Returns: 'helloWorld'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Convert String to Unicode",
-                "description": "Converts a string into its Unicode representation.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "ascii",
-                    "unicode",
-                    "convert"
-                ],
-                "contributors": [],
-                "code": "def string_to_unicode(s):\n    return [ord(char) for char in s]\n\n# Usage:\nstring_to_unicode('hello') # Returns: [104, 101, 108, 108, 111]\n",
-                "extension": "py"
-            },
-            {
-                "title": "Count Character Frequency",
-                "description": "Counts the frequency of each character in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "character-frequency"
-                ],
-                "contributors": [],
-                "code": "from collections import Counter\n\ndef char_frequency(s):\n    return dict(Counter(s))\n\n# Usage:\nchar_frequency('hello') # Returns: {'h': 1, 'e': 1, 'l': 2, 'o': 1}\n",
-                "extension": "py"
-            },
-            {
-                "title": "Count Vowels",
-                "description": "Counts the number of vowels in a string.",
-                "author": "SteliosGee",
-                "tags": [
-                    "string",
-                    "vowels",
-                    "count"
-                ],
-                "contributors": [],
-                "code": "def count_vowels(s):\n    vowels = 'aeiou'\n    return len([char for char in s.lower() if char in vowels])\n\n# Usage:\ncount_vowels('hello') # Returns: 2\n",
-                "extension": "py"
-            },
-            {
-                "title": "Count Words",
-                "description": "Counts the number of words in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "word-count"
-                ],
-                "contributors": [],
-                "code": "def count_words(s):\n    return len(s.split())\n\n# Usage:\ncount_words('The quick brown fox') # Returns: 4\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find All Substrings",
-                "description": "Finds all substrings of a given string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "substring",
-                    "find"
-                ],
-                "contributors": [],
-                "code": "def find_substrings(s):\n    substrings = []\n    for i in range(len(s)):\n        for j in range(i + 1, len(s) + 1):\n            substrings.append(s[i:j])\n    return substrings\n\n# Usage:\nfind_substrings('abc') # Returns: ['a', 'ab', 'abc', 'b', 'bc', 'c']\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Longest Word",
-                "description": "Finds the longest word in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "longest-word"
-                ],
-                "contributors": [],
-                "code": "def find_longest_word(s):\n    words = s.split()\n    return max(words, key=len) if words else ''\n\n# Usage:\nfind_longest_word('The quick brown fox') # Returns: 'quick'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Find Unique Characters",
-                "description": "Finds all unique characters in a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "unique",
-                    "characters"
-                ],
-                "contributors": [],
-                "code": "def find_unique_chars(s):\n    return ''.join(sorted(set(s)))\n\n# Usage:\nfind_unique_chars('banana') # Results: 'abn'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Generate Random String",
-                "description": "Generates a random alphanumeric string.",
-                "author": "technoph1le",
-                "tags": [
-                    "random",
-                    "string"
-                ],
-                "contributors": [],
-                "code": "import random\nimport string\n\ndef random_string(length):\n    letters_and_digits = string.ascii_letters + string.digits\n    return ''.join(random.choice(letters_and_digits) for _ in range(length))\n\n# Usage:\nrandom_string(10) # Results: Random 10-character string\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Characters",
-                "description": "Removes specific characters from a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "remove",
-                    "characters"
-                ],
-                "contributors": [],
-                "code": "def remove_chars(s, chars):\n    return ''.join(c for c in s if c not in chars)\n\n# Usage:\nremove_chars('hello world', 'eo') # Returns: 'hll wrld'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Duplicate Characters",
-                "description": "Removes duplicate characters from a string while maintaining the order.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "duplicates",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "def remove_duplicate_chars(s):\n    seen = set()\n    return ''.join(char for char in s if not (char in seen or seen.add(char)))\n\n# Usage:\nremove_duplicate_chars('programming') # Returns: 'progamin'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes punctuation from a string.",
-                "author": "SteliosGee",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "import string\n\ndef remove_punctuation(s):\n    return s.translate(str.maketrans('', '', string.punctuation))\n\n# Usage:\nremove_punctuation('Hello, World!') # Returns: 'Hello World'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Remove Whitespace",
-                "description": "Removes all whitespace from a string.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "whitespace",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "def remove_whitespace(s):\n    return ''.join(s.split())\n\n# Usage:\nremove_whitespace('hello world') # Returns: 'helloworld'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Reverse String",
-                "description": "Reverses the characters in a string.",
-                "author": "technoph1le",
-                "tags": [
-                    "string",
-                    "reverse"
-                ],
-                "contributors": [],
-                "code": "def reverse_string(s:str) -> str:\n    return s[::-1]\n\n# Usage:\nreverse_string('hello') # Returns: 'olleh'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Split Camel Case",
-                "description": "Splits a camel case string into separate words.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "camel-case",
-                    "split"
-                ],
-                "contributors": [],
-                "code": "import re\n\ndef split_camel_case(s):\n    return ' '.join(re.findall(r'[A-Z][a-z]*|[a-z]+', s))\n\n# Usage:\nsplit_camel_case('camelCaseString') # Returns: 'camel Case String'\n",
-                "extension": "py"
-            },
-            {
-                "title": "Truncate",
-                "description": "Truncates a string to a specified length and a toggleable truncation notation.",
-                "author": "axorax",
-                "tags": [
-                    "string",
-                    "truncate"
-                ],
-                "contributors": [
-                    "MinerMinerMods"
-                ],
-                "code": "def truncate(s:str, length:int, suffix:bool = True) -> str :\n    return (s[:length] + (\"...\" if suffix else \"\")) if len(s) > length else s\n\n# Usage:\ntruncate('This is a long string', 10) # Returns: 'This is a ...'\ntruncate('This is a long string', 10, False) # Returns: 'This is a '\n",
-                "extension": "py"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/regex.json b/backend/dist/data/consolidated/regex.json
deleted file mode 100644
index 9fc3d786..00000000
--- a/backend/dist/data/consolidated/regex.json
+++ /dev/null
@@ -1,80 +0,0 @@
-[
-    {
-        "name": "Miscellaneous",
-        "snippets": [
-            {
-                "title": "Hexadecimal Color",
-                "description": "Matches hex color codes",
-                "author": "majvax",
-                "tags": [
-                    "color",
-                    "hexadecimal"
-                ],
-                "contributors": [],
-                "code": "^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$\n\n\n-> Usage:\n#FFF1 ✗\n#FFF ✓\n#FFF000 ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "IPv4",
-                "description": "Matches IPv4 address",
-                "author": "majvax",
-                "tags": [
-                    "ipv4",
-                    "networking"
-                ],
-                "contributors": [],
-                "code": "^((25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.){3}(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})$\n\n\n-> Usage:\n123.300.0.101 ✗\n127.0.0.1 ✓\n192.168.0.1 ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "Unintentional Duplication",
-                "description": "Matches duplicated word in a text.",
-                "author": "majvax",
-                "tags": [
-                    "duplication"
-                ],
-                "contributors": [],
-                "code": "\\b(\\w+)\\s+\\1\\b\n\n\n-> Usage:\nI need to finish this task ✗\nI need to to finish this task ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "Whitespace Trimmer",
-                "description": "Matches leading and/or trailing whitespace.",
-                "author": "majvax",
-                "tags": [
-                    "trim"
-                ],
-                "contributors": [],
-                "code": "^\\s+|\\s+$\n\n\n-> Usage:\n(don't account for the quotation marks, it just to visualize whitespace)\n\"Hello World\" ✗\n\" Hello World\" ✓\n\"Hello World \" ✓\n\" Hello World \" ✓\n",
-                "extension": "regex"
-            }
-        ]
-    },
-    {
-        "name": "Validation pattern",
-        "snippets": [
-            {
-                "title": "Email Address",
-                "description": "Match any email address",
-                "author": "majvax",
-                "tags": [
-                    "email"
-                ],
-                "contributors": [],
-                "code": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$\n\n-> Usage:\nexample.name@domain.com.ru ✓\nname.surname@gmail.com ✓\n",
-                "extension": "regex"
-            },
-            {
-                "title": "Strong Password",
-                "description": "Match password with at least 12 characters, one uppercased letter, one number, and one special character.",
-                "author": "majvax",
-                "tags": [
-                    "password"
-                ],
-                "contributors": [],
-                "code": "^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{12,}$\n\n-> Usage:\nlongpassword ✗\nlongpassw0rd ✗\nlongp@ssw0rd ✗\nLongp@ssw0rd ✓\n",
-                "extension": "regex"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/ruby.json b/backend/dist/data/consolidated/ruby.json
deleted file mode 100644
index be6449e3..00000000
--- a/backend/dist/data/consolidated/ruby.json
+++ /dev/null
@@ -1,238 +0,0 @@
-[
-    {
-        "name": "Array Manipulation",
-        "snippets": [
-            {
-                "title": "Binary Search",
-                "description": "Searches for an element in a sorted array using binary search.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "binary-search",
-                    "search"
-                ],
-                "contributors": [],
-                "code": "def binary_search(array, target)\n  low = 0\n  high = array.length - 1\n\n  while low <= high\n    mid = (low + high) / 2\n    guess = array[mid]\n\n    if guess == target\n      return mid\n    elsif guess > target\n      high = mid - 1\n    else\n      low = mid + 1\n    end\n  end\n\n  return nil\nend\n\n# Usage:\narray = [1, 3, 5, 7, 9]\ntarget = 5\nresult = binary_search(array, target)\nputs result # Output: 2\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Chunk Array",
-                "description": "Splits an array into chunks of a specified size.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "chunk"
-                ],
-                "contributors": [],
-                "code": "def chunk_array(array, size)\n    array.each_slice(size).to_a\nend\n\n# Usage:\narr = [1, 2, 3, 4, 5, 6, 7, 8, 9]\nchunked_arr = chunk_array(arr, 2)\nputs chunked_arr.inspect # Output: [[1, 2], [3, 4], [5, 6], [7, 8], [9]]\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Matrix Transpose",
-                "description": "Transposes a 2D matrix.",
-                "author": "ACR1209",
-                "tags": [
-                    "array",
-                    "matrix",
-                    "transpose"
-                ],
-                "contributors": [],
-                "code": "def transpose_matrix(matrix)\n    return [] if matrix.empty?\n    return [] if matrix.first.empty?\n\n    matrix.first.zip(*matrix[1..-1])\nend\n\n# Usage:\nmatrix = [\n    [1, 2, 3],\n    [4, 5, 6],\n    [7, 8, 9]\n]\nprint transpose_matrix(matrix) # Output: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]\n",
-                "extension": "ruby"
-            }
-        ]
-    },
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "ACR1209",
-                "tags": [
-                    "printing",
-                    "hello-world",
-                    "utility"
-                ],
-                "contributors": [],
-                "code": "puts 'Hello, World!'\n",
-                "extension": "rb"
-            }
-        ]
-    },
-    {
-        "name": "Error Handling",
-        "snippets": [
-            {
-                "title": "Custom Error Class",
-                "description": "Defines and raises a custom error class in Ruby.",
-                "author": "ACR1209",
-                "tags": [
-                    "error handling",
-                    "custom error"
-                ],
-                "contributors": [],
-                "code": "class MyCustomError < StandardError; end\n\ndef risky_method(value)\n    raise MyCustomError, \"Value must be positive\" if value <= 0\n    \"Valid value: #{value}\"\nend\n\n# Usage:\nbegin\n    puts risky_method(-1)\nrescue MyCustomError => e\n    puts e.message # Output: \"Value must be positive\"\nend\n",
-                "extension": "rb"
-            }
-        ]
-    },
-    {
-        "name": "Math And Numbers",
-        "snippets": [
-            {
-                "title": "Calculate Compound Interest",
-                "description": "Calculates compound interest for a given principal amount, rate, and time period.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "compound interest",
-                    "finance"
-                ],
-                "contributors": [
-                    "axorax"
-                ],
-                "code": "def compound_interest(principal, rate, time, n = 1)\n    principal * (1 + rate / n) ** (n * time)\nend\n\n# Usage:\nputs compound_interest(1000, 0.05, 5)   # Output: 1276.2815625000003\nputs compound_interest(1000, 0.05, 5, 12) # Output: 1283.3586785035118\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Calculate Factorial",
-                "description": "Computes the factorial of a given integer.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "factorial"
-                ],
-                "contributors": [],
-                "code": "def factorial(n)\n    return 1 if n <= 1\n    (2..n).reduce(1, :*)\nend\n\n# Usage:\nputs factorial(5) # Output: 120\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Check Prime Number",
-                "description": "Checks if a number is a prime number.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "prime",
-                    "check"
-                ],
-                "contributors": [
-                    "technoph1le"
-                ],
-                "code": "def is_prime?(n)\n    return false if n <= 1\n    (2..Math.sqrt(n)).each do |i|\n        return false if n % i == 0\n    end\n    true\nend\n\n# Usage:\nputs is_prime?(29) # Output: true\nputs is_prime?(30) # Output: false\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Find all primes up to integer (Sieve of Sundaram)",
-                "description": "Finds all the prime numbers up to a specific integer.",
-                "author": "ACR1209",
-                "tags": [
-                    "math",
-                    "prime numbers"
-                ],
-                "contributors": [],
-                "code": "def sieve_of_sundaram(limit)\n    n = (limit - 1) / 2\n    marked = Array.new(n + 1, false)\n\n    (1..n).each do |i|\n        j = i\n        while (i + j + 2 * i * j) <= n\n            marked[i + j + 2 * i * j] = true\n            j += 1\n        end\n    end\n\n    primes = [2]\n    (1..n).each do |i|\n        primes << (2 * i + 1) unless marked[i]\n    end\n\n    primes\nend\n\n# Usage:\nprint sieve_of_sundaram(30) # Output: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]\n",
-                "extension": "rb"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize Words",
-                "description": "Capitalizes the first letter of each word in a string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "capitalize",
-                    "words"
-                ],
-                "contributors": [],
-                "code": "def capitalize_words(str)\n  str.split.map(&:capitalize).join(' ')\nend\n\n# Usage:\nsentence = \"ruby is awesome\"\nputs capitalize_words(sentence) # Output: \"Ruby Is Awesome\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Count Word Occurrences in String",
-                "description": "Counts the occurrences of each word in a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "occurrences",
-                    "word-count"
-                ],
-                "contributors": [],
-                "code": "def count_word_occurrences(text)\n    words = text.downcase.scan(/\\w+/)\n    occurrences = Hash.new(0)\n    words.each { |word| occurrences[word] += 1 }\n    occurrences\nend\n\n# Usage:\ntext = \"ruby is awesome and Ruby is fun\"\nputs count_word_occurrences(text) # Output: {\"ruby\"=>2, \"is\"=>2, \"awesome\"=>1, \"and\"=>1, \"fun\"=>1}\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Remove Punctuation",
-                "description": "Removes all punctuation from a given string.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "punctuation",
-                    "remove"
-                ],
-                "contributors": [],
-                "code": "def remove_punctuation(str)\n    str.gsub(/[[:punct:]]/, '')\nend\n\n# Usage:\ntext = \"Hello, Ruby! How's it going?\"\nputs remove_punctuation(text) # Output: \"Hello Ruby Hows it going\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Transform Camel Case to Snake Case",
-                "description": "Converts a Camel or Pascal Case string to Snake case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "camel-case",
-                    "snake-case",
-                    "pascal-case"
-                ],
-                "contributors": [],
-                "code": "def camel_to_snake(str)\n    str.gsub(/([A-Z])/, '_\\1').sub(/^_/, '').downcase\nend\n\n# Usage:\ncamel_case = \"camelCaseToSnakeCase\"\npascal_case = \"PascalCaseToSnakeCase\"\nputs camel_to_snake(camel_case) # Output: \"camel_case_to_snake_case\"\nputs camel_to_snake(pascal_case) # Output: \"pascal_case_to_snake_case\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Transform from Snake Case to Camel Case",
-                "description": "Converts a Snake Case string to Camel Case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "snake-case",
-                    "camel-case"
-                ],
-                "contributors": [],
-                "code": "def snake_to_camel(str)\n    str.split('_').map.with_index { |word, index| \n        index == 0 ? word : word.capitalize \n    }.join\nend\n\n# Usage:\nsnake_case = \"snake_case_to_camel_case\"\nputs snake_to_camel(snake_case) # Output: \"snakeCaseToCamelCase\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Transform from Snake Case to Pascal Case",
-                "description": "Converts a Snake Case string to Pascal Case.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "convert",
-                    "snake-case",
-                    "pascal-case"
-                ],
-                "contributors": [],
-                "code": "def snake_to_pascal(str)\n    str.split('_').map.with_index { |word, index| \n        word.capitalize \n    }.join\nend\n\n# Usage:\nsnake_case = \"snake_case_to_pascal_case\"\nputs snake_to_pascal(snake_case) # Output: \"SnakeCaseToPascalCase\"\n",
-                "extension": "rb"
-            },
-            {
-                "title": "Truncate String",
-                "description": "Truncates a string to a specified length, optionally adding an ellipsis.",
-                "author": "ACR1209",
-                "tags": [
-                    "string",
-                    "truncate"
-                ],
-                "contributors": [],
-                "code": "def truncate_string(str, max_length)\n    return str if str.length <= max_length || max_length <= 3\n    str[0, max_length - 3] + '...'\nend\n\n# Usage:\nlong_string = \"Ruby is a dynamic, open source programming language.\"\nputs truncate_string(20, long_string) # Output: \"Ruby is a dynamic...\"\nputs truncate_string(54, long_string) # Output: \"Ruby is a dynamic, open source programming language.\"\n",
-                "extension": "rb"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/rust.json b/backend/dist/data/consolidated/rust.json
deleted file mode 100644
index 7fd16cd1..00000000
--- a/backend/dist/data/consolidated/rust.json
+++ /dev/null
@@ -1,82 +0,0 @@
-[
-    {
-        "name": "Basics",
-        "snippets": [
-            {
-                "title": "Hello, World!",
-                "description": "Prints Hello, World! to the terminal.",
-                "author": "James-Beans",
-                "tags": [
-                    "printing",
-                    "hello-world"
-                ],
-                "contributors": [],
-                "code": "fn main() { // Defines the main running function\n    println!(\"Hello, World!\"); // Prints Hello, World! to the terminal.\n}\n",
-                "extension": "rust"
-            }
-        ]
-    },
-    {
-        "name": "File Handling",
-        "snippets": [
-            {
-                "title": "Find Files",
-                "description": "Finds all files of the specified extension within a given directory.",
-                "author": "Mathys-Gasnier",
-                "tags": [
-                    "file",
-                    "search"
-                ],
-                "contributors": [],
-                "code": "fn find_files(directory: &str, file_type: &str) -> std::io::Result<Vec<std::path::PathBuf>> {\n    let mut result = vec![];\n\n    for entry in std::fs::read_dir(directory)? {\n        let dir = entry?;\n        let path = dir.path();\n        if dir.file_type().is_ok_and(|t| !t.is_file()) &&\n            path.extension().is_some_and(|ext| ext != file_type) {\n            continue;\n        }\n        result.push(path)\n    }\n\n    Ok(result)\n}\n\n// Usage:\nfind_files(\"/path/to/your/directory\", \".pdf\"); // Returns: if Ok(), a vector of path to `.pdf` files in the directory\n",
-                "extension": "rust"
-            },
-            {
-                "title": "Read File Lines",
-                "description": "Reads all lines from a file and returns them as a vector of strings.",
-                "author": "Mathys-Gasnier",
-                "tags": [
-                    "file",
-                    "read"
-                ],
-                "contributors": [],
-                "code": "fn read_lines(file_name: &str) -> std::io::Result<Vec<String>>\n    Ok(\n        std::fs::read_to_string(file_name)?\n            .lines()\n            .map(String::from)\n            .collect()\n    )\n}\n\n// Usage:\nread_lines(\"path/to/file.txt\"); // Returns: If Ok(), a Vec of the lines of the file\n",
-                "extension": "rust"
-            }
-        ]
-    },
-    {
-        "name": "Linux",
-        "snippets": [
-            {
-                "title": "Get Desktop Enviroment",
-                "description": "Get the Desktop Enviroment that the user is currently using.",
-                "author": "sponkurtus2 ",
-                "tags": [
-                    "linux",
-                    "file"
-                ],
-                "contributors": [],
-                "code": "fn get_desktop_env() -> String {\n    // Return empty string if no X display is available\n    if env::var(\"DISPLAY\").is_err() {\n        return String::new();\n    }\n\n    // Check common desktop environment variables.\n    for env_var in &[\n        \"XDG_SESSION_DESKTOP\",\n        \"XDG_CURRENT_DESKTOP\",\n        \"DESKTOP_SESSION\",\n    ] {\n        if let Ok(de) = env::var(env_var) {\n            return de;\n        }\n    }\n\n    // As fallback, try to get desktop name from last word of last line in .xinitrc\n    let path = format!(\"{}/.xinitrc\", env::var(\"HOME\").unwrap_or_default());\n    if let Ok(mut file) = File::open(&path) {\n        let mut buf = String::new();\n        if file.read_to_string(&mut buf).is_ok() {\n            if let Some(last_line) = buf.lines().last() {\n                let last_word = last_line.split(' ').last().unwrap_or(\"\");\n                return last_word.to_string();\n            }\n        }\n    }\n\n    // Return \"N/A\" if no desktop environment could be detected\n    String::from(\"N/A\")\n}\n\n// Usage:\nget_desktop_env(); // Returns: the desktop enviroment that the user actually has e.g. i3.\n",
-                "extension": "rust"
-            }
-        ]
-    },
-    {
-        "name": "String Manipulation",
-        "snippets": [
-            {
-                "title": "Capitalize String",
-                "description": "Makes the first letter of a string uppercase.",
-                "author": "Mathys-Gasnier",
-                "tags": [
-                    "string",
-                    "capitalize"
-                ],
-                "contributors": [],
-                "code": "fn capitalized(str: &str) -> String {\n    let mut chars = str.chars();\n    match chars.next() {\n        None => String::new(),\n        Some(f) => f.to_uppercase().chain(chars).collect(),\n    }\n}\n\n// Usage:\ncapitalized(\"lower_case\"); // Returns: Lower_case\n",
-                "extension": "rust"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/scss.json b/backend/dist/data/consolidated/scss.json
deleted file mode 100644
index c27f54f8..00000000
--- a/backend/dist/data/consolidated/scss.json
+++ /dev/null
@@ -1,258 +0,0 @@
-[
-    {
-        "name": "Animations",
-        "snippets": [
-            {
-                "title": "Fade In Animation",
-                "description": "Animates the fade-in effect.",
-                "author": "technoph1le",
-                "tags": [
-                    "animation",
-                    "fade",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@keyframes fade-in {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n@mixin fade-in($duration: 1s, $easing: ease-in-out) {\n  animation: fade-in $duration $easing;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Slide In From Left",
-                "description": "Animates content sliding in from the left.",
-                "author": "technoph1le",
-                "tags": [
-                    "animation",
-                    "slide",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@keyframes slide-in-left {\n  from {\n    transform: translateX(-100%);\n  }\n  to {\n    transform: translateX(0);\n  }\n}\n\n@mixin slide-in-left($duration: 0.5s, $easing: ease-out) {\n  animation: slide-in-left $duration $easing;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Borders Shadows",
-        "snippets": [
-            {
-                "title": "Border Radius Helper",
-                "description": "Applies a customizable border-radius.",
-                "author": "technoph1le",
-                "tags": [
-                    "border",
-                    "radius",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin border-radius($radius: 4px) {\n  border-radius: $radius;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Box Shadow Helper",
-                "description": "Generates a box shadow with customizable values.",
-                "author": "technoph1le",
-                "tags": [
-                    "box-shadow",
-                    "css",
-                    "effects"
-                ],
-                "contributors": [],
-                "code": "@mixin box-shadow($x: 0px, $y: 4px, $blur: 10px, $spread: 0px, $color: rgba(0, 0, 0, 0.1)) {\n  box-shadow: $x $y $blur $spread $color;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Components",
-        "snippets": [
-            {
-                "title": "Primary Button",
-                "description": "Generates a styled primary button.",
-                "author": "technoph1le",
-                "tags": [
-                    "button",
-                    "primary",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin primary-button($bg: #007bff, $color: #fff) {\n  background-color: $bg;\n  color: $color;\n  padding: 0.5rem 1rem;\n  border: none;\n  border-radius: 4px;\n  cursor: pointer;\n\n  &:hover {\n    background-color: darken($bg, 10%);\n  }\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Layouts",
-        "snippets": [
-            {
-                "title": "Aspect Ratio",
-                "description": "Ensures that elements maintain a specific aspect ratio.",
-                "author": "technoph1le",
-                "tags": [
-                    "aspect-ratio",
-                    "layout",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin aspect-ratio($width, $height) {\n  position: relative;\n  width: 100%;\n  padding-top: ($height / $width) * 100%;\n  > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Dark Theme",
-                "description": "SCSS mixin to change styles for dark themes.",
-                "author": "gihanrangana",
-                "tags": [
-                    "css",
-                    "mixin",
-                    "snippet",
-                    "dark-theme",
-                    "layout"
-                ],
-                "contributors": [],
-                "code": "@mixin isDark($type: 'module') {\n  $root: &;\n\n  @if $type == 'module' {\n    :global {\n      @at-root body[theme='dark'] #{$root} {\n        @content;\n      }\n    }\n  } @else {\n    &[theme='dark'] {\n      @content;\n    }\n  }\n}\n\n// Usage:\n.container{\n\tbackground: #f0f0f0;\n\t@include isDark {\n\t\tbackground: #222;\n\t}\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Flex Center",
-                "description": "A mixin to center content using flexbox.",
-                "author": "technoph1le",
-                "tags": [
-                    "flex",
-                    "center",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin flex-center {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Grid Container",
-                "description": "Creates a responsive grid container with customizable column counts.",
-                "author": "technoph1le",
-                "tags": [
-                    "grid",
-                    "layout",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin grid-container($columns: 12, $gap: 1rem) {\n  display: grid;\n  grid-template-columns: repeat($columns, 1fr);\n  gap: $gap;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Typography",
-        "snippets": [
-            {
-                "title": "Font Import Helper",
-                "description": "Simplifies importing custom fonts in Sass.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "fonts",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin import-font($family, $weight: 400, $style: normal) {\n  @font-face {\n    font-family: #{$family};\n    font-weight: #{$weight};\n    font-style: #{$style};\n    src: url('/fonts/#{$family}-#{$weight}.woff2') format('woff2'),\n         url('/fonts/#{$family}-#{$weight}.woff') format('woff');\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Line Clamp Mixin",
-                "description": "A Sass mixin to clamp text to a specific number of lines.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "typography",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin line-clamp($number) {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: $number;\n  overflow: hidden;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "PX to REM Helper",
-                "description": "This function will convert px values to rem values.",
-                "author": "gihanrangana",
-                "tags": [
-                    "function",
-                    "pixel",
-                    "rem",
-                    "px-to-rem"
-                ],
-                "contributors": [],
-                "code": "@function px-to-rem($px, $base: 16px) {\n  @return ($px / $base) * 1rem;\n}\n\n// Usage:\ndiv {\n  font-size: px-to-rem(12px); // Output: 0.75rem\n  padding: px-to-rem(16px);   // Output: 1rem\n  margin: px-to-rem(32px) // Output 2rem\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Text Gradient",
-                "description": "Adds a gradient color effect to text.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "gradient",
-                    "text",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin text-gradient($from, $to) {\n  background: linear-gradient(to right, $from, $to);\n  -webkit-background-clip: text;\n  -webkit-text-fill-color: transparent;\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Text Overflow Ellipsis",
-                "description": "Ensures long text is truncated with an ellipsis.",
-                "author": "technoph1le",
-                "tags": [
-                    "mixin",
-                    "text",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin text-ellipsis {\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n",
-                "extension": "scss"
-            }
-        ]
-    },
-    {
-        "name": "Utilities",
-        "snippets": [
-            {
-                "title": "Clearfix",
-                "description": "Provides a clearfix utility for floating elements.",
-                "author": "technoph1le",
-                "tags": [
-                    "clearfix",
-                    "utility",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin clearfix {\n  &::after {\n    content: '';\n    display: block;\n    clear: both;\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Responsive Breakpoints",
-                "description": "Generates media queries for responsive design.",
-                "author": "technoph1le",
-                "tags": [
-                    "responsive",
-                    "media-queries",
-                    "css"
-                ],
-                "contributors": [],
-                "code": "@mixin breakpoint($breakpoint) {\n  @if $breakpoint == sm {\n    @media (max-width: 576px) { @content; }\n  } @else if $breakpoint == md {\n    @media (max-width: 768px) { @content; }\n  } @else if $breakpoint == lg {\n    @media (max-width: 992px) { @content; }\n  } @else if $breakpoint == xl {\n    @media (max-width: 1200px) { @content; }\n  }\n}\n",
-                "extension": "scss"
-            },
-            {
-                "title": "Spacing",
-                "description": "This SCSS snippet dynamically generates utility classes for managing spacing in a consistent and efficient manner. The classes are built using a loop, ensuring scalability and flexibility. use .mt-* for margin-top, and .pb-* for padding bottom",
-                "author": "dinesh-here",
-                "tags": [
-                    "clearfix",
-                    "utility",
-                    "css",
-                    "spacing"
-                ],
-                "contributors": [],
-                "code": "$step: 5;\n$start_limit: 0;\n$end_limit: 50;\n\n  @while $start_limit <= $end_limit {\n    .mt-#{$start_limit} {\n        margin-top: $start_limit + px;\n    }\n    .mb-#{$start_limit} {\n        margin-bottom: $start_limit + px;\n    }\n\n    .ml-#{$start_limit} {\n        margin-left: $start_limit + px;\n    }\n\n    .mr-#{$start_limit} {\n        margin-right: $start_limit + px;\n    }\n\n    .pt-#{$start_limit} {\n        padding-top: $start_limit + px;\n    }\n    .pb-#{$start_limit} {\n        padding-bottom: $start_limit + px;\n    }\n\n    .pl-#{$start_limit} {\n        padding-left: $start_limit + px;\n    }\n\n    .pr-#{$start_limit} {\n        padding-right: $start_limit + px;\n    }\n    .mx-#{$start_limit} {\n        margin-left: $start_limit + px;\n        margin-right: $start_limit + px;\n    }\n\n    .px-#{$start_limit} {\n        padding-left: $start_limit + px;\n        padding-right: $start_limit + px;\n    }\n\n    .my-#{$start_limit} {\n        margin-top: $start_limit + px;\n        margin-bottom: $start_limit + px;\n    }\n\n    .py-#{$start_limit} {\n        padding-top: $start_limit + px;\n        padding-bottom: $start_limit + px;\n    }\n\n\n    $start_limit: $start_limit + $step;\n}\n\n",
-                "extension": "scss"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/consolidated/typescript.json b/backend/dist/data/consolidated/typescript.json
deleted file mode 100644
index 53e49bba..00000000
--- a/backend/dist/data/consolidated/typescript.json
+++ /dev/null
@@ -1,160 +0,0 @@
-[
-    {
-        "name": "Helper Types",
-        "snippets": [
-            {
-                "title": "At Least One Key",
-                "description": "Ensures that at least one property of an object is required.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition"
-                ],
-                "contributors": [],
-                "code": "type AtLeastOne<T> = {\n    [K in keyof T]: Pick<T, K> & Partial<Omit<T, K>>;\n}[keyof T];\n\n\n// Usage:\ntype A = {\n    id?: string;\n    name?: string;\n    isActive?: boolean;\n};\n\ntype AtLeastOneA = AtLeastOne<A>;\n// Requires at least one of 'id', 'name', or 'isActive' to be defined\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Deep Partial Type",
-                "description": "Converts all properties of a type, including nested objects, into optional.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "optional"
-                ],
-                "contributors": [],
-                "code": "type DeepPartial<T> = {\n    [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];\n};\n\n\n// Usage:\ntype A = {\n    name: string;\n    details: {\n        age: number;\n        address: { city: string; zip: string };\n    };\n};\n\ntype PartialA = DeepPartial<A>;\n/*\nType PartialA:\n{\n  name?: string;\n  details?: {\n    age?: number;\n    address?: { city?: string; zip?: string };\n  };\n}\n*/\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Deep Readonly Type",
-                "description": "Converts all properties of a type, including nested objects, into readonly.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "readonly"
-                ],
-                "contributors": [],
-                "code": "type DeepReadonly<T> = {\n    readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];\n};\n\n\n// Usage:\ntype A = {\n    name: string;\n    details: {\n        age: number;\n        address: { city: string; zip: string };\n    };\n};\n\ntype ReadonlyA = DeepReadonly<A>;\n/*\nType ReadonlyA:\n{\n  readonly name: string;\n  readonly details: {\n    readonly age: number;\n    readonly address: { readonly city: string; readonly zip: string };\n  };\n}\n*/\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Deep Required Type",
-                "description": "Converts all properties of a type, including nested objects, into required.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "required"
-                ],
-                "contributors": [],
-                "code": "type DeepRequired<T> = T extends object\n    ? { [K in keyof T]-?: DeepRequired<T[K]> }\n    : T;\n\n\n// Usage:\ntype A = {\n    id?: string;\n    name?: string;\n    details?: {\n        age?: number;\n        address?: { city?: string; zip?: string };\n    };\n};\n\ntype RequiredA = DeepRequired<A>;\n// Result: { id: string; name: string; details: { age: number; address: { city: string; zip: string }; }; }\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Exclusive Types",
-                "description": "Allows to have a type which conforms to either/or.",
-                "author": "px-d",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition"
-                ],
-                "contributors": [],
-                "code": "type Exclusive<T, U = T> = T | U extends Record<string, unknown>\n  ?\n      | ({ [P in Exclude<keyof T, keyof U>]?: never } & U)\n      | ({ [P in Exclude<keyof U, keyof T>]?: never } & T)\n  : T | U;\n\n\n// Usage:\ntype A = { name: string; email?: string; provider?: string };\ntype B = { name: string; phone?: string; country?: string };\n\ntype EitherOr = Exclusive<A, B>;\n\nconst w: EitherOr = { name: \"John\", email: \"j@d.c\" }; // ✅\nconst x: EitherOr = { name: \"John\", phone: \"+123 456\" }; // ✅\nconst y: EitherOr = { name: \"John\", email: \"\", phone: \"\" }; // ⛔️\nconst z: EitherOr = { name: \"John\", phne: \"\", provider: \"\" }; // ⛔️\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Keys of Type",
-                "description": "Extracts keys from an object type that match a specified value type.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition"
-                ],
-                "contributors": [],
-                "code": "type KeysOfType<T, U> = { [K in keyof T]: T[K] extends U ? K : never }[keyof T];\n\n\n// Usage:\ntype A = { name: string; age: number; isActive: boolean, isDeleted: boolean };\ntype StringKeys = KeysOfType<A, string>; // \"name\"\ntype BooleanKeys = KeysOfType<A, boolean>; // \"isActive\" | \"isDeleted\"\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Keys to Optional",
-                "description": "Makes only the specified keys of an object type optional.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "optional"
-                ],
-                "contributors": [],
-                "code": "type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n\n// Usage:\ntype A = {\n    id: string;\n    name: string;\n    age: number;\n};\n\ntype WithOptionalName = OptionalKeys<A, \"name\">;\n// { id: string; age: number; name?: string }\n\ntype WithOptionalNameAndAge = OptionalKeys<A, \"name\" | \"age\">;\n// Result: { id: string; name?: string; age?: number }\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Nullable Keys",
-                "description": "Extracts keys from an object type that allow null or undefined values.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "nullable"
-                ],
-                "contributors": [],
-                "code": "type NullableKeys<T> = {\n    [K in keyof T]: null extends T[K] ? K : undefined extends T[K] ? K : never;\n}[keyof T];\n\n\n// Usage:\ntype A = {\n    id: string;\n    name?: string;\n    description: string | null;\n};\n\ntype Nullable = NullableKeys<A>; // \"name\" | \"description\"\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Omit Keys of Type",
-                "description": "Removes keys of a specified type from an object type.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "omit",
-                    "keys"
-                ],
-                "contributors": [],
-                "code": "type OmitKeysOfType<T, U> = {\n    [K in keyof T as T[K] extends U ? never : K]: T[K];\n};\n\n\n// Usage:\ntype A = {\n    id: string;\n    isActive: boolean;\n    data: number[];\n};\n\ntype WithoutBoolean = OmitKeysOfType<A, boolean>; // { id: string; data: number[] }\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Required Keys",
-                "description": "Extracts required keys from an object.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "required"
-                ],
-                "contributors": [],
-                "code": "type RequiredKeys<T> = {\n    [K in keyof T]-?: {} extends Pick<T, K> ? never : K;\n}[keyof T];\n\n\n// Usage:\ntype A = {\n    id: string;\n    name?: string;\n    isActive: boolean;\n};\n\ntype ReqKeys = RequiredKeys<A>; // \"id\" | \"isActive\"\n",
-                "extension": "ts"
-            },
-            {
-                "title": "Union to Intersection",
-                "description": "Converts a union type into an intersection type.",
-                "author": "aelshinawy",
-                "tags": [
-                    "typescript",
-                    "helper-types",
-                    "typedefinition",
-                    "intersection",
-                    "union"
-                ],
-                "contributors": [],
-                "code": "type UnionToIntersection<U> = (U extends any ? (arg: U) => void : never) extends (arg: infer I) => void\n    ? I\n    : never;\n\n\n// Usage:\ntype A = { id: string };\ntype B = { name: string };\ntype C = { age: number };\n\ntype Intersected = UnionToIntersection<A | B | C>;\n// { id: string } & { name: string } & { age: number }\n",
-                "extension": "ts"
-            }
-        ]
-    }
-]
\ No newline at end of file
diff --git a/backend/dist/data/icons/bash.svg b/backend/dist/data/icons/bash.svg
deleted file mode 100644
index 9fb1be15..00000000
--- a/backend/dist/data/icons/bash.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 48 48" width="96px" height="96px" fill-rule="evenodd" clip-rule="evenodd" baseProfile="basic"><path fill="#ededed" fill-rule="evenodd" d="M22.903,3.286c0.679-0.381,1.515-0.381,2.193,0 c3.355,1.883,13.451,7.551,16.807,9.434C42.582,13.1,43,13.804,43,14.566c0,3.766,0,15.101,0,18.867 c0,0.762-0.418,1.466-1.097,1.847c-3.355,1.883-13.451,7.551-16.807,9.434c-0.679,0.381-1.515,0.381-2.193,0 c-3.355-1.883-13.451-7.551-16.807-9.434C5.418,34.899,5,34.196,5,33.434c0-3.766,0-15.101,0-18.867 c0-0.762,0.418-1.466,1.097-1.847C9.451,10.837,19.549,5.169,22.903,3.286z" clip-rule="evenodd"/><path fill="#434345" d="M23.987,46.221c-1.085,0-2.171-0.252-3.165-0.757c-2.22-1.127-5.118-2.899-7.921-4.613 c-1.973-1.206-3.836-2.346-5.297-3.157C5.381,36.458,4,34.113,4,31.572V16.627c0-2.59,1.417-4.955,3.699-6.173 c3.733-1.989,9.717-5.234,12.878-7.01h0c2.11-1.184,4.733-1.184,6.844,0c3.576,2.007,10.369,6.064,14.252,8.513 C43.13,12.874,44,14.453,44,16.182V32c0,2.4-0.859,4.048-2.553,4.895c-0.944,0.531-2.628,1.576-4.578,2.787 c-3.032,1.882-6.806,4.225-9.564,5.705C26.27,45.942,25.128,46.221,23.987,46.221z M21.556,5.188 C18.384,6.97,12.382,10.226,8.64,12.22C7.012,13.088,6,14.776,6,16.627v14.945c0,1.814,0.987,3.49,2.576,4.373 c1.498,0.832,3.378,1.981,5.369,3.199c2.77,1.693,5.634,3.445,7.783,4.536c1.458,0.739,3.188,0.717,4.631-0.056 c2.703-1.451,6.447-3.775,9.456-5.643c1.97-1.223,3.671-2.279,4.696-2.854C41.835,34.464,42,33.109,42,32V16.182 c0-1.037-0.521-1.983-1.392-2.532c-3.862-2.435-10.613-6.467-14.165-8.461C24.913,4.331,23.086,4.331,21.556,5.188L21.556,5.188z"/><path fill="#434345" d="M22.977,41.654l-0.057-13.438c-0.011-2.594,1.413-4.981,3.701-6.204l12.01-6.416 c1.998-1.068,4.414,0.38,4.414,2.646v14.73c0,1.041-0.54,2.008-1.426,2.554l-14.068,8.668 C25.557,45.424,22.987,43.996,22.977,41.654z"/><path fill="#ededed" d="M28.799,26.274c0.123-0.063,0.225,0.014,0.227,0.176l0.013,1.32 c0.552-0.219,1.032-0.278,1.467-0.177c0.095,0.024,0.136,0.153,0.098,0.306l-0.291,1.169c-0.024,0.089-0.072,0.178-0.132,0.233 c-0.026,0.025-0.052,0.044-0.077,0.057c-0.04,0.02-0.078,0.026-0.114,0.019c-0.199-0.045-0.671-0.148-1.413,0.228 c-0.778,0.395-1.051,1.071-1.046,1.573c0.007,0.601,0.315,0.783,1.377,0.802c1.416,0.023,2.027,0.643,2.042,2.067 c0.016,1.402-0.733,2.905-1.876,3.826l0.025,1.308c0.001,0.157-0.1,0.338-0.225,0.4l-0.775,0.445 c-0.123,0.063-0.225-0.014-0.227-0.172l-0.013-1.286c-0.664,0.276-1.334,0.342-1.763,0.17c-0.082-0.032-0.117-0.152-0.084-0.288 l0.28-1.181c0.022-0.092,0.071-0.186,0.138-0.246c0.023-0.023,0.048-0.04,0.072-0.053c0.044-0.022,0.087-0.027,0.124-0.013 c0.462,0.155,1.053,0.082,1.622-0.206c0.722-0.365,1.206-1.102,1.198-1.834c-0.007-0.664-0.366-0.939-1.241-0.946 c-1.113,0.002-2.151-0.216-2.168-1.855c-0.014-1.35,0.688-2.753,1.799-3.641l-0.013-1.319c-0.001-0.162,0.098-0.34,0.225-0.405 L28.799,26.274z"/><path fill="#4da925" d="M37.226,34.857l-3.704,2.185c-0.109,0.061-0.244-0.019-0.244-0.143v-1.252 c0-0.113,0.061-0.217,0.16-0.273l3.704-2.185c0.111-0.061,0.246,0.019,0.246,0.145v1.248 C37.388,34.697,37.326,34.801,37.226,34.857"/></svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/c.svg b/backend/dist/data/icons/c.svg
deleted file mode 100644
index 94ebe6d9..00000000
--- a/backend/dist/data/icons/c.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<svg viewBox="32.18585611720149 20.47 223.6851360941233 247.05999999999997" xmlns="http://www.w3.org/2000/svg"
-    width="50" height="50">
-    <path
-        d="M252.71 93.61a21.67 21.67 0 0 0-2.65-10.87 20.74 20.74 0 0 0-7.87-7.67Q198.77 50 155.32 25c-7.8-4.51-15.36-4.35-23.11.23C120.69 32 63 65.09 45.81 75.06c-7.08 4.1-10.52 10.38-10.52 18.54v100.8a21.77 21.77 0 0 0 2.55 10.66 20.63 20.63 0 0 0 8 7.88c17.19 10 74.89 43.05 86.41 49.85 7.75 4.58 15.31 4.74 23.12.23q43.41-25.08 86.87-50.09a20.63 20.63 0 0 0 8-7.88 21.77 21.77 0 0 0 2.55-10.66V93.61z"
-        fill="#004482" />
-    <path
-        d="M252.73 194.4a21.72 21.72 0 0 1-2.55 10.66 18.58 18.58 0 0 1-1.45 2.24L144 144l98.19-68.93a20.72 20.72 0 0 1 7.86 7.67 21.57 21.57 0 0 1 2.66 10.87c.02 33.6.02 100.79.02 100.79z"
-        fill="#00599c" />
-    <path
-        d="M250.05 82.74L37.81 205.06a21.75 21.75 0 0 1-2.53-10.65V93.6c0-8.16 3.45-14.44 10.52-18.54C63 65.09 120.69 32 132.22 25.21c7.73-4.58 15.3-4.74 23.1-.23q43.41 25.08 86.87 50.09a20.72 20.72 0 0 1 7.86 7.67z"
-        fill="#659ad2" />
-    <path
-        d="M148.2 184.72a39.91 39.91 0 0 1-35-20.63q-.53-.94-1-1.92A39.94 39.94 0 0 1 179 119.4c.53.64 1 1.31 1.53 2 .24.33.48.66.7 1l35.07-20.2q-1.28-2.06-2.68-4c-.49-.69-1-1.35-1.48-2A79.9 79.9 0 0 0 78 181.92c.34.64.69 1.27 1 1.9a79.91 79.91 0 0 0 136.86 3.62l-34.29-20.73a39.88 39.88 0 0 1-33.37 18.01z"
-        fill="#fff" />
-</svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/cpp.svg b/backend/dist/data/icons/cpp.svg
deleted file mode 100644
index 7e75c38c..00000000
--- a/backend/dist/data/icons/cpp.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 256 288" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" aria-labelledby="cpp-logo-title cpp-logo-description">
-<title id="cpp-logo-title">C++ logo</title>
-<desc id="cpp-logo-description">A two tone blue hexagon with the letters C++ inside in white</desc>
-<path d="M255.569 84.72c-.002-4.83-1.035-9.098-3.124-12.761-2.052-3.602-5.125-6.621-9.247-9.008-34.025-19.619-68.083-39.178-102.097-58.817-9.17-5.294-18.061-5.101-27.163.269C100.395 12.39 32.59 51.237 12.385 62.94 4.064 67.757.015 75.129.013 84.711 0 124.166.013 163.62 0 203.076c.002 4.724.991 8.909 2.988 12.517 2.053 3.711 5.169 6.813 9.386 9.254 20.206 11.703 88.02 50.547 101.56 58.536 9.106 5.373 17.997 5.565 27.17.269 34.015-19.64 68.075-39.198 102.105-58.817 4.217-2.44 7.333-5.544 9.386-9.252 1.994-3.608 2.985-7.793 2.987-12.518 0 0 0-78.889-.013-118.345" fill="#5C8DBC"/>
-<path d="M128.182 143.509L2.988 215.593c2.053 3.711 5.169 6.813 9.386 9.254 20.206 11.703 88.02 50.547 101.56 58.536 9.106 5.373 17.997 5.565 27.17.269 34.015-19.64 68.075-39.198 102.105-58.817 4.217-2.44 7.333-5.544 9.386-9.252l-124.413-72.074" fill="#1A4674"/>
-<path d="M91.101 164.861c7.285 12.718 20.98 21.296 36.69 21.296 15.807 0 29.58-8.687 36.828-21.541l-36.437-21.107-37.081 21.352" fill="#1A4674"/>
-<path d="M255.569 84.72c-.002-4.83-1.035-9.098-3.124-12.761l-124.263 71.55 124.413 72.074c1.994-3.608 2.985-7.793 2.987-12.518 0 0 0-78.889-.013-118.345" fill="#1B598E"/>
-<path d="M248.728 148.661h-9.722v9.724h-9.724v-9.724h-9.721v-9.721h9.721v-9.722h9.724v9.722h9.722v9.721M213.253 148.661h-9.721v9.724h-9.722v-9.724h-9.722v-9.721h9.722v-9.722h9.722v9.722h9.721v9.721" fill="#FFF"/>
-<path d="M164.619 164.616c-7.248 12.854-21.021 21.541-36.828 21.541-15.71 0-29.405-8.578-36.69-21.296a42.062 42.062 0 0 1-5.574-20.968c0-23.341 18.923-42.263 42.264-42.263 15.609 0 29.232 8.471 36.553 21.059l36.941-21.272c-14.683-25.346-42.096-42.398-73.494-42.398-46.876 0-84.875 38-84.875 84.874 0 15.378 4.091 29.799 11.241 42.238 14.646 25.48 42.137 42.637 73.634 42.637 31.555 0 59.089-17.226 73.714-42.781l-36.886-21.371" fill="#FFF"/>
-</svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/csharp.svg b/backend/dist/data/icons/csharp.svg
deleted file mode 100644
index 96cf5abc..00000000
--- a/backend/dist/data/icons/csharp.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(63.137257%,47.450981%,86.274511%);fill-opacity:1;" d="M 47.148438 14.660156 C 47.148438 13.824219 46.96875 13.082031 46.605469 12.445312 C 46.25 11.820312 45.714844 11.296875 45 10.882812 C 39.09375 7.476562 33.179688 4.082031 27.273438 0.671875 C 25.683594 -0.246094 24.140625 -0.214844 22.558594 0.71875 C 20.207031 2.105469 8.4375 8.847656 4.929688 10.878906 C 3.484375 11.71875 2.78125 12.996094 2.78125 14.660156 C 2.777344 21.511719 2.78125 28.359375 2.777344 35.210938 C 2.777344 36.03125 2.949219 36.757812 3.296875 37.382812 C 3.652344 38.027344 4.195312 38.566406 4.925781 38.988281 C 8.433594 41.019531 20.207031 47.765625 22.558594 49.152344 C 24.140625 50.085938 25.683594 50.117188 27.273438 49.199219 C 33.179688 45.789062 39.09375 42.394531 45 38.988281 C 45.734375 38.5625 46.273438 38.023438 46.632812 37.382812 C 46.976562 36.753906 47.148438 36.027344 47.148438 35.207031 C 47.148438 35.207031 47.148438 21.511719 47.148438 14.660156 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(15.686275%,0%,40.784314%);fill-opacity:1;" d="M 25.03125 24.867188 L 3.296875 37.382812 C 3.652344 38.027344 4.195312 38.566406 4.925781 38.988281 C 8.433594 41.019531 20.207031 47.765625 22.558594 49.152344 C 24.140625 50.085938 25.683594 50.117188 27.273438 49.199219 C 33.179688 45.789062 39.09375 42.394531 45 38.988281 C 45.734375 38.5625 46.273438 38.023438 46.632812 37.382812 L 25.03125 24.867188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(22.352941%,0%,56.862748%);fill-opacity:1;" d="M 47.148438 14.660156 C 47.148438 13.824219 46.96875 13.082031 46.605469 12.445312 L 25.03125 24.867188 L 46.632812 37.382812 C 46.976562 36.753906 47.148438 36.027344 47.148438 35.207031 C 47.148438 35.207031 47.148438 21.511719 47.148438 14.660156 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 37.828125 20.191406 L 37.828125 22.527344 L 40.167969 22.527344 L 40.167969 20.191406 L 41.335938 20.191406 L 41.335938 22.527344 L 43.675781 22.527344 L 43.675781 23.699219 L 41.335938 23.699219 L 41.335938 26.039062 L 43.675781 26.039062 L 43.675781 27.207031 L 41.335938 27.207031 L 41.335938 29.546875 L 40.167969 29.546875 L 40.167969 27.207031 L 37.828125 27.207031 L 37.828125 29.546875 L 36.660156 29.546875 L 36.660156 27.207031 L 34.320312 27.207031 L 34.320312 26.039062 L 36.660156 26.039062 L 36.660156 23.699219 L 34.320312 23.699219 L 34.320312 22.527344 L 36.660156 22.527344 L 36.660156 20.191406 Z M 40.167969 23.699219 L 37.828125 23.699219 L 37.828125 26.039062 L 40.167969 26.039062 Z M 40.167969 23.699219 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 25.078125 8.441406 C 31.179688 8.441406 36.507812 11.753906 39.359375 16.679688 L 39.332031 16.632812 L 32.15625 20.765625 C 30.738281 18.371094 28.148438 16.757812 25.171875 16.722656 L 25.078125 16.722656 C 20.542969 16.722656 16.867188 20.398438 16.867188 24.933594 C 16.867188 26.417969 17.261719 27.808594 17.949219 29.007812 C 19.367188 31.480469 22.027344 33.148438 25.078125 33.148438 C 28.152344 33.148438 30.828125 31.460938 32.234375 28.960938 L 32.203125 29.023438 L 39.371094 33.175781 C 36.546875 38.058594 31.292969 41.359375 25.261719 41.425781 L 25.078125 41.429688 C 18.957031 41.429688 13.617188 38.09375 10.769531 33.144531 C 9.382812 30.726562 8.585938 27.921875 8.585938 24.933594 C 8.585938 15.828125 15.96875 8.441406 25.078125 8.441406 Z M 25.078125 8.441406 "/>
-</g>
-</svg>
diff --git a/backend/dist/data/icons/css.svg b/backend/dist/data/icons/css.svg
deleted file mode 100644
index c981c7ac..00000000
--- a/backend/dist/data/icons/css.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="css-logo-title css-logo-description">
-<title id="css-logo-title">CSS Logo Square</title>
-<desc id="css-logo-description">A purple square with the letters CSS inside in white</desc>
-<path id="bg" fill="#639" d="M0,0H1000V1000H0Z" />
-<path id="fg" fill="#fff" d="m358.1,920c-64.23-.06-103.86-36.23-103.1-102.79,0,0,0-168.39,0-168.39,0-33.74,9.88-59.4,29.64-76.96,35.49-34.19,117.83-36.27,152.59.52,21.42,18.89,29.5,57.48,27.58,93.49h-73.72c.56-14.15-.19-35.58-8.51-43.65-10.81-14.63-39.36-12.91-46.91,2.32-4.64,8.26-6.96,20.49-6.96,36.67v146.18c0,30.65,10.65,46.15,31.96,46.49,9.96,0,17.53-3.62,22.68-10.85,7.19-8.58,8.31-27.58,7.73-41.32h73.72c5.04,70.07-36.32,119.16-106.71,118.29Zm234.04,0c-71.17.98-103.01-49.66-101.04-118.29h69.59c-1.93,29.92,8.35,57.17,32.99,55.27,10.99,0,18.73-3.44,23.2-10.33,8.5-12.59,10.09-48.95-2.06-63.02-8.49-13.55-39.03-25.51-55.16-33.57-23.03-11.02-39.61-24.1-49.75-39.26-22.87-33.64-20.75-107.48,11.34-137.4,31.18-36.92,112.61-38.62,143.82-.77,19.25,19.51,27.66,57.9,26.03,93.23h-67.02c.57-14.52-.8-37.95-6.44-46.49-3.95-7.23-11.43-10.85-22.42-10.85-19.59,0-29.38,11.71-29.38,35.12.21,24.86,9.9,35.06,32.48,45.45,29.24,11.36,66.42,30.76,79.9,54.24,40.2,71.54,12.62,180.82-86.09,176.65Zm224.76,0c-71.17.98-103.01-49.66-101.04-118.29h69.59c-1.93,29.92,8.35,57.17,32.99,55.27,10.99,0,18.73-3.44,23.2-10.33,8.5-12.59,10.09-48.95-2.06-63.02-8.49-13.55-39.03-25.51-55.16-33.57-23.03-11.02-39.61-24.1-49.75-39.26-22.87-33.64-20.75-107.48,11.34-137.4,31.18-36.92,112.61-38.62,143.82-.77,19.25,19.51,27.66,57.9,26.03,93.23h-67.02c.57-14.52-.8-37.95-6.44-46.49-3.95-7.23-11.43-10.85-22.42-10.85-19.59,0-29.38,11.71-29.38,35.12.21,24.86,9.9,35.06,32.48,45.45,29.24,11.36,66.42,30.76,79.9,54.24,40.2,71.54,12.62,180.82-86.09,176.65Z" />
-</svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/haskell.svg b/backend/dist/data/icons/haskell.svg
deleted file mode 100644
index 8163876f..00000000
--- a/backend/dist/data/icons/haskell.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 12" width="50" height="50">
-		<path fill="#453a62" d="M 0 12 L 4 6 L 0 0 L 3 0 L 7 6 L 3 12"/>
-		<path fill="#5e5086" d="M 4 12 L 8 6 L 4 0 L 7 0 L 15 12 L 12 12 L 9.5 8.25 L 7 12"/>
-		<path fill="#8f4e8b" d="M 13.66 8.5 L 12.333 6.5 L 17 6.5 L 17 8.5 M 11.666 5.5 L 10.333 3.5 L 17 3.5 L 17 5.5"/>
-</svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/html.svg b/backend/dist/data/icons/html.svg
deleted file mode 100644
index 59345ce4..00000000
--- a/backend/dist/data/icons/html.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="html5-logo-title html5-logo-description">
-<title id="html5-logo-title">HTML5 Logo</title>
-<desc id="html5-logo-description">A two tone orange shield with a white number 5 in it</desc>
-<path fill="#E34F26" d="M71,460 L30,0 481,0 440,460 255,512"/>
-<path fill="#EF652A" d="M256,472 L405,431 440,37 256,37"/>
-<path fill="#EBEBEB" d="M256,208 L181,208 176,150 256,150 256,94 255,94 114,94 115,109 129,265 256,265zM256,355 L255,355 192,338 188,293 158,293 132,293 139,382 255,414 256,414z"/>
-<path fill="#FFF" d="M255,208 L255,265 325,265 318,338 255,355 255,414 371,382 372,372 385,223 387,208 371,208zM255,94 L255,129 255,150 255,150 392,150 392,150 392,150 393,138 396,109 397,94z"/>
-</svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/java.svg b/backend/dist/data/icons/java.svg
deleted file mode 100644
index e51aae9c..00000000
--- a/backend/dist/data/icons/java.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 37.308594 39.429688 L 37.121094 39.429688 L 37.121094 39.324219 L 37.628906 39.324219 L 37.628906 39.429688 L 37.441406 39.429688 L 37.441406 39.953125 L 37.308594 39.953125 Z M 38.320312 39.457031 L 38.316406 39.457031 L 38.132812 39.953125 L 38.046875 39.953125 L 37.859375 39.457031 L 37.859375 39.953125 L 37.734375 39.953125 L 37.734375 39.324219 L 37.917969 39.324219 L 38.089844 39.769531 L 38.261719 39.324219 L 38.441406 39.324219 L 38.441406 39.953125 L 38.320312 39.953125 Z M 38.320312 39.457031 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 20.445312 26.523438 C 20.445312 26.523438 19.136719 27.285156 21.378906 27.542969 C 24.097656 27.851562 25.484375 27.808594 28.480469 27.242188 C 28.480469 27.242188 29.269531 27.734375 30.367188 28.164062 C 23.652344 31.039062 15.171875 27.996094 20.445312 26.523438 M 19.625 22.769531 C 19.625 22.769531 18.15625 23.855469 20.402344 24.089844 C 23.304688 24.386719 25.597656 24.410156 29.5625 23.648438 C 29.5625 23.648438 30.113281 24.203125 30.976562 24.507812 C 22.859375 26.882812 13.816406 24.695312 19.625 22.769531 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 26.542969 16.398438 C 28.195312 18.304688 26.109375 20.015625 26.109375 20.015625 C 26.109375 20.015625 30.308594 17.847656 28.378906 15.132812 C 26.578125 12.601562 25.195312 11.34375 32.675781 7.003906 C 32.675781 7.003906 20.933594 9.9375 26.542969 16.398438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 35.421875 29.300781 C 35.421875 29.300781 36.390625 30.097656 34.355469 30.71875 C 30.476562 31.890625 18.222656 32.246094 14.820312 30.765625 C 13.597656 30.230469 15.890625 29.492188 16.613281 29.339844 C 17.367188 29.175781 17.796875 29.203125 17.796875 29.203125 C 16.433594 28.246094 9 31.085938 14.019531 31.902344 C 27.707031 34.121094 38.972656 30.902344 35.421875 29.300781 M 21.078125 18.878906 C 21.078125 18.878906 14.84375 20.359375 18.871094 20.894531 C 20.570312 21.125 23.957031 21.070312 27.113281 20.808594 C 29.695312 20.589844 32.285156 20.128906 32.285156 20.128906 C 32.285156 20.128906 31.375 20.515625 30.714844 20.964844 C 24.386719 22.628906 12.160156 21.855469 15.679688 20.152344 C 18.65625 18.714844 21.078125 18.878906 21.078125 18.878906 M 32.257812 25.128906 C 38.691406 21.785156 35.71875 18.570312 33.640625 19.003906 C 33.132812 19.109375 32.90625 19.203125 32.90625 19.203125 C 32.90625 19.203125 33.09375 18.90625 33.453125 18.777344 C 37.5625 17.332031 40.722656 23.035156 32.128906 25.296875 C 32.128906 25.296875 32.230469 25.207031 32.257812 25.128906 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 28.378906 0 C 28.378906 0 31.941406 3.566406 25 9.046875 C 19.429688 13.441406 23.730469 15.949219 24.996094 18.816406 C 21.746094 15.882812 19.363281 13.300781 20.960938 10.898438 C 23.308594 7.371094 29.816406 5.664062 28.378906 0 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 21.710938 34.1875 C 27.886719 34.582031 37.371094 33.96875 37.59375 31.046875 C 37.59375 31.046875 37.164062 32.152344 32.488281 33.035156 C 27.21875 34.027344 20.714844 33.910156 16.859375 33.273438 C 16.859375 33.273438 17.648438 33.925781 21.710938 34.1875 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 20.695312 45.355469 C 20.113281 45.859375 19.5 46.144531 18.945312 46.144531 C 18.160156 46.144531 17.734375 45.671875 17.734375 44.914062 C 17.734375 44.09375 18.1875 43.492188 20.019531 43.492188 L 20.695312 43.492188 L 20.695312 45.355469 M 22.304688 47.167969 L 22.304688 41.554688 C 22.304688 40.117188 21.488281 39.171875 19.515625 39.171875 C 18.363281 39.171875 17.355469 39.457031 16.535156 39.820312 L 16.769531 40.8125 C 17.417969 40.578125 18.25 40.355469 19.070312 40.355469 C 20.207031 40.355469 20.695312 40.8125 20.695312 41.757812 L 20.695312 42.46875 L 20.128906 42.46875 C 17.371094 42.46875 16.125 43.539062 16.125 45.148438 C 16.125 46.539062 16.945312 47.328125 18.488281 47.328125 C 19.484375 47.328125 20.222656 46.917969 20.917969 46.316406 L 21.042969 47.167969 Z M 27.671875 47.167969 L 25.664062 47.167969 L 23.25 39.316406 L 25.003906 39.316406 L 26.5 44.140625 L 26.832031 45.589844 C 27.589844 43.492188 28.125 41.363281 28.394531 39.316406 L 30.097656 39.316406 C 29.640625 41.902344 28.820312 44.738281 27.671875 47.167969 M 35.363281 45.355469 C 34.777344 45.859375 34.160156 46.144531 33.609375 46.144531 C 32.824219 46.144531 32.394531 45.671875 32.394531 44.914062 C 32.394531 44.09375 32.851562 43.492188 34.683594 43.492188 L 35.363281 43.492188 L 35.363281 45.355469 M 36.96875 47.167969 L 36.96875 41.554688 C 36.96875 40.117188 36.148438 39.171875 34.179688 39.171875 C 33.027344 39.171875 32.019531 39.457031 31.199219 39.820312 L 31.433594 40.8125 C 32.082031 40.578125 32.917969 40.355469 33.738281 40.355469 C 34.871094 40.355469 35.363281 40.8125 35.363281 41.757812 L 35.363281 42.46875 L 34.792969 42.46875 C 32.03125 42.46875 30.789062 43.539062 30.789062 45.148438 C 30.789062 46.539062 31.609375 47.328125 33.152344 47.328125 C 34.148438 47.328125 34.886719 46.917969 35.582031 46.316406 L 35.707031 47.167969 Z M 14.359375 48.503906 C 13.902344 49.171875 13.164062 49.699219 12.351562 50 L 11.558594 49.066406 C 12.175781 48.75 12.703125 48.238281 12.949219 47.761719 C 13.164062 47.339844 13.25 46.792969 13.25 45.488281 L 13.25 36.523438 L 14.957031 36.523438 L 14.957031 45.363281 C 14.957031 47.109375 14.820312 47.816406 14.359375 48.503906 "/>
-</g>
-</svg>
diff --git a/backend/dist/data/icons/javascript--react.svg b/backend/dist/data/icons/javascript--react.svg
deleted file mode 100644
index b9025712..00000000
--- a/backend/dist/data/icons/javascript--react.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="50" width="50" viewBox="-11.5 -10.23174 23 20.46348">
-  <title>React Logo</title>
-  <circle cx="0" cy="0" r="2.05" fill="#61dafb"/>
-  <g stroke="#61dafb" stroke-width="1" fill="none">
-    <ellipse rx="11" ry="4.2"/>
-    <ellipse rx="11" ry="4.2" transform="rotate(60)"/>
-    <ellipse rx="11" ry="4.2" transform="rotate(120)"/>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/javascript.svg b/backend/dist/data/icons/javascript.svg
deleted file mode 100644
index 25ccdbaa..00000000
--- a/backend/dist/data/icons/javascript.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="js-logo-title js-logo-description">
-<title id="js-logo-title">JS Logo Square</title>
-<desc id="js-logo-description">A yellow square with the letters JS inside in white</desc>
-<path d="M3.125 3.125H46.875V46.875H3.125V3.125Z" fill="#F5DE19"/>
-<path d="M32.5141 37.3047C32.8874 38.0614 33.4667 38.6974 34.1853 39.1396C34.904 39.5819 35.7328 39.8124 36.5766 39.8047C38.2797 39.8047 39.3687 38.9531 39.3687 37.7734C39.3687 36.3672 38.25 35.8641 36.375 35.0437L35.3469 34.6031C32.3781 33.3391 30.4094 31.7562 30.4094 28.4094C30.4094 25.3266 32.7531 22.9781 36.4297 22.9781C37.6198 22.8924 38.8089 23.1588 39.8486 23.7443C40.8883 24.3297 41.7327 25.2082 42.2765 26.2703L39.0625 28.325C38.853 27.7984 38.4884 27.348 38.0171 27.0332C37.5459 26.7185 36.9901 26.5543 36.4234 26.5625C36.1762 26.5377 35.9265 26.5648 35.6903 26.6418C35.454 26.7189 35.2364 26.8444 35.0514 27.0102C34.8663 27.176 34.7178 27.3785 34.6153 27.6049C34.5129 27.8313 34.4587 28.0765 34.4562 28.325C34.4562 29.5578 35.2203 30.0578 36.9844 30.825L38.0125 31.2656C41.5062 32.7641 43.4812 34.2906 43.4812 37.7234C43.4812 41.425 40.5734 43.4531 36.6687 43.4531C35.1475 43.5491 33.6309 43.2032 32.3017 42.4572C30.9724 41.7113 29.8872 40.5969 29.1766 39.2484L32.5141 37.3047ZM17.9906 37.6609C18.6359 38.8062 19.2234 39.775 20.6359 39.775C21.9859 39.775 22.8391 39.2469 22.8391 37.1922V23.2125H26.95V37.2469C26.95 41.5031 24.45 43.4406 20.8109 43.4406C19.5246 43.5109 18.2471 43.1904 17.1464 42.5211C16.0456 41.8517 15.1732 40.865 14.6437 39.6906L17.9906 37.6609Z" fill="black"/>
-</svg>
diff --git a/backend/dist/data/icons/python--fastapi.svg b/backend/dist/data/icons/python--fastapi.svg
deleted file mode 100644
index a7be660d..00000000
--- a/backend/dist/data/icons/python--fastapi.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" height="50" width="50" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 154 154"><circle cx="77" cy="77" fill="#05998b" r="77"/><path d="M81.375 18.667l-38.75 70H77.5l-3.875 46.666 38.75-70H77.5z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/python--tkinter.svg b/backend/dist/data/icons/python--tkinter.svg
deleted file mode 100644
index 9316a704..00000000
--- a/backend/dist/data/icons/python--tkinter.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50" height="50"><style>.a{fill:#f14729}.b{fill:#1e5cb3}.c{fill:#fff}.d{fill:#fff200}</style><path class="a" d="m19.9 48.8l20.4 0.7-1.2-25.2 1.9-23-9.4 0.5-4.4-1.8-19.2 1 1 22.7-1 26.2z"/><path class="b" d="m26.5 30.7l-1.8 0.4 1-2.3 0.9-6.3-1.1-0.3 1.4-2 1.7-6.6-3.1 0.7c0 0 1.7-3 3.4-5l-2.3-1.7c0 0-7.3 3.2-5.3 13.7l-1.5-0.3 1.4 11-1.2 0.3c0 0 1.3 2.6 3 3.8 0.2 0.1-2.2-8.6 0.3-17.3l0.3 0.6c0 0-2 9.2 0 16.7 0 0 0.1 0.2 1.1 0.1 0 0 1.8-3.5 1.8-5.5z"/><path class="c" d="m13.6 38.5h0.3v-0.7q0.3 0 0.5 0v0.7h0.5v0.2h-0.5v1.8c0 0.1 0 0.3 0.2 0.3 0.2 0 0.2-0.1 0.3-0.2h0.1c-0.1 0.3-0.4 0.4-0.6 0.4-0.4 0-0.5-0.2-0.5-0.5v-1.8h-0.3z"/><path class="c" d="m18.9 40.2c-0.2 0.4-0.4 0.8-1.1 0.8-0.9 0-1.2-0.8-1.2-1.2 0-1.1 0.9-1.3 1.2-1.3 0.4 0 1 0.1 1 0.6 0 0.2-0.1 0.3-0.3 0.3-0.2 0-0.3-0.1-0.3-0.3 0-0.2 0.2-0.2 0.2-0.3 0-0.1-0.4-0.2-0.5-0.2-0.6 0-0.7 0.4-0.7 1.2 0 0.4 0.1 0.6 0.1 0.7q0.1 0.3 0.6 0.4c0.3 0 0.7-0.3 0.8-0.7z"/><path class="c" d="m20.5 40.9v-0.1h0.5v-3.9h-0.5v-0.1h0.3q0.3 0 0.7-0.1v4.1h0.4v0.1z"/><path class="c" d="m26.3 38.5h0.4v-0.7q0.2 0 0.4 0v0.7h0.5v0.2h-0.5v1.8c0 0.1 0 0.3 0.2 0.3 0.2 0 0.3-0.1 0.4-0.2h0.1c-0.1 0.3-0.4 0.4-0.7 0.4-0.4 0-0.5-0.2-0.5-0.5v-1.8h-0.3z"/><path class="c" d="m30.8 38.7v-0.2h1v0.2h-0.4l-0.8 0.7 1.1 1.4h0.3v0.1h-1.2v-0.1h0.3l-1-1.2 1.1-0.9zm-1.5 2.2v-0.1h0.3v-3.9h-0.3v-0.1h0.1q0.4 0 0.7-0.1v4.1h0.4v0.1z"/><path class="c" d="m24.1 18c0 0-1.1 4.8-0.8 12.5 0.1 2.3 0.4 4.4 0.7 6.2 0.2 1.7 0.3 2.2 0.9 4.2l-0.1 1.2c0 0-4.2-13.3-0.7-24.1z"/><path class="c" d="m26.7 13.9c0 0 0.9-0.4 2.3-0.6 0 0 1.4 2.7-2.2 7.3 0 0 2.2-4.8 1.7-6.3 0 0-0.6-0.4-1.8-0.4z"/><path class="c" d="m26.2 22c0 0 0.9 0.2 1.3-0.1 0 0-0.8 3.1-0.6 4.8 0.2 1.8-1.3 2.9-1.3 2.9 0 0 1.3-1.7 0.9-3-0.3-0.9 0-3.3 0.4-4 0 0-0.4-0.1-0.7-0.6z"/><path class="c" d="m25.4 30.3c0 0 1.4-0.2 1.5-0.9 0 0 0.2 4.2-1.7 5.9 0 0 1.4-2.3 1.2-4.6z"/><path class="c" d="m21.5 32c0 0-0.5 0.5-1.8-0.6 0 0 0.4 2.8 3.1 4.1 0 0-1.9-1.3-2.4-2.8 0 0 0.7-0.2 1.1-0.7z"/><path class="c" d="m21 30.9c0 0-1.8-4.6-1.4-10.9 0 0 0.4 1.2 1.8 1.6 0 0-0.7 0.1-1 0 0 0-1 2.7 0.6 9.3z"/><path class="c" d="m28.7 9.4c0 0-0.7-5-5 0.1-3.4 4-3 7.4-2.8 9.4 0.1 0.5-0.6-5.2 3.1-8.9 3.8-3.7 4.6-0.8 4.7-0.6z"/><path class="d" d="m22.4 5.1c0 0-3.4-1-4.4 10.2 0 0-0.9-3.5 1.3-8.3 2.1-4.9 3.1-1.9 3.1-1.9z"/><path class="d" d="m18.2 4.3c0 0-1.7 2.6-1.3 5.3 0 0-1.3-5.2 1.3-5.3z"/><path class="d" d="m30.8 11.5c0 0 2.1-0.7-0.8 6.8 0 0 1.5-2.2 2.4-5.7 0.6-2.2-1.6-1.1-1.6-1.1z"/><path class="d" d="m34.1 10.9c0 0 1.5 1.3 0.4 3 0 0 2.6-2.6-0.4-3z"/><path class="d" d="m14 43.6c0 0.1 0 0.2-0.1 0.2-0.2 0-0.2-0.1-0.2-0.2v-0.6h0.1v0.5c0 0.2 0 0.3 0.1 0.3 0.1 0 0.1-0.1 0.1-0.3v-0.5z"/><path class="d" d="m15.1 43v0.5q0 0.1 0 0.2 0-0.1 0-0.1l-0.2-0.6h-0.1v0.8h0.1v-0.5q0-0.1-0.1-0.2 0.1 0.1 0.1 0.1l0.2 0.6z"/><path class="d" d="m16 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m16.9 43.8h-0.1l-0.1-0.8 0.2 0.6q0 0 0 0.1 0-0.1 0-0.1l0.1-0.6h0.1z"/><path class="d" d="m18 43h-0.2v0.3h0.2v0.1h-0.2v0.4h0.2-0.2v-0.8h0.2z"/><path class="d" d="m18.8 43.8v-0.8c0.2 0 0.3 0 0.3 0.2 0 0.1 0 0.2-0.2 0.2l0.2 0.4h-0.1l-0.2-0.4v0.4zm0.1-0.5h0.1c0.1 0 0.1 0 0.1-0.1 0-0.2-0.1-0.2-0.2-0.2z"/><path class="d" d="m20.1 43.1q0-0.1-0.1-0.1-0.1 0-0.1 0.2c0 0.1 0 0.1 0.1 0.2 0.1 0 0.2 0.1 0.2 0.2 0 0.1-0.1 0.2-0.3 0.2q0 0-0.1 0v-0.1q0.1 0.1 0.1 0.1c0.1 0 0.2-0.1 0.2-0.2 0-0.1-0.1-0.1-0.2-0.2-0.1 0-0.1-0.1-0.1-0.2 0-0.1 0-0.3 0.2-0.3q0 0 0.1 0.1z"/><path class="d" d="m21.2 43.8h-0.1v-0.2h-0.2v0.2h-0.1l0.2-0.8zm-0.1-0.3l-0.1-0.3q0-0.1 0-0.2 0 0.1 0 0.2l-0.1 0.3z"/><path class="d" d="m22 43.8h0.2-0.3v-0.8h0.1z"/><path class="d" d="m24 43.1q-0.1-0.1-0.2-0.1-0.1 0-0.1 0.2c0 0.1 0.1 0.1 0.2 0.2 0 0 0.1 0.1 0.1 0.2 0 0.1-0.1 0.2-0.2 0.2q-0.1 0-0.1 0v-0.1q0 0.1 0.1 0.1c0.1 0 0.1-0.1 0.1-0.2 0-0.1 0-0.1-0.1-0.2-0.1 0-0.2-0.1-0.2-0.2 0-0.1 0.1-0.3 0.2-0.3q0.1 0 0.2 0.1z"/><path class="d" d="m25 43.7q0 0.1-0.1 0.1c-0.1 0-0.1-0.3-0.1-0.4 0-0.2 0-0.4 0.1-0.4q0.1 0 0.1 0.1v-0.1q0-0.1-0.1-0.1c-0.2 0-0.2 0.4-0.2 0.5 0 0.2 0 0.4 0.2 0.4q0.1 0 0.1 0z"/><path class="d" d="m25.8 43.8v-0.8c0.2 0 0.3 0 0.3 0.2 0 0.1 0 0.2-0.2 0.2l0.2 0.4h-0.1l-0.2-0.4v0.4zm0.1-0.5c0.2 0 0.2 0 0.2-0.1 0-0.2-0.1-0.2-0.2-0.2z"/><path class="d" d="m26.9 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m27.6 43.8v-0.8h0.1c0.1 0 0.3 0 0.3 0.2 0 0.2-0.1 0.2-0.3 0.2v0.4zm0.1-0.5c0.1 0 0.1 0 0.1-0.1 0-0.1 0-0.2-0.1-0.2z"/><path class="d" d="m28.9 43h-0.3 0.1v0.8h0.1v-0.8h0.1z"/><path class="d" d="m29.7 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m30.8 43.8h-0.1l-0.2-0.6q0 0 0-0.1 0 0.1 0 0.2v0.5h-0.1v-0.8h0.1l0.2 0.6q0 0 0 0.1 0-0.1 0-0.2v-0.5h0.1z"/><path class="d" d="m31.7 43.4h0.2v0.1c0 0.2 0 0.3-0.2 0.3-0.2 0-0.2-0.2-0.2-0.4 0-0.2 0-0.5 0.2-0.5q0.2 0.1 0.2 0.2h-0.1c0 0 0-0.1-0.1-0.1-0.1 0-0.1 0.2-0.1 0.4 0 0.3 0 0.4 0.1 0.4 0.1 0 0.1-0.1 0.1-0.3v-0.1h-0.1z"/></svg>
\ No newline at end of file
diff --git a/backend/dist/data/icons/python.svg b/backend/dist/data/icons/python.svg
deleted file mode 100644
index 3755e98e..00000000
--- a/backend/dist/data/icons/python.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="python-logo-title python-logo-description">
-<title id="python-logo-title">Python Logo</title>
-<desc id="python-logo-description">A blue and yellow snake symbol forming a plus with a somewhat circular or rounded shape</desc>
-<path d="M24.7621 4.78437C23.1129 4.79218 21.5387 4.93242 20.1528 5.17773C16.0707 5.89882 15.3301 7.4082 15.3301 10.1922V13.8684H24.9758V15.0937H11.7098C8.90666 15.0937 6.45197 16.7785 5.684 19.9848C4.79806 23.6586 4.759 25.9516 5.684 29.7879C6.36955 32.6437 8.00705 34.6781 10.8106 34.6781H14.1274V30.2711C14.1274 27.0871 16.8817 24.2789 20.1531 24.2789H29.7879C32.4699 24.2789 34.6106 22.0703 34.6106 19.3773V10.1926C34.6106 7.57812 32.4051 5.61445 29.7879 5.17812C28.1301 4.90234 26.411 4.77695 24.7621 4.78437ZM19.5457 7.74101C20.5418 7.74101 21.3559 8.56796 21.3559 9.58515C21.3559 10.598 20.5422 11.4172 19.5457 11.4172C18.5457 11.4172 17.736 10.598 17.736 9.58515C17.7356 8.56796 18.5457 7.74101 19.5457 7.74101Z" fill="url(#paint0_linear_98_155)"/>
-<path d="M35.8133 15.0937V19.3773C35.8133 22.6977 32.9977 25.4926 29.7875 25.4926H20.1527C17.5137 25.4926 15.3301 27.7516 15.3301 30.3945V39.5801C15.3301 42.1937 17.6027 43.7316 20.1527 44.4812C23.2059 45.3785 26.134 45.541 29.7875 44.4812C32.2156 43.7777 34.6102 42.3629 34.6102 39.5801V35.9035H24.9758V34.6777H39.4336C42.2367 34.6777 43.282 32.7227 44.257 29.7875C45.2641 26.766 45.2207 23.8602 44.257 19.9844C43.5641 17.1934 42.241 15.0934 39.4336 15.0934L35.8133 15.0937ZM30.3941 38.3543C31.3945 38.3543 32.2043 39.1734 32.2043 40.1871C32.2043 41.2035 31.3941 42.0305 30.3941 42.0305C29.398 42.0305 28.5844 41.2035 28.5844 40.1871C28.5844 39.1734 29.398 38.3543 30.3941 38.3543Z" fill="url(#paint1_linear_98_155)"/>
-<path opacity="0.444" d="M38.0113 46.7176C38.0113 48.1016 32.2238 49.2238 25.0851 49.2238C17.9461 49.2238 12.1586 48.1016 12.1586 46.7176C12.1586 45.3336 17.9457 44.2109 25.0851 44.2109C32.2238 44.2109 38.0113 45.3328 38.0113 46.7176Z" fill="url(#paint2_radial_98_155)"/>
-<defs>
-<linearGradient id="paint0_linear_98_155" x1="4.03786" y1="5.93383" x2="26.2854" y2="24.9064" gradientUnits="userSpaceOnUse">
-<stop stop-color="#5A9FD4"/>
-<stop offset="1" stop-color="#306998"/>
-</linearGradient>
-<linearGradient id="paint1_linear_98_155" x1="34.6558" y1="36.7001" x2="26.6775" y2="25.5118" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FFD43B"/>
-<stop offset="1" stop-color="#FFE873"/>
-</linearGradient>
-<radialGradient id="paint2_radial_98_155" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.0329 46.6458) rotate(-90) scale(2.50716 11.021)">
-<stop stop-color="#B8B8B8" stop-opacity="0.498"/>
-<stop offset="1" stop-color="#7F7F7F" stop-opacity="0"/>
-</radialGradient>
-</defs>
-</svg>
diff --git a/backend/dist/data/icons/regex.svg b/backend/dist/data/icons/regex.svg
deleted file mode 100644
index bdbe2fc2..00000000
--- a/backend/dist/data/icons/regex.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 30.242188 34.101562 L 30.242188 22.550781 L 20.726562 28.382812 L 17.371094 22.539062 L 27.300781 17.105469 L 17.371094 11.589844 L 20.742188 5.851562 L 30.242188 11.65625 L 30.242188 0.0585938 L 37.019531 0.0585938 L 37.019531 11.65625 L 46.605469 5.851562 L 50 11.589844 L 40.027344 17.105469 L 50 22.539062 L 46.59375 28.40625 L 37.019531 22.550781 L 37.019531 34.101562 Z M 14.175781 42.851562 C 14.175781 37.414062 8.25 34 3.535156 36.714844 C -1.179688 39.433594 -1.179688 46.265625 3.535156 48.984375 C 8.25 51.703125 14.175781 48.289062 14.175781 42.851562 Z M 14.175781 42.851562 "/>
-</g>
-</svg>
diff --git a/backend/dist/data/icons/ruby.svg b/backend/dist/data/icons/ruby.svg
deleted file mode 100644
index 10ec5836..00000000
--- a/backend/dist/data/icons/ruby.svg
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<defs>
-<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="174.0737" y1="215.548798" x2="132.276306" y2="141.753296" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(98.431373%,46.27451%,33.333333%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(98.431373%,46.27451%,33.333333%);stop-opacity:1;"/>
-<stop offset="0.41" style="stop-color:rgb(89.411765%,16.862745%,11.764706%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(60%,0%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(60%,0%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="194.895004" y1="153.557602" x2="141.027603" y2="117.409302" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="151.795395" y1="217.785202" x2="97.929703" y2="181.638" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="38.696301" y1="127.390602" x2="47.046902" y2="181.661407" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.23" style="stop-color:rgb(89.803922%,44.705882%,32.156863%);stop-opacity:1;"/>
-<stop offset="0.46" style="stop-color:rgb(87.058824%,23.137255%,12.54902%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.098039%,0%,1.176471%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.098039%,0%,1.176471%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="96.132797" y1="76.715302" x2="99.209602" y2="132.102097" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.23" style="stop-color:rgb(89.411765%,44.313725%,30.588235%);stop-opacity:1;"/>
-<stop offset="0.56" style="stop-color:rgb(74.509804%,10.196078%,5.098039%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="147.102997" y1="25.521" x2="156.314102" y2="65.216202" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.18" style="stop-color:rgb(89.411765%,38.823529%,25.882353%);stop-opacity:1;"/>
-<stop offset="0.4" style="stop-color:rgb(78.431373%,14.117647%,6.27451%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear6" gradientUnits="userSpaceOnUse" x1="118.976097" y1="11.5415" x2="158.668594" y2="-8.3048" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.54" style="stop-color:rgb(78.431373%,12.156863%,6.666667%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(74.901961%,3.529412%,1.960784%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(74.901961%,3.529412%,1.960784%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear7" gradientUnits="userSpaceOnUse" x1="3.9033" y1="113.554703" x2="7.1702" y2="146.262802" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.31" style="stop-color:rgb(87.058824%,25.098039%,14.117647%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(74.901961%,9.803922%,4.313725%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(74.901961%,9.803922%,4.313725%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear8" gradientUnits="userSpaceOnUse" x1="-18.5557" y1="155.104507" x2="135.015198" y2="-2.8093" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(74.117647%,0%,7.058824%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(74.117647%,0%,7.058824%);stop-opacity:1;"/>
-<stop offset="0.07" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.17" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.27" style="stop-color:rgb(78.431373%,18.431373%,10.980392%);stop-opacity:1;"/>
-<stop offset="0.33" style="stop-color:rgb(50.980392%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.46" style="stop-color:rgb(63.921569%,8.627451%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.72" style="stop-color:rgb(70.196078%,7.45098%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(90.980392%,14.901961%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(90.980392%,14.901961%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear9" gradientUnits="userSpaceOnUse" x1="99.074699" y1="171.033203" x2="52.817699" y2="159.616592" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(54.901961%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(54.901961%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.54" style="stop-color:rgb(60%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,5.490196%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,5.490196%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear10" gradientUnits="userSpaceOnUse" x1="178.525894" y1="115.514603" x2="137.432693" y2="78.683998" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(49.411765%,6.666667%,4.313725%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(49.411765%,6.666667%,4.313725%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(61.960784%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(61.960784%,4.705882%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear11" gradientUnits="userSpaceOnUse" x1="193.623505" y1="47.937" x2="173.154205" y2="26.053801" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(47.45098%,7.45098%,5.098039%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(47.45098%,7.45098%,5.098039%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(61.960784%,7.058824%,4.313725%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(61.960784%,7.058824%,4.313725%);stop-opacity:1;"/>
-</linearGradient>
-<radialGradient id="radial0" gradientUnits="userSpaceOnUse" cx="143.831497" cy="79.388199" fx="143.831497" fy="79.388199" r="50.357601" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(49.411765%,5.490196%,3.137255%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(49.411765%,5.490196%,3.137255%);stop-opacity:1;"/>
-</radialGradient>
-<radialGradient id="radial1" gradientUnits="userSpaceOnUse" cx="74.0923" cy="145.751007" fx="74.0923" fy="145.751007" r="66.943703" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(63.921569%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(63.921569%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(50.196078%,5.490196%,3.137255%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(50.196078%,5.490196%,3.137255%);stop-opacity:1;"/>
-</radialGradient>
-<linearGradient id="linear12" gradientUnits="userSpaceOnUse" x1="26.669901" y1="197.335907" x2="9.9887" y2="140.742004" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(54.509804%,12.941176%,7.843137%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(54.509804%,12.941176%,7.843137%);stop-opacity:1;"/>
-<stop offset="0.43" style="stop-color:rgb(61.960784%,6.27451%,3.921569%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(70.196078%,6.27451%,4.705882%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(70.196078%,6.27451%,4.705882%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear13" gradientUnits="userSpaceOnUse" x1="154.641098" y1="9.7979" x2="192.039001" y2="26.305901" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(70.196078%,6.27451%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(70.196078%,6.27451%,0%);stop-opacity:1;"/>
-<stop offset="0.44" style="stop-color:rgb(56.862745%,5.882353%,3.137255%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(47.45098%,10.980392%,7.058824%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(47.45098%,10.980392%,7.058824%);stop-opacity:1;"/>
-</linearGradient>
-</defs>
-<g id="surface1">
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear0);" d="M 38.761719 32.933594 L 10.195312 49.894531 L 47.183594 47.382812 L 50.03125 10.089844 Z M 38.761719 32.933594 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear1);" d="M 47.246094 47.359375 L 44.066406 25.417969 L 35.40625 36.851562 Z M 47.246094 47.359375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear2);" d="M 47.289062 47.359375 L 23.996094 45.53125 L 10.320312 49.847656 Z M 47.289062 47.359375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear3);" d="M 10.355469 49.851562 L 16.171875 30.789062 L 3.367188 33.527344 Z M 10.355469 49.851562 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear4);" d="M 35.402344 36.914062 L 30.050781 15.945312 L 14.730469 30.304688 Z M 35.402344 36.914062 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear5);" d="M 48.816406 16.238281 L 34.335938 4.410156 L 30.304688 17.449219 Z M 48.816406 16.238281 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear6);" d="M 42.046875 0.195312 L 33.527344 4.902344 L 28.152344 0.132812 Z M 42.046875 0.195312 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear7);" d="M 0 39.921875 L 3.566406 33.414062 L 0.683594 25.660156 Z M 0 39.921875 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 0.488281 25.417969 L 3.394531 33.652344 L 16.011719 30.824219 L 30.417969 17.433594 L 34.484375 4.519531 L 28.082031 0 L 17.199219 4.074219 C 13.769531 7.261719 7.117188 13.574219 6.875 13.691406 C 6.640625 13.8125 2.480469 21.667969 0.488281 25.417969 Z M 0.488281 25.417969 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear8);" d="M 10.6875 10.617188 C 18.117188 3.25 27.699219 -1.105469 31.375 2.605469 C 35.050781 6.316406 31.152344 15.332031 23.722656 22.695312 C 16.289062 30.0625 6.828125 34.65625 3.152344 30.945312 C -0.523438 27.238281 3.253906 17.984375 10.6875 10.617188 Z M 10.6875 10.617188 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear9);" d="M 10.355469 49.84375 L 16.125 30.722656 L 35.296875 36.882812 C 28.367188 43.382812 20.65625 48.875 10.355469 49.84375 Z M 10.355469 49.84375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear10);" d="M 30.445312 17.394531 L 35.367188 36.890625 C 41.15625 30.804688 46.355469 24.257812 48.898438 16.160156 Z M 30.445312 17.394531 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear11);" d="M 48.847656 16.261719 C 50.816406 10.316406 51.273438 1.789062 41.984375 0.203125 L 34.363281 4.414062 Z M 48.847656 16.261719 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:rgb(61.960787%,7.058824%,3.529412%);fill-opacity:1;" d="M 0 39.835938 C 0.273438 49.648438 7.351562 49.792969 10.367188 49.878906 L 3.402344 33.613281 Z M 0 39.835938 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#radial0);" d="M 30.472656 17.425781 C 34.921875 20.160156 43.890625 25.652344 44.070312 25.753906 C 44.351562 25.914062 47.9375 19.710938 48.75 16.207031 Z M 30.472656 17.425781 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#radial1);" d="M 16.117188 30.722656 L 23.835938 45.609375 C 28.398438 43.136719 31.972656 40.121094 35.246094 36.890625 Z M 16.117188 30.722656 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear12);" d="M 3.371094 33.632812 L 2.277344 46.652344 C 4.339844 49.472656 7.179688 49.71875 10.15625 49.496094 C 8.003906 44.136719 3.699219 33.417969 3.371094 33.632812 Z M 3.371094 33.632812 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear13);" d="M 34.316406 4.445312 L 49.648438 6.597656 C 48.832031 3.132812 46.316406 0.894531 42.035156 0.195312 Z M 34.316406 4.445312 "/>
-</g>
-</svg>
diff --git a/backend/dist/data/icons/rust.svg b/backend/dist/data/icons/rust.svg
deleted file mode 100644
index 3f62b3c2..00000000
--- a/backend/dist/data/icons/rust.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="rust-logo-title rust-logo-description">
-<title id="rust-logo-title">Rust Logo</title>
-<desc id="rust-logo-description">A black gear with the letter R in the center</desc>
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 24.671875 8.222656 C 15.621094 8.222656 8.257812 15.589844 8.257812 24.636719 C 8.257812 33.679688 15.625 41.046875 24.671875 41.046875 C 33.714844 41.046875 41.082031 33.679688 41.082031 24.636719 C 41.082031 15.589844 33.714844 8.222656 24.671875 8.222656 Z M 24.644531 9.679688 C 25.230469 9.695312 25.695312 10.175781 25.695312 10.761719 C 25.695312 11.355469 25.210938 11.839844 24.613281 11.839844 C 24.019531 11.839844 23.535156 11.355469 23.535156 10.761719 C 23.535156 10.46875 23.652344 10.1875 23.863281 9.984375 C 24.070312 9.78125 24.355469 9.671875 24.644531 9.679688 Z M 27.117188 11.457031 C 30.953125 12.175781 34.28125 14.546875 36.214844 17.9375 L 34.941406 20.8125 C 34.722656 21.308594 34.949219 21.890625 35.441406 22.113281 L 37.890625 23.203125 C 37.96875 23.96875 37.976562 24.738281 37.921875 25.507812 L 36.554688 25.507812 C 36.421875 25.507812 36.363281 25.597656 36.363281 25.730469 L 36.363281 26.355469 C 36.363281 27.828125 35.535156 28.148438 34.804688 28.230469 C 34.109375 28.308594 33.34375 27.9375 33.246094 27.515625 C 32.835938 25.210938 32.15625 24.722656 31.078125 23.871094 C 32.417969 23.023438 33.804688 21.769531 33.804688 20.097656 C 33.804688 18.289062 32.566406 17.148438 31.722656 16.589844 C 30.535156 15.808594 29.222656 15.652344 28.867188 15.652344 L 14.769531 15.652344 C 16.71875 13.476562 19.332031 12 22.203125 11.457031 L 23.867188 13.203125 C 24.242188 13.59375 24.863281 13.609375 25.257812 13.234375 Z M 11.769531 19.453125 C 12.355469 19.46875 12.820312 19.945312 12.820312 20.53125 C 12.820312 21.128906 12.335938 21.609375 11.738281 21.609375 C 11.144531 21.609375 10.660156 21.128906 10.660156 20.53125 C 10.660156 20.238281 10.777344 19.960938 10.988281 19.757812 C 11.195312 19.554688 11.480469 19.441406 11.769531 19.453125 Z M 37.515625 19.5 C 38.101562 19.515625 38.566406 19.996094 38.566406 20.578125 C 38.566406 21.175781 38.082031 21.660156 37.484375 21.660156 C 36.890625 21.660156 36.40625 21.175781 36.40625 20.578125 C 36.40625 20.289062 36.523438 20.007812 36.734375 19.804688 C 36.941406 19.601562 37.226562 19.492188 37.515625 19.5 Z M 13.804688 19.671875 L 15.6875 19.671875 L 15.6875 28.160156 L 11.890625 28.160156 C 11.417969 26.511719 11.273438 24.789062 11.457031 23.085938 L 13.785156 22.050781 C 14.28125 21.828125 14.507812 21.25 14.285156 20.753906 Z M 21.660156 19.765625 L 26.140625 19.765625 C 26.375 19.765625 27.777344 20.03125 27.777344 21.082031 C 27.777344 21.953125 26.703125 22.265625 25.816406 22.265625 L 21.65625 22.265625 Z M 21.660156 25.859375 L 25.09375 25.859375 C 25.40625 25.859375 26.769531 25.953125 27.203125 27.695312 C 27.339844 28.230469 27.640625 29.972656 27.847656 30.53125 C 28.050781 31.15625 28.882812 32.40625 29.765625 32.40625 L 35.371094 32.40625 C 34.996094 32.910156 34.585938 33.386719 34.140625 33.828125 L 31.859375 33.339844 C 31.328125 33.226562 30.804688 33.566406 30.691406 34.097656 L 30.148438 36.625 C 26.625 38.222656 22.578125 38.203125 19.070312 36.574219 L 18.527344 34.046875 C 18.414062 33.515625 17.890625 33.171875 17.359375 33.289062 L 15.128906 33.765625 C 14.714844 33.339844 14.328125 32.886719 13.976562 32.40625 L 24.832031 32.40625 C 24.953125 32.40625 25.039062 32.386719 25.039062 32.269531 L 25.039062 28.429688 C 25.039062 28.320312 24.953125 28.296875 24.832031 28.296875 L 21.65625 28.296875 Z M 16.648438 34.65625 C 17.234375 34.671875 17.699219 35.152344 17.699219 35.734375 C 17.699219 36.332031 17.214844 36.816406 16.617188 36.816406 C 16.023438 36.816406 15.539062 36.332031 15.539062 35.734375 C 15.539062 35.445312 15.65625 35.164062 15.867188 34.960938 C 16.074219 34.757812 16.359375 34.648438 16.648438 34.65625 Z M 32.640625 34.703125 C 33.222656 34.722656 33.6875 35.199219 33.6875 35.785156 C 33.6875 36.382812 33.203125 36.863281 32.609375 36.863281 C 32.011719 36.863281 31.527344 36.382812 31.527344 35.785156 C 31.527344 35.492188 31.644531 35.214844 31.855469 35.011719 C 32.0625 34.804688 32.347656 34.695312 32.640625 34.703125 Z M 32.640625 34.703125 "/>
-<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 115.68375 70.95375 C 115.68375 95.6025 95.70375 115.5825 71.055 115.5825 C 46.40625 115.5825 26.415 95.6025 26.415 70.95375 C 26.415 46.305 46.40625 26.325 71.055 26.325 C 95.70375 26.325 115.68375 46.305 115.68375 70.95375 Z M 114.84 66.645 L 121.80375 70.95375 L 114.84 75.2625 L 120.825 80.85375 L 113.16375 83.7225 L 117.945 90.37125 L 109.845 91.6875 L 113.25375 99.14625 L 105.06375 98.865 L 106.9425 106.84125 L 98.955 104.9625 L 99.2475 113.1525 L 91.78875 109.755 L 90.4725 117.84375 L 83.82375 113.0625 L 80.955 120.72375 L 75.36375 114.73875 L 71.055 121.7025 L 66.735 114.73875 L 61.155 120.72375 L 58.275 113.0625 L 51.62625 117.84375 L 50.31 109.755 L 42.85125 113.1525 L 43.14375 104.9625 L 35.15625 106.84125 L 37.035 98.865 L 28.845 99.14625 L 32.25375 91.6875 L 24.165 90.37125 L 28.935 83.7225 L 21.285 80.85375 L 27.25875 75.2625 L 20.295 70.95375 L 27.25875 66.645 L 21.285 61.05375 L 28.935 58.185 L 24.165 51.525 L 32.25375 50.20875 L 28.845 42.75 L 37.035 43.0425 L 35.15625 35.055 L 43.14375 36.945 L 42.85125 28.755 L 50.31 32.1525 L 51.62625 24.06375 L 58.275 28.845 L 61.155 21.18375 L 66.735 27.1575 L 71.055 20.205 L 75.36375 27.1575 L 80.955 21.18375 L 83.82375 28.845 L 90.4725 24.06375 L 91.78875 32.1525 L 99.2475 28.755 L 98.955 36.945 L 106.9425 35.055 L 105.06375 43.0425 L 113.25375 42.75 L 109.845 50.20875 L 117.945 51.525 L 113.16375 58.185 L 120.825 61.05375 Z M 114.84 66.645 " transform="matrix(0.347222,0,0,0.347222,0,0)"/>
-</g>
-</svg>
diff --git a/backend/dist/data/icons/scss.svg b/backend/dist/data/icons/scss.svg
deleted file mode 100644
index e68fea23..00000000
--- a/backend/dist/data/icons/scss.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="scss-logo-title scss-logo-description">
-<title id="scss-logo-title">Sass or SCSS Logo</title>
-<desc id="scss-logo-description">The word Sass in pink cursive font</desc>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M0.476196 21.9359C0.476196 22.2105 0.557056 22.3918 0.602368 22.568C0.897681 23.7137 1.53245 24.6969 2.28557 25.5937C3.35823 26.8719 4.6719 27.9008 6.0176 28.8684C7.18479 29.7074 8.37581 30.5277 9.54768 31.3605C9.74885 31.5035 9.93909 31.668 10.1574 31.8434C9.96956 31.9449 9.81331 32.0344 9.65081 32.1168C8.10432 32.9012 6.61643 33.7805 5.24495 34.8457C4.41838 35.4879 3.61917 36.1703 3.05471 37.0621C2.14651 38.4965 1.82502 40.0246 2.50198 41.6562C2.69963 42.1328 3.0012 42.5445 3.42659 42.8488C3.56448 42.9473 3.71917 43.0449 3.88049 43.0832C4.29377 43.1805 4.71487 43.2441 5.13323 43.3211L6.31799 43.3203C7.62815 43.2035 8.82073 42.7547 9.89846 42.0109C11.5828 40.8484 12.7176 39.2898 13.2055 37.2895C13.5602 35.8355 13.5746 34.3801 13.1567 32.9328C13.1165 32.7988 13.0704 32.6666 13.0184 32.5367C12.9676 32.4066 12.9078 32.2801 12.8375 32.118L15.5235 30.5734L15.5637 30.6078C15.5149 30.7676 15.4629 30.927 15.4188 31.0883C15.0996 32.2539 14.8875 33.4398 14.9637 34.6496C15.0449 35.9387 15.4047 37.1453 16.1594 38.2223C16.7696 39.0934 18.2235 39.1258 18.8719 38.2516C19.102 37.941 19.325 37.6164 19.4926 37.2699C19.9305 36.3656 20.336 35.4453 20.7543 34.5313L20.8274 34.3641C20.7973 34.7969 20.7621 35.177 20.7461 35.5574C20.7211 36.1516 20.7559 36.7422 20.959 37.3074C21.1328 37.791 21.4285 38.1523 21.9824 38.216C22.3614 38.2594 22.6633 38.0859 22.9418 37.866C23.3732 37.5249 23.7308 37.0998 23.993 36.6164C24.7356 35.2527 25.4981 33.8973 26.1711 32.4992C26.8992 30.9871 27.536 29.4309 28.2121 27.893L28.3239 27.6203C28.4836 28.248 28.5949 28.8629 28.8 29.4449C29.0383 30.1203 29.3332 30.7797 29.6543 31.4207C29.8063 31.7234 29.7887 31.9199 29.5781 32.1738C28.6969 33.2363 27.8309 34.3117 26.9641 35.3859C26.7723 35.623 26.5813 35.8645 26.4215 36.1234C26.3246 36.287 26.2609 36.468 26.234 36.6562C26.2071 36.8295 26.2484 37.0065 26.3491 37.15C26.4498 37.2935 26.6022 37.3925 26.7742 37.4262C27.1216 37.5008 27.4777 37.5261 27.8321 37.5016C29.0418 37.4125 30.1403 36.9879 31.1114 36.2684C32.3696 35.3363 32.7735 34.0645 32.4688 32.557C32.3864 32.148 32.2406 31.7504 32.0989 31.3563C32.0352 31.1785 32.0309 31.0539 32.1469 30.8883C33.1528 29.452 34.0121 27.9281 34.8114 26.3691C34.843 26.3078 34.8754 26.2465 34.9309 26.1809C35.1899 27.5285 35.5797 28.8273 36.2781 30.0059C35.9219 30.3492 35.5692 30.6605 35.25 31.0035C34.5473 31.759 33.9379 32.5793 33.6199 33.5797C33.4832 34.0109 33.3781 34.4492 33.4391 34.9098C33.5336 35.625 34.1196 36.0898 34.8231 35.927C36.3285 35.5785 37.6281 34.8691 38.5778 33.6125C39.2168 32.7664 39.275 31.8227 39.0074 30.834C38.934 30.5652 38.8469 30.3008 38.7531 29.9926C39.1246 29.8773 39.4867 29.7391 39.8614 29.6535C41.8063 29.2098 43.7301 29.2871 45.6043 29.9895C46.6985 30.3996 47.5824 31.0859 48.1067 32.1656C48.7469 33.4855 48.393 34.7379 47.1489 35.5723C47.0328 35.65 46.9 35.7113 46.8039 35.8086C46.7732 35.8443 46.7502 35.886 46.7364 35.931C46.7226 35.9761 46.7183 36.0235 46.7239 36.0703C46.7321 36.1184 46.859 36.1785 46.9321 36.1777C47.341 36.1746 47.6727 35.9602 47.991 35.7398C48.7887 35.1879 49.3707 34.4453 49.4961 33.4676L49.5207 33.3941L49.4906 32.7574C49.4785 32.7207 49.4996 32.6844 49.4969 32.6566C49.3274 31.2328 48.5668 30.1285 47.4606 29.2629C46.1793 28.2609 44.6664 27.8484 43.0664 27.7832C41.7688 27.7273 40.4728 27.9268 39.252 28.3703C38.9016 28.4973 38.5543 28.6477 38.202 28.7895C38.1547 28.7039 38.1039 28.6219 38.0621 28.5371C37.7004 27.7965 37.2621 27.0887 37.1653 26.2395C37.0965 25.6363 37.0121 25.034 37.1555 24.4375C37.2934 23.8637 37.4731 23.2996 37.6422 22.7336C37.7293 22.4422 37.668 22.2789 37.3899 22.1477C37.2927 22.1 37.1893 22.0661 37.0828 22.0469C36.3992 21.9477 35.725 22.0043 35.0629 22.1969C34.8285 22.2652 34.6582 22.3965 34.6063 22.6559C34.5766 22.8047 34.516 22.9473 34.4739 23.0941C34.3008 23.7047 34.1781 24.327 33.8985 24.9086C33.1977 26.3676 32.3977 27.7715 31.5789 29.1652C31.4903 29.3156 31.3969 29.4633 31.2852 29.6457C30.9977 29.0441 30.691 28.5043 30.5981 27.8715C30.493 27.1559 30.4102 26.4414 30.5883 25.7313C30.7207 25.2016 30.8938 24.6816 31.0531 24.159C31.1285 23.9105 31.0938 23.7801 30.8688 23.6492C30.7551 23.5832 30.6266 23.5246 30.4985 23.5055C29.7975 23.3987 29.0813 23.4572 28.4071 23.6766C28.1949 23.7453 28.0836 23.8824 28.0188 24.1012C27.8281 24.7465 27.6656 25.4074 27.3981 26.0211C26.3145 28.5055 25.1996 30.977 24.086 33.448C23.8535 33.9641 23.5813 34.4621 23.3192 34.9645C23.2528 35.0918 23.1559 35.2039 23.0731 35.3234C23.0067 35.2449 22.9809 35.191 22.9813 35.1371C22.9832 34.8195 22.9453 34.4926 23.0059 34.1855C23.1918 33.257 23.3973 32.3324 23.6223 31.4125C23.8059 30.6523 24.0196 29.8992 24.2231 29.1441C24.2914 28.8914 24.2926 28.6551 24.111 28.4426C23.8059 28.0867 23.1684 28.0086 22.7903 28.2828L22.6231 28.3773L22.6555 28.1078C22.7352 27.5301 22.7512 26.9543 22.5926 26.3852C22.3949 25.6758 21.8887 25.2676 21.1528 25.2902C20.8098 25.3008 20.4496 25.3594 20.1321 25.4844C18.7965 26.0078 17.7696 26.9348 16.8953 28.05C16.8142 28.1535 16.7138 28.2403 16.5996 28.3055C15.4696 28.932 14.336 29.5508 13.2028 30.1719L11.9414 30.8629C11.6031 30.5402 11.2957 30.2055 10.9469 29.9215C9.88167 29.0527 8.79924 28.2055 7.72659 27.3465C6.77581 26.5852 5.85471 25.7922 5.15002 24.784C4.62581 24.034 4.28792 23.2133 4.25549 22.2859C4.21448 21.1043 4.54963 20.0246 5.1512 19.0195C5.92073 17.7336 6.97034 16.7016 8.12424 15.7668C9.34495 14.7785 10.6653 13.9395 12.0336 13.1734C13.9481 12.102 15.9172 11.1535 18.0285 10.5273C20.1934 9.88516 22.3899 9.51758 24.6555 9.77383C25.5461 9.87461 26.411 10.0785 27.2051 10.5141C27.8133 10.8473 28.3121 11.2836 28.5442 11.9656C28.7731 12.6367 28.766 13.3168 28.6074 13.9984C28.2852 15.3789 27.5293 16.5168 26.5781 17.5336C25.018 19.2004 23.1149 20.3352 20.9723 21.0848C19.7403 21.5162 18.4586 21.7897 17.1578 21.8984C16.0918 21.9879 15.0481 21.8934 14.0387 21.5227C13.3703 21.277 12.7883 20.9012 12.3203 20.3559C12.2367 20.2582 12.1297 20.1523 11.9739 20.2438C11.8211 20.3336 11.7942 20.4789 11.8453 20.6262C11.9309 20.8707 12.0098 21.1254 12.143 21.3441C12.4778 21.893 12.966 22.291 13.5035 22.6324C14.536 23.2891 15.6899 23.5098 16.8864 23.5609C18.702 23.6395 20.4735 23.3684 22.2199 22.8813C24.7133 22.1859 26.8813 20.9578 28.6199 19.0203C30.0676 17.407 31.1016 15.5863 31.3231 13.3879C31.4313 12.3148 31.316 11.2637 30.8137 10.2848C30.2688 9.22422 29.4024 8.43555 28.3664 7.89219C26.8578 7.10117 25.2297 6.64062 23.5492 6.64062H21.8656C19.8305 6.64062 17.8629 7.22383 15.9504 7.91953C14.5028 8.44648 13.0832 9.06836 11.7051 9.75664C8.70393 11.2562 5.90901 13.0645 3.61331 15.5508C2.46956 16.7895 1.5012 18.1562 0.944165 19.7656C0.776331 20.2462 0.631505 20.7345 0.510181 21.2289M11.3848 35.2965C11.2547 37.0383 10.4653 38.4504 9.17502 39.5941C8.44924 40.2371 7.61682 40.6949 6.64729 40.8559C6.29573 40.9141 5.93596 40.9281 5.59495 40.7824C5.10862 40.5746 4.99963 40.143 4.99026 39.6832C4.97581 38.9504 5.23245 38.2879 5.5844 37.6574C6.04377 36.8355 6.71721 36.209 7.43635 35.6238C8.56917 34.7016 9.79807 33.9211 11.0567 33.1844L11.1516 33.1453C11.3461 33.8641 11.4387 34.5738 11.3848 35.2965ZM21.2121 27.7266C21.1203 28.2828 21.0055 28.8395 20.843 29.3785C20.2813 31.2445 19.5598 33.0527 18.7797 34.8367C18.6356 35.1668 18.4258 35.468 18.2434 35.7809C18.2123 35.8289 18.1752 35.8728 18.1328 35.9113C17.9071 36.1344 17.693 36.1227 17.5789 35.8309C17.4461 35.4918 17.3645 35.1289 17.2942 34.7699C17.2469 34.5289 17.2582 34.2758 17.2434 34.0289C17.2586 32.2734 17.7942 30.6781 18.7028 29.193C19.0774 28.5805 19.4852 27.9969 20.1082 27.6094C20.3021 27.489 20.5118 27.3962 20.7313 27.3336C21.0633 27.2402 21.2672 27.3938 21.2121 27.7266ZM27.9168 36.2687L30.3266 33.4551C30.427 34.5 28.6508 36.5859 27.9168 36.2687ZM35.6133 34.3754C35.443 34.473 35.2574 34.5434 35.0828 34.6336C34.9231 34.7164 34.8703 34.6328 34.8656 34.4953C34.8634 34.4001 34.8756 34.3052 34.902 34.2137C35.2274 33.066 35.8262 32.0863 36.7172 31.2895L36.7797 31.2574C37.2035 32.443 36.7137 33.7449 35.6133 34.3754Z" fill="#CB6699"/>
-</svg>
diff --git a/backend/dist/data/icons/typescript.svg b/backend/dist/data/icons/typescript.svg
deleted file mode 100644
index c1d6592b..00000000
--- a/backend/dist/data/icons/typescript.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="50px" height="50px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill="#000000">
-  <g id="SVGRepo_bgCarrier" stroke-width="0"/>
-  <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
-  <g id="SVGRepo_iconCarrier">
-    <rect x="2" y="2" width="28" height="28" rx="1.312" style="fill:#3178c6"/>
-    <path d="M18.245,23.759v3.068a6.492,6.492,0,0,0,1.764.575,11.56,11.56,0,0,0,2.146.192,9.968,9.968,0,0,0,2.088-.211,5.11,5.11,0,0,0,1.735-.7,3.542,3.542,0,0,0,1.181-1.266,4.469,4.469,0,0,0,.186-3.394,3.409,3.409,0,0,0-.717-1.117,5.236,5.236,0,0,0-1.123-.877,12.027,12.027,0,0,0-1.477-.734q-.6-.249-1.08-.484a5.5,5.5,0,0,1-.813-.479,2.089,2.089,0,0,1-.516-.518,1.091,1.091,0,0,1-.181-.618,1.039,1.039,0,0,1,.162-.571,1.4,1.4,0,0,1,.459-.436,2.439,2.439,0,0,1,.726-.283,4.211,4.211,0,0,1,.956-.1,5.942,5.942,0,0,1,.808.058,6.292,6.292,0,0,1,.856.177,5.994,5.994,0,0,1,.836.3,4.657,4.657,0,0,1,.751.422V13.9a7.509,7.509,0,0,0-1.525-.4,12.426,12.426,0,0,0-1.9-.129,8.767,8.767,0,0,0-2.064.235,5.239,5.239,0,0,0-1.716.733,3.655,3.655,0,0,0-1.171,1.271,3.731,3.731,0,0,0-.431,1.845,3.588,3.588,0,0,0,.789,2.34,6,6,0,0,0,2.395,1.639q.63.26,1.175.509a6.458,6.458,0,0,1,.942.517,2.463,2.463,0,0,1,.626.585,1.2,1.2,0,0,1,.23.719,1.1,1.1,0,0,1-.144.552,1.269,1.269,0,0,1-.435.441,2.381,2.381,0,0,1-.726.292,4.377,4.377,0,0,1-1.018.105,5.773,5.773,0,0,1-1.969-.35A5.874,5.874,0,0,1,18.245,23.759Zm-5.154-7.638h4V13.594H5.938v2.527H9.92V27.375h3.171Z" style="fill:#ffffff;fill-rule:evenodd"/>
-  </g>
-</svg>
diff --git a/backend/dist/index.js b/backend/dist/index.js
deleted file mode 100644
index 52c2781d..00000000
--- a/backend/dist/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-// index.ts
-import fs from "fs";
-import path from "path";
-import { fileURLToPath } from "url";
-import cors from "cors";
-import dotenv from "dotenv";
-import express from "express";
-
-// utils/slugify.ts
-function slugify(string, separator = "-") {
-  return string.toString().toLowerCase().trim().replace(/\s+/g, separator).replace(/[^\w-]+/g, "").replace(/_/g, separator).replace(/--+/g, separator).replace(/-$/g, "");
-}
-
-// index.ts
-var env = process.env.NODE_ENV || "local";
-dotenv.config({ path: `.env.${env}` });
-var API_BASE = process.env.API_BASE;
-var __filename = fileURLToPath(import.meta.url);
-var __dirname = path.dirname(__filename);
-var app = express();
-var PORT = process.env.PORT || 5e3;
-app.use(cors());
-var dataDir = path.join(__dirname, "data");
-var readJSON = (filePath) => {
-  try {
-    const data = fs.readFileSync(filePath, "utf-8");
-    return JSON.parse(data);
-  } catch (err) {
-    console.error("Failed to read", filePath, err);
-    return null;
-  }
-};
-app.get("/languages", (_req, res) => {
-  const file = path.join(dataDir, "consolidated/_index.json");
-  const json = readJSON(file);
-  if (!json) {
-    res.status(500).json({ error: "Languages not found" });
-    return;
-  }
-  res.json(json);
-  return;
-});
-app.get("/categories/:language", (req, res) => {
-  const { language } = req.params;
-  const file = path.join(dataDir, `consolidated/${language}.json`);
-  const json = readJSON(file);
-  if (!json) {
-    res.status(404).json({ error: "Language file not found" });
-    return;
-  }
-  const categoryNames = json.map((category) => category.name);
-  res.json(categoryNames);
-  return;
-});
-app.get("/snippets/:language/:category", (req, res) => {
-  const { language, category } = req.params;
-  const file = path.join(dataDir, `consolidated/${language}.json`);
-  const json = readJSON(file);
-  if (!json) {
-    res.status(404).json({ error: "Language file not found" });
-    return;
-  }
-  if (category === "all") {
-    const allSnippets = json.flatMap((c) => c.snippets);
-    res.json(allSnippets);
-    return;
-  }
-  const categoryData = json.find(
-    (c) => slugify(c.name) === slugify(category)
-  );
-  if (!categoryData) {
-    res.status(404).json({ error: "Category not found" });
-    return;
-  }
-  res.json(categoryData.snippets);
-  return;
-});
-app.use("/icons", express.static(path.join(dataDir, "/icons")));
-app.listen(PORT, () => {
-  console.log(`\u2705 API running on http://localhost:${PORT}`);
-});
-export {
-  API_BASE
-};
diff --git a/backend/eslint.config.js b/backend/eslint.config.js
deleted file mode 100644
index 71628579..00000000
--- a/backend/eslint.config.js
+++ /dev/null
@@ -1,91 +0,0 @@
-import { fixupPluginRules } from "@eslint/compat";
-import { FlatCompat } from "@eslint/eslintrc";
-import js from "@eslint/js";
-import prettier from "eslint-plugin-prettier/recommended";
-import globals from "globals";
-import tseslint from "typescript-eslint";
-
-const project = "./tsconfig.json";
-// eslint flat structure backwards compatibility
-const compat = new FlatCompat({
-  recommendedConfig: js.configs.recommended,
-});
-
-function legacyPlugin(name, alias = name) {
-  const plugin = compat.plugins(name)[0]?.plugins?.[alias];
-  if (!plugin) {
-    throw new Error(`Unable to resolve plugin ${name} and/or alias ${alias}`);
-  }
-  return fixupPluginRules(plugin);
-}
-
-export default tseslint.config(
-  { ignores: ["node_modules", "dist", "coverage"] },
-  {
-    extends: [
-      js.configs.recommended,
-      ...tseslint.configs.recommended,
-      prettier,
-      ...compat.extends("plugin:import/typescript"),
-    ],
-    files: ["**/*.{js,ts}"],
-    languageOptions: {
-      ecmaVersion: 2020,
-      globals: globals.browser,
-    },
-    plugins: {
-      import: legacyPlugin("eslint-plugin-import", "import"),
-    },
-    settings: {
-      "import/resolver": {
-        typescript: {
-          project,
-          alwaysTryTypes: true,
-        },
-      },
-      react: {
-        version: "detect",
-      },
-    },
-    rules: {
-      "@typescript-eslint/no-empty-object-type": "off",
-      "@typescript-eslint/no-unused-vars": [
-        "error",
-        {
-          argsIgnorePattern: "^_",
-          varsIgnorePattern: "^_",
-          caughtErrorsIgnorePattern: "^_",
-        },
-      ],
-      "import/order": [
-        "error",
-        {
-          groups: [
-            "builtin",
-            "external",
-            "internal",
-            ["parent", "sibling"],
-            "index",
-            "object",
-            "type",
-            "unknown",
-          ],
-          pathGroups: [
-            {
-              pattern: "@*",
-              group: "internal",
-              position: "after",
-            },
-          ],
-          pathGroupsExcludedImportTypes: ["builtin", "internal"],
-          "newlines-between": "always",
-          alphabetize: {
-            order: "asc",
-            caseInsensitive: true,
-          },
-        },
-      ],
-      semi: ["error", "always"],
-    },
-  }
-);
diff --git a/backend/index.ts b/backend/index.ts
deleted file mode 100644
index 40076489..00000000
--- a/backend/index.ts
+++ /dev/null
@@ -1,101 +0,0 @@
-import fs from "fs";
-import path from "path";
-import { fileURLToPath } from "url";
-
-import cors from "cors";
-import dotenv from "dotenv";
-import express from "express";
-
-import { FileType } from "@types";
-import { slugify } from "@utils/slugify";
-
-const env = process.env.NODE_ENV || "local"; // "production" or "local"
-dotenv.config({ path: `.env.${env}` });
-
-export const API_BASE = process.env.API_BASE;
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-
-const app = express();
-const PORT = process.env.PORT || 5000;
-
-app.use(cors());
-
-const dataDir = path.join(__dirname, "data");
-
-// Helper to load JSON from file
-const readJSON = (filePath: string) => {
-  try {
-    const data = fs.readFileSync(filePath, "utf-8");
-    return JSON.parse(data);
-  } catch (err) {
-    console.error("Failed to read", filePath, err);
-    return null;
-  }
-};
-
-// Get all languages
-app.get("/languages", (_req, res) => {
-  const file = path.join(dataDir, "consolidated/_index.json");
-  const json = readJSON(file);
-
-  if (!json) {
-    res.status(500).json({ error: "Languages not found" });
-    return;
-  }
-  res.json(json);
-  return;
-});
-
-// Get all categories for a given language
-app.get("/categories/:language", (req, res) => {
-  const { language } = req.params;
-  const file = path.join(dataDir, `consolidated/${language}.json`);
-  const json = readJSON(file);
-
-  if (!json) {
-    res.status(404).json({ error: "Language file not found" });
-    return;
-  }
-
-  const categoryNames = json.map((category: { name: string }) => category.name);
-  res.json(categoryNames);
-  return;
-});
-
-// Get snippets for a language (and optional category)
-app.get("/snippets/:language/:category", (req, res) => {
-  const { language, category } = req.params;
-
-  const file = path.join(dataDir, `consolidated/${language}.json`);
-  const json = readJSON(file);
-  if (!json) {
-    res.status(404).json({ error: "Language file not found" });
-    return;
-  }
-
-  if (category === "all") {
-    const allSnippets = json.flatMap((c: FileType) => c.snippets);
-    res.json(allSnippets);
-    return;
-  }
-
-  const categoryData = json.find(
-    (c: FileType) => slugify(c.name) === slugify(category)
-  );
-  if (!categoryData) {
-    res.status(404).json({ error: "Category not found" });
-    return;
-  }
-
-  res.json(categoryData.snippets);
-  return;
-});
-
-// Get icons from backend
-app.use("/icons", express.static(path.join(dataDir, "/icons")));
-
-app.listen(PORT, () => {
-  console.log(`✅ API running on http://localhost:${PORT}`);
-});
diff --git a/backend/package-lock.json b/backend/package-lock.json
deleted file mode 100644
index 255ad302..00000000
--- a/backend/package-lock.json
+++ /dev/null
@@ -1,7200 +0,0 @@
-{
-  "name": "backend",
-  "version": "1.0.0",
-  "lockfileVersion": 3,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "backend",
-      "version": "1.0.0",
-      "license": "ISC",
-      "dependencies": {
-        "cors": "^2.8.5",
-        "dotenv": "^16.5.0",
-        "express": "^5.1.0",
-        "fs": "^0.0.1-security",
-        "path": "^0.12.7",
-        "process": "^0.11.10",
-        "tsconfig-paths": "^4.2.0"
-      },
-      "devDependencies": {
-        "@eslint/compat": "^1.2.4",
-        "@eslint/eslintrc": "^3.2.0",
-        "@eslint/js": "^9.11.1",
-        "@types/cors": "^2.8.18",
-        "@types/express": "^5.0.2",
-        "@types/node": "^22.15.19",
-        "eslint": "^9.27.0",
-        "eslint-config-prettier": "^10.1.5",
-        "eslint-import-resolver-typescript": "^3.7.0",
-        "eslint-plugin-import": "^2.31.0",
-        "eslint-plugin-prettier": "^5.4.0",
-        "npm-run-all": "^4.1.5",
-        "prettier": "^3.5.3",
-        "ts-node": "^10.9.2",
-        "tsup": "^8.5.0",
-        "tsx": "^4.19.4",
-        "typescript": "^5.8.3",
-        "typescript-eslint": "^8.7.0"
-      }
-    },
-    "node_modules/@cspotcode/source-map-support": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
-      "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/trace-mapping": "0.3.9"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@emnapi/core": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
-      "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@emnapi/wasi-threads": "1.0.2",
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@emnapi/runtime": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
-      "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@emnapi/wasi-threads": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
-      "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
-      "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
-      "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
-      "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
-      "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
-      "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
-      "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
-      "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
-      "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
-      "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
-      "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
-      "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
-      "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
-      "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
-      "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
-      "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
-      "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
-      "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
-      "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
-      "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
-      "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
-      "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
-      "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
-      "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
-      }
-    },
-    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint-community/regexpp": {
-      "version": "4.12.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
-      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@eslint/compat": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.9.tgz",
-      "integrity": "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "peerDependencies": {
-        "eslint": "^9.10.0"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@eslint/config-array": {
-      "version": "0.20.0",
-      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
-      "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@eslint/object-schema": "^2.1.6",
-        "debug": "^4.3.1",
-        "minimatch": "^3.1.2"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/config-helpers": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
-      "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/core": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
-      "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@types/json-schema": "^7.0.15"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/eslintrc": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
-      "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^10.0.1",
-        "globals": "^14.0.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/js": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
-      "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://eslint.org/donate"
-      }
-    },
-    "node_modules/@eslint/object-schema": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
-      "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/plugin-kit": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
-      "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@eslint/core": "^0.14.0",
-        "levn": "^0.4.1"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@humanfs/core": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
-      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18.0"
-      }
-    },
-    "node_modules/@humanfs/node": {
-      "version": "0.16.6",
-      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
-      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@humanfs/core": "^0.19.1",
-        "@humanwhocodes/retry": "^0.3.0"
-      },
-      "engines": {
-        "node": ">=18.18.0"
-      }
-    },
-    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
-      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=12.22"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@humanwhocodes/retry": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
-      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@isaacs/cliui": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "string-width": "^5.1.2",
-        "string-width-cjs": "npm:string-width@^4.2.0",
-        "strip-ansi": "^7.0.1",
-        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
-        "wrap-ansi": "^8.1.0",
-        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
-      "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      }
-    },
-    "node_modules/@napi-rs/wasm-runtime": {
-      "version": "0.2.10",
-      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz",
-      "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@emnapi/core": "^1.4.3",
-        "@emnapi/runtime": "^1.4.3",
-        "@tybys/wasm-util": "^0.9.0"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nolyfill/is-core-module": {
-      "version": "1.0.39",
-      "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
-      "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.4.0"
-      }
-    },
-    "node_modules/@pkgjs/parseargs": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@pkgr/core": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz",
-      "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/pkgr"
-      }
-    },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
-      "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
-      "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
-      "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
-      "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
-      "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
-      "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
-      "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
-      "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
-      "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
-      "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
-      "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
-      "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
-      "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
-      "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
-      "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
-      "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
-      "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
-      "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
-      "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
-      "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rtsao/scc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
-      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@tsconfig/node10": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
-      "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@tsconfig/node12": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
-      "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@tsconfig/node14": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
-      "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@tsconfig/node16": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
-      "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@tybys/wasm-util": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
-      "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@types/body-parser": {
-      "version": "1.19.5",
-      "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
-      "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/connect": "*",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/connect": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
-      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/cors": {
-      "version": "2.8.18",
-      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.18.tgz",
-      "integrity": "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/estree": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
-      "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/express": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.2.tgz",
-      "integrity": "sha512-BtjL3ZwbCQriyb0DGw+Rt12qAXPiBTPs815lsUvtt1Grk0vLRMZNMUZ741d5rjk+UQOxfDiBZ3dxpX00vSkK3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/body-parser": "*",
-        "@types/express-serve-static-core": "^5.0.0",
-        "@types/serve-static": "*"
-      }
-    },
-    "node_modules/@types/express-serve-static-core": {
-      "version": "5.0.6",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
-      "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/node": "*",
-        "@types/qs": "*",
-        "@types/range-parser": "*",
-        "@types/send": "*"
-      }
-    },
-    "node_modules/@types/http-errors": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
-      "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/json-schema": {
-      "version": "7.0.15",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/mime": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
-      "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/node": {
-      "version": "22.15.24",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz",
-      "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "undici-types": "~6.21.0"
-      }
-    },
-    "node_modules/@types/qs": {
-      "version": "6.14.0",
-      "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
-      "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/range-parser": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
-      "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/send": {
-      "version": "0.17.4",
-      "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
-      "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/mime": "^1",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/serve-static": {
-      "version": "1.15.7",
-      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
-      "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/http-errors": "*",
-        "@types/node": "*",
-        "@types/send": "*"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz",
-      "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.33.0",
-        "@typescript-eslint/type-utils": "8.33.0",
-        "@typescript-eslint/utils": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^7.0.0",
-        "natural-compare": "^1.4.0",
-        "ts-api-utils": "^2.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^8.33.0",
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
-      "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz",
-      "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "8.33.0",
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/typescript-estree": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/project-service": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz",
-      "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/tsconfig-utils": "^8.33.0",
-        "@typescript-eslint/types": "^8.33.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz",
-      "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/tsconfig-utils": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz",
-      "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz",
-      "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.33.0",
-        "@typescript-eslint/utils": "8.33.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^2.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz",
-      "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz",
-      "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/project-service": "8.33.0",
-        "@typescript-eslint/tsconfig-utils": "8.33.0",
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^2.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@typescript-eslint/utils": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz",
-      "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.7.0",
-        "@typescript-eslint/scope-manager": "8.33.0",
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/typescript-estree": "8.33.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz",
-      "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.33.0",
-        "eslint-visitor-keys": "^4.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@unrs/resolver-binding-darwin-arm64": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.8.tgz",
-      "integrity": "sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-darwin-x64": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.8.tgz",
-      "integrity": "sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-freebsd-x64": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.8.tgz",
-      "integrity": "sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.8.tgz",
-      "integrity": "sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.8.tgz",
-      "integrity": "sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.8.tgz",
-      "integrity": "sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.8.tgz",
-      "integrity": "sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.8.tgz",
-      "integrity": "sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.8.tgz",
-      "integrity": "sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.8.tgz",
-      "integrity": "sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.8.tgz",
-      "integrity": "sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.8.tgz",
-      "integrity": "sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-x64-musl": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.8.tgz",
-      "integrity": "sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-wasm32-wasi": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.8.tgz",
-      "integrity": "sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==",
-      "cpu": [
-        "wasm32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@napi-rs/wasm-runtime": "^0.2.10"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.8.tgz",
-      "integrity": "sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.8.tgz",
-      "integrity": "sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.8.tgz",
-      "integrity": "sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/accepts": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
-      "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
-      "license": "MIT",
-      "dependencies": {
-        "mime-types": "^3.0.0",
-        "negotiator": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.14.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
-      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/acorn-walk": {
-      "version": "8.3.4",
-      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
-      "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "acorn": "^8.11.0"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/any-promise": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/arg": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
-      "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true,
-      "license": "Python-2.0"
-    },
-    "node_modules/array-buffer-byte-length": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
-      "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "is-array-buffer": "^3.0.5"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
-      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.9",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "es-shim-unscopables": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
-      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
-      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
-      "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "is-array-buffer": "^3.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/async-function": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
-      "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/available-typed-arrays": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
-      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "possible-typed-array-names": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/body-parser": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
-      "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
-      "license": "MIT",
-      "dependencies": {
-        "bytes": "^3.1.2",
-        "content-type": "^1.0.5",
-        "debug": "^4.4.0",
-        "http-errors": "^2.0.0",
-        "iconv-lite": "^0.6.3",
-        "on-finished": "^2.4.1",
-        "qs": "^6.14.0",
-        "raw-body": "^3.0.0",
-        "type-is": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fill-range": "^7.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/bundle-require": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz",
-      "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "load-tsconfig": "^0.2.3"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "esbuild": ">=0.18"
-      }
-    },
-    "node_modules/bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/cac": {
-      "version": "6.7.14",
-      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
-      "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
-      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/call-bound": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
-      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "get-intrinsic": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/chokidar": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
-      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "readdirp": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/commander": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/confbox": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
-      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/consola": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
-      "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^14.18.0 || >=16.10.0"
-      }
-    },
-    "node_modules/content-disposition": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
-      "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==",
-      "license": "MIT",
-      "dependencies": {
-        "safe-buffer": "5.2.1"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/content-type": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
-      "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/cookie": {
-      "version": "0.7.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
-      "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/cookie-signature": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
-      "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.6.0"
-      }
-    },
-    "node_modules/cors": {
-      "version": "2.8.5",
-      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-      "license": "MIT",
-      "dependencies": {
-        "object-assign": "^4",
-        "vary": "^1"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/create-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
-      "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/data-view-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
-      "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/data-view-byte-length": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
-      "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/inspect-js"
-      }
-    },
-    "node_modules/data-view-byte-offset": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
-      "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/debug": {
-      "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"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/define-data-property": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
-      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
-      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/depd": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
-      "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/diff": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-      "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.3.1"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/dotenv": {
-      "version": "16.5.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
-      "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://dotenvx.com"
-      }
-    },
-    "node_modules/dunder-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
-      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/eastasianwidth": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
-      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
-      "license": "MIT"
-    },
-    "node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/encodeurl": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
-      "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-arrayish": "^0.2.1"
-      }
-    },
-    "node_modules/es-abstract": {
-      "version": "1.24.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
-      "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.2",
-        "arraybuffer.prototype.slice": "^1.0.4",
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "data-view-buffer": "^1.0.2",
-        "data-view-byte-length": "^1.0.2",
-        "data-view-byte-offset": "^1.0.1",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "es-set-tostringtag": "^2.1.0",
-        "es-to-primitive": "^1.3.0",
-        "function.prototype.name": "^1.1.8",
-        "get-intrinsic": "^1.3.0",
-        "get-proto": "^1.0.1",
-        "get-symbol-description": "^1.1.0",
-        "globalthis": "^1.0.4",
-        "gopd": "^1.2.0",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "internal-slot": "^1.1.0",
-        "is-array-buffer": "^3.0.5",
-        "is-callable": "^1.2.7",
-        "is-data-view": "^1.0.2",
-        "is-negative-zero": "^2.0.3",
-        "is-regex": "^1.2.1",
-        "is-set": "^2.0.3",
-        "is-shared-array-buffer": "^1.0.4",
-        "is-string": "^1.1.1",
-        "is-typed-array": "^1.1.15",
-        "is-weakref": "^1.1.1",
-        "math-intrinsics": "^1.1.0",
-        "object-inspect": "^1.13.4",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.7",
-        "own-keys": "^1.0.1",
-        "regexp.prototype.flags": "^1.5.4",
-        "safe-array-concat": "^1.1.3",
-        "safe-push-apply": "^1.0.0",
-        "safe-regex-test": "^1.1.0",
-        "set-proto": "^1.0.0",
-        "stop-iteration-iterator": "^1.1.0",
-        "string.prototype.trim": "^1.2.10",
-        "string.prototype.trimend": "^1.0.9",
-        "string.prototype.trimstart": "^1.0.8",
-        "typed-array-buffer": "^1.0.3",
-        "typed-array-byte-length": "^1.0.3",
-        "typed-array-byte-offset": "^1.0.4",
-        "typed-array-length": "^1.0.7",
-        "unbox-primitive": "^1.1.0",
-        "which-typed-array": "^1.1.19"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/es-define-property": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-errors": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-object-atoms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
-      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
-      "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
-      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7",
-        "is-date-object": "^1.0.5",
-        "is-symbol": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/esbuild": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
-      "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.5",
-        "@esbuild/android-arm": "0.25.5",
-        "@esbuild/android-arm64": "0.25.5",
-        "@esbuild/android-x64": "0.25.5",
-        "@esbuild/darwin-arm64": "0.25.5",
-        "@esbuild/darwin-x64": "0.25.5",
-        "@esbuild/freebsd-arm64": "0.25.5",
-        "@esbuild/freebsd-x64": "0.25.5",
-        "@esbuild/linux-arm": "0.25.5",
-        "@esbuild/linux-arm64": "0.25.5",
-        "@esbuild/linux-ia32": "0.25.5",
-        "@esbuild/linux-loong64": "0.25.5",
-        "@esbuild/linux-mips64el": "0.25.5",
-        "@esbuild/linux-ppc64": "0.25.5",
-        "@esbuild/linux-riscv64": "0.25.5",
-        "@esbuild/linux-s390x": "0.25.5",
-        "@esbuild/linux-x64": "0.25.5",
-        "@esbuild/netbsd-arm64": "0.25.5",
-        "@esbuild/netbsd-x64": "0.25.5",
-        "@esbuild/openbsd-arm64": "0.25.5",
-        "@esbuild/openbsd-x64": "0.25.5",
-        "@esbuild/sunos-x64": "0.25.5",
-        "@esbuild/win32-arm64": "0.25.5",
-        "@esbuild/win32-ia32": "0.25.5",
-        "@esbuild/win32-x64": "0.25.5"
-      }
-    },
-    "node_modules/escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
-      "license": "MIT"
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
-      "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.12.1",
-        "@eslint/config-array": "^0.20.0",
-        "@eslint/config-helpers": "^0.2.1",
-        "@eslint/core": "^0.14.0",
-        "@eslint/eslintrc": "^3.3.1",
-        "@eslint/js": "9.27.0",
-        "@eslint/plugin-kit": "^0.3.1",
-        "@humanfs/node": "^0.16.6",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@humanwhocodes/retry": "^0.4.2",
-        "@types/estree": "^1.0.6",
-        "@types/json-schema": "^7.0.15",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.6",
-        "debug": "^4.3.2",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^8.3.0",
-        "eslint-visitor-keys": "^4.2.0",
-        "espree": "^10.3.0",
-        "esquery": "^1.5.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^8.0.0",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://eslint.org/donate"
-      },
-      "peerDependencies": {
-        "jiti": "*"
-      },
-      "peerDependenciesMeta": {
-        "jiti": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-config-prettier": {
-      "version": "10.1.5",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz",
-      "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "eslint-config-prettier": "bin/cli.js"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-config-prettier"
-      },
-      "peerDependencies": {
-        "eslint": ">=7.0.0"
-      }
-    },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.13.0",
-        "resolve": "^1.22.4"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-typescript": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
-      "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "@nolyfill/is-core-module": "1.0.39",
-        "debug": "^4.4.0",
-        "get-tsconfig": "^4.10.0",
-        "is-bun-module": "^2.0.0",
-        "stable-hash": "^0.0.5",
-        "tinyglobby": "^0.2.13",
-        "unrs-resolver": "^1.6.2"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-import-resolver-typescript"
-      },
-      "peerDependencies": {
-        "eslint": "*",
-        "eslint-plugin-import": "*",
-        "eslint-plugin-import-x": "*"
-      },
-      "peerDependenciesMeta": {
-        "eslint-plugin-import": {
-          "optional": true
-        },
-        "eslint-plugin-import-x": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.12.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
-      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.31.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
-      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rtsao/scc": "^1.1.0",
-        "array-includes": "^3.1.8",
-        "array.prototype.findlastindex": "^1.2.5",
-        "array.prototype.flat": "^1.3.2",
-        "array.prototype.flatmap": "^1.3.2",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.12.0",
-        "hasown": "^2.0.2",
-        "is-core-module": "^2.15.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.8",
-        "object.groupby": "^1.0.3",
-        "object.values": "^1.2.0",
-        "semver": "^6.3.1",
-        "string.prototype.trimend": "^1.0.8",
-        "tsconfig-paths": "^3.15.0"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": {
-      "version": "3.15.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-prettier": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz",
-      "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prettier-linter-helpers": "^1.0.0",
-        "synckit": "^0.11.0"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-plugin-prettier"
-      },
-      "peerDependencies": {
-        "@types/eslint": ">=8.0.0",
-        "eslint": ">=8.0.0",
-        "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
-        "prettier": ">=3.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/eslint": {
-          "optional": true
-        },
-        "eslint-config-prettier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
-      "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-visitor-keys": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/espree": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
-      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
-      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/etag": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/express": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
-      "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
-      "license": "MIT",
-      "dependencies": {
-        "accepts": "^2.0.0",
-        "body-parser": "^2.2.0",
-        "content-disposition": "^1.0.0",
-        "content-type": "^1.0.5",
-        "cookie": "^0.7.1",
-        "cookie-signature": "^1.2.1",
-        "debug": "^4.4.0",
-        "encodeurl": "^2.0.0",
-        "escape-html": "^1.0.3",
-        "etag": "^1.8.1",
-        "finalhandler": "^2.1.0",
-        "fresh": "^2.0.0",
-        "http-errors": "^2.0.0",
-        "merge-descriptors": "^2.0.0",
-        "mime-types": "^3.0.0",
-        "on-finished": "^2.4.1",
-        "once": "^1.4.0",
-        "parseurl": "^1.3.3",
-        "proxy-addr": "^2.0.7",
-        "qs": "^6.14.0",
-        "range-parser": "^1.2.1",
-        "router": "^2.2.0",
-        "send": "^1.1.0",
-        "serve-static": "^2.2.0",
-        "statuses": "^2.0.1",
-        "type-is": "^2.0.1",
-        "vary": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 18"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/express"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-diff": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
-      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
-      "dev": true,
-      "license": "Apache-2.0"
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
-      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.8"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fastq": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
-      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/fdir": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
-      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "picomatch": "^3 || ^4"
-      },
-      "peerDependenciesMeta": {
-        "picomatch": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
-      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "flat-cache": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/finalhandler": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
-      "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==",
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^4.4.0",
-        "encodeurl": "^2.0.0",
-        "escape-html": "^1.0.3",
-        "on-finished": "^2.4.1",
-        "parseurl": "^1.3.3",
-        "statuses": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "locate-path": "^6.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/fix-dts-default-cjs-exports": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz",
-      "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "magic-string": "^0.30.17",
-        "mlly": "^1.7.4",
-        "rollup": "^4.34.8"
-      }
-    },
-    "node_modules/flat-cache": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
-      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "flatted": "^3.2.9",
-        "keyv": "^4.5.4"
-      },
-      "engines": {
-        "node": ">=16"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
-      "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/for-each": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
-      "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/foreground-child": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
-      "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "cross-spawn": "^7.0.6",
-        "signal-exit": "^4.0.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/forwarded": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
-      "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/fresh": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
-      "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/fs": {
-      "version": "0.0.1-security",
-      "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
-      "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==",
-      "license": "ISC"
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
-      "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "functions-have-names": "^1.2.3",
-        "hasown": "^2.0.2",
-        "is-callable": "^1.2.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "function-bind": "^1.1.2",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "math-intrinsics": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
-      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/get-symbol-description": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
-      "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-tsconfig": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
-      "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "resolve-pkg-maps": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
-      }
-    },
-    "node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/glob/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/glob/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/globals": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globalthis": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-properties": "^1.2.1",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/gopd": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/graceful-fs": {
-      "version": "4.2.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/graphemer": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/has-bigints": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
-      "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-define-property": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-proto": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
-      "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
-      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-symbols": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hasown": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
-      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-      "license": "MIT",
-      "dependencies": {
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/hosted-git-info": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/http-errors": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
-      "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
-      "license": "MIT",
-      "dependencies": {
-        "depd": "2.0.0",
-        "inherits": "2.0.4",
-        "setprototypeof": "1.2.0",
-        "statuses": "2.0.1",
-        "toidentifier": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/iconv-lite": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-      "license": "MIT",
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/ignore": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
-      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
-      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "license": "ISC"
-    },
-    "node_modules/internal-slot": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
-      "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "hasown": "^2.0.2",
-        "side-channel": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/is-array-buffer": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
-      "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/is-async-function": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
-      "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "async-function": "^1.0.0",
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.1",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-bigint": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
-      "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-bigints": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
-      "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-bun-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
-      "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "semver": "^7.7.1"
-      }
-    },
-    "node_modules/is-bun-module/node_modules/semver": {
-      "version": "7.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
-      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.16.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
-      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-data-view": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
-      "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
-      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-finalizationregistry": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
-      "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-generator-function": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
-      "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.0",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-map": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
-      "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
-      "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-promise": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
-      "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
-      "license": "MIT"
-    },
-    "node_modules/is-regex": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
-      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-set": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
-      "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
-      "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
-      "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
-      "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-typed-array": {
-      "version": "1.1.15",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
-      "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakmap": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
-      "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakref": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
-      "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakset": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
-      "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/jackspeak": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
-      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
-      "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
-      }
-    },
-    "node_modules/joycon": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
-      "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/json-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json5": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
-      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-      "license": "MIT",
-      "bin": {
-        "json5": "lib/cli.js"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/keyv": {
-      "version": "4.5.4",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
-      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "json-buffer": "3.0.1"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/lilconfig": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
-      "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antonk52"
-      }
-    },
-    "node_modules/lines-and-columns": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/load-tsconfig": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
-      "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "p-locate": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/lodash.sortby": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/magic-string": {
-      "version": "0.30.17",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
-      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0"
-      }
-    },
-    "node_modules/make-error": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
-      "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/math-intrinsics": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/media-typer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
-      "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/memorystream": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-      "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.10.0"
-      }
-    },
-    "node_modules/merge-descriptors": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
-      "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
-      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "braces": "^3.0.3",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/micromatch/node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.54.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
-      "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
-      "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
-      "license": "MIT",
-      "dependencies": {
-        "mime-db": "^1.54.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/minipass": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
-      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      }
-    },
-    "node_modules/mlly": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
-      "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "pathe": "^2.0.1",
-        "pkg-types": "^1.3.0",
-        "ufo": "^1.5.4"
-      }
-    },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "license": "MIT"
-    },
-    "node_modules/mz": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "any-promise": "^1.0.0",
-        "object-assign": "^4.0.1",
-        "thenify-all": "^1.0.0"
-      }
-    },
-    "node_modules/napi-postinstall": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz",
-      "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "napi-postinstall": "lib/cli.js"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/napi-postinstall"
-      }
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/negotiator": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
-      "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
-      }
-    },
-    "node_modules/normalize-package-data/node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/npm-run-all": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
-      "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "chalk": "^2.4.1",
-        "cross-spawn": "^6.0.5",
-        "memorystream": "^0.3.1",
-        "minimatch": "^3.0.4",
-        "pidtree": "^0.3.0",
-        "read-pkg": "^3.0.0",
-        "shell-quote": "^1.6.1",
-        "string.prototype.padend": "^3.0.0"
-      },
-      "bin": {
-        "npm-run-all": "bin/npm-run-all/index.js",
-        "run-p": "bin/run-p/index.js",
-        "run-s": "bin/run-s/index.js"
-      },
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/npm-run-all/node_modules/cross-spawn": {
-      "version": "6.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
-      "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
-      },
-      "engines": {
-        "node": ">=4.8"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "shebang-regex": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/npm-run-all/node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "which": "bin/which"
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.13.4",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
-      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.7",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
-      "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0",
-        "has-symbols": "^1.1.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.fromentries": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
-      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.groupby": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
-      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
-      "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/on-finished": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
-      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
-      "license": "MIT",
-      "dependencies": {
-        "ee-first": "1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "license": "ISC",
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.4",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
-      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.5"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/own-keys": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
-      "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-intrinsic": "^1.2.6",
-        "object-keys": "^1.1.1",
-        "safe-push-apply": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "yocto-queue": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "p-limit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/package-json-from-dist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
-      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
-      "dev": true,
-      "license": "BlueOak-1.0.0"
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/path": {
-      "version": "0.12.7",
-      "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
-      "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
-      "license": "MIT",
-      "dependencies": {
-        "process": "^0.11.1",
-        "util": "^0.10.3"
-      }
-    },
-    "node_modules/path-exists": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
-      "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/path-to-regexp": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
-      "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=16"
-      }
-    },
-    "node_modules/path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "pify": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pathe": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
-      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/picocolors": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/pidtree": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
-      "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "pidtree": "bin/pidtree.js"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pirates": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
-      "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/pkg-types": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
-      "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "confbox": "^0.1.8",
-        "mlly": "^1.7.4",
-        "pathe": "^2.0.1"
-      }
-    },
-    "node_modules/possible-typed-array-names": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
-      "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/postcss-load-config": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
-      "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "lilconfig": "^3.1.1"
-      },
-      "engines": {
-        "node": ">= 18"
-      },
-      "peerDependencies": {
-        "jiti": ">=1.21.0",
-        "postcss": ">=8.0.9",
-        "tsx": "^4.8.1",
-        "yaml": "^2.4.2"
-      },
-      "peerDependenciesMeta": {
-        "jiti": {
-          "optional": true
-        },
-        "postcss": {
-          "optional": true
-        },
-        "tsx": {
-          "optional": true
-        },
-        "yaml": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/prettier": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
-      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "prettier": "bin/prettier.cjs"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
-      }
-    },
-    "node_modules/prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-diff": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
-    "node_modules/proxy-addr": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
-      "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
-      "license": "MIT",
-      "dependencies": {
-        "forwarded": "0.2.0",
-        "ipaddr.js": "1.9.1"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/qs": {
-      "version": "6.14.0",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
-      "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "side-channel": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/raw-body": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
-      "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
-      "license": "MIT",
-      "dependencies": {
-        "bytes": "3.1.2",
-        "http-errors": "2.0.0",
-        "iconv-lite": "0.6.3",
-        "unpipe": "1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/readdirp": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
-      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14.18.0"
-      },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/reflect.getprototypeof": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
-      "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.9",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.7",
-        "get-proto": "^1.0.1",
-        "which-builtin-type": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
-      "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-errors": "^1.3.0",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "set-function-name": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve": {
-      "version": "1.22.10",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
-      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-core-module": "^2.16.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/resolve-pkg-maps": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
-      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
-      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rollup": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
-      "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "1.0.7"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
-      "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
-      },
-      "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.41.1",
-        "@rollup/rollup-android-arm64": "4.41.1",
-        "@rollup/rollup-darwin-arm64": "4.41.1",
-        "@rollup/rollup-darwin-x64": "4.41.1",
-        "@rollup/rollup-freebsd-arm64": "4.41.1",
-        "@rollup/rollup-freebsd-x64": "4.41.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.41.1",
-        "@rollup/rollup-linux-arm64-musl": "4.41.1",
-        "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-musl": "4.41.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-musl": "4.41.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.41.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.41.1",
-        "@rollup/rollup-win32-x64-msvc": "4.41.1",
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/router": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
-      "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^4.4.0",
-        "depd": "^2.0.0",
-        "is-promise": "^4.0.0",
-        "parseurl": "^1.3.3",
-        "path-to-regexp": "^8.0.0"
-      },
-      "engines": {
-        "node": ">= 18"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/safe-array-concat": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
-      "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
-        "has-symbols": "^1.1.0",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">=0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/safe-push-apply": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
-      "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-regex-test": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
-      "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "is-regex": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "license": "MIT"
-    },
-    "node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/send": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
-      "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^4.3.5",
-        "encodeurl": "^2.0.0",
-        "escape-html": "^1.0.3",
-        "etag": "^1.8.1",
-        "fresh": "^2.0.0",
-        "http-errors": "^2.0.0",
-        "mime-types": "^3.0.1",
-        "ms": "^2.1.3",
-        "on-finished": "^2.4.1",
-        "range-parser": "^1.2.1",
-        "statuses": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 18"
-      }
-    },
-    "node_modules/serve-static": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
-      "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
-      "license": "MIT",
-      "dependencies": {
-        "encodeurl": "^2.0.0",
-        "escape-html": "^1.0.3",
-        "parseurl": "^1.3.3",
-        "send": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 18"
-      }
-    },
-    "node_modules/set-function-length": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
-      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.4",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/set-function-name": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
-      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-errors": "^1.3.0",
-        "functions-have-names": "^1.2.3",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/set-proto": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
-      "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/setprototypeof": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
-      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
-      "license": "ISC"
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shell-quote": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
-      "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
-      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3",
-        "side-channel-list": "^1.0.0",
-        "side-channel-map": "^1.0.1",
-        "side-channel-weakmap": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-list": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
-      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
-      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-weakmap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
-      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3",
-        "side-channel-map": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/source-map": {
-      "version": "0.8.0-beta.0",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
-      "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "whatwg-url": "^7.0.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
-      "dev": true,
-      "license": "CC-BY-3.0"
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
-      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
-      "dev": true,
-      "license": "CC0-1.0"
-    },
-    "node_modules/stable-hash": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
-      "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/statuses": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
-      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/stop-iteration-iterator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
-      "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "internal-slot": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/string-width-cjs": {
-      "name": "string-width",
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width-cjs/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width-cjs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/string-width-cjs/node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string.prototype.padend": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
-      "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trim": {
-      "version": "1.2.10",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
-      "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-data-property": "^1.1.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-object-atoms": "^1.0.0",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
-      "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
-    "node_modules/strip-ansi-cjs": {
-      "name": "strip-ansi",
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/sucrase": {
-      "version": "3.35.0",
-      "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
-      "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "commander": "^4.0.0",
-        "glob": "^10.3.10",
-        "lines-and-columns": "^1.1.6",
-        "mz": "^2.7.0",
-        "pirates": "^4.0.1",
-        "ts-interface-checker": "^0.1.9"
-      },
-      "bin": {
-        "sucrase": "bin/sucrase",
-        "sucrase-node": "bin/sucrase-node"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/synckit": {
-      "version": "0.11.6",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz",
-      "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@pkgr/core": "^0.2.4"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/synckit"
-      }
-    },
-    "node_modules/thenify": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "any-promise": "^1.0.0"
-      }
-    },
-    "node_modules/thenify-all": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "thenify": ">= 3.1.0 < 4"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/tinyexec": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
-      "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/tinyglobby": {
-      "version": "0.2.14",
-      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
-      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fdir": "^6.4.4",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/SuperchupuDev"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/toidentifier": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
-      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.6"
-      }
-    },
-    "node_modules/tr46": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-      "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/tree-kill": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
-      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "tree-kill": "cli.js"
-      }
-    },
-    "node_modules/ts-api-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
-      "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18.12"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4"
-      }
-    },
-    "node_modules/ts-interface-checker": {
-      "version": "0.1.13",
-      "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
-      "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
-      "dev": true,
-      "license": "Apache-2.0"
-    },
-    "node_modules/ts-node": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
-      "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspotcode/source-map-support": "^0.8.0",
-        "@tsconfig/node10": "^1.0.7",
-        "@tsconfig/node12": "^1.0.7",
-        "@tsconfig/node14": "^1.0.0",
-        "@tsconfig/node16": "^1.0.2",
-        "acorn": "^8.4.1",
-        "acorn-walk": "^8.1.1",
-        "arg": "^4.1.0",
-        "create-require": "^1.1.0",
-        "diff": "^4.0.1",
-        "make-error": "^1.1.1",
-        "v8-compile-cache-lib": "^3.0.1",
-        "yn": "3.1.1"
-      },
-      "bin": {
-        "ts-node": "dist/bin.js",
-        "ts-node-cwd": "dist/bin-cwd.js",
-        "ts-node-esm": "dist/bin-esm.js",
-        "ts-node-script": "dist/bin-script.js",
-        "ts-node-transpile-only": "dist/bin-transpile.js",
-        "ts-script": "dist/bin-script-deprecated.js"
-      },
-      "peerDependencies": {
-        "@swc/core": ">=1.2.50",
-        "@swc/wasm": ">=1.2.50",
-        "@types/node": "*",
-        "typescript": ">=2.7"
-      },
-      "peerDependenciesMeta": {
-        "@swc/core": {
-          "optional": true
-        },
-        "@swc/wasm": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/tsconfig-paths": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
-      "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
-      "license": "MIT",
-      "dependencies": {
-        "json5": "^2.2.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
-      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "dev": true,
-      "license": "0BSD",
-      "optional": true
-    },
-    "node_modules/tsup": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz",
-      "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "bundle-require": "^5.1.0",
-        "cac": "^6.7.14",
-        "chokidar": "^4.0.3",
-        "consola": "^3.4.0",
-        "debug": "^4.4.0",
-        "esbuild": "^0.25.0",
-        "fix-dts-default-cjs-exports": "^1.0.0",
-        "joycon": "^3.1.1",
-        "picocolors": "^1.1.1",
-        "postcss-load-config": "^6.0.1",
-        "resolve-from": "^5.0.0",
-        "rollup": "^4.34.8",
-        "source-map": "0.8.0-beta.0",
-        "sucrase": "^3.35.0",
-        "tinyexec": "^0.3.2",
-        "tinyglobby": "^0.2.11",
-        "tree-kill": "^1.2.2"
-      },
-      "bin": {
-        "tsup": "dist/cli-default.js",
-        "tsup-node": "dist/cli-node.js"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "peerDependencies": {
-        "@microsoft/api-extractor": "^7.36.0",
-        "@swc/core": "^1",
-        "postcss": "^8.4.12",
-        "typescript": ">=4.5.0"
-      },
-      "peerDependenciesMeta": {
-        "@microsoft/api-extractor": {
-          "optional": true
-        },
-        "@swc/core": {
-          "optional": true
-        },
-        "postcss": {
-          "optional": true
-        },
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/tsup/node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/tsx": {
-      "version": "4.19.4",
-      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
-      "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "esbuild": "~0.25.0",
-        "get-tsconfig": "^4.7.5"
-      },
-      "bin": {
-        "tsx": "dist/cli.mjs"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      }
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-is": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
-      "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
-      "license": "MIT",
-      "dependencies": {
-        "content-type": "^1.0.5",
-        "media-typer": "^1.1.0",
-        "mime-types": "^3.0.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/typed-array-buffer": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
-      "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-typed-array": "^1.1.14"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/typed-array-byte-length": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
-      "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-proto": "^1.2.0",
-        "is-typed-array": "^1.1.14"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-byte-offset": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
-      "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-proto": "^1.2.0",
-        "is-typed-array": "^1.1.15",
-        "reflect.getprototypeof": "^1.0.9"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-length": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
-      "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "is-typed-array": "^1.1.13",
-        "possible-typed-array-names": "^1.0.0",
-        "reflect.getprototypeof": "^1.0.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "5.8.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
-      "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=14.17"
-      }
-    },
-    "node_modules/typescript-eslint": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz",
-      "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/eslint-plugin": "8.33.0",
-        "@typescript-eslint/parser": "8.33.0",
-        "@typescript-eslint/utils": "8.33.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/ufo": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
-      "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
-      "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "which-boxed-primitive": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/undici-types": {
-      "version": "6.21.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
-      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/unrs-resolver": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.8.tgz",
-      "integrity": "sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "dependencies": {
-        "napi-postinstall": "^0.2.2"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unrs-resolver"
-      },
-      "optionalDependencies": {
-        "@unrs/resolver-binding-darwin-arm64": "1.7.8",
-        "@unrs/resolver-binding-darwin-x64": "1.7.8",
-        "@unrs/resolver-binding-freebsd-x64": "1.7.8",
-        "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.8",
-        "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.8",
-        "@unrs/resolver-binding-linux-arm64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-arm64-musl": "1.7.8",
-        "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-riscv64-musl": "1.7.8",
-        "@unrs/resolver-binding-linux-s390x-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-x64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-x64-musl": "1.7.8",
-        "@unrs/resolver-binding-wasm32-wasi": "1.7.8",
-        "@unrs/resolver-binding-win32-arm64-msvc": "1.7.8",
-        "@unrs/resolver-binding-win32-ia32-msvc": "1.7.8",
-        "@unrs/resolver-binding-win32-x64-msvc": "1.7.8"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/util": {
-      "version": "0.10.4",
-      "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
-      "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
-      "license": "MIT",
-      "dependencies": {
-        "inherits": "2.0.3"
-      }
-    },
-    "node_modules/util/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
-      "license": "ISC"
-    },
-    "node_modules/v8-compile-cache-lib": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
-      "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
-      "dev": true,
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/whatwg-url": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-      "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "lodash.sortby": "^4.7.0",
-        "tr46": "^1.0.1",
-        "webidl-conversions": "^4.0.2"
-      }
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
-      "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-bigint": "^1.1.0",
-        "is-boolean-object": "^1.2.1",
-        "is-number-object": "^1.1.1",
-        "is-string": "^1.1.1",
-        "is-symbol": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-builtin-type": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
-      "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "function.prototype.name": "^1.1.6",
-        "has-tostringtag": "^1.0.2",
-        "is-async-function": "^2.0.0",
-        "is-date-object": "^1.1.0",
-        "is-finalizationregistry": "^1.1.0",
-        "is-generator-function": "^1.0.10",
-        "is-regex": "^1.2.1",
-        "is-weakref": "^1.0.2",
-        "isarray": "^2.0.5",
-        "which-boxed-primitive": "^1.1.0",
-        "which-collection": "^1.0.2",
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-collection": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
-      "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-map": "^2.0.3",
-        "is-set": "^2.0.3",
-        "is-weakmap": "^2.0.2",
-        "is-weakset": "^2.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-typed-array": {
-      "version": "1.1.19",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
-      "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "for-each": "^0.3.5",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/word-wrap": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
-      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrap-ansi": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
-      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^6.1.0",
-        "string-width": "^5.0.1",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrap-ansi-cjs": {
-      "name": "wrap-ansi",
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/wrap-ansi/node_modules/ansi-styles": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "license": "ISC"
-    },
-    "node_modules/yn": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
-      "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/yocto-queue": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    }
-  }
-}
diff --git a/backend/package.json b/backend/package.json
deleted file mode 100644
index dc3c6da8..00000000
--- a/backend/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-  "name": "backend",
-  "version": "1.0.0",
-  "description": "",
-  "main": "index.js",
-  "scripts": {
-    "dev": "npm-run-all snippets:consolidate dev:server",
-    "dev:server": "tsx index.ts",
-    "build": "tsup index.ts --out-dir dist --format esm",
-    "start": "node dist/index.js",
-    "lint": "eslint .",
-    "format": "prettier --write .",
-    "format:check": "prettier --check .",
-    "copy:data": "tsx ./scripts/copyStatic.ts",
-    "snippets:check": "tsx ./scripts/checkSnippetFormatting.ts",
-    "snippets:consolidate": "tsx  ./scripts/consolidateSnippets.ts"
-  },
-  "keywords": [],
-  "author": "",
-  "license": "ISC",
-  "type": "module",
-  "dependencies": {
-    "cors": "^2.8.5",
-    "dotenv": "^16.5.0",
-    "express": "^5.1.0",
-    "fs": "^0.0.1-security",
-    "path": "^0.12.7",
-    "process": "^0.11.10",
-    "tsconfig-paths": "^4.2.0"
-  },
-  "devDependencies": {
-    "@eslint/compat": "^1.2.4",
-    "@eslint/eslintrc": "^3.2.0",
-    "@eslint/js": "^9.11.1",
-    "@types/cors": "^2.8.18",
-    "@types/express": "^5.0.2",
-    "@types/node": "^22.15.19",
-    "eslint": "^9.27.0",
-    "eslint-config-prettier": "^10.1.5",
-    "eslint-import-resolver-typescript": "^3.7.0",
-    "eslint-plugin-import": "^2.31.0",
-    "eslint-plugin-prettier": "^5.4.0",
-    "npm-run-all": "^4.1.5",
-    "prettier": "^3.5.3",
-    "ts-node": "^10.9.2",
-    "tsup": "^8.5.0",
-    "tsx": "^4.19.4",
-    "typescript": "^5.8.3",
-    "typescript-eslint": "^8.7.0"
-  }
-}
diff --git a/backend/railway.json b/backend/railway.json
deleted file mode 100644
index e0f5fb94..00000000
--- a/backend/railway.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-  "$schema": "https://railway.com/railway.schema.json",
-  "build": {
-    "builder": "NIXPACKS"
-  },
-  "deploy": {
-    "runtime": "V2",
-    "numReplicas": 1,
-    "sleepApplication": false,
-    "multiRegionConfig": {
-      "europe-west4-drams3a": {
-        "numReplicas": 1
-      }
-    },
-    "restartPolicyType": "ON_FAILURE",
-    "restartPolicyMaxRetries": 10
-  }
-}
diff --git a/backend/scripts/checkSnippetFormatting.ts b/backend/scripts/checkSnippetFormatting.ts
deleted file mode 100644
index 083fb92d..00000000
--- a/backend/scripts/checkSnippetFormatting.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { exit } from "process";
-
-import { parseAllSnippets } from "./snippetParser";
-
-const { errored } = parseAllSnippets();
-
-if (errored) {
-  exit(1);
-}
diff --git a/backend/scripts/consolidateSnippets.ts b/backend/scripts/consolidateSnippets.ts
deleted file mode 100644
index bc07086a..00000000
--- a/backend/scripts/consolidateSnippets.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { copyFileSync, mkdirSync, writeFileSync } from "fs";
-import { join } from "path";
-import { exit } from "process";
-
-import { LanguageType } from "@types";
-import { slugify } from "@utils/slugify";
-
-import { API_BASE } from "../index";
-import { parseAllSnippets } from "./snippetParser";
-
-const dataPath = "data/consolidated/";
-const indexPath = join(dataPath, "_index.json");
-const iconPath = "data/icons/";
-
-const { errored, languages } = parseAllSnippets();
-
-if (errored) {
-  exit(1);
-}
-
-mkdirSync(dataPath, { recursive: true });
-mkdirSync(iconPath, { recursive: true });
-
-const index: LanguageType[] = [];
-for (const language of languages) {
-  copyFileSync(language.icon, join(iconPath, `${slugify(language.name)}.svg`));
-
-  const subLanguages: LanguageType["subLanguages"] = [];
-
-  for (const subLanguage of language.subLanguages) {
-    const joinedName = `${slugify(language.name)}--${slugify(
-      subLanguage.name
-    )}`;
-    const iconName = `${joinedName}.svg`;
-    const subLanguageFilePath = join(dataPath, `${joinedName}.json`);
-
-    copyFileSync(subLanguage.icon, join(iconPath, iconName));
-    subLanguages.push({
-      name: subLanguage.name.toUpperCase(),
-      icon: `${API_BASE}/icons/${iconName}`,
-    });
-
-    writeFileSync(
-      subLanguageFilePath,
-      JSON.stringify(subLanguage.categories, null, 4)
-    );
-  }
-
-  index.push({
-    name: language.name.toUpperCase(),
-    icon: `${API_BASE}/icons/${slugify(language.name)}.svg`,
-    subLanguages,
-  });
-
-  const languageFilePath = join(dataPath, `${slugify(language.name)}.json`);
-
-  writeFileSync(languageFilePath, JSON.stringify(language.categories, null, 4));
-}
-
-writeFileSync(indexPath, JSON.stringify(index, null, 4));
diff --git a/backend/scripts/copyStatic.ts b/backend/scripts/copyStatic.ts
deleted file mode 100644
index c92170c9..00000000
--- a/backend/scripts/copyStatic.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import fs from "fs";
-import path from "path";
-
-export function copyFolderSync(from: string, to: string) {
-  fs.mkdirSync(to, { recursive: true });
-
-  for (const item of fs.readdirSync(from)) {
-    const src = path.join(from, item);
-    const dest = path.join(to, item);
-
-    if (fs.lstatSync(src).isDirectory()) {
-      copyFolderSync(src, dest);
-    } else {
-      fs.copyFileSync(src, dest);
-    }
-  }
-}
-
-copyFolderSync("data", "dist/data");
diff --git a/backend/scripts/snippetParser.ts b/backend/scripts/snippetParser.ts
deleted file mode 100644
index 90bf62e2..00000000
--- a/backend/scripts/snippetParser.ts
+++ /dev/null
@@ -1,199 +0,0 @@
-import { existsSync, readdirSync, readFileSync } from "fs";
-import { dirname, join } from "path";
-import { fileURLToPath } from "url";
-
-import { RawSnippetType, SnippetType } from "@types";
-import { isCorrectType } from "@utils/objectUtils";
-import { raise } from "@utils/raise";
-import { reverseSlugify, slugify } from "@utils/slugify";
-
-interface ParseLanguageResponse {
-  name: string;
-  icon: string;
-  categories: {
-    name: string;
-    snippets: SnippetType[];
-  }[];
-  subLanguages: ParseLanguageResponse[];
-}
-
-interface ParseCategoryResponse {
-  name: string;
-  snippets: SnippetType[];
-}
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-
-const propertyRegex = /^\s+([a-zA-Z]+):\s*(.+)/;
-const headerEndCodeStartRegex = /^\s*---\s*```.*\r?\n/;
-const codeRegex = /^(.+)```/s;
-
-let errored: boolean = false;
-
-function parseSnippet(
-  path: string,
-  name: string,
-  text: string
-): SnippetType | null {
-  let cursor: number = 0;
-
-  const fromCursor = () => text.substring(cursor);
-  if (!fromCursor().trim().startsWith("---")) {
-    return raise("Missing header start delimiter '---'", path);
-  }
-
-  cursor += 3;
-
-  const properties: { [key: string]: string } = {};
-
-  let match: string[] | null;
-  while ((match = propertyRegex.exec(fromCursor())) !== null) {
-    cursor += match[0].length;
-    properties[match[1].toLowerCase()] = match[2];
-  }
-
-  if (
-    !isCorrectType<RawSnippetType>(properties, [
-      "title",
-      "description",
-      "author",
-      "tags",
-    ])
-  ) {
-    return raise("Invalid properties", path);
-  }
-
-  if (slugify(properties.title) !== name) {
-    return raise(
-      `slugifyed 'title' property doesn't match snippet file name`,
-      path
-    );
-  }
-
-  match = headerEndCodeStartRegex.exec(fromCursor());
-  if (match === null) {
-    return raise("Missing header end '---' or code start '```'", path);
-  }
-
-  cursor += match[0].length;
-  const extension = match[0].replace(/[\r\n`-]/g, "");
-
-  match = codeRegex.exec(fromCursor());
-  if (match === null) {
-    return raise("Missing code block end '```'", path);
-  }
-
-  const code: string = match[1];
-
-  return {
-    title: properties.title,
-    description: properties.description,
-    author: properties.author,
-    tags: properties.tags
-      .split(",")
-      .map((tag) => tag.trim())
-      .filter((tag) => tag),
-    contributors: (properties.contributors ?? "")
-      .split(",")
-      .map((contributor) => contributor.trim())
-      .filter((contributor) => contributor),
-    code: code.replace(/\r\n/g, "\n"),
-    extension,
-  };
-}
-
-function parseCategory(path: string, name: string): ParseCategoryResponse {
-  const snippets: SnippetType[] = [];
-
-  for (const snippet of readdirSync(path)) {
-    const snippetPath = join(path, snippet);
-    const snippetContent = readFileSync(snippetPath).toString();
-    const snippetFileName = snippet.slice(0, -3);
-
-    const snippetData = parseSnippet(
-      snippetPath,
-      snippetFileName,
-      snippetContent
-    );
-    if (!snippetData) {
-      errored = true;
-      continue;
-    }
-    snippets.push(snippetData);
-  }
-
-  return {
-    name: reverseSlugify(name),
-    snippets,
-  };
-}
-
-function parseLanguage(
-  path: string,
-  name: string,
-  subLanguageOf: string | null = null
-): ParseLanguageResponse | null {
-  const iconPath = join(path, "icon.svg");
-
-  if (!existsSync(iconPath)) {
-    return raise(
-      `icon for '${subLanguageOf ? `${subLanguageOf}/` : ""}${name}' is missing`
-    );
-  }
-
-  const subLanguages: ParseLanguageResponse[] = [];
-  const categories: ParseCategoryResponse[] = [];
-
-  for (const category of readdirSync(path)) {
-    if (category === "icon.svg") continue;
-    const categoryPath = join(path, category);
-
-    if (category.startsWith("[") && category.endsWith("]")) {
-      if (subLanguageOf !== null) {
-        return raise("Cannot have more than two level of language nesting");
-      }
-
-      const parsedLanguage = parseLanguage(
-        categoryPath,
-        category.slice(1, -1),
-        name
-      );
-      if (!parsedLanguage) {
-        errored = true;
-        continue;
-      }
-      subLanguages.push(parsedLanguage);
-    } else {
-      categories.push(parseCategory(categoryPath, category));
-    }
-  }
-
-  return {
-    name: reverseSlugify(name),
-    icon: iconPath,
-    categories,
-    subLanguages,
-  };
-}
-
-export function parseAllSnippets() {
-  // TODO: Fix the path because it nows run on production
-  const snippetPath = join(__dirname, "../../snippets");
-
-  const languages: ParseLanguageResponse[] = [];
-  for (const language of readdirSync(snippetPath)) {
-    const languagePath = join(snippetPath, language);
-    const parsedLanguage = parseLanguage(languagePath, language);
-    if (!parsedLanguage) {
-      errored = true;
-      continue;
-    }
-    languages.push(parsedLanguage);
-  }
-
-  return {
-    errored,
-    languages,
-  };
-}
diff --git a/backend/tsconfig.json b/backend/tsconfig.json
deleted file mode 100644
index ef099e53..00000000
--- a/backend/tsconfig.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "ES2022",
-    "lib": ["ES2023"],
-    "module": "ESNext",
-    "skipLibCheck": true,
-
-    /* Linting */
-    "strict": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
-    "noFallthroughCasesInSwitch": true,
-    "allowSyntheticDefaultImports": true,
-
-    "noEmit": false,
-
-    "moduleResolution": "node",
-    "outDir": "dist",
-    "esModuleInterop": true,
-    "resolveJsonModule": true,
-    "baseUrl": "./",
-    "paths": {
-      "@*": ["*"]
-    }
-  },
-  "exclude": ["node_modules"]
-}
diff --git a/backend/types/index.ts b/backend/types/index.ts
deleted file mode 100644
index 8604ef6f..00000000
--- a/backend/types/index.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export type LanguageType = {
-  name: string;
-  icon: string;
-  subLanguages: {
-    name: string;
-    icon: string;
-  }[];
-};
-
-export type CategoryType = string;
-
-export type SnippetType = {
-  title: string;
-  description: string;
-  author: string;
-  code: string;
-  tags: string[];
-  contributors: string[];
-  extension: string;
-};
-
-export type FileType = {
-  name: string;
-  snippets: SnippetType[];
-};
-
-export type RawSnippetType = {
-  title: string;
-  description: string;
-  author: string;
-  code: string;
-  tags: string;
-  contributors?: string;
-  extension: string;
-};
diff --git a/backend/utils/enums.ts b/backend/utils/enums.ts
deleted file mode 100644
index 61de7575..00000000
--- a/backend/utils/enums.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export enum QueryParams {
-  SEARCH = "q",
-  SNIPPET = "snippet",
-}
diff --git a/backend/utils/objectUtils.ts b/backend/utils/objectUtils.ts
deleted file mode 100644
index 7526468e..00000000
--- a/backend/utils/objectUtils.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export function isCorrectType<T>(obj: unknown, keys: (keyof T)[]): obj is T {
-  if (typeof obj !== "object" || obj === null) {
-    return false;
-  }
-  return keys.every((key) => key in obj);
-}
diff --git a/backend/utils/raise.ts b/backend/utils/raise.ts
deleted file mode 100644
index 04952326..00000000
--- a/backend/utils/raise.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export function raise(issue: string, snippet: string = ""): null {
-  console.error(`${issue}${snippet ? ` in '${snippet}'` : ""}`);
-  return null;
-}
diff --git a/backend/utils/slugify.ts b/backend/utils/slugify.ts
deleted file mode 100644
index 7817f7bf..00000000
--- a/backend/utils/slugify.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export function slugify(string: string, separator: string = "-") {
-  return string
-    .toString() // Cast to string (optional)
-    .toLowerCase() // Convert the string to lowercase letters
-    .trim() // Remove whitespace from both sides of a string (optional)
-    .replace(/\s+/g, separator) // Replace spaces with {separator}
-    .replace(/[^\w-]+/g, "") // Remove all non-word chars
-    .replace(/_/g, separator) // Replace _ with {separator}
-    .replace(/--+/g, separator) // Replace multiple - with single {separator}
-    .replace(/-$/g, ""); // Remove trailing -
-}
-
-export function reverseSlugify(s: string, separator: string = "-") {
-  return s
-    .split(separator)
-    .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
-    .join(" ")
-    .trim();
-}
diff --git a/components.json b/components.json
new file mode 100644
index 00000000..ffe928f5
--- /dev/null
+++ b/components.json
@@ -0,0 +1,21 @@
+{
+  "$schema": "https://ui.shadcn.com/schema.json",
+  "style": "new-york",
+  "rsc": true,
+  "tsx": true,
+  "tailwind": {
+    "config": "",
+    "css": "src/app/globals.css",
+    "baseColor": "neutral",
+    "cssVariables": true,
+    "prefix": ""
+  },
+  "aliases": {
+    "components": "@/components",
+    "utils": "@/lib/utils",
+    "ui": "@/components/ui",
+    "lib": "@/lib",
+    "hooks": "@/hooks"
+  },
+  "iconLibrary": "lucide"
+}
\ No newline at end of file
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000..c85fb67c
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,16 @@
+import { dirname } from "path";
+import { fileURLToPath } from "url";
+import { FlatCompat } from "@eslint/eslintrc";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+const compat = new FlatCompat({
+  baseDirectory: __dirname,
+});
+
+const eslintConfig = [
+  ...compat.extends("next/core-web-vitals", "next/typescript"),
+];
+
+export default eslintConfig;
diff --git a/frontend/.gitattributes b/frontend/.gitattributes
deleted file mode 100644
index 2c0e66db..00000000
--- a/frontend/.gitattributes
+++ /dev/null
@@ -1,9 +0,0 @@
-* text=auto
-*.js text eol=lf
-*.jsx text eol=lf
-*.ts text eol=lf
-*.tsx text eol=lf
-*.json text eol=lf
-*.css text eol=lf
-*.md text eol=lf
-
diff --git a/frontend/.gitignore b/frontend/.gitignore
deleted file mode 100644
index 7dffa756..00000000
--- a/frontend/.gitignore
+++ /dev/null
@@ -1,30 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-lerna-debug.log*
-
-node_modules
-dist
-dist-ssr
-coverage
-*.local
-*.tsbuildinfo
-.env
-.env.*
-
-# Editor directories and files
-.vscode/*
-!.vscode/extensions.json
-.idea
-.DS_Store
-*.suo
-*.ntvs*
-*.njsproj
-*.sln
-*.sw?
-
-
diff --git a/frontend/.prettierignore b/frontend/.prettierignore
deleted file mode 100644
index e4d40eac..00000000
--- a/frontend/.prettierignore
+++ /dev/null
@@ -1,9 +0,0 @@
-node_modules
-dist
-coverage
-snippets
-public
-.vite
-coverage
-package-lock.json
-.md
diff --git a/frontend/.prettierrc b/frontend/.prettierrc
deleted file mode 100644
index ec9891ae..00000000
--- a/frontend/.prettierrc
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "semi": true,
-  "tabWidth": 2,
-  "printWidth": 80,
-  "singleQuote": false,
-  "trailingComma": "es5",
-  "bracketSpacing": true,
-  "bracketSameLine": false,
-  "arrowParens": "always",
-  "jsxSingleQuote": false,
-  "endOfLine": "lf"
-}
diff --git a/frontend/cspell-dict.txt b/frontend/cspell-dict.txt
deleted file mode 100644
index 960d9be5..00000000
--- a/frontend/cspell-dict.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-quicksnip
-slugified
-slugifyed
-sublanguage
-fastapi
-technophile
-technoph1le
-technoph1leyt
\ No newline at end of file
diff --git a/frontend/cspell.json b/frontend/cspell.json
deleted file mode 100644
index 9befd930..00000000
--- a/frontend/cspell.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "dictionaryDefinitions": [
-    {
-      "name": "workspace",
-      "path": "./cspell-dict.txt",
-      "description": "Custom Workspace Dictionary",
-      "addWords": true
-    }
-  ],
-  "dictionaries": ["workspace"],
-  "ignorePaths": ["node_modules", "dist", "coverage", "public"]
-}
diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js
deleted file mode 100644
index a9614216..00000000
--- a/frontend/eslint.config.js
+++ /dev/null
@@ -1,103 +0,0 @@
-import { fixupPluginRules } from "@eslint/compat";
-import { FlatCompat } from "@eslint/eslintrc";
-import js from "@eslint/js";
-import prettier from "eslint-plugin-prettier/recommended";
-import reactPlugin from "eslint-plugin-react";
-import reactHooks from "eslint-plugin-react-hooks";
-import reactRefresh from "eslint-plugin-react-refresh";
-import globals from "globals";
-import tseslint from "typescript-eslint";
-
-const project = "./tsconfig.app.json";
-// eslint flat structure backwards compatibility
-const compat = new FlatCompat({
-  recommendedConfig: js.configs.recommended,
-});
-
-function legacyPlugin(name, alias = name) {
-  const plugin = compat.plugins(name)[0]?.plugins?.[alias];
-  if (!plugin) {
-    throw new Error(`Unable to resolve plugin ${name} and/or alias ${alias}`);
-  }
-  return fixupPluginRules(plugin);
-}
-
-export default tseslint.config(
-  { ignores: ["node_modules", "dist", "coverage"] },
-  {
-    extends: [
-      js.configs.recommended,
-      ...tseslint.configs.recommended,
-      prettier,
-      ...compat.extends("plugin:import/typescript"),
-      reactPlugin.configs.flat.recommended,
-    ],
-    files: ["**/*.{js,ts,tsx}"],
-    languageOptions: {
-      ecmaVersion: 2020,
-      globals: globals.browser,
-    },
-    plugins: {
-      "react-hooks": reactHooks,
-      "react-refresh": reactRefresh,
-      import: legacyPlugin("eslint-plugin-import", "import"),
-    },
-    settings: {
-      "import/resolver": {
-        typescript: {
-          project,
-          alwaysTryTypes: true,
-        },
-      },
-      react: {
-        version: "detect",
-      },
-    },
-    rules: {
-      ...reactHooks.configs.recommended.rules,
-      "@typescript-eslint/no-empty-object-type": "off",
-      "@typescript-eslint/no-unused-vars": [
-        "error",
-        {
-          argsIgnorePattern: "^_",
-          varsIgnorePattern: "^_",
-          caughtErrorsIgnorePattern: "^_",
-        },
-      ],
-      "import/order": [
-        "error",
-        {
-          groups: [
-            "builtin",
-            "external",
-            "internal",
-            ["parent", "sibling"],
-            "index",
-            "object",
-            "type",
-            "unknown",
-          ],
-          pathGroups: [
-            {
-              pattern: "@*",
-              group: "internal",
-              position: "after",
-            },
-          ],
-          pathGroupsExcludedImportTypes: ["builtin", "internal"],
-          "newlines-between": "always",
-          alphabetize: {
-            order: "asc",
-            caseInsensitive: true,
-          },
-        },
-      ],
-      "react/react-in-jsx-scope": "off",
-      "react-refresh/only-export-components": [
-        "warn",
-        { allowConstantExport: true },
-      ],
-      semi: ["error", "always"],
-    },
-  }
-);
diff --git a/frontend/index.html b/frontend/index.html
deleted file mode 100644
index 19a324a2..00000000
--- a/frontend/index.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!doctype html>
-<html lang="en">
-  <head>
-    <meta charset="UTF-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-
-    <!-- SEO Meta Tags -->
-    <meta
-      name="description"
-      content="QuickSnip is an open-source tool designed for developers who want to organize, search, and share code snippets across various programming languages. It provides a centralized platform for managing handy snippets. Built with love and powered by an awesome community."
-    />
-    <meta
-      name="keywords"
-      content="QuickSnip, code snippets, snippet manager, developer tools, programming, coding"
-    />
-    <meta name="author" content="Technophile" />
-
-    <!-- Open Graph (OG) Meta Tags for Social Media -->
-    <meta property="og:title" content="QuickSnip - Code Snippet Manager" />
-    <meta
-      property="og:description"
-      content="QuickSnip helps you organize, search, and manage your code snippets efficiently."
-    />
-    <meta
-      property="og:image"
-      content="https://github.com/technoph1le/quicksnip/blob/main/public/preview.png?raw=true"
-    />
-    <meta property="og:url" content="https://quicksnip.dev/" />
-    <meta property="og:type" content="website" />
-
-    <!-- Twitter Card for better link previews -->
-    <meta name="twitter:card" content="summary_large_image" />
-    <meta name="twitter:title" content="QuickSnip - Code Snippet Manager" />
-    <meta
-      name="twitter:description"
-      content="QuickSnip helps you organize, search, and manage your code snippets efficiently."
-    />
-    <meta
-      name="twitter:image"
-      content="https://github.com/technoph1le/quicksnip/blob/main/public/preview.png?raw=true"
-    />
-    <meta name="twitter:site" content="@technoph1leyt" />
-
-    <!-- Favicon -->
-    <link
-      rel="apple-touch-icon"
-      sizes="180x180"
-      href="/favicon/apple-touch-icon.png"
-    />
-    <link
-      rel="icon"
-      type="image/png"
-      sizes="32x32"
-      href="/favicon/favicon-32x32.png"
-    />
-    <link
-      rel="icon"
-      type="image/png"
-      sizes="16x16"
-      href="/favicon/favicon-16x16.png"
-    />
-    <link rel="icon" href="/favicon/favicon.ico" />
-    <link rel="manifest" href="/site.webmanifest" />
-
-    <!-- Canonical URL (Avoid duplicate content issues) -->
-    <link rel="canonical" href="https://quicksnip.dev/" />
-
-    <title>QuickSnip - Code Snippet Manager</title>
-  </head>
-  <body>
-    <div id="root" role="presentation"></div>
-    <div id="modal-root"></div>
-    <script type="module" src="/src/main.tsx"></script>
-  </body>
-</html>
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
deleted file mode 100644
index a807561d..00000000
--- a/frontend/package-lock.json
+++ /dev/null
@@ -1,11155 +0,0 @@
-{
-  "name": "quicksnip",
-  "version": "0.0.0",
-  "lockfileVersion": 3,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "quicksnip",
-      "version": "0.0.0",
-      "dependencies": {
-        "@netlify/functions": "^3.1.8",
-        "@types/node": "^22.10.5",
-        "motion": "^11.15.0",
-        "prismjs": "^1.29.0",
-        "react": "^18.3.1",
-        "react-dom": "^18.3.1",
-        "react-router-dom": "^7.1.1",
-        "react-syntax-highlighter": "^15.6.1"
-      },
-      "devDependencies": {
-        "@eslint/compat": "^1.2.4",
-        "@eslint/eslintrc": "^3.2.0",
-        "@eslint/js": "^9.11.1",
-        "@types/eslint-plugin-react-refresh": "^0.4.0",
-        "@types/node": "^22.10.5",
-        "@types/react": "^18.3.10",
-        "@types/react-dom": "^18.3.0",
-        "@types/react-syntax-highlighter": "^15.5.13",
-        "@vitejs/plugin-react-swc": "^3.5.0",
-        "@vitest/coverage-v8": "^3.1.3",
-        "cspell": "^8.17.1",
-        "eslint": "^9.11.1",
-        "eslint-config-prettier": "^9.1.0",
-        "eslint-import-resolver-typescript": "^3.7.0",
-        "eslint-plugin-import": "^2.31.0",
-        "eslint-plugin-prettier": "^5.2.1",
-        "eslint-plugin-react": "^7.37.3",
-        "eslint-plugin-react-hooks": "^5.1.0-rc.0",
-        "eslint-plugin-react-refresh": "^0.4.12",
-        "globals": "^15.9.0",
-        "prettier": "^3.4.2",
-        "tsx": "^4.19.2",
-        "typescript": "^5.5.3",
-        "typescript-eslint": "^8.7.0",
-        "vite": "^6.3.5",
-        "vite-tsconfig-paths": "^5.1.4",
-        "vitest": "^3.1.3"
-      }
-    },
-    "node_modules/@ampproject/remapping": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
-      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/code-frame": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
-      "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.27.1",
-        "js-tokens": "^4.0.0",
-        "picocolors": "^1.1.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-string-parser": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-      "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
-      "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/parser": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.3.tgz",
-      "integrity": "sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.27.3"
-      },
-      "bin": {
-        "parser": "bin/babel-parser.js"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@babel/parser/node_modules/@babel/types": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.3.tgz",
-      "integrity": "sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/runtime": {
-      "version": "7.27.3",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.3.tgz",
-      "integrity": "sha512-7EYtGezsdiDMyY80+65EzwiGmcJqpmcZCojSXaRgdrBaGtWTgDZKq69cPIVped6MkIM78cTQ2GOiEYjwOlG4xw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/types": {
-      "version": "7.27.1",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
-      "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/helper-string-parser": "^7.27.1",
-        "@babel/helper-validator-identifier": "^7.27.1"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@bcoe/v8-coverage": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz",
-      "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@colors/colors": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz",
-      "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.1.90"
-      }
-    },
-    "node_modules/@cspell/cspell-bundled-dicts": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.19.4.tgz",
-      "integrity": "sha512-2ZRcZP/ncJ5q953o8i+R0fb8+14PDt5UefUNMrFZZHvfTI0jukAASOQeLY+WT6ASZv6CgbPrApAdbppy9FaXYQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/dict-ada": "^4.1.0",
-        "@cspell/dict-al": "^1.1.0",
-        "@cspell/dict-aws": "^4.0.10",
-        "@cspell/dict-bash": "^4.2.0",
-        "@cspell/dict-companies": "^3.1.15",
-        "@cspell/dict-cpp": "^6.0.8",
-        "@cspell/dict-cryptocurrencies": "^5.0.4",
-        "@cspell/dict-csharp": "^4.0.6",
-        "@cspell/dict-css": "^4.0.17",
-        "@cspell/dict-dart": "^2.3.0",
-        "@cspell/dict-data-science": "^2.0.8",
-        "@cspell/dict-django": "^4.1.4",
-        "@cspell/dict-docker": "^1.1.13",
-        "@cspell/dict-dotnet": "^5.0.9",
-        "@cspell/dict-elixir": "^4.0.7",
-        "@cspell/dict-en_us": "^4.4.3",
-        "@cspell/dict-en-common-misspellings": "^2.0.10",
-        "@cspell/dict-en-gb": "1.1.33",
-        "@cspell/dict-filetypes": "^3.0.11",
-        "@cspell/dict-flutter": "^1.1.0",
-        "@cspell/dict-fonts": "^4.0.4",
-        "@cspell/dict-fsharp": "^1.1.0",
-        "@cspell/dict-fullstack": "^3.2.6",
-        "@cspell/dict-gaming-terms": "^1.1.1",
-        "@cspell/dict-git": "^3.0.4",
-        "@cspell/dict-golang": "^6.0.20",
-        "@cspell/dict-google": "^1.0.8",
-        "@cspell/dict-haskell": "^4.0.5",
-        "@cspell/dict-html": "^4.0.11",
-        "@cspell/dict-html-symbol-entities": "^4.0.3",
-        "@cspell/dict-java": "^5.0.11",
-        "@cspell/dict-julia": "^1.1.0",
-        "@cspell/dict-k8s": "^1.0.10",
-        "@cspell/dict-kotlin": "^1.1.0",
-        "@cspell/dict-latex": "^4.0.3",
-        "@cspell/dict-lorem-ipsum": "^4.0.4",
-        "@cspell/dict-lua": "^4.0.7",
-        "@cspell/dict-makefile": "^1.0.4",
-        "@cspell/dict-markdown": "^2.0.10",
-        "@cspell/dict-monkeyc": "^1.0.10",
-        "@cspell/dict-node": "^5.0.7",
-        "@cspell/dict-npm": "^5.2.1",
-        "@cspell/dict-php": "^4.0.14",
-        "@cspell/dict-powershell": "^5.0.14",
-        "@cspell/dict-public-licenses": "^2.0.13",
-        "@cspell/dict-python": "^4.2.17",
-        "@cspell/dict-r": "^2.1.0",
-        "@cspell/dict-ruby": "^5.0.8",
-        "@cspell/dict-rust": "^4.0.11",
-        "@cspell/dict-scala": "^5.0.7",
-        "@cspell/dict-shell": "^1.1.0",
-        "@cspell/dict-software-terms": "^5.0.5",
-        "@cspell/dict-sql": "^2.2.0",
-        "@cspell/dict-svelte": "^1.0.6",
-        "@cspell/dict-swift": "^2.0.5",
-        "@cspell/dict-terraform": "^1.1.1",
-        "@cspell/dict-typescript": "^3.2.1",
-        "@cspell/dict-vue": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/cspell-json-reporter": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.19.4.tgz",
-      "integrity": "sha512-pOlUtLUmuDdTIOhDTvWxxta0Wm8RCD/p1V0qUqeP6/Ups1ajBI4FWEpRFd7yMBTUHeGeSNicJX5XeX7wNbAbLQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-types": "8.19.4"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/cspell-pipe": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-8.19.4.tgz",
-      "integrity": "sha512-GNAyk+7ZLEcL2fCMT5KKZprcdsq3L1eYy3e38/tIeXfbZS7Sd1R5FXUe6CHXphVWTItV39TvtLiDwN/2jBts9A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/cspell-resolver": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-8.19.4.tgz",
-      "integrity": "sha512-S8vJMYlsx0S1D60glX8H2Jbj4mD8519VjyY8lu3fnhjxfsl2bDFZvF3ZHKsLEhBE+Wh87uLqJDUJQiYmevHjDg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "global-directory": "^4.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/cspell-service-bus": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-8.19.4.tgz",
-      "integrity": "sha512-uhY+v8z5JiUogizXW2Ft/gQf3eWrh5P9036jN2Dm0UiwEopG/PLshHcDjRDUiPdlihvA0RovrF0wDh4ptcrjuQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/cspell-types": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-8.19.4.tgz",
-      "integrity": "sha512-ekMWuNlFiVGfsKhfj4nmc8JCA+1ZltwJgxiKgDuwYtR09ie340RfXFF6YRd2VTW5zN7l4F1PfaAaPklVz6utSg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/dict-ada": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-ada/-/dict-ada-4.1.0.tgz",
-      "integrity": "sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-al": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-al/-/dict-al-1.1.0.tgz",
-      "integrity": "sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-aws": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.10.tgz",
-      "integrity": "sha512-0qW4sI0GX8haELdhfakQNuw7a2pnWXz3VYQA2MpydH2xT2e6EN9DWFpKAi8DfcChm8MgDAogKkoHtIo075iYng==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-bash": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.0.tgz",
-      "integrity": "sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/dict-shell": "1.1.0"
-      }
-    },
-    "node_modules/@cspell/dict-companies": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.1.tgz",
-      "integrity": "sha512-ryaeJ1KhTTKL4mtinMtKn8wxk6/tqD4vX5tFP+Hg89SiIXmbMk5vZZwVf+eyGUWJOyw5A1CVj9EIWecgoi+jYQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-cpp": {
-      "version": "6.0.8",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.8.tgz",
-      "integrity": "sha512-BzurRZilWqaJt32Gif6/yCCPi+FtrchjmnehVEIFzbWyeBd/VOUw77IwrEzehZsu5cRU91yPWuWp5fUsKfDAXA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-cryptocurrencies": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-cryptocurrencies/-/dict-cryptocurrencies-5.0.4.tgz",
-      "integrity": "sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-csharp": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.6.tgz",
-      "integrity": "sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-css": {
-      "version": "4.0.17",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.17.tgz",
-      "integrity": "sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-dart": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.0.tgz",
-      "integrity": "sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-data-science": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.8.tgz",
-      "integrity": "sha512-uyAtT+32PfM29wRBeAkUSbkytqI8bNszNfAz2sGPtZBRmsZTYugKMEO9eDjAIE/pnT9CmbjNuoiXhk+Ss4fCOg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-django": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.4.tgz",
-      "integrity": "sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-docker": {
-      "version": "1.1.14",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.14.tgz",
-      "integrity": "sha512-p6Qz5mokvcosTpDlgSUREdSbZ10mBL3ndgCdEKMqjCSZJFdfxRdNdjrGER3lQ6LMq5jGr1r7nGXA0gvUJK80nw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-dotnet": {
-      "version": "5.0.9",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-dotnet/-/dict-dotnet-5.0.9.tgz",
-      "integrity": "sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-elixir": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-elixir/-/dict-elixir-4.0.7.tgz",
-      "integrity": "sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-en_us": {
-      "version": "4.4.9",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.9.tgz",
-      "integrity": "sha512-5gjqpUwhE+qP9A9wxD1+MGGJ3DNqTgSpiOsS10cGJfV4p/Z194XkDUZrUrJsnJA/3fsCZHAzcNWh8m0bw1v++A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-en-common-misspellings": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.0.11.tgz",
-      "integrity": "sha512-xFQjeg0wFHh9sFhshpJ+5BzWR1m9Vu8pD0CGPkwZLK9oii8AD8RXNchabLKy/O5VTLwyqPOi9qpyp1cxm3US4Q==",
-      "dev": true,
-      "license": "CC BY-SA 4.0"
-    },
-    "node_modules/@cspell/dict-en-gb": {
-      "version": "1.1.33",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz",
-      "integrity": "sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-filetypes": {
-      "version": "3.0.12",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.12.tgz",
-      "integrity": "sha512-+ds5wgNdlUxuJvhg8A1TjuSpalDFGCh7SkANCWvIplg6QZPXL4j83lqxP7PgjHpx7PsBUS7vw0aiHPjZy9BItw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-flutter": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-flutter/-/dict-flutter-1.1.0.tgz",
-      "integrity": "sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-fonts": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-fonts/-/dict-fonts-4.0.4.tgz",
-      "integrity": "sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-fsharp": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-fsharp/-/dict-fsharp-1.1.0.tgz",
-      "integrity": "sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-fullstack": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-fullstack/-/dict-fullstack-3.2.6.tgz",
-      "integrity": "sha512-cSaq9rz5RIU9j+0jcF2vnKPTQjxGXclntmoNp4XB7yFX2621PxJcekGjwf/lN5heJwVxGLL9toR0CBlGKwQBgA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-gaming-terms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.1.1.tgz",
-      "integrity": "sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-git": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-git/-/dict-git-3.0.5.tgz",
-      "integrity": "sha512-I7l86J2nOcpBY0OcwXLTGMbcXbEE7nxZme9DmYKrNgmt35fcLu+WKaiXW7P29V+lIXjJo/wKrEDY+wUEwVuABQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-golang": {
-      "version": "6.0.21",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.21.tgz",
-      "integrity": "sha512-D3wG1MWhFx54ySFJ00CS1MVjR4UiBVsOWGIjJ5Av+HamnguqEshxbF9mvy+BX0KqzdLVzwFkoLBs8QeOID56HA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-google": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-google/-/dict-google-1.0.8.tgz",
-      "integrity": "sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-haskell": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-haskell/-/dict-haskell-4.0.5.tgz",
-      "integrity": "sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-html": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.11.tgz",
-      "integrity": "sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-html-symbol-entities": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.3.tgz",
-      "integrity": "sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-java": {
-      "version": "5.0.11",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-java/-/dict-java-5.0.11.tgz",
-      "integrity": "sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-julia": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-julia/-/dict-julia-1.1.0.tgz",
-      "integrity": "sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-k8s": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-k8s/-/dict-k8s-1.0.10.tgz",
-      "integrity": "sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-kotlin": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-kotlin/-/dict-kotlin-1.1.0.tgz",
-      "integrity": "sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-latex": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-latex/-/dict-latex-4.0.3.tgz",
-      "integrity": "sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-lorem-ipsum": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-lorem-ipsum/-/dict-lorem-ipsum-4.0.4.tgz",
-      "integrity": "sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-lua": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-lua/-/dict-lua-4.0.7.tgz",
-      "integrity": "sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-makefile": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-makefile/-/dict-makefile-1.0.4.tgz",
-      "integrity": "sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-markdown": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.10.tgz",
-      "integrity": "sha512-vtVa6L/84F9sTjclTYDkWJF/Vx2c5xzxBKkQp+CEFlxOF2SYgm+RSoEvAvg5vj4N5kuqR4350ZlY3zl2eA3MXw==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "@cspell/dict-css": "^4.0.17",
-        "@cspell/dict-html": "^4.0.11",
-        "@cspell/dict-html-symbol-entities": "^4.0.3",
-        "@cspell/dict-typescript": "^3.2.1"
-      }
-    },
-    "node_modules/@cspell/dict-monkeyc": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.10.tgz",
-      "integrity": "sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-node": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-node/-/dict-node-5.0.7.tgz",
-      "integrity": "sha512-ZaPpBsHGQCqUyFPKLyCNUH2qzolDRm1/901IO8e7btk7bEDF56DN82VD43gPvD4HWz3yLs/WkcLa01KYAJpnOw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-npm": {
-      "version": "5.2.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.4.tgz",
-      "integrity": "sha512-/hK5ii9OzSOQkmTjkzJlEYWz+PBnz2hRq5Xu7d4aDURaynO9xMAcK31JJlKNQulBkVbQHxFZLUrzjdzdAr/Opw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-php": {
-      "version": "4.0.14",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.14.tgz",
-      "integrity": "sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-powershell": {
-      "version": "5.0.14",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-powershell/-/dict-powershell-5.0.14.tgz",
-      "integrity": "sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-public-licenses": {
-      "version": "2.0.13",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.13.tgz",
-      "integrity": "sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-python": {
-      "version": "4.2.18",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.18.tgz",
-      "integrity": "sha512-hYczHVqZBsck7DzO5LumBLJM119a3F17aj8a7lApnPIS7cmEwnPc2eACNscAHDk7qAo2127oI7axUoFMe9/g1g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/dict-data-science": "^2.0.8"
-      }
-    },
-    "node_modules/@cspell/dict-r": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-r/-/dict-r-2.1.0.tgz",
-      "integrity": "sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-ruby": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-ruby/-/dict-ruby-5.0.8.tgz",
-      "integrity": "sha512-ixuTneU0aH1cPQRbWJvtvOntMFfeQR2KxT8LuAv5jBKqQWIHSxzGlp+zX3SVyoeR0kOWiu64/O5Yn836A5yMcQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-rust": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.11.tgz",
-      "integrity": "sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-scala": {
-      "version": "5.0.7",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-scala/-/dict-scala-5.0.7.tgz",
-      "integrity": "sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-shell": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.0.tgz",
-      "integrity": "sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-software-terms": {
-      "version": "5.0.10",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.0.10.tgz",
-      "integrity": "sha512-2nTcVKTYJKU5GzeviXGPtRRC9d23MtfpD4PM4pLSzl29/5nx5MxOUHkzPuJdyaw9mXIz8Rm9IlGeVAvQoTI8aw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-sql": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-sql/-/dict-sql-2.2.0.tgz",
-      "integrity": "sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-svelte": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-svelte/-/dict-svelte-1.0.6.tgz",
-      "integrity": "sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-swift": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-swift/-/dict-swift-2.0.5.tgz",
-      "integrity": "sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-terraform": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-terraform/-/dict-terraform-1.1.1.tgz",
-      "integrity": "sha512-07KFDwCU7EnKl4hOZLsLKlj6Zceq/IsQ3LRWUyIjvGFfZHdoGtFdCp3ZPVgnFaAcd/DKv+WVkrOzUBSYqHopQQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-typescript": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.1.tgz",
-      "integrity": "sha512-jdnKg4rBl75GUBTsUD6nTJl7FGvaIt5wWcWP7TZSC3rV1LfkwvbUiY3PiGpfJlAIdnLYSeFWIpYU9gyVgz206w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dict-vue": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dict-vue/-/dict-vue-3.0.4.tgz",
-      "integrity": "sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@cspell/dynamic-import": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-8.19.4.tgz",
-      "integrity": "sha512-0LLghC64+SiwQS20Sa0VfFUBPVia1rNyo0bYeIDoB34AA3qwguDBVJJkthkpmaP1R2JeR/VmxmJowuARc4ZUxA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/url": "8.19.4",
-        "import-meta-resolve": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=18.0"
-      }
-    },
-    "node_modules/@cspell/filetypes": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-8.19.4.tgz",
-      "integrity": "sha512-D9hOCMyfKtKjjqQJB8F80PWsjCZhVGCGUMiDoQpcta0e+Zl8vHgzwaC0Ai4QUGBhwYEawHGiWUd7Y05u/WXiNQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/strong-weak-map": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-8.19.4.tgz",
-      "integrity": "sha512-MUfFaYD8YqVe32SQaYLI24/bNzaoyhdBIFY5pVrvMo1ZCvMl8AlfI2OcBXvcGb5aS5z7sCNCJm11UuoYbLI1zw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@cspell/url": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/@cspell/url/-/url-8.19.4.tgz",
-      "integrity": "sha512-Pa474iBxS+lxsAL4XkETPGIq3EgMLCEb9agj3hAd2VGMTCApaiUvamR4b+uGXIPybN70piFxvzrfoxsG2uIP6A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18.0"
-      }
-    },
-    "node_modules/@dabh/diagnostics": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
-      "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==",
-      "license": "MIT",
-      "dependencies": {
-        "colorspace": "1.1.x",
-        "enabled": "2.0.x",
-        "kuler": "^2.0.0"
-      }
-    },
-    "node_modules/@dependents/detective-less": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz",
-      "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==",
-      "license": "MIT",
-      "dependencies": {
-        "gonzales-pe": "^4.3.0",
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@emnapi/core": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
-      "integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@emnapi/wasi-threads": "1.0.2",
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@emnapi/runtime": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
-      "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@emnapi/wasi-threads": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
-      "integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@esbuild/aix-ppc64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-arm64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.25.4",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz",
-      "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-arm64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/darwin-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/freebsd-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.4",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz",
-      "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==",
-      "cpu": [
-        "arm"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.4",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz",
-      "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ia32": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-loong64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-mips64el": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-ppc64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.4",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz",
-      "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.4",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz",
-      "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==",
-      "cpu": [
-        "s390x"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/linux-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-arm64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/netbsd-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-arm64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/openbsd-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/sunos-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-arm64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-ia32": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/win32-x64": {
-      "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"
-      ],
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
-      "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
-      }
-    },
-    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint-community/regexpp": {
-      "version": "4.12.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
-      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@eslint/compat": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.9.tgz",
-      "integrity": "sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "peerDependencies": {
-        "eslint": "^9.10.0"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@eslint/config-array": {
-      "version": "0.20.0",
-      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
-      "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@eslint/object-schema": "^2.1.6",
-        "debug": "^4.3.1",
-        "minimatch": "^3.1.2"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/config-helpers": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
-      "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/core": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
-      "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@types/json-schema": "^7.0.15"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/eslintrc": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
-      "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^10.0.1",
-        "globals": "^14.0.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@eslint/js": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
-      "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://eslint.org/donate"
-      }
-    },
-    "node_modules/@eslint/object-schema": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
-      "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@eslint/plugin-kit": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
-      "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@eslint/core": "^0.14.0",
-        "levn": "^0.4.1"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      }
-    },
-    "node_modules/@fastify/busboy": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz",
-      "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==",
-      "license": "MIT"
-    },
-    "node_modules/@humanfs/core": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
-      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18.0"
-      }
-    },
-    "node_modules/@humanfs/node": {
-      "version": "0.16.6",
-      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
-      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@humanfs/core": "^0.19.1",
-        "@humanwhocodes/retry": "^0.3.0"
-      },
-      "engines": {
-        "node": ">=18.18.0"
-      }
-    },
-    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
-      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=12.22"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@humanwhocodes/retry": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
-      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@isaacs/cliui": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
-      "license": "ISC",
-      "dependencies": {
-        "string-width": "^5.1.2",
-        "string-width-cjs": "npm:string-width@^4.2.0",
-        "strip-ansi": "^7.0.1",
-        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
-        "wrap-ansi": "^8.1.0",
-        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
-    "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "license": "MIT"
-    },
-    "node_modules/@isaacs/cliui/node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
-      "license": "MIT",
-      "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
-    "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
-      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^6.1.0",
-        "string-width": "^5.0.1",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/@isaacs/fs-minipass": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
-      "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
-      "license": "ISC",
-      "dependencies": {
-        "minipass": "^7.0.4"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/@istanbuljs/schema": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-      "license": "MIT"
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.0.tgz",
-      "integrity": "sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "consola": "^3.2.3",
-        "detect-libc": "^2.0.0",
-        "https-proxy-agent": "^7.0.5",
-        "node-fetch": "^2.6.7",
-        "nopt": "^8.0.0",
-        "semver": "^7.5.3",
-        "tar": "^7.4.0"
-      },
-      "bin": {
-        "node-pre-gyp": "bin/node-pre-gyp"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@napi-rs/wasm-runtime": {
-      "version": "0.2.10",
-      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.10.tgz",
-      "integrity": "sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@emnapi/core": "^1.4.3",
-        "@emnapi/runtime": "^1.4.3",
-        "@tybys/wasm-util": "^0.9.0"
-      }
-    },
-    "node_modules/@netlify/binary-info": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@netlify/binary-info/-/binary-info-1.0.0.tgz",
-      "integrity": "sha512-4wMPu9iN3/HL97QblBsBay3E1etIciR84izI3U+4iALY+JHCrI+a2jO0qbAZ/nxKoegypYEaiiqWXylm+/zfrw==",
-      "license": "Apache 2"
-    },
-    "node_modules/@netlify/blobs": {
-      "version": "9.1.2",
-      "resolved": "https://registry.npmjs.org/@netlify/blobs/-/blobs-9.1.2.tgz",
-      "integrity": "sha512-7dMjExSH4zj4ShvLem49mE3mf0K171Tx2pV4WDWhJbRUWW3SJIR2qntz0LvUGS97N5HO1SmnzrgWUhEXCsApiw==",
-      "license": "MIT",
-      "dependencies": {
-        "@netlify/dev-utils": "2.2.0",
-        "@netlify/runtime-utils": "1.3.1"
-      },
-      "engines": {
-        "node": "^14.16.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@netlify/dev-utils": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/@netlify/dev-utils/-/dev-utils-2.2.0.tgz",
-      "integrity": "sha512-5XUvZuffe3KetyhbWwd4n2ktd7wraocCYw10tlM+/u/95iAz29GjNiuNxbCD1T6Bn1MyGc4QLVNKOWhzJkVFAw==",
-      "license": "MIT",
-      "dependencies": {
-        "@whatwg-node/server": "^0.9.60",
-        "chokidar": "^4.0.1",
-        "decache": "^4.6.2",
-        "dot-prop": "9.0.0",
-        "env-paths": "^3.0.0",
-        "find-up": "7.0.0",
-        "lodash.debounce": "^4.0.8",
-        "netlify": "^13.3.5",
-        "parse-gitignore": "^2.0.0",
-        "uuid": "^11.1.0",
-        "write-file-atomic": "^6.0.0"
-      },
-      "engines": {
-        "node": "^14.16.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@netlify/functions": {
-      "version": "3.1.10",
-      "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-3.1.10.tgz",
-      "integrity": "sha512-sI93kcJ2cUoMgDRPnrEm0lZhuiDVDqM6ngS/UbHTApIH3+eg3yZM5p/0SDFQQq9Bad0/srFmgBmTdXushzY5kg==",
-      "license": "MIT",
-      "dependencies": {
-        "@netlify/blobs": "9.1.2",
-        "@netlify/dev-utils": "2.2.0",
-        "@netlify/serverless-functions-api": "1.41.2",
-        "@netlify/zip-it-and-ship-it": "^12.1.0",
-        "cron-parser": "^4.9.0",
-        "decache": "^4.6.2",
-        "extract-zip": "^2.0.1",
-        "is-stream": "^4.0.1",
-        "jwt-decode": "^4.0.0",
-        "lambda-local": "^2.2.0",
-        "read-package-up": "^11.0.0",
-        "source-map-support": "^0.5.21"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@netlify/open-api": {
-      "version": "2.37.0",
-      "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.37.0.tgz",
-      "integrity": "sha512-zXnRFkxgNsalSgU8/vwTWnav3R+8KG8SsqHxqaoJdjjJtnZR7wo3f+qqu4z+WtZ/4V7fly91HFUwZ6Uz2OdW7w==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.8.0"
-      }
-    },
-    "node_modules/@netlify/runtime-utils": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/@netlify/runtime-utils/-/runtime-utils-1.3.1.tgz",
-      "integrity": "sha512-7/vIJlMYrPJPlEW84V2yeRuG3QBu66dmlv9neTmZ5nXzwylhBEOhy11ai+34A8mHCSZI4mKns25w3HM9kaDdJg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/@netlify/serverless-functions-api": {
-      "version": "1.41.2",
-      "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.41.2.tgz",
-      "integrity": "sha512-pfCkH50JV06SGMNsNPjn8t17hOcId4fA881HeYQgMBOrewjsw4csaYgHEnCxCEu24Y5x75E2ULbFpqm9CvRCqw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/@netlify/zip-it-and-ship-it": {
-      "version": "12.1.0",
-      "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-12.1.0.tgz",
-      "integrity": "sha512-+ND2fNnfeOZwnho79aMQ5rreFpI9tu/l4N9/F5H8t9rKYwVHHlv5Zi9o6g/gxZHDLfSbGC9th7Z46CihV8JaZw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.22.5",
-        "@babel/types": "7.27.1",
-        "@netlify/binary-info": "^1.0.0",
-        "@netlify/serverless-functions-api": "^1.41.2",
-        "@vercel/nft": "0.29.3",
-        "archiver": "^7.0.0",
-        "common-path-prefix": "^3.0.0",
-        "copy-file": "^11.0.0",
-        "es-module-lexer": "^1.0.0",
-        "esbuild": "0.25.4",
-        "execa": "^8.0.0",
-        "fast-glob": "^3.3.2",
-        "filter-obj": "^6.0.0",
-        "find-up": "^7.0.0",
-        "glob": "^8.0.3",
-        "is-builtin-module": "^3.1.0",
-        "is-path-inside": "^4.0.0",
-        "junk": "^4.0.0",
-        "locate-path": "^7.0.0",
-        "merge-options": "^3.0.4",
-        "minimatch": "^9.0.0",
-        "normalize-path": "^3.0.0",
-        "p-map": "^7.0.0",
-        "path-exists": "^5.0.0",
-        "precinct": "^12.0.0",
-        "require-package-name": "^2.0.1",
-        "resolve": "^2.0.0-next.1",
-        "semver": "^7.3.8",
-        "tmp-promise": "^3.0.2",
-        "toml": "^3.0.0",
-        "unixify": "^1.0.0",
-        "urlpattern-polyfill": "8.0.2",
-        "yargs": "^17.0.0",
-        "zod": "^3.23.8"
-      },
-      "bin": {
-        "zip-it-and-ship-it": "bin.js"
-      },
-      "engines": {
-        "node": ">=18.14.0"
-      }
-    },
-    "node_modules/@netlify/zip-it-and-ship-it/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@netlify/zip-it-and-ship-it/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nolyfill/is-core-module": {
-      "version": "1.0.39",
-      "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
-      "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.4.0"
-      }
-    },
-    "node_modules/@pkgjs/parseargs": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
-      "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@pkgr/core": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz",
-      "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/pkgr"
-      }
-    },
-    "node_modules/@rolldown/pluginutils": {
-      "version": "1.0.0-beta.9",
-      "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz",
-      "integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@rollup/pluginutils": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz",
-      "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "^1.0.0",
-        "estree-walker": "^2.0.2",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
-      "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
-      "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
-      "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
-      "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
-      "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
-      "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
-      "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
-      "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
-      "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
-      "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
-      "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
-      "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
-      "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
-      "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
-      "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
-      "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
-      "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
-      "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
-      "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
-      "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rtsao/scc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
-      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@swc/core": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.11.29.tgz",
-      "integrity": "sha512-g4mThMIpWbNhV8G2rWp5a5/Igv8/2UFRJx2yImrLGMgrDDYZIopqZ/z0jZxDgqNA1QDx93rpwNF7jGsxVWcMlA==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@swc/counter": "^0.1.3",
-        "@swc/types": "^0.1.21"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/swc"
-      },
-      "optionalDependencies": {
-        "@swc/core-darwin-arm64": "1.11.29",
-        "@swc/core-darwin-x64": "1.11.29",
-        "@swc/core-linux-arm-gnueabihf": "1.11.29",
-        "@swc/core-linux-arm64-gnu": "1.11.29",
-        "@swc/core-linux-arm64-musl": "1.11.29",
-        "@swc/core-linux-x64-gnu": "1.11.29",
-        "@swc/core-linux-x64-musl": "1.11.29",
-        "@swc/core-win32-arm64-msvc": "1.11.29",
-        "@swc/core-win32-ia32-msvc": "1.11.29",
-        "@swc/core-win32-x64-msvc": "1.11.29"
-      },
-      "peerDependencies": {
-        "@swc/helpers": ">=0.5.17"
-      },
-      "peerDependenciesMeta": {
-        "@swc/helpers": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@swc/core-darwin-arm64": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.11.29.tgz",
-      "integrity": "sha512-whsCX7URzbuS5aET58c75Dloby3Gtj/ITk2vc4WW6pSDQKSPDuONsIcZ7B2ng8oz0K6ttbi4p3H/PNPQLJ4maQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-darwin-x64": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.11.29.tgz",
-      "integrity": "sha512-S3eTo/KYFk+76cWJRgX30hylN5XkSmjYtCBnM4jPLYn7L6zWYEPajsFLmruQEiTEDUg0gBEWLMNyUeghtswouw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-linux-arm-gnueabihf": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.11.29.tgz",
-      "integrity": "sha512-o9gdshbzkUMG6azldHdmKklcfrcMx+a23d/2qHQHPDLUPAN+Trd+sDQUYArK5Fcm7TlpG4sczz95ghN0DMkM7g==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "Apache-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-linux-arm64-gnu": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.11.29.tgz",
-      "integrity": "sha512-sLoaciOgUKQF1KX9T6hPGzvhOQaJn+3DHy4LOHeXhQqvBgr+7QcZ+hl4uixPKTzxk6hy6Hb0QOvQEdBAAR1gXw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-linux-arm64-musl": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.11.29.tgz",
-      "integrity": "sha512-PwjB10BC0N+Ce7RU/L23eYch6lXFHz7r3NFavIcwDNa/AAqywfxyxh13OeRy+P0cg7NDpWEETWspXeI4Ek8otw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-linux-x64-gnu": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.11.29.tgz",
-      "integrity": "sha512-i62vBVoPaVe9A3mc6gJG07n0/e7FVeAvdD9uzZTtGLiuIfVfIBta8EMquzvf+POLycSk79Z6lRhGPZPJPYiQaA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-linux-x64-musl": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.11.29.tgz",
-      "integrity": "sha512-YER0XU1xqFdK0hKkfSVX1YIyCvMDI7K07GIpefPvcfyNGs38AXKhb2byySDjbVxkdl4dycaxxhRyhQ2gKSlsFQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-win32-arm64-msvc": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.11.29.tgz",
-      "integrity": "sha512-po+WHw+k9g6FAg5IJ+sMwtA/fIUL3zPQ4m/uJgONBATCVnDDkyW6dBA49uHNVtSEvjvhuD8DVWdFP847YTcITw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-win32-ia32-msvc": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.11.29.tgz",
-      "integrity": "sha512-h+NjOrbqdRBYr5ItmStmQt6x3tnhqgwbj9YxdGPepbTDamFv7vFnhZR0YfB3jz3UKJ8H3uGJ65Zw1VsC+xpFkg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/core-win32-x64-msvc": {
-      "version": "1.11.29",
-      "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.11.29.tgz",
-      "integrity": "sha512-Q8cs2BDV9wqDvqobkXOYdC+pLUSEpX/KvI0Dgfun1F+LzuLotRFuDhrvkU9ETJA6OnD2+Fn/ieHgloiKA/Mn/g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "Apache-2.0 AND MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@swc/counter": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
-      "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
-      "dev": true,
-      "license": "Apache-2.0"
-    },
-    "node_modules/@swc/types": {
-      "version": "0.1.21",
-      "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.21.tgz",
-      "integrity": "sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@swc/counter": "^0.1.3"
-      }
-    },
-    "node_modules/@tybys/wasm-util": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
-      "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
-    "node_modules/@types/eslint": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
-      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
-      }
-    },
-    "node_modules/@types/eslint-plugin-react-refresh": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/@types/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.0.tgz",
-      "integrity": "sha512-yrXOBjWYgBoaSnFArD7u0tctO8fjYuo0a8Kqx1gFC8uLOHMwd7or8gJvSu6i0iHRGRPlqkt7VCj7/OAovXh2AA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/eslint": "*"
-      }
-    },
-    "node_modules/@types/estree": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
-      "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
-      "license": "MIT"
-    },
-    "node_modules/@types/hast": {
-      "version": "2.3.10",
-      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
-      "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/unist": "^2"
-      }
-    },
-    "node_modules/@types/json-schema": {
-      "version": "7.0.15",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/node": {
-      "version": "22.15.24",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz",
-      "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==",
-      "devOptional": true,
-      "license": "MIT",
-      "dependencies": {
-        "undici-types": "~6.21.0"
-      }
-    },
-    "node_modules/@types/normalize-package-data": {
-      "version": "2.4.4",
-      "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
-      "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
-      "license": "MIT"
-    },
-    "node_modules/@types/prop-types": {
-      "version": "15.7.14",
-      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
-      "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/react": {
-      "version": "18.3.23",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
-      "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/prop-types": "*",
-        "csstype": "^3.0.2"
-      }
-    },
-    "node_modules/@types/react-dom": {
-      "version": "18.3.7",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
-      "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "^18.0.0"
-      }
-    },
-    "node_modules/@types/react-syntax-highlighter": {
-      "version": "15.5.13",
-      "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz",
-      "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/react": "*"
-      }
-    },
-    "node_modules/@types/triple-beam": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz",
-      "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==",
-      "license": "MIT"
-    },
-    "node_modules/@types/unist": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
-      "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
-      "license": "MIT"
-    },
-    "node_modules/@types/yauzl": {
-      "version": "2.10.3",
-      "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
-      "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.33.0.tgz",
-      "integrity": "sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.33.0",
-        "@typescript-eslint/type-utils": "8.33.0",
-        "@typescript-eslint/utils": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^7.0.0",
-        "natural-compare": "^1.4.0",
-        "ts-api-utils": "^2.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^8.33.0",
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
-      "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.33.0.tgz",
-      "integrity": "sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "8.33.0",
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/typescript-estree": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/project-service": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.33.0.tgz",
-      "integrity": "sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==",
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/tsconfig-utils": "^8.33.0",
-        "@typescript-eslint/types": "^8.33.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.33.0.tgz",
-      "integrity": "sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/tsconfig-utils": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.33.0.tgz",
-      "integrity": "sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==",
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.33.0.tgz",
-      "integrity": "sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.33.0",
-        "@typescript-eslint/utils": "8.33.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^2.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.33.0.tgz",
-      "integrity": "sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==",
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.33.0.tgz",
-      "integrity": "sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/project-service": "8.33.0",
-        "@typescript-eslint/tsconfig-utils": "8.33.0",
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/visitor-keys": "8.33.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^2.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/utils": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.33.0.tgz",
-      "integrity": "sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.7.0",
-        "@typescript-eslint/scope-manager": "8.33.0",
-        "@typescript-eslint/types": "8.33.0",
-        "@typescript-eslint/typescript-estree": "8.33.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.33.0.tgz",
-      "integrity": "sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.33.0",
-        "eslint-visitor-keys": "^4.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@unrs/resolver-binding-darwin-arm64": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.8.tgz",
-      "integrity": "sha512-rsRK8T7yxraNRDmpFLZCWqpea6OlXPNRRCjWMx24O1V86KFol7u2gj9zJCv6zB1oJjtnzWceuqdnCgOipFcJPA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-darwin-x64": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.7.8.tgz",
-      "integrity": "sha512-16yEMWa+Olqkk8Kl6Bu0ltT5OgEedkSAsxcz1B3yEctrDYp3EMBu/5PPAGhWVGnwhtf3hNe3y15gfYBAjOv5tQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-freebsd-x64": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.7.8.tgz",
-      "integrity": "sha512-ST4uqF6FmdZQgv+Q73FU1uHzppeT4mhX3IIEmHlLObrv5Ep50olWRz0iQ4PWovadjHMTAmpuJAGaAuCZYb7UAQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.7.8.tgz",
-      "integrity": "sha512-Z/A/4Rm2VWku2g25C3tVb986fY6unx5jaaCFpx1pbAj0OKkyuJ5wcQLHvNbIcJ9qhiYwXfrkB7JNlxrAbg7YFg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.7.8.tgz",
-      "integrity": "sha512-HN0p7o38qKmDo3bZUiQa6gP7Qhf0sKgJZtRfSHi6JL2Gi4NaUVF0EO1sQ1RHbeQ4VvfjUGMh3QE5dxEh06BgQQ==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.7.8.tgz",
-      "integrity": "sha512-HsoVqDBt9G69AN0KWeDNJW+7i8KFlwxrbbnJffgTGpiZd6Jw+Q95sqkXp8y458KhKduKLmXfVZGnKBTNxAgPjw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.7.8.tgz",
-      "integrity": "sha512-VfR2yTDUbUvn+e/Aw22CC9fQg9zdShHAfwWctNBdOk7w9CHWl2OtYlcMvjzMAns8QxoHQoqn3/CEnZ4Ts7hfrA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.7.8.tgz",
-      "integrity": "sha512-xUauVQNz4uDgs4UJJiUAwMe3N0PA0wvtImh7V0IFu++UKZJhssXbKHBRR4ecUJpUHCX2bc4Wc8sGsB6P+7BANg==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.7.8.tgz",
-      "integrity": "sha512-GqyIB+CuSHGhhc8ph5RrurtNetYJjb6SctSHafqmdGcRuGi6uyTMR8l18hMEhZFsXdFMc/MpInPLvmNV22xn+A==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.7.8.tgz",
-      "integrity": "sha512-eEU3rWIFRv60xaAbtsgwHNWRZGD7cqkpCvNtio/f1TjEE3HfKLzPNB24fA9X/8ZXQrGldE65b7UKK3PmO4eWIQ==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.7.8.tgz",
-      "integrity": "sha512-GVLI0f4I4TlLqEUoOFvTWedLsJEdvsD0+sxhdvQ5s+N+m2DSynTs8h9jxR0qQbKlpHWpc2Ortz3z48NHRT4l+w==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.7.8.tgz",
-      "integrity": "sha512-GX1pZ/4ncUreB0Rlp1l7bhKAZ8ZmvDIgXdeb5V2iK0eRRF332+6gRfR/r5LK88xfbtOpsmRHU6mQ4N8ZnwvGEA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-linux-x64-musl": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.7.8.tgz",
-      "integrity": "sha512-n1N84MnsvDupzVuYqJGj+2pb9s8BI1A5RgXHvtVFHedGZVBCFjDpQVRlmsFMt6xZiKwDPaqsM16O/1isCUGt7w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-wasm32-wasi": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.7.8.tgz",
-      "integrity": "sha512-x94WnaU5g+pCPDVedfnXzoG6lCOF2xFGebNwhtbJCWfceE94Zj8aysSxdxotlrZrxnz5D3ijtyFUYtpz04n39Q==",
-      "cpu": [
-        "wasm32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@napi-rs/wasm-runtime": "^0.2.10"
-      },
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.7.8.tgz",
-      "integrity": "sha512-vst2u8EJZ5L6jhJ6iLis3w9rg16aYqRxQuBAMYQRVrPMI43693hLP7DuqyOBRKgsQXy9/jgh204k0ViHkqQgdg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.7.8.tgz",
-      "integrity": "sha512-yb3LZOLMFqnA+/ShlE1E5bpYPGDsA590VHHJPB+efnyowT776GJXBoh82em6O9WmYBUq57YblGTcMYAFBm72HA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.7.8.tgz",
-      "integrity": "sha512-hHKFx+opG5BA3/owMXon8ypwSotBGTdblG6oda/iOu9+OEYnk0cxD2uIcGyGT8jCK578kV+xMrNxqbn8Zjlpgw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@vercel/nft": {
-      "version": "0.29.3",
-      "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.29.3.tgz",
-      "integrity": "sha512-aVV0E6vJpuvImiMwU1/5QKkw2N96BRFE7mBYGS7FhXUoS6V7SarQ+8tuj33o7ofECz8JtHpmQ9JW+oVzOoB7MA==",
-      "license": "MIT",
-      "dependencies": {
-        "@mapbox/node-pre-gyp": "^2.0.0",
-        "@rollup/pluginutils": "^5.1.3",
-        "acorn": "^8.6.0",
-        "acorn-import-attributes": "^1.9.5",
-        "async-sema": "^3.1.1",
-        "bindings": "^1.4.0",
-        "estree-walker": "2.0.2",
-        "glob": "^10.4.5",
-        "graceful-fs": "^4.2.9",
-        "node-gyp-build": "^4.2.2",
-        "picomatch": "^4.0.2",
-        "resolve-from": "^5.0.0"
-      },
-      "bin": {
-        "nft": "out/cli.js"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@vercel/nft/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@vercel/nft/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
-      "license": "ISC",
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@vercel/nft/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@vitejs/plugin-react-swc": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.10.0.tgz",
-      "integrity": "sha512-ZmkdHw3wo/o/Rk05YsXZs/DJAfY2CdQ5DUAjoWji+PEr+hYADdGMCGgEAILbiKj+CjspBTuTACBcWDrmC8AUfw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rolldown/pluginutils": "1.0.0-beta.9",
-        "@swc/core": "^1.11.22"
-      },
-      "peerDependencies": {
-        "vite": "^4 || ^5 || ^6"
-      }
-    },
-    "node_modules/@vitest/coverage-v8": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.1.4.tgz",
-      "integrity": "sha512-G4p6OtioySL+hPV7Y6JHlhpsODbJzt1ndwHAFkyk6vVjpK03PFsKnauZIzcd0PrK4zAbc5lc+jeZ+eNGiMA+iw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@ampproject/remapping": "^2.3.0",
-        "@bcoe/v8-coverage": "^1.0.2",
-        "debug": "^4.4.0",
-        "istanbul-lib-coverage": "^3.2.2",
-        "istanbul-lib-report": "^3.0.1",
-        "istanbul-lib-source-maps": "^5.0.6",
-        "istanbul-reports": "^3.1.7",
-        "magic-string": "^0.30.17",
-        "magicast": "^0.3.5",
-        "std-env": "^3.9.0",
-        "test-exclude": "^7.0.1",
-        "tinyrainbow": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      },
-      "peerDependencies": {
-        "@vitest/browser": "3.1.4",
-        "vitest": "3.1.4"
-      },
-      "peerDependenciesMeta": {
-        "@vitest/browser": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vitest/expect": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.1.4.tgz",
-      "integrity": "sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@vitest/spy": "3.1.4",
-        "@vitest/utils": "3.1.4",
-        "chai": "^5.2.0",
-        "tinyrainbow": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/@vitest/mocker": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.1.4.tgz",
-      "integrity": "sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@vitest/spy": "3.1.4",
-        "estree-walker": "^3.0.3",
-        "magic-string": "^0.30.17"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      },
-      "peerDependencies": {
-        "msw": "^2.4.9",
-        "vite": "^5.0.0 || ^6.0.0"
-      },
-      "peerDependenciesMeta": {
-        "msw": {
-          "optional": true
-        },
-        "vite": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@vitest/mocker/node_modules/estree-walker": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
-      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "^1.0.0"
-      }
-    },
-    "node_modules/@vitest/pretty-format": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.1.4.tgz",
-      "integrity": "sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "tinyrainbow": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/@vitest/runner": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.1.4.tgz",
-      "integrity": "sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@vitest/utils": "3.1.4",
-        "pathe": "^2.0.3"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/@vitest/snapshot": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.1.4.tgz",
-      "integrity": "sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@vitest/pretty-format": "3.1.4",
-        "magic-string": "^0.30.17",
-        "pathe": "^2.0.3"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/@vitest/spy": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.1.4.tgz",
-      "integrity": "sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "tinyspy": "^3.0.2"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/@vitest/utils": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.1.4.tgz",
-      "integrity": "sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@vitest/pretty-format": "3.1.4",
-        "loupe": "^3.1.3",
-        "tinyrainbow": "^2.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/@vue/compiler-core": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz",
-      "integrity": "sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.27.2",
-        "@vue/shared": "3.5.16",
-        "entities": "^4.5.0",
-        "estree-walker": "^2.0.2",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/@vue/compiler-dom": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.16.tgz",
-      "integrity": "sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/compiler-core": "3.5.16",
-        "@vue/shared": "3.5.16"
-      }
-    },
-    "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.16.tgz",
-      "integrity": "sha512-rQR6VSFNpiinDy/DVUE0vHoIDUF++6p910cgcZoaAUm3POxgNOOdS/xgoll3rNdKYTYPnnbARDCZOyZ+QSe6Pw==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.27.2",
-        "@vue/compiler-core": "3.5.16",
-        "@vue/compiler-dom": "3.5.16",
-        "@vue/compiler-ssr": "3.5.16",
-        "@vue/shared": "3.5.16",
-        "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.17",
-        "postcss": "^8.5.3",
-        "source-map-js": "^1.2.1"
-      }
-    },
-    "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.16.tgz",
-      "integrity": "sha512-d2V7kfxbdsjrDSGlJE7my1ZzCXViEcqN6w14DOsDrUCHEA6vbnVCpRFfrc4ryCP/lCKzX2eS1YtnLE/BuC9f/A==",
-      "license": "MIT",
-      "dependencies": {
-        "@vue/compiler-dom": "3.5.16",
-        "@vue/shared": "3.5.16"
-      }
-    },
-    "node_modules/@vue/shared": {
-      "version": "3.5.16",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.16.tgz",
-      "integrity": "sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==",
-      "license": "MIT"
-    },
-    "node_modules/@whatwg-node/disposablestack": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz",
-      "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==",
-      "license": "MIT",
-      "dependencies": {
-        "@whatwg-node/promise-helpers": "^1.0.0",
-        "tslib": "^2.6.3"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/@whatwg-node/fetch": {
-      "version": "0.10.8",
-      "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.8.tgz",
-      "integrity": "sha512-Rw9z3ctmeEj8QIB9MavkNJqekiu9usBCSMZa+uuAvM0lF3v70oQVCXNppMIqaV6OTZbdaHF1M2HLow58DEw+wg==",
-      "license": "MIT",
-      "dependencies": {
-        "@whatwg-node/node-fetch": "^0.7.21",
-        "urlpattern-polyfill": "^10.0.0"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/@whatwg-node/fetch/node_modules/urlpattern-polyfill": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz",
-      "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==",
-      "license": "MIT"
-    },
-    "node_modules/@whatwg-node/node-fetch": {
-      "version": "0.7.21",
-      "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.21.tgz",
-      "integrity": "sha512-QC16IdsEyIW7kZd77aodrMO7zAoDyyqRCTLg+qG4wqtP4JV9AA+p7/lgqMdD29XyiYdVvIdFrfI9yh7B1QvRvw==",
-      "license": "MIT",
-      "dependencies": {
-        "@fastify/busboy": "^3.1.1",
-        "@whatwg-node/disposablestack": "^0.0.6",
-        "@whatwg-node/promise-helpers": "^1.3.2",
-        "tslib": "^2.6.3"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/@whatwg-node/promise-helpers": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz",
-      "integrity": "sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA==",
-      "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.6.3"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/@whatwg-node/server": {
-      "version": "0.9.71",
-      "resolved": "https://registry.npmjs.org/@whatwg-node/server/-/server-0.9.71.tgz",
-      "integrity": "sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==",
-      "license": "MIT",
-      "dependencies": {
-        "@whatwg-node/disposablestack": "^0.0.6",
-        "@whatwg-node/fetch": "^0.10.5",
-        "@whatwg-node/promise-helpers": "^1.2.2",
-        "tslib": "^2.6.3"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      }
-    },
-    "node_modules/abbrev": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz",
-      "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==",
-      "license": "ISC",
-      "engines": {
-        "node": "^18.17.0 || >=20.5.0"
-      }
-    },
-    "node_modules/abort-controller": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
-      "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
-      "license": "MIT",
-      "dependencies": {
-        "event-target-shim": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=6.5"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.14.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
-      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
-      "license": "MIT",
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-import-attributes": {
-      "version": "1.9.5",
-      "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz",
-      "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==",
-      "license": "MIT",
-      "peerDependencies": {
-        "acorn": "^8"
-      }
-    },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/agent-base": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz",
-      "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/ansi-styles/node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/archiver": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz",
-      "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==",
-      "license": "MIT",
-      "dependencies": {
-        "archiver-utils": "^5.0.2",
-        "async": "^3.2.4",
-        "buffer-crc32": "^1.0.0",
-        "readable-stream": "^4.0.0",
-        "readdir-glob": "^1.1.2",
-        "tar-stream": "^3.0.0",
-        "zip-stream": "^6.0.1"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/archiver-utils": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz",
-      "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==",
-      "license": "MIT",
-      "dependencies": {
-        "glob": "^10.0.0",
-        "graceful-fs": "^4.2.0",
-        "is-stream": "^2.0.1",
-        "lazystream": "^1.0.0",
-        "lodash": "^4.17.15",
-        "normalize-path": "^3.0.0",
-        "readable-stream": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/archiver-utils/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/archiver-utils/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
-      "license": "ISC",
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/archiver-utils/node_modules/is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/archiver-utils/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true,
-      "license": "Python-2.0"
-    },
-    "node_modules/array-buffer-byte-length": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
-      "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "is-array-buffer": "^3.0.5"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-timsort": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz",
-      "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/array.prototype.findlast": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
-      "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
-      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.9",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "es-shim-unscopables": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
-      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
-      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.tosorted": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
-      "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.3",
-        "es-errors": "^1.3.0",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
-      "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "is-array-buffer": "^3.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/assertion-error": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
-      "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/ast-module-types": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz",
-      "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/async": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
-      "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
-      "license": "MIT"
-    },
-    "node_modules/async-function": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
-      "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/async-sema": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz",
-      "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==",
-      "license": "MIT"
-    },
-    "node_modules/available-typed-arrays": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
-      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "possible-typed-array-names": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/b4a": {
-      "version": "1.6.7",
-      "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
-      "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
-      "license": "Apache-2.0"
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "license": "MIT"
-    },
-    "node_modules/bare-events": {
-      "version": "2.5.4",
-      "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz",
-      "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==",
-      "license": "Apache-2.0",
-      "optional": true
-    },
-    "node_modules/base64-js": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
-      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
-      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
-      "license": "MIT",
-      "dependencies": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-      "license": "MIT",
-      "dependencies": {
-        "fill-range": "^7.1.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/buffer": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
-      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "base64-js": "^1.3.1",
-        "ieee754": "^1.2.1"
-      }
-    },
-    "node_modules/buffer-crc32": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz",
-      "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/buffer-from": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
-      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-      "license": "MIT"
-    },
-    "node_modules/builtin-modules": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
-      "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/cac": {
-      "version": "6.7.14",
-      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
-      "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
-      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/call-bound": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
-      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "get-intrinsic": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsite": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-      "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/chai": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
-      "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "assertion-error": "^2.0.1",
-        "check-error": "^2.1.1",
-        "deep-eql": "^5.0.1",
-        "loupe": "^3.1.0",
-        "pathval": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/chalk": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz",
-      "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.17.0 || ^14.13 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/chalk-template": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-1.1.0.tgz",
-      "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "chalk": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk-template?sponsor=1"
-      }
-    },
-    "node_modules/character-entities": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
-      "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/character-entities-legacy": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
-      "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/character-reference-invalid": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
-      "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/check-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
-      "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 16"
-      }
-    },
-    "node_modules/chokidar": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
-      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
-      "license": "MIT",
-      "dependencies": {
-        "readdirp": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 14.16.0"
-      },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/chownr": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
-      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
-      "license": "BlueOak-1.0.0",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/clear-module": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz",
-      "integrity": "sha512-LWAxzHqdHsAZlPlEyJ2Poz6AIs384mPeqLVCru2p0BrP9G/kVGuhNyZYClLO6cXlnuJjzC8xtsJIuMjKqLXoAw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "parent-module": "^2.0.0",
-        "resolve-from": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/cliui": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
-      "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
-      "license": "ISC",
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.1",
-        "wrap-ansi": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/color": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
-      "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^1.9.3",
-        "color-string": "^1.6.0"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/color-convert/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "license": "MIT"
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "license": "MIT"
-    },
-    "node_modules/color-string": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
-      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "^1.0.0",
-        "simple-swizzle": "^0.2.2"
-      }
-    },
-    "node_modules/colorspace": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
-      "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
-      "license": "MIT",
-      "dependencies": {
-        "color": "^3.1.3",
-        "text-hex": "1.0.x"
-      }
-    },
-    "node_modules/comma-separated-tokens": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
-      "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/commander": {
-      "version": "13.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
-      "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/comment-json": {
-      "version": "4.2.5",
-      "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz",
-      "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-timsort": "^1.0.3",
-        "core-util-is": "^1.0.3",
-        "esprima": "^4.0.1",
-        "has-own-prop": "^2.0.0",
-        "repeat-string": "^1.6.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/common-path-prefix": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
-      "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
-      "license": "ISC"
-    },
-    "node_modules/compress-commons": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz",
-      "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==",
-      "license": "MIT",
-      "dependencies": {
-        "crc-32": "^1.2.0",
-        "crc32-stream": "^6.0.0",
-        "is-stream": "^2.0.1",
-        "normalize-path": "^3.0.0",
-        "readable-stream": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/compress-commons/node_modules/is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/consola": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
-      "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
-      "license": "MIT",
-      "engines": {
-        "node": "^14.18.0 || >=16.10.0"
-      }
-    },
-    "node_modules/cookie": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz",
-      "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/copy-file": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/copy-file/-/copy-file-11.0.0.tgz",
-      "integrity": "sha512-mFsNh/DIANLqFt5VHZoGirdg7bK5+oTWlhnGu6tgRhzBlnEKWaPX2xrFaLltii/6rmhqFMJqffUgknuRdpYlHw==",
-      "license": "MIT",
-      "dependencies": {
-        "graceful-fs": "^4.2.11",
-        "p-event": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/core-util-is": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
-      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-      "license": "MIT"
-    },
-    "node_modules/crc-32": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
-      "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
-      "license": "Apache-2.0",
-      "bin": {
-        "crc32": "bin/crc32.njs"
-      },
-      "engines": {
-        "node": ">=0.8"
-      }
-    },
-    "node_modules/crc32-stream": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz",
-      "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==",
-      "license": "MIT",
-      "dependencies": {
-        "crc-32": "^1.2.0",
-        "readable-stream": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/cron-parser": {
-      "version": "4.9.0",
-      "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz",
-      "integrity": "sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==",
-      "license": "MIT",
-      "dependencies": {
-        "luxon": "^3.2.1"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
-      "license": "MIT",
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/cspell": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell/-/cspell-8.19.4.tgz",
-      "integrity": "sha512-toaLrLj3usWY0Bvdi661zMmpKW2DVLAG3tcwkAv4JBTisdIRn15kN/qZDrhSieUEhVgJgZJDH4UKRiq29mIFxA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-json-reporter": "8.19.4",
-        "@cspell/cspell-pipe": "8.19.4",
-        "@cspell/cspell-types": "8.19.4",
-        "@cspell/dynamic-import": "8.19.4",
-        "@cspell/url": "8.19.4",
-        "chalk": "^5.4.1",
-        "chalk-template": "^1.1.0",
-        "commander": "^13.1.0",
-        "cspell-dictionary": "8.19.4",
-        "cspell-gitignore": "8.19.4",
-        "cspell-glob": "8.19.4",
-        "cspell-io": "8.19.4",
-        "cspell-lib": "8.19.4",
-        "fast-json-stable-stringify": "^2.1.0",
-        "file-entry-cache": "^9.1.0",
-        "semver": "^7.7.1",
-        "tinyglobby": "^0.2.13"
-      },
-      "bin": {
-        "cspell": "bin.mjs",
-        "cspell-esm": "bin.mjs"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/streetsidesoftware/cspell?sponsor=1"
-      }
-    },
-    "node_modules/cspell-config-lib": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-8.19.4.tgz",
-      "integrity": "sha512-LtFNZEWVrnpjiTNgEDsVN05UqhhJ1iA0HnTv4jsascPehlaUYVoyucgNbFeRs6UMaClJnqR0qT9lnPX+KO1OLg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-types": "8.19.4",
-        "comment-json": "^4.2.5",
-        "yaml": "^2.7.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-dictionary": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-8.19.4.tgz",
-      "integrity": "sha512-lr8uIm7Wub8ToRXO9f6f7in429P1Egm3I+Ps3ZGfWpwLTCUBnHvJdNF/kQqF7PL0Lw6acXcjVWFYT7l2Wdst2g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-pipe": "8.19.4",
-        "@cspell/cspell-types": "8.19.4",
-        "cspell-trie-lib": "8.19.4",
-        "fast-equals": "^5.2.2"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-gitignore": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-8.19.4.tgz",
-      "integrity": "sha512-KrViypPilNUHWZkMV0SM8P9EQVIyH8HvUqFscI7+cyzWnlglvzqDdV4N5f+Ax5mK+IqR6rTEX8JZbCwIWWV7og==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/url": "8.19.4",
-        "cspell-glob": "8.19.4",
-        "cspell-io": "8.19.4"
-      },
-      "bin": {
-        "cspell-gitignore": "bin.mjs"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-glob": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-8.19.4.tgz",
-      "integrity": "sha512-042uDU+RjAz882w+DXKuYxI2rrgVPfRQDYvIQvUrY1hexH4sHbne78+OMlFjjzOCEAgyjnm1ktWUCCmh08pQUw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/url": "8.19.4",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-grammar": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-8.19.4.tgz",
-      "integrity": "sha512-lzWgZYTu/L7DNOHjxuKf8H7DCXvraHMKxtFObf8bAzgT+aBmey5fW2LviXUkZ2Lb2R0qQY+TJ5VIGoEjNf55ow==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-pipe": "8.19.4",
-        "@cspell/cspell-types": "8.19.4"
-      },
-      "bin": {
-        "cspell-grammar": "bin.mjs"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-io": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-8.19.4.tgz",
-      "integrity": "sha512-W48egJqZ2saEhPWf5ftyighvm4mztxEOi45ILsKgFikXcWFs0H0/hLwqVFeDurgELSzprr12b6dXsr67dV8amg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-service-bus": "8.19.4",
-        "@cspell/url": "8.19.4"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-lib": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-8.19.4.tgz",
-      "integrity": "sha512-NwfdCCYtIBNQuZcoMlMmL3HSv2olXNErMi/aOTI9BBAjvCHjhgX5hbHySMZ0NFNynnN+Mlbu5kooJ5asZeB3KA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-bundled-dicts": "8.19.4",
-        "@cspell/cspell-pipe": "8.19.4",
-        "@cspell/cspell-resolver": "8.19.4",
-        "@cspell/cspell-types": "8.19.4",
-        "@cspell/dynamic-import": "8.19.4",
-        "@cspell/filetypes": "8.19.4",
-        "@cspell/strong-weak-map": "8.19.4",
-        "@cspell/url": "8.19.4",
-        "clear-module": "^4.1.2",
-        "comment-json": "^4.2.5",
-        "cspell-config-lib": "8.19.4",
-        "cspell-dictionary": "8.19.4",
-        "cspell-glob": "8.19.4",
-        "cspell-grammar": "8.19.4",
-        "cspell-io": "8.19.4",
-        "cspell-trie-lib": "8.19.4",
-        "env-paths": "^3.0.0",
-        "fast-equals": "^5.2.2",
-        "gensequence": "^7.0.0",
-        "import-fresh": "^3.3.1",
-        "resolve-from": "^5.0.0",
-        "vscode-languageserver-textdocument": "^1.0.12",
-        "vscode-uri": "^3.1.0",
-        "xdg-basedir": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/cspell-trie-lib": {
-      "version": "8.19.4",
-      "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-8.19.4.tgz",
-      "integrity": "sha512-yIPlmGSP3tT3j8Nmu+7CNpkPh/gBO2ovdnqNmZV+LNtQmVxqFd2fH7XvR1TKjQyctSH1ip0P5uIdJmzY1uhaYg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@cspell/cspell-pipe": "8.19.4",
-        "@cspell/cspell-types": "8.19.4",
-        "gensequence": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/csstype": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/data-uri-to-buffer": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
-      "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 12"
-      }
-    },
-    "node_modules/data-view-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
-      "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/data-view-byte-length": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
-      "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/inspect-js"
-      }
-    },
-    "node_modules/data-view-byte-offset": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
-      "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/debug": {
-      "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"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/decache": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz",
-      "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==",
-      "license": "MIT",
-      "dependencies": {
-        "callsite": "^1.0.0"
-      }
-    },
-    "node_modules/deep-eql": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
-      "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/define-data-property": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
-      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/define-properties": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
-      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/detect-libc": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
-      "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/detective-amd": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz",
-      "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==",
-      "license": "MIT",
-      "dependencies": {
-        "ast-module-types": "^6.0.1",
-        "escodegen": "^2.1.0",
-        "get-amd-module-type": "^6.0.1",
-        "node-source-walk": "^7.0.1"
-      },
-      "bin": {
-        "detective-amd": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/detective-cjs": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz",
-      "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==",
-      "license": "MIT",
-      "dependencies": {
-        "ast-module-types": "^6.0.1",
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/detective-es6": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz",
-      "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==",
-      "license": "MIT",
-      "dependencies": {
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/detective-postcss": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz",
-      "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==",
-      "license": "MIT",
-      "dependencies": {
-        "is-url": "^1.2.4",
-        "postcss-values-parser": "^6.0.2"
-      },
-      "engines": {
-        "node": "^14.0.0 || >=16.0.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.47"
-      }
-    },
-    "node_modules/detective-sass": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz",
-      "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==",
-      "license": "MIT",
-      "dependencies": {
-        "gonzales-pe": "^4.3.0",
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/detective-scss": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz",
-      "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==",
-      "license": "MIT",
-      "dependencies": {
-        "gonzales-pe": "^4.3.0",
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/detective-stylus": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz",
-      "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/detective-typescript": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz",
-      "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==",
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "^8.23.0",
-        "ast-module-types": "^6.0.1",
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "peerDependencies": {
-        "typescript": "^5.4.4"
-      }
-    },
-    "node_modules/detective-vue2": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz",
-      "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==",
-      "license": "MIT",
-      "dependencies": {
-        "@dependents/detective-less": "^5.0.1",
-        "@vue/compiler-sfc": "^3.5.13",
-        "detective-es6": "^5.0.1",
-        "detective-sass": "^6.0.1",
-        "detective-scss": "^5.0.1",
-        "detective-stylus": "^5.0.1",
-        "detective-typescript": "^14.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "peerDependencies": {
-        "typescript": "^5.4.4"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/dot-prop": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-9.0.0.tgz",
-      "integrity": "sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==",
-      "license": "MIT",
-      "dependencies": {
-        "type-fest": "^4.18.2"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/dotenv": {
-      "version": "16.5.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
-      "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://dotenvx.com"
-      }
-    },
-    "node_modules/dunder-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
-      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/eastasianwidth": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
-      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
-      "license": "MIT"
-    },
-    "node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "license": "MIT"
-    },
-    "node_modules/enabled": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
-      "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==",
-      "license": "MIT"
-    },
-    "node_modules/end-of-stream": {
-      "version": "1.4.4",
-      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
-      "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-      "license": "MIT",
-      "dependencies": {
-        "once": "^1.4.0"
-      }
-    },
-    "node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
-    "node_modules/env-paths": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz",
-      "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==",
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/es-abstract": {
-      "version": "1.24.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
-      "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.2",
-        "arraybuffer.prototype.slice": "^1.0.4",
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "data-view-buffer": "^1.0.2",
-        "data-view-byte-length": "^1.0.2",
-        "data-view-byte-offset": "^1.0.1",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "es-set-tostringtag": "^2.1.0",
-        "es-to-primitive": "^1.3.0",
-        "function.prototype.name": "^1.1.8",
-        "get-intrinsic": "^1.3.0",
-        "get-proto": "^1.0.1",
-        "get-symbol-description": "^1.1.0",
-        "globalthis": "^1.0.4",
-        "gopd": "^1.2.0",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "internal-slot": "^1.1.0",
-        "is-array-buffer": "^3.0.5",
-        "is-callable": "^1.2.7",
-        "is-data-view": "^1.0.2",
-        "is-negative-zero": "^2.0.3",
-        "is-regex": "^1.2.1",
-        "is-set": "^2.0.3",
-        "is-shared-array-buffer": "^1.0.4",
-        "is-string": "^1.1.1",
-        "is-typed-array": "^1.1.15",
-        "is-weakref": "^1.1.1",
-        "math-intrinsics": "^1.1.0",
-        "object-inspect": "^1.13.4",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.7",
-        "own-keys": "^1.0.1",
-        "regexp.prototype.flags": "^1.5.4",
-        "safe-array-concat": "^1.1.3",
-        "safe-push-apply": "^1.0.0",
-        "safe-regex-test": "^1.1.0",
-        "set-proto": "^1.0.0",
-        "stop-iteration-iterator": "^1.1.0",
-        "string.prototype.trim": "^1.2.10",
-        "string.prototype.trimend": "^1.0.9",
-        "string.prototype.trimstart": "^1.0.8",
-        "typed-array-buffer": "^1.0.3",
-        "typed-array-byte-length": "^1.0.3",
-        "typed-array-byte-offset": "^1.0.4",
-        "typed-array-length": "^1.0.7",
-        "unbox-primitive": "^1.1.0",
-        "which-typed-array": "^1.1.19"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/es-define-property": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-errors": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-iterator-helpers": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
-      "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.6",
-        "es-errors": "^1.3.0",
-        "es-set-tostringtag": "^2.0.3",
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.6",
-        "globalthis": "^1.0.4",
-        "gopd": "^1.2.0",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "internal-slot": "^1.1.0",
-        "iterator.prototype": "^1.1.4",
-        "safe-array-concat": "^1.1.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-module-lexer": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
-      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
-      "license": "MIT"
-    },
-    "node_modules/es-object-atoms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
-      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
-      "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
-      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7",
-        "is-date-object": "^1.0.5",
-        "is-symbol": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/esbuild": {
-      "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": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "optionalDependencies": {
-        "@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/escalade": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
-      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/escodegen": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
-      "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esprima": "^4.0.1",
-        "estraverse": "^5.2.0",
-        "esutils": "^2.0.2"
-      },
-      "bin": {
-        "escodegen": "bin/escodegen.js",
-        "esgenerate": "bin/esgenerate.js"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "optionalDependencies": {
-        "source-map": "~0.6.1"
-      }
-    },
-    "node_modules/eslint": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
-      "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.12.1",
-        "@eslint/config-array": "^0.20.0",
-        "@eslint/config-helpers": "^0.2.1",
-        "@eslint/core": "^0.14.0",
-        "@eslint/eslintrc": "^3.3.1",
-        "@eslint/js": "9.27.0",
-        "@eslint/plugin-kit": "^0.3.1",
-        "@humanfs/node": "^0.16.6",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@humanwhocodes/retry": "^0.4.2",
-        "@types/estree": "^1.0.6",
-        "@types/json-schema": "^7.0.15",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.6",
-        "debug": "^4.3.2",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^8.3.0",
-        "eslint-visitor-keys": "^4.2.0",
-        "espree": "^10.3.0",
-        "esquery": "^1.5.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^8.0.0",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://eslint.org/donate"
-      },
-      "peerDependencies": {
-        "jiti": "*"
-      },
-      "peerDependenciesMeta": {
-        "jiti": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-config-prettier": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
-      "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "eslint-config-prettier": "bin/cli.js"
-      },
-      "peerDependencies": {
-        "eslint": ">=7.0.0"
-      }
-    },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.13.0",
-        "resolve": "^1.22.4"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/resolve": {
-      "version": "1.22.10",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
-      "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-core-module": "^2.16.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/eslint-import-resolver-typescript": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
-      "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "@nolyfill/is-core-module": "1.0.39",
-        "debug": "^4.4.0",
-        "get-tsconfig": "^4.10.0",
-        "is-bun-module": "^2.0.0",
-        "stable-hash": "^0.0.5",
-        "tinyglobby": "^0.2.13",
-        "unrs-resolver": "^1.6.2"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-import-resolver-typescript"
-      },
-      "peerDependencies": {
-        "eslint": "*",
-        "eslint-plugin-import": "*",
-        "eslint-plugin-import-x": "*"
-      },
-      "peerDependenciesMeta": {
-        "eslint-plugin-import": {
-          "optional": true
-        },
-        "eslint-plugin-import-x": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.12.0",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
-      "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.31.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
-      "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rtsao/scc": "^1.1.0",
-        "array-includes": "^3.1.8",
-        "array.prototype.findlastindex": "^1.2.5",
-        "array.prototype.flat": "^1.3.2",
-        "array.prototype.flatmap": "^1.3.2",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.12.0",
-        "hasown": "^2.0.2",
-        "is-core-module": "^2.15.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.8",
-        "object.groupby": "^1.0.3",
-        "object.values": "^1.2.0",
-        "semver": "^6.3.1",
-        "string.prototype.trimend": "^1.0.8",
-        "tsconfig-paths": "^3.15.0"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-plugin-prettier": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz",
-      "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prettier-linter-helpers": "^1.0.0",
-        "synckit": "^0.11.0"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint-plugin-prettier"
-      },
-      "peerDependencies": {
-        "@types/eslint": ">=8.0.0",
-        "eslint": ">=8.0.0",
-        "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0",
-        "prettier": ">=3.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/eslint": {
-          "optional": true
-        },
-        "eslint-config-prettier": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-plugin-react": {
-      "version": "7.37.5",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
-      "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-includes": "^3.1.8",
-        "array.prototype.findlast": "^1.2.5",
-        "array.prototype.flatmap": "^1.3.3",
-        "array.prototype.tosorted": "^1.1.4",
-        "doctrine": "^2.1.0",
-        "es-iterator-helpers": "^1.2.1",
-        "estraverse": "^5.3.0",
-        "hasown": "^2.0.2",
-        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-        "minimatch": "^3.1.2",
-        "object.entries": "^1.1.9",
-        "object.fromentries": "^2.0.8",
-        "object.values": "^1.2.1",
-        "prop-types": "^15.8.1",
-        "resolve": "^2.0.0-next.5",
-        "semver": "^6.3.1",
-        "string.prototype.matchall": "^4.0.12",
-        "string.prototype.repeat": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
-      }
-    },
-    "node_modules/eslint-plugin-react-hooks": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
-      "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-react-refresh": {
-      "version": "0.4.20",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.20.tgz",
-      "integrity": "sha512-XpbHQ2q5gUF8BGOX4dHe+71qoirYMhApEPZ7sfhF/dNnOF1UXnCMGZf79SFTBO7Bz5YEIT4TMieSlJBWhP9WBA==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "eslint": ">=8.40"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
-      "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-visitor-keys": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
-      "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/eslint/node_modules/file-entry-cache": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
-      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "flat-cache": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=16.0.0"
-      }
-    },
-    "node_modules/eslint/node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "locate-path": "^6.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint/node_modules/flat-cache": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
-      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "flatted": "^3.2.9",
-        "keyv": "^4.5.4"
-      },
-      "engines": {
-        "node": ">=16"
-      }
-    },
-    "node_modules/eslint/node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "p-locate": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint/node_modules/p-limit": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "yocto-queue": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint/node_modules/p-locate": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "p-limit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint/node_modules/path-exists": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/eslint/node_modules/yocto-queue": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/espree": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
-      "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.14.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/esprima": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
-      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
-      "license": "BSD-2-Clause",
-      "bin": {
-        "esparse": "bin/esparse.js",
-        "esvalidate": "bin/esvalidate.js"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
-      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "license": "MIT"
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/event-target-shim": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
-      "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/events": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.x"
-      }
-    },
-    "node_modules/execa": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
-      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
-      "license": "MIT",
-      "dependencies": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^8.0.1",
-        "human-signals": "^5.0.0",
-        "is-stream": "^3.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^5.1.0",
-        "onetime": "^6.0.0",
-        "signal-exit": "^4.1.0",
-        "strip-final-newline": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=16.17"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
-      }
-    },
-    "node_modules/execa/node_modules/is-stream": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
-      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/expect-type": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz",
-      "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=12.0.0"
-      }
-    },
-    "node_modules/extract-zip": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
-      "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "debug": "^4.1.1",
-        "get-stream": "^5.1.0",
-        "yauzl": "^2.10.0"
-      },
-      "bin": {
-        "extract-zip": "cli.js"
-      },
-      "engines": {
-        "node": ">= 10.17.0"
-      },
-      "optionalDependencies": {
-        "@types/yauzl": "^2.9.1"
-      }
-    },
-    "node_modules/extract-zip/node_modules/get-stream": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
-      "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
-      "license": "MIT",
-      "dependencies": {
-        "pump": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-diff": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz",
-      "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==",
-      "dev": true,
-      "license": "Apache-2.0"
-    },
-    "node_modules/fast-equals": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz",
-      "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/fast-fifo": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
-      "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
-      "license": "MIT"
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
-      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.8"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fastq": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
-      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
-      "license": "ISC",
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/fault": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
-      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
-      "license": "MIT",
-      "dependencies": {
-        "format": "^0.2.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/fd-slicer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
-      "license": "MIT",
-      "dependencies": {
-        "pend": "~1.2.0"
-      }
-    },
-    "node_modules/fdir": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
-      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
-      "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "picomatch": "^3 || ^4"
-      },
-      "peerDependenciesMeta": {
-        "picomatch": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/fecha": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
-      "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==",
-      "license": "MIT"
-    },
-    "node_modules/fetch-blob": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
-      "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/jimmywarting"
-        },
-        {
-          "type": "paypal",
-          "url": "https://paypal.me/jimmywarting"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "node-domexception": "^1.0.0",
-        "web-streams-polyfill": "^3.0.3"
-      },
-      "engines": {
-        "node": "^12.20 || >= 14.13"
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
-      "integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "flat-cache": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/file-uri-to-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
-      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
-      "license": "MIT"
-    },
-    "node_modules/fill-range": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
-      "license": "MIT",
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/filter-obj": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-6.1.0.tgz",
-      "integrity": "sha512-xdMtCAODmPloU9qtmPcdBV9Kd27NtMse+4ayThxqIHUES5Z2S6bGpap5PpdmNM56ub7y3i1eyr+vJJIIgWGKmA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
-      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
-      "license": "MIT",
-      "dependencies": {
-        "locate-path": "^7.2.0",
-        "path-exists": "^5.0.0",
-        "unicorn-magic": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/find-up-simple": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz",
-      "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/flat-cache": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
-      "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "flatted": "^3.3.1",
-        "keyv": "^4.5.4"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
-      "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/fn.name": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
-      "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==",
-      "license": "MIT"
-    },
-    "node_modules/for-each": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
-      "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/foreground-child": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
-      "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
-      "license": "ISC",
-      "dependencies": {
-        "cross-spawn": "^7.0.6",
-        "signal-exit": "^4.0.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/format": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
-      "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
-      "engines": {
-        "node": ">=0.4.x"
-      }
-    },
-    "node_modules/formdata-polyfill": {
-      "version": "4.0.10",
-      "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
-      "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
-      "license": "MIT",
-      "dependencies": {
-        "fetch-blob": "^3.1.2"
-      },
-      "engines": {
-        "node": ">=12.20.0"
-      }
-    },
-    "node_modules/framer-motion": {
-      "version": "11.18.2",
-      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.18.2.tgz",
-      "integrity": "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w==",
-      "license": "MIT",
-      "dependencies": {
-        "motion-dom": "^11.18.1",
-        "motion-utils": "^11.18.1",
-        "tslib": "^2.4.0"
-      },
-      "peerDependencies": {
-        "@emotion/is-prop-valid": "*",
-        "react": "^18.0.0 || ^19.0.0",
-        "react-dom": "^18.0.0 || ^19.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@emotion/is-prop-valid": {
-          "optional": true
-        },
-        "react": {
-          "optional": true
-        },
-        "react-dom": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "license": "ISC"
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
-      "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "functions-have-names": "^1.2.3",
-        "hasown": "^2.0.2",
-        "is-callable": "^1.2.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/gensequence": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz",
-      "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/get-amd-module-type": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz",
-      "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==",
-      "license": "MIT",
-      "dependencies": {
-        "ast-module-types": "^6.0.1",
-        "node-source-walk": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/get-caller-file": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
-      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
-      "license": "ISC",
-      "engines": {
-        "node": "6.* || 8.* || >= 10.*"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "function-bind": "^1.1.2",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "math-intrinsics": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
-      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/get-stream": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
-      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/get-symbol-description": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
-      "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-tsconfig": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
-      "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "resolve-pkg-maps": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
-      }
-    },
-    "node_modules/glob": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
-      "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "license": "ISC",
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^5.0.1",
-        "once": "^1.3.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/glob/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/glob/node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/global-directory": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz",
-      "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ini": "4.1.1"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globals": {
-      "version": "15.15.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
-      "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globalthis": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-properties": "^1.2.1",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/globrex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
-      "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/gonzales-pe": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
-      "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
-      "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.5"
-      },
-      "bin": {
-        "gonzales": "bin/gonzales.js"
-      },
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
-    "node_modules/gopd": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/graceful-fs": {
-      "version": "4.2.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
-      "license": "ISC"
-    },
-    "node_modules/graphemer": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/has-bigints": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
-      "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-own-prop": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz",
-      "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-define-property": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-proto": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
-      "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
-      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-symbols": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hasown": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
-      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-      "license": "MIT",
-      "dependencies": {
-        "function-bind": "^1.1.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/hast-util-parse-selector": {
-      "version": "2.2.5",
-      "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
-      "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
-      "license": "MIT",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/hastscript": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
-      "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/hast": "^2.0.0",
-        "comma-separated-tokens": "^1.0.0",
-        "hast-util-parse-selector": "^2.0.0",
-        "property-information": "^5.0.0",
-        "space-separated-tokens": "^1.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/highlight.js": {
-      "version": "10.7.3",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
-      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/highlightjs-vue": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
-      "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
-      "license": "CC0-1.0"
-    },
-    "node_modules/hosted-git-info": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz",
-      "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==",
-      "license": "ISC",
-      "dependencies": {
-        "lru-cache": "^10.0.1"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/html-escaper": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
-      "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/https-proxy-agent": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
-      "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
-      "license": "MIT",
-      "dependencies": {
-        "agent-base": "^7.1.2",
-        "debug": "4"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/human-signals": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
-      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=16.17.0"
-      }
-    },
-    "node_modules/ieee754": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
-      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/ignore": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
-      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
-      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/import-fresh/node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/import-fresh/node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/import-meta-resolve": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
-      "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/index-to-position": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz",
-      "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
-      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
-      "license": "ISC",
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "license": "ISC"
-    },
-    "node_modules/ini": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz",
-      "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/internal-slot": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
-      "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "hasown": "^2.0.2",
-        "side-channel": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-alphabetical": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
-      "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/is-alphanumerical": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
-      "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
-      "license": "MIT",
-      "dependencies": {
-        "is-alphabetical": "^1.0.0",
-        "is-decimal": "^1.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/is-array-buffer": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
-      "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-arrayish": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
-      "license": "MIT"
-    },
-    "node_modules/is-async-function": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
-      "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "async-function": "^1.0.0",
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.1",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-bigint": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
-      "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-bigints": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
-      "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-builtin-module": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
-      "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
-      "license": "MIT",
-      "dependencies": {
-        "builtin-modules": "^3.3.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-bun-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
-      "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "semver": "^7.7.1"
-      }
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.16.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
-      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-data-view": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
-      "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
-      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-decimal": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
-      "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-finalizationregistry": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
-      "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-generator-function": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
-      "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.0",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "license": "MIT",
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-hexadecimal": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
-      "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/is-map": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
-      "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
-      "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-path-inside": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
-      "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-plain-obj": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
-      "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/is-regex": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
-      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-set": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
-      "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
-      "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-stream": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
-      "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
-      "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
-      "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-typed-array": {
-      "version": "1.1.15",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
-      "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-url": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
-      "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
-      "license": "MIT"
-    },
-    "node_modules/is-url-superb": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz",
-      "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/is-weakmap": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
-      "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakref": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
-      "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakset": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
-      "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "license": "ISC"
-    },
-    "node_modules/istanbul-lib-coverage": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
-      "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/istanbul-lib-report": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
-      "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "istanbul-lib-coverage": "^3.0.0",
-        "make-dir": "^4.0.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/istanbul-lib-source-maps": {
-      "version": "5.0.6",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
-      "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.23",
-        "debug": "^4.1.1",
-        "istanbul-lib-coverage": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/istanbul-reports": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
-      "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "html-escaper": "^2.0.0",
-        "istanbul-lib-report": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/iterator.prototype": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
-      "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.6",
-        "get-proto": "^1.0.0",
-        "has-symbols": "^1.1.0",
-        "set-function-name": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/jackspeak": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
-      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
-      }
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "license": "MIT"
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/json-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/jsx-ast-utils": {
-      "version": "3.3.5",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
-      "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-includes": "^3.1.6",
-        "array.prototype.flat": "^1.3.1",
-        "object.assign": "^4.1.4",
-        "object.values": "^1.1.6"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/junk": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz",
-      "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.20"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/jwt-decode": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz",
-      "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/keyv": {
-      "version": "4.5.4",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
-      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "json-buffer": "3.0.1"
-      }
-    },
-    "node_modules/kuler": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
-      "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==",
-      "license": "MIT"
-    },
-    "node_modules/lambda-local": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/lambda-local/-/lambda-local-2.2.0.tgz",
-      "integrity": "sha512-bPcgpIXbHnVGfI/omZIlgucDqlf4LrsunwoKue5JdZeGybt8L6KyJz2Zu19ffuZwIwLj2NAI2ZyaqNT6/cetcg==",
-      "license": "MIT",
-      "dependencies": {
-        "commander": "^10.0.1",
-        "dotenv": "^16.3.1",
-        "winston": "^3.10.0"
-      },
-      "bin": {
-        "lambda-local": "build/cli.js"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/lambda-local/node_modules/commander": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
-      "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/lazystream": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
-      "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
-      "license": "MIT",
-      "dependencies": {
-        "readable-stream": "^2.0.5"
-      },
-      "engines": {
-        "node": ">= 0.6.3"
-      }
-    },
-    "node_modules/lazystream/node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "license": "MIT"
-    },
-    "node_modules/lazystream/node_modules/readable-stream": {
-      "version": "2.3.8",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
-      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
-      "license": "MIT",
-      "dependencies": {
-        "core-util-is": "~1.0.0",
-        "inherits": "~2.0.3",
-        "isarray": "~1.0.0",
-        "process-nextick-args": "~2.0.0",
-        "safe-buffer": "~5.1.1",
-        "string_decoder": "~1.1.1",
-        "util-deprecate": "~1.0.1"
-      }
-    },
-    "node_modules/lazystream/node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-      "license": "MIT"
-    },
-    "node_modules/lazystream/node_modules/string_decoder": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-      "license": "MIT",
-      "dependencies": {
-        "safe-buffer": "~5.1.0"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
-      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
-      "license": "MIT",
-      "dependencies": {
-        "p-locate": "^6.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/lodash": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
-      "license": "MIT"
-    },
-    "node_modules/lodash-es": {
-      "version": "4.17.21",
-      "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
-      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
-      "license": "MIT"
-    },
-    "node_modules/lodash.debounce": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-      "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
-      "license": "MIT"
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/logform": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz",
-      "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@colors/colors": "1.6.0",
-        "@types/triple-beam": "^1.3.2",
-        "fecha": "^4.2.0",
-        "ms": "^2.1.1",
-        "safe-stable-stringify": "^2.3.1",
-        "triple-beam": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 12.0.0"
-      }
-    },
-    "node_modules/loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "license": "MIT",
-      "dependencies": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
-      }
-    },
-    "node_modules/loupe": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
-      "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/lowlight": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
-      "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
-      "license": "MIT",
-      "dependencies": {
-        "fault": "^1.0.0",
-        "highlight.js": "~10.7.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "license": "ISC"
-    },
-    "node_modules/luxon": {
-      "version": "3.6.1",
-      "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
-      "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/magic-string": {
-      "version": "0.30.17",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
-      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0"
-      }
-    },
-    "node_modules/magicast": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
-      "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.25.4",
-        "@babel/types": "^7.25.4",
-        "source-map-js": "^1.2.0"
-      }
-    },
-    "node_modules/make-dir": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
-      "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "semver": "^7.5.3"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/math-intrinsics": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/merge-options": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz",
-      "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==",
-      "license": "MIT",
-      "dependencies": {
-        "is-plain-obj": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/merge-stream": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-      "license": "MIT"
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micro-api-client": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/micro-api-client/-/micro-api-client-3.3.0.tgz",
-      "integrity": "sha512-y0y6CUB9RLVsy3kfgayU28746QrNMpSm9O/AYGNsBgOkJr/X/Jk0VLGoO8Ude7Bpa8adywzF+MzXNZRFRsNPhg==",
-      "license": "ISC"
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
-      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
-      "license": "MIT",
-      "dependencies": {
-        "braces": "^3.0.3",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/micromatch/node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/mimic-fn": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
-      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/minipass": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
-      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      }
-    },
-    "node_modules/minizlib": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
-      "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
-      "license": "MIT",
-      "dependencies": {
-        "minipass": "^7.1.2"
-      },
-      "engines": {
-        "node": ">= 18"
-      }
-    },
-    "node_modules/mkdirp": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
-      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
-      "license": "MIT",
-      "bin": {
-        "mkdirp": "dist/cjs/src/bin.js"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/module-definition": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz",
-      "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==",
-      "license": "MIT",
-      "dependencies": {
-        "ast-module-types": "^6.0.1",
-        "node-source-walk": "^7.0.1"
-      },
-      "bin": {
-        "module-definition": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/motion": {
-      "version": "11.18.2",
-      "resolved": "https://registry.npmjs.org/motion/-/motion-11.18.2.tgz",
-      "integrity": "sha512-JLjvFDuFr42NFtcVoMAyC2sEjnpA8xpy6qWPyzQvCloznAyQ8FIXioxWfHiLtgYhoVpfUqSWpn1h9++skj9+Wg==",
-      "license": "MIT",
-      "dependencies": {
-        "framer-motion": "^11.18.2",
-        "tslib": "^2.4.0"
-      },
-      "peerDependencies": {
-        "@emotion/is-prop-valid": "*",
-        "react": "^18.0.0 || ^19.0.0",
-        "react-dom": "^18.0.0 || ^19.0.0"
-      },
-      "peerDependenciesMeta": {
-        "@emotion/is-prop-valid": {
-          "optional": true
-        },
-        "react": {
-          "optional": true
-        },
-        "react-dom": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/motion-dom": {
-      "version": "11.18.1",
-      "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-11.18.1.tgz",
-      "integrity": "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw==",
-      "license": "MIT",
-      "dependencies": {
-        "motion-utils": "^11.18.1"
-      }
-    },
-    "node_modules/motion-utils": {
-      "version": "11.18.1",
-      "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-11.18.1.tgz",
-      "integrity": "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA==",
-      "license": "MIT"
-    },
-    "node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "license": "MIT"
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.11",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/napi-postinstall": {
-      "version": "0.2.4",
-      "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz",
-      "integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "napi-postinstall": "lib/cli.js"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/napi-postinstall"
-      }
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/netlify": {
-      "version": "13.3.5",
-      "resolved": "https://registry.npmjs.org/netlify/-/netlify-13.3.5.tgz",
-      "integrity": "sha512-Nc3loyVASW59W+8fLDZT1lncpG7llffyZ2o0UQLx/Fr20i7P8oP+lE7+TEcFvXj9IUWU6LjB9P3BH+iFGyp+mg==",
-      "license": "MIT",
-      "dependencies": {
-        "@netlify/open-api": "^2.37.0",
-        "lodash-es": "^4.17.21",
-        "micro-api-client": "^3.3.0",
-        "node-fetch": "^3.0.0",
-        "p-wait-for": "^5.0.0",
-        "qs": "^6.9.6"
-      },
-      "engines": {
-        "node": "^14.16.0 || >=16.0.0"
-      }
-    },
-    "node_modules/netlify/node_modules/node-fetch": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
-      "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
-      "license": "MIT",
-      "dependencies": {
-        "data-uri-to-buffer": "^4.0.0",
-        "fetch-blob": "^3.1.4",
-        "formdata-polyfill": "^4.0.10"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/node-fetch"
-      }
-    },
-    "node_modules/node-domexception": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
-      "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
-      "deprecated": "Use your platform's native DOMException instead",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/jimmywarting"
-        },
-        {
-          "type": "github",
-          "url": "https://paypal.me/jimmywarting"
-        }
-      ],
-      "license": "MIT",
-      "engines": {
-        "node": ">=10.5.0"
-      }
-    },
-    "node_modules/node-fetch": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
-      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
-      "license": "MIT",
-      "dependencies": {
-        "whatwg-url": "^5.0.0"
-      },
-      "engines": {
-        "node": "4.x || >=6.0.0"
-      },
-      "peerDependencies": {
-        "encoding": "^0.1.0"
-      },
-      "peerDependenciesMeta": {
-        "encoding": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/node-gyp-build": {
-      "version": "4.8.4",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
-      "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
-      "license": "MIT",
-      "bin": {
-        "node-gyp-build": "bin.js",
-        "node-gyp-build-optional": "optional.js",
-        "node-gyp-build-test": "build-test.js"
-      }
-    },
-    "node_modules/node-source-walk": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz",
-      "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.26.7"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/nopt": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz",
-      "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==",
-      "license": "ISC",
-      "dependencies": {
-        "abbrev": "^3.0.0"
-      },
-      "bin": {
-        "nopt": "bin/nopt.js"
-      },
-      "engines": {
-        "node": "^18.17.0 || >=20.5.0"
-      }
-    },
-    "node_modules/normalize-package-data": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz",
-      "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==",
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "hosted-git-info": "^7.0.0",
-        "semver": "^7.3.5",
-        "validate-npm-package-license": "^3.0.4"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/normalize-path": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/npm-run-path": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
-      "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
-      "license": "MIT",
-      "dependencies": {
-        "path-key": "^4.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/npm-run-path/node_modules/path-key": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
-      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.13.4",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
-      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.7",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
-      "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0",
-        "has-symbols": "^1.1.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.entries": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
-      "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.fromentries": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
-      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.groupby": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
-      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
-      "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "license": "ISC",
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/one-time": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
-      "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
-      "license": "MIT",
-      "dependencies": {
-        "fn.name": "1.x.x"
-      }
-    },
-    "node_modules/onetime": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
-      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
-      "license": "MIT",
-      "dependencies": {
-        "mimic-fn": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.4",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
-      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.5"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/own-keys": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
-      "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-intrinsic": "^1.2.6",
-        "object-keys": "^1.1.1",
-        "safe-push-apply": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/p-event": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz",
-      "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==",
-      "license": "MIT",
-      "dependencies": {
-        "p-timeout": "^6.1.2"
-      },
-      "engines": {
-        "node": ">=16.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
-      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
-      "license": "MIT",
-      "dependencies": {
-        "yocto-queue": "^1.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
-      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
-      "license": "MIT",
-      "dependencies": {
-        "p-limit": "^4.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-map": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz",
-      "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-timeout": {
-      "version": "6.1.4",
-      "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz",
-      "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/p-wait-for": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-5.0.2.tgz",
-      "integrity": "sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==",
-      "license": "MIT",
-      "dependencies": {
-        "p-timeout": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/package-json-from-dist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
-      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
-      "license": "BlueOak-1.0.0"
-    },
-    "node_modules/parent-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz",
-      "integrity": "sha512-uo0Z9JJeWzv8BG+tRcapBKNJ0dro9cLyczGzulS6EfeyAdeC9sbojtW6XwvYxJkEne9En+J2XEl4zyglVeIwFg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "callsites": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/parse-entities": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
-      "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
-      "license": "MIT",
-      "dependencies": {
-        "character-entities": "^1.0.0",
-        "character-entities-legacy": "^1.0.0",
-        "character-reference-invalid": "^1.0.0",
-        "is-alphanumerical": "^1.0.0",
-        "is-decimal": "^1.0.0",
-        "is-hexadecimal": "^1.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/parse-gitignore": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz",
-      "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/parse-json": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz",
-      "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/code-frame": "^7.26.2",
-        "index-to-position": "^1.1.0",
-        "type-fest": "^4.39.1"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/path-exists": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
-      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "license": "MIT"
-    },
-    "node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/pathe": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
-      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/pathval": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
-      "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14.16"
-      }
-    },
-    "node_modules/pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
-      "license": "MIT"
-    },
-    "node_modules/picocolors": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-      "license": "ISC"
-    },
-    "node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/possible-typed-array-names": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
-      "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.5.4",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz",
-      "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "nanoid": "^3.3.11",
-        "picocolors": "^1.1.1",
-        "source-map-js": "^1.2.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      }
-    },
-    "node_modules/postcss-values-parser": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz",
-      "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==",
-      "license": "MPL-2.0",
-      "dependencies": {
-        "color-name": "^1.1.4",
-        "is-url-superb": "^4.0.0",
-        "quote-unquote": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "postcss": "^8.2.9"
-      }
-    },
-    "node_modules/precinct": {
-      "version": "12.2.0",
-      "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz",
-      "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==",
-      "license": "MIT",
-      "dependencies": {
-        "@dependents/detective-less": "^5.0.1",
-        "commander": "^12.1.0",
-        "detective-amd": "^6.0.1",
-        "detective-cjs": "^6.0.1",
-        "detective-es6": "^5.0.1",
-        "detective-postcss": "^7.0.1",
-        "detective-sass": "^6.0.1",
-        "detective-scss": "^5.0.1",
-        "detective-stylus": "^5.0.1",
-        "detective-typescript": "^14.0.0",
-        "detective-vue2": "^2.2.0",
-        "module-definition": "^6.0.1",
-        "node-source-walk": "^7.0.1",
-        "postcss": "^8.5.1",
-        "typescript": "^5.7.3"
-      },
-      "bin": {
-        "precinct": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/precinct/node_modules/commander": {
-      "version": "12.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
-      "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/prettier": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
-      "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "prettier": "bin/prettier.cjs"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
-      }
-    },
-    "node_modules/prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fast-diff": "^1.1.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/prismjs": {
-      "version": "1.30.0",
-      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
-      "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
-    "node_modules/process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-      "license": "MIT"
-    },
-    "node_modules/prop-types": {
-      "version": "15.8.1",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.13.1"
-      }
-    },
-    "node_modules/property-information": {
-      "version": "5.6.0",
-      "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
-      "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
-      "license": "MIT",
-      "dependencies": {
-        "xtend": "^4.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/pump": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
-      "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
-      "license": "MIT",
-      "dependencies": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/qs": {
-      "version": "6.14.0",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
-      "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "side-channel": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/quote-unquote": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz",
-      "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==",
-      "license": "MIT"
-    },
-    "node_modules/react": {
-      "version": "18.3.1",
-      "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
-      "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
-      "license": "MIT",
-      "dependencies": {
-        "loose-envify": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/react-dom": {
-      "version": "18.3.1",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
-      "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
-      "license": "MIT",
-      "dependencies": {
-        "loose-envify": "^1.1.0",
-        "scheduler": "^0.23.2"
-      },
-      "peerDependencies": {
-        "react": "^18.3.1"
-      }
-    },
-    "node_modules/react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/react-router": {
-      "version": "7.6.1",
-      "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.6.1.tgz",
-      "integrity": "sha512-hPJXXxHJZEsPFNVbtATH7+MMX43UDeOauz+EAU4cgqTn7ojdI9qQORqS8Z0qmDlL1TclO/6jLRYUEtbWidtdHQ==",
-      "license": "MIT",
-      "dependencies": {
-        "cookie": "^1.0.1",
-        "set-cookie-parser": "^2.6.0"
-      },
-      "engines": {
-        "node": ">=20.0.0"
-      },
-      "peerDependencies": {
-        "react": ">=18",
-        "react-dom": ">=18"
-      },
-      "peerDependenciesMeta": {
-        "react-dom": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/react-router-dom": {
-      "version": "7.6.1",
-      "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.6.1.tgz",
-      "integrity": "sha512-vxU7ei//UfPYQ3iZvHuO1D/5fX3/JOqhNTbRR+WjSBWxf9bIvpWK+ftjmdfJHzPOuMQKe2fiEdG+dZX6E8uUpA==",
-      "license": "MIT",
-      "dependencies": {
-        "react-router": "7.6.1"
-      },
-      "engines": {
-        "node": ">=20.0.0"
-      },
-      "peerDependencies": {
-        "react": ">=18",
-        "react-dom": ">=18"
-      }
-    },
-    "node_modules/react-syntax-highlighter": {
-      "version": "15.6.1",
-      "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz",
-      "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==",
-      "license": "MIT",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "highlight.js": "^10.4.1",
-        "highlightjs-vue": "^1.0.0",
-        "lowlight": "^1.17.0",
-        "prismjs": "^1.27.0",
-        "refractor": "^3.6.0"
-      },
-      "peerDependencies": {
-        "react": ">= 0.14.0"
-      }
-    },
-    "node_modules/read-package-up": {
-      "version": "11.0.0",
-      "resolved": "https://registry.npmjs.org/read-package-up/-/read-package-up-11.0.0.tgz",
-      "integrity": "sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==",
-      "license": "MIT",
-      "dependencies": {
-        "find-up-simple": "^1.0.0",
-        "read-pkg": "^9.0.0",
-        "type-fest": "^4.6.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/read-pkg": {
-      "version": "9.0.1",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-9.0.1.tgz",
-      "integrity": "sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==",
-      "license": "MIT",
-      "dependencies": {
-        "@types/normalize-package-data": "^2.4.3",
-        "normalize-package-data": "^6.0.0",
-        "parse-json": "^8.0.0",
-        "type-fest": "^4.6.0",
-        "unicorn-magic": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/readable-stream": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz",
-      "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==",
-      "license": "MIT",
-      "dependencies": {
-        "abort-controller": "^3.0.0",
-        "buffer": "^6.0.3",
-        "events": "^3.3.0",
-        "process": "^0.11.10",
-        "string_decoder": "^1.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/readdir-glob": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
-      "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "minimatch": "^5.1.0"
-      }
-    },
-    "node_modules/readdir-glob/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/readdir-glob/node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/readdirp": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
-      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14.18.0"
-      },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
-      }
-    },
-    "node_modules/reflect.getprototypeof": {
-      "version": "1.0.10",
-      "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
-      "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.9",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.7",
-        "get-proto": "^1.0.1",
-        "which-builtin-type": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/refractor": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
-      "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
-      "license": "MIT",
-      "dependencies": {
-        "hastscript": "^6.0.0",
-        "parse-entities": "^2.0.0",
-        "prismjs": "~1.27.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/refractor/node_modules/prismjs": {
-      "version": "1.27.0",
-      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
-      "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
-      "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-errors": "^1.3.0",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "set-function-name": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/remove-trailing-separator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
-      "license": "ISC"
-    },
-    "node_modules/repeat-string": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/require-package-name": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/require-package-name/-/require-package-name-2.0.1.tgz",
-      "integrity": "sha512-uuoJ1hU/k6M0779t3VMVIYpb2VMJk05cehCaABFhXaibcbvfgR8wKiozLjVFSzJPmQMRqIcO0HMyTFqfV09V6Q==",
-      "license": "MIT"
-    },
-    "node_modules/resolve": {
-      "version": "2.0.0-next.5",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
-      "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
-      "license": "MIT",
-      "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/resolve-pkg-maps": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
-      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
-      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
-      "license": "MIT",
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rollup": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
-      "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
-      "devOptional": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "1.0.7"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
-      "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
-      },
-      "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.41.1",
-        "@rollup/rollup-android-arm64": "4.41.1",
-        "@rollup/rollup-darwin-arm64": "4.41.1",
-        "@rollup/rollup-darwin-x64": "4.41.1",
-        "@rollup/rollup-freebsd-arm64": "4.41.1",
-        "@rollup/rollup-freebsd-x64": "4.41.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.41.1",
-        "@rollup/rollup-linux-arm64-musl": "4.41.1",
-        "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-musl": "4.41.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-musl": "4.41.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.41.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.41.1",
-        "@rollup/rollup-win32-x64-msvc": "4.41.1",
-        "fsevents": "~2.3.2"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/safe-array-concat": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
-      "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
-        "has-symbols": "^1.1.0",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">=0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/safe-push-apply": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
-      "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-regex-test": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
-      "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "is-regex": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/safe-stable-stringify": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
-      "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/scheduler": {
-      "version": "0.23.2",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
-      "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
-      "license": "MIT",
-      "dependencies": {
-        "loose-envify": "^1.1.0"
-      }
-    },
-    "node_modules/semver": {
-      "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"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/set-cookie-parser": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
-      "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
-      "license": "MIT"
-    },
-    "node_modules/set-function-length": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
-      "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.4",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/set-function-name": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
-      "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-errors": "^1.3.0",
-        "functions-have-names": "^1.2.3",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/set-proto": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
-      "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "license": "MIT",
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
-      "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3",
-        "side-channel-list": "^1.0.0",
-        "side-channel-map": "^1.0.1",
-        "side-channel-weakmap": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-list": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
-      "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
-      "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/side-channel-weakmap": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
-      "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.5",
-        "object-inspect": "^1.13.3",
-        "side-channel-map": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/siginfo": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
-      "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/simple-swizzle": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
-      "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
-      "license": "MIT",
-      "dependencies": {
-        "is-arrayish": "^0.3.1"
-      }
-    },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.5.21",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
-      "license": "MIT",
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "node_modules/space-separated-tokens": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
-      "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
-      "license": "MIT",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
-      "license": "CC-BY-3.0"
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "license": "MIT",
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
-      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
-      "license": "CC0-1.0"
-    },
-    "node_modules/stable-hash": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
-      "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/stack-trace": {
-      "version": "0.0.10",
-      "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
-      "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
-      "license": "MIT",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/stackback": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
-      "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/std-env": {
-      "version": "3.9.0",
-      "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
-      "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/stop-iteration-iterator": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz",
-      "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "internal-slot": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/streamx": {
-      "version": "2.22.0",
-      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz",
-      "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==",
-      "license": "MIT",
-      "dependencies": {
-        "fast-fifo": "^1.3.2",
-        "text-decoder": "^1.1.0"
-      },
-      "optionalDependencies": {
-        "bare-events": "^2.2.0"
-      }
-    },
-    "node_modules/string_decoder": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-      "license": "MIT",
-      "dependencies": {
-        "safe-buffer": "~5.2.0"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width-cjs": {
-      "name": "string-width",
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string.prototype.matchall": {
-      "version": "4.0.12",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
-      "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.6",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.6",
-        "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "internal-slot": "^1.1.0",
-        "regexp.prototype.flags": "^1.5.3",
-        "set-function-name": "^2.0.2",
-        "side-channel": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.repeat": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
-      "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.5"
-      }
-    },
-    "node_modules/string.prototype.trim": {
-      "version": "1.2.10",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
-      "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-data-property": "^1.1.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-object-atoms": "^1.0.0",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
-      "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-ansi-cjs": {
-      "name": "strip-ansi",
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-final-newline": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
-      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/synckit": {
-      "version": "0.11.6",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz",
-      "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@pkgr/core": "^0.2.4"
-      },
-      "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/synckit"
-      }
-    },
-    "node_modules/tar": {
-      "version": "7.4.3",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
-      "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
-      "license": "ISC",
-      "dependencies": {
-        "@isaacs/fs-minipass": "^4.0.0",
-        "chownr": "^3.0.0",
-        "minipass": "^7.1.2",
-        "minizlib": "^3.0.1",
-        "mkdirp": "^3.0.1",
-        "yallist": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/tar-stream": {
-      "version": "3.1.7",
-      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz",
-      "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==",
-      "license": "MIT",
-      "dependencies": {
-        "b4a": "^1.6.4",
-        "fast-fifo": "^1.2.0",
-        "streamx": "^2.15.0"
-      }
-    },
-    "node_modules/test-exclude": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
-      "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^10.4.1",
-        "minimatch": "^9.0.4"
-      },
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/test-exclude/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/test-exclude/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/test-exclude/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/text-decoder": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz",
-      "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "b4a": "^1.6.4"
-      }
-    },
-    "node_modules/text-hex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
-      "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==",
-      "license": "MIT"
-    },
-    "node_modules/tinybench": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
-      "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/tinyexec": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
-      "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/tinyglobby": {
-      "version": "0.2.14",
-      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
-      "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "fdir": "^6.4.4",
-        "picomatch": "^4.0.2"
-      },
-      "engines": {
-        "node": ">=12.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/SuperchupuDev"
-      }
-    },
-    "node_modules/tinypool": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
-      "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.0.0 || >=20.0.0"
-      }
-    },
-    "node_modules/tinyrainbow": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz",
-      "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/tinyspy": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
-      "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.0.0"
-      }
-    },
-    "node_modules/tmp": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
-      "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=14.14"
-      }
-    },
-    "node_modules/tmp-promise": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz",
-      "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==",
-      "license": "MIT",
-      "dependencies": {
-        "tmp": "^0.2.0"
-      }
-    },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-      "license": "MIT",
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/toml": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
-      "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==",
-      "license": "MIT"
-    },
-    "node_modules/tr46": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
-      "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
-      "license": "MIT"
-    },
-    "node_modules/triple-beam": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz",
-      "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 14.0.0"
-      }
-    },
-    "node_modules/ts-api-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
-      "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18.12"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4"
-      }
-    },
-    "node_modules/tsconfck": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
-      "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "tsconfck": "bin/tsconfck.js"
-      },
-      "engines": {
-        "node": "^18 || >=20"
-      },
-      "peerDependencies": {
-        "typescript": "^5.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/tsconfig-paths": {
-      "version": "3.15.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
-      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "license": "0BSD"
-    },
-    "node_modules/tsx": {
-      "version": "4.19.4",
-      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
-      "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "esbuild": "~0.25.0",
-        "get-tsconfig": "^4.7.5"
-      },
-      "bin": {
-        "tsx": "dist/cli.mjs"
-      },
-      "engines": {
-        "node": ">=18.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      }
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-fest": {
-      "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"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/typed-array-buffer": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
-      "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-typed-array": "^1.1.14"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/typed-array-byte-length": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
-      "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-proto": "^1.2.0",
-        "is-typed-array": "^1.1.14"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-byte-offset": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
-      "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-proto": "^1.2.0",
-        "is-typed-array": "^1.1.15",
-        "reflect.getprototypeof": "^1.0.9"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-length": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
-      "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "is-typed-array": "^1.1.13",
-        "possible-typed-array-names": "^1.0.0",
-        "reflect.getprototypeof": "^1.0.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typescript": {
-      "version": "5.8.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
-      "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
-      "license": "Apache-2.0",
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
-      },
-      "engines": {
-        "node": ">=14.17"
-      }
-    },
-    "node_modules/typescript-eslint": {
-      "version": "8.33.0",
-      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.33.0.tgz",
-      "integrity": "sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/eslint-plugin": "8.33.0",
-        "@typescript-eslint/parser": "8.33.0",
-        "@typescript-eslint/utils": "8.33.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
-      "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "which-boxed-primitive": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/undici-types": {
-      "version": "6.21.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
-      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
-      "devOptional": true,
-      "license": "MIT"
-    },
-    "node_modules/unicorn-magic": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
-      "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/unixify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz",
-      "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==",
-      "license": "MIT",
-      "dependencies": {
-        "normalize-path": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unixify/node_modules/normalize-path": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
-      "license": "MIT",
-      "dependencies": {
-        "remove-trailing-separator": "^1.0.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/unrs-resolver": {
-      "version": "1.7.8",
-      "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.7.8.tgz",
-      "integrity": "sha512-2zsXwyOXmCX9nGz4vhtZRYhe30V78heAv+KDc21A/KMdovGHbZcixeD5JHEF0DrFXzdytwuzYclcPbvp8A3Jlw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "dependencies": {
-        "napi-postinstall": "^0.2.2"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unrs-resolver"
-      },
-      "optionalDependencies": {
-        "@unrs/resolver-binding-darwin-arm64": "1.7.8",
-        "@unrs/resolver-binding-darwin-x64": "1.7.8",
-        "@unrs/resolver-binding-freebsd-x64": "1.7.8",
-        "@unrs/resolver-binding-linux-arm-gnueabihf": "1.7.8",
-        "@unrs/resolver-binding-linux-arm-musleabihf": "1.7.8",
-        "@unrs/resolver-binding-linux-arm64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-arm64-musl": "1.7.8",
-        "@unrs/resolver-binding-linux-ppc64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-riscv64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-riscv64-musl": "1.7.8",
-        "@unrs/resolver-binding-linux-s390x-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-x64-gnu": "1.7.8",
-        "@unrs/resolver-binding-linux-x64-musl": "1.7.8",
-        "@unrs/resolver-binding-wasm32-wasi": "1.7.8",
-        "@unrs/resolver-binding-win32-arm64-msvc": "1.7.8",
-        "@unrs/resolver-binding-win32-ia32-msvc": "1.7.8",
-        "@unrs/resolver-binding-win32-x64-msvc": "1.7.8"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/urlpattern-polyfill": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz",
-      "integrity": "sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ==",
-      "license": "MIT"
-    },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "license": "MIT"
-    },
-    "node_modules/uuid": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
-      "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
-      "funding": [
-        "https://github.com/sponsors/broofa",
-        "https://github.com/sponsors/ctavan"
-      ],
-      "license": "MIT",
-      "bin": {
-        "uuid": "dist/esm/bin/uuid"
-      }
-    },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/vite": {
-      "version": "6.3.5",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
-      "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "esbuild": "^0.25.0",
-        "fdir": "^6.4.4",
-        "picomatch": "^4.0.2",
-        "postcss": "^8.5.3",
-        "rollup": "^4.34.9",
-        "tinyglobby": "^0.2.13"
-      },
-      "bin": {
-        "vite": "bin/vite.js"
-      },
-      "engines": {
-        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/vitejs/vite?sponsor=1"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      },
-      "peerDependencies": {
-        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
-        "jiti": ">=1.21.0",
-        "less": "*",
-        "lightningcss": "^1.21.0",
-        "sass": "*",
-        "sass-embedded": "*",
-        "stylus": "*",
-        "sugarss": "*",
-        "terser": "^5.16.0",
-        "tsx": "^4.8.1",
-        "yaml": "^2.4.2"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "jiti": {
-          "optional": true
-        },
-        "less": {
-          "optional": true
-        },
-        "lightningcss": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        },
-        "sass-embedded": {
-          "optional": true
-        },
-        "stylus": {
-          "optional": true
-        },
-        "sugarss": {
-          "optional": true
-        },
-        "terser": {
-          "optional": true
-        },
-        "tsx": {
-          "optional": true
-        },
-        "yaml": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vite-node": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.1.4.tgz",
-      "integrity": "sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "cac": "^6.7.14",
-        "debug": "^4.4.0",
-        "es-module-lexer": "^1.7.0",
-        "pathe": "^2.0.3",
-        "vite": "^5.0.0 || ^6.0.0"
-      },
-      "bin": {
-        "vite-node": "vite-node.mjs"
-      },
-      "engines": {
-        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      }
-    },
-    "node_modules/vite-tsconfig-paths": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz",
-      "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^4.1.1",
-        "globrex": "^0.1.2",
-        "tsconfck": "^3.0.3"
-      },
-      "peerDependencies": {
-        "vite": "*"
-      },
-      "peerDependenciesMeta": {
-        "vite": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vitest": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.1.4.tgz",
-      "integrity": "sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@vitest/expect": "3.1.4",
-        "@vitest/mocker": "3.1.4",
-        "@vitest/pretty-format": "^3.1.4",
-        "@vitest/runner": "3.1.4",
-        "@vitest/snapshot": "3.1.4",
-        "@vitest/spy": "3.1.4",
-        "@vitest/utils": "3.1.4",
-        "chai": "^5.2.0",
-        "debug": "^4.4.0",
-        "expect-type": "^1.2.1",
-        "magic-string": "^0.30.17",
-        "pathe": "^2.0.3",
-        "std-env": "^3.9.0",
-        "tinybench": "^2.9.0",
-        "tinyexec": "^0.3.2",
-        "tinyglobby": "^0.2.13",
-        "tinypool": "^1.0.2",
-        "tinyrainbow": "^2.0.0",
-        "vite": "^5.0.0 || ^6.0.0",
-        "vite-node": "3.1.4",
-        "why-is-node-running": "^2.3.0"
-      },
-      "bin": {
-        "vitest": "vitest.mjs"
-      },
-      "engines": {
-        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/vitest"
-      },
-      "peerDependencies": {
-        "@edge-runtime/vm": "*",
-        "@types/debug": "^4.1.12",
-        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
-        "@vitest/browser": "3.1.4",
-        "@vitest/ui": "3.1.4",
-        "happy-dom": "*",
-        "jsdom": "*"
-      },
-      "peerDependenciesMeta": {
-        "@edge-runtime/vm": {
-          "optional": true
-        },
-        "@types/debug": {
-          "optional": true
-        },
-        "@types/node": {
-          "optional": true
-        },
-        "@vitest/browser": {
-          "optional": true
-        },
-        "@vitest/ui": {
-          "optional": true
-        },
-        "happy-dom": {
-          "optional": true
-        },
-        "jsdom": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vscode-languageserver-textdocument": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
-      "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/vscode-uri": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz",
-      "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/web-streams-polyfill": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
-      "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/webidl-conversions": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
-      "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/whatwg-url": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
-      "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
-      "license": "MIT",
-      "dependencies": {
-        "tr46": "~0.0.3",
-        "webidl-conversions": "^3.0.0"
-      }
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "license": "ISC",
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
-      "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-bigint": "^1.1.0",
-        "is-boolean-object": "^1.2.1",
-        "is-number-object": "^1.1.1",
-        "is-string": "^1.1.1",
-        "is-symbol": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-builtin-type": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
-      "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "function.prototype.name": "^1.1.6",
-        "has-tostringtag": "^1.0.2",
-        "is-async-function": "^2.0.0",
-        "is-date-object": "^1.1.0",
-        "is-finalizationregistry": "^1.1.0",
-        "is-generator-function": "^1.0.10",
-        "is-regex": "^1.2.1",
-        "is-weakref": "^1.0.2",
-        "isarray": "^2.0.5",
-        "which-boxed-primitive": "^1.1.0",
-        "which-collection": "^1.0.2",
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-collection": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
-      "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-map": "^2.0.3",
-        "is-set": "^2.0.3",
-        "is-weakmap": "^2.0.2",
-        "is-weakset": "^2.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/which-typed-array": {
-      "version": "1.1.19",
-      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz",
-      "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "for-each": "^0.3.5",
-        "get-proto": "^1.0.1",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/why-is-node-running": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
-      "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "siginfo": "^2.0.0",
-        "stackback": "0.0.2"
-      },
-      "bin": {
-        "why-is-node-running": "cli.js"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/winston": {
-      "version": "3.17.0",
-      "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz",
-      "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==",
-      "license": "MIT",
-      "dependencies": {
-        "@colors/colors": "^1.6.0",
-        "@dabh/diagnostics": "^2.0.2",
-        "async": "^3.2.3",
-        "is-stream": "^2.0.0",
-        "logform": "^2.7.0",
-        "one-time": "^1.0.0",
-        "readable-stream": "^3.4.0",
-        "safe-stable-stringify": "^2.3.1",
-        "stack-trace": "0.0.x",
-        "triple-beam": "^1.3.0",
-        "winston-transport": "^4.9.0"
-      },
-      "engines": {
-        "node": ">= 12.0.0"
-      }
-    },
-    "node_modules/winston-transport": {
-      "version": "4.9.0",
-      "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz",
-      "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==",
-      "license": "MIT",
-      "dependencies": {
-        "logform": "^2.7.0",
-        "readable-stream": "^3.6.2",
-        "triple-beam": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 12.0.0"
-      }
-    },
-    "node_modules/winston-transport/node_modules/readable-stream": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "license": "MIT",
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/winston/node_modules/is-stream": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
-      "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/winston/node_modules/readable-stream": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
-      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-      "license": "MIT",
-      "dependencies": {
-        "inherits": "^2.0.3",
-        "string_decoder": "^1.1.1",
-        "util-deprecate": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/word-wrap": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
-      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrap-ansi": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrap-ansi-cjs": {
-      "name": "wrap-ansi",
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-      "license": "ISC"
-    },
-    "node_modules/write-file-atomic": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz",
-      "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==",
-      "license": "ISC",
-      "dependencies": {
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^4.0.1"
-      },
-      "engines": {
-        "node": "^18.17.0 || >=20.5.0"
-      }
-    },
-    "node_modules/xdg-basedir": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz",
-      "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.4"
-      }
-    },
-    "node_modules/y18n": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
-      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/yallist": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
-      "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
-      "license": "BlueOak-1.0.0",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/yaml": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
-      "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "yaml": "bin.mjs"
-      },
-      "engines": {
-        "node": ">= 14.6"
-      }
-    },
-    "node_modules/yargs": {
-      "version": "17.7.2",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
-      "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
-      "license": "MIT",
-      "dependencies": {
-        "cliui": "^8.0.1",
-        "escalade": "^3.1.1",
-        "get-caller-file": "^2.0.5",
-        "require-directory": "^2.1.1",
-        "string-width": "^4.2.3",
-        "y18n": "^5.0.5",
-        "yargs-parser": "^21.1.1"
-      },
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/yargs-parser": {
-      "version": "21.1.1",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
-      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
-      "license": "MIT",
-      "dependencies": {
-        "buffer-crc32": "~0.2.3",
-        "fd-slicer": "~1.1.0"
-      }
-    },
-    "node_modules/yauzl/node_modules/buffer-crc32": {
-      "version": "0.2.13",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
-      "license": "MIT",
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/yocto-queue": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz",
-      "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.20"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/zip-stream": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz",
-      "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==",
-      "license": "MIT",
-      "dependencies": {
-        "archiver-utils": "^5.0.0",
-        "compress-commons": "^6.0.2",
-        "readable-stream": "^4.0.0"
-      },
-      "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/zod": {
-      "version": "3.25.36",
-      "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.36.tgz",
-      "integrity": "sha512-eRFS3i8T0IrpGdL8HQyqFAugGOn7jOjyGgGdtv5NY4Wkhi7lJDk732bNZ609YMIGFbLoaj6J69O1Mura23gfIw==",
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/colinhacks"
-      }
-    }
-  }
-}
diff --git a/frontend/package.json b/frontend/package.json
deleted file mode 100644
index a693c75b..00000000
--- a/frontend/package.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{
-  "name": "quicksnip",
-  "private": true,
-  "version": "0.0.0",
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "tsc -b && vite build",
-    "lint": "eslint .",
-    "format": "prettier --write .",
-    "format:check": "prettier --check .",
-    "preview": "vite preview",
-    "cspell": "cspell --config cspell.json \"**/*.{ts,tsx,js,jsx,json,html}\"",
-    "test": "vitest --coverage",
-    "test-ci": "vitest run"
-  },
-  "dependencies": {
-    "@netlify/functions": "^3.1.8",
-    "@types/node": "^22.10.5",
-    "motion": "^11.15.0",
-    "prismjs": "^1.29.0",
-    "react": "^18.3.1",
-    "react-dom": "^18.3.1",
-    "react-router-dom": "^7.1.1",
-    "react-syntax-highlighter": "^15.6.1"
-  },
-  "devDependencies": {
-    "@eslint/compat": "^1.2.4",
-    "@eslint/eslintrc": "^3.2.0",
-    "@eslint/js": "^9.11.1",
-    "@types/eslint-plugin-react-refresh": "^0.4.0",
-    "@types/node": "^22.10.5",
-    "@types/react": "^18.3.10",
-    "@types/react-dom": "^18.3.0",
-    "@types/react-syntax-highlighter": "^15.5.13",
-    "@vitejs/plugin-react-swc": "^3.5.0",
-    "@vitest/coverage-v8": "^3.1.3",
-    "cspell": "^8.17.1",
-    "eslint": "^9.11.1",
-    "eslint-config-prettier": "^9.1.0",
-    "eslint-import-resolver-typescript": "^3.7.0",
-    "eslint-plugin-import": "^2.31.0",
-    "eslint-plugin-prettier": "^5.2.1",
-    "eslint-plugin-react": "^7.37.3",
-    "eslint-plugin-react-hooks": "^5.1.0-rc.0",
-    "eslint-plugin-react-refresh": "^0.4.12",
-    "globals": "^15.9.0",
-    "prettier": "^3.4.2",
-    "tsx": "^4.19.2",
-    "typescript": "^5.5.3",
-    "typescript-eslint": "^8.7.0",
-    "vite": "^6.3.5",
-    "vite-tsconfig-paths": "^5.1.4",
-    "vitest": "^3.1.3"
-  }
-}
diff --git a/frontend/public/_redirects b/frontend/public/_redirects
deleted file mode 100644
index 7797f7c6..00000000
--- a/frontend/public/_redirects
+++ /dev/null
@@ -1 +0,0 @@
-/* /index.html 200
diff --git a/frontend/public/favicon/android-chrome-192x192.png b/frontend/public/favicon/android-chrome-192x192.png
deleted file mode 100644
index 7645d5e158f869fce4cf391a2f434f44a73d5068..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/favicon/android-chrome-512x512.png b/frontend/public/favicon/android-chrome-512x512.png
deleted file mode 100644
index c1af8f65c92c128d5ee0e3808a903c3bb2d1479e..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/favicon/apple-touch-icon.png b/frontend/public/favicon/apple-touch-icon.png
deleted file mode 100644
index 2dfca94fa18e087f8ece03d28c09b3bf599751c6..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/favicon/favicon-16x16.png b/frontend/public/favicon/favicon-16x16.png
deleted file mode 100644
index 7fed0c6fcf3b9e88d99d73033e176e09342ec5ac..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/favicon/favicon-32x32.png b/frontend/public/favicon/favicon-32x32.png
deleted file mode 100644
index 71be5c2cd820807ea2fa239a8a9ecdfca4b2c68e..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/favicon/favicon.ico b/frontend/public/favicon/favicon.ico
deleted file mode 100644
index 75c79c8397fb437e22b3d25f0a7cbdc360f3855c..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/fonts/SourceSans3-Italic-VariableFont_wght.woff2 b/frontend/public/fonts/SourceSans3-Italic-VariableFont_wght.woff2
deleted file mode 100644
index c0bb18873764ed714e173718913630ba36f31fc6..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/fonts/SourceSans3-VariableFont_wght.woff2 b/frontend/public/fonts/SourceSans3-VariableFont_wght.woff2
deleted file mode 100644
index ca09c91b5ac99ba0ebb7f041d8e30f29071795ff..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/frontend/public/site.webmanifest b/frontend/public/site.webmanifest
deleted file mode 100644
index 710c1f35..00000000
--- a/frontend/public/site.webmanifest
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-  "name": "QuickSnip",
-  "short_name": "QuickSnip",
-  "icons": [
-    {
-      "src": "/android-chrome-192x192.png",
-      "sizes": "192x192",
-      "type": "image/png"
-    },
-    {
-      "src": "/android-chrome-512x512.png",
-      "sizes": "512x512",
-      "type": "image/png"
-    }
-  ],
-  "theme_color": "#ffffff",
-  "background_color": "#ffffff",
-  "display": "standalone"
-}
diff --git a/frontend/src/AppRouter.tsx b/frontend/src/AppRouter.tsx
deleted file mode 100644
index a18656dd..00000000
--- a/frontend/src/AppRouter.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Route, Routes } from "react-router-dom";
-
-import App from "@components/App";
-import SnippetList from "@components/SnippetList";
-
-const AppRouter = () => {
-  return (
-    <Routes>
-      <Route element={<App />}>
-        <Route path="/" element={<SnippetList />} />
-        <Route path="/:languageName" element={<SnippetList />} />
-        <Route
-          path="/:languageName/:subLanguageName"
-          element={<SnippetList />}
-        />
-        <Route
-          path="/:languageName/:subLanguageName/:categoryName"
-          element={<SnippetList />}
-        />
-      </Route>
-    </Routes>
-  );
-};
-
-export default AppRouter;
diff --git a/frontend/src/components/App.tsx b/frontend/src/components/App.tsx
deleted file mode 100644
index d8418c6d..00000000
--- a/frontend/src/components/App.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import { FC } from "react";
-
-import { AppProvider } from "@contexts/AppContext";
-
-import Container from "./Container";
-
-interface AppProps {}
-
-const App: FC<AppProps> = () => {
-  return (
-    <AppProvider>
-      <Container />
-    </AppProvider>
-  );
-};
-
-export default App;
diff --git a/frontend/src/components/Button.tsx b/frontend/src/components/Button.tsx
deleted file mode 100644
index 549c333a..00000000
--- a/frontend/src/components/Button.tsx
+++ /dev/null
@@ -1,28 +0,0 @@
-import { ButtonHTMLAttributes, MouseEventHandler, ReactNode } from "react";
-
-type ButtonProps = {
-  isIcon?: boolean;
-  onClick?: MouseEventHandler<HTMLButtonElement>;
-  children: ReactNode;
-  className?: string;
-} & ButtonHTMLAttributes<HTMLButtonElement>;
-
-const Button = ({
-  isIcon = false,
-  className = "",
-  onClick,
-  children,
-  ...props
-}: ButtonProps) => {
-  return (
-    <button
-      className={`button ${isIcon ? "button--icon" : ""} ${className}`}
-      onClick={onClick}
-      {...props}
-    >
-      {children}
-    </button>
-  );
-};
-
-export default Button;
diff --git a/frontend/src/components/CategoryList.tsx b/frontend/src/components/CategoryList.tsx
deleted file mode 100644
index 183c616c..00000000
--- a/frontend/src/components/CategoryList.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import { FC } from "react";
-import { useNavigate, useSearchParams } from "react-router-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import { useCategories } from "@hooks/useCategories";
-import { configureUserSelection } from "@utils/configureUserSelection";
-import { defaultCategoryName } from "@utils/consts";
-import { slugify } from "@utils/slugify";
-
-interface CategoryListItemProps {
-  categoryName: string;
-}
-
-const CategoryListItem: FC<CategoryListItemProps> = ({ categoryName }) => {
-  const navigate = useNavigate();
-  const [searchParams] = useSearchParams();
-
-  const { language, subLanguage, category } = useAppContext();
-
-  const handleSelect = async () => {
-    const {
-      language: newLanguage,
-      subLanguage: newSubLanguage,
-      category: newCategory,
-    } = await configureUserSelection({
-      languageName: language.name,
-      subLanguageName: subLanguage || undefined,
-      categoryName,
-    });
-
-    const navigatePath =
-      newSubLanguage === null
-        ? `/${slugify(newLanguage.name)}/s/${slugify(newCategory)}`
-        : `/${slugify(newLanguage.name)}/${slugify(newSubLanguage)}/${slugify(newCategory)}`;
-
-    navigate({
-      pathname: navigatePath,
-      search: searchParams.toString(),
-    });
-  };
-
-  return (
-    <li className="category">
-      <button
-        className={`category__btn ${
-          slugify(categoryName) === slugify(category)
-            ? "category__btn--active"
-            : ""
-        }`}
-        onClick={handleSelect}
-      >
-        {categoryName}
-      </button>
-    </li>
-  );
-};
-
-const CategoryList = () => {
-  const { fetchedCategories, loading, error } = useCategories();
-
-  if (loading) return <div>Loading...</div>;
-
-  if (error) return <div>Error occurred: {error}</div>;
-
-  return (
-    <ul role="list" className="categories">
-      <CategoryListItem categoryName={defaultCategoryName} />
-      {fetchedCategories.map((categoryName, idx) => (
-        <CategoryListItem key={idx} categoryName={categoryName} />
-      ))}
-    </ul>
-  );
-};
-
-export default CategoryList;
diff --git a/frontend/src/components/CodePreview.tsx b/frontend/src/components/CodePreview.tsx
deleted file mode 100644
index 6f594995..00000000
--- a/frontend/src/components/CodePreview.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import { useEffect, useState } from "react";
-import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
-import {
-  oneDark,
-  oneLight,
-} from "react-syntax-highlighter/dist/esm/styles/prism";
-
-import { slugify } from "@utils/slugify";
-
-import CopyToClipboard from "./CopyToClipboard";
-import CopyURLButton from "./CopyURLButton";
-
-type Props = {
-  extension: string;
-  languageName: string;
-  code: string;
-};
-
-const CodePreview = ({ extension = "markdown", languageName, code }: Props) => {
-  const [theme, setTheme] = useState<"dark" | "light">("dark");
-
-  useEffect(() => {
-    const handleThemeChange = () => {
-      const newTheme = document.documentElement.getAttribute("data-theme") as
-        | "dark"
-        | "light";
-      setTheme(newTheme || "dark");
-    };
-
-    handleThemeChange();
-    const observer = new MutationObserver(handleThemeChange);
-    observer.observe(document.documentElement, {
-      attributes: true,
-      attributeFilter: ["data-theme"],
-    });
-
-    return () => observer.disconnect();
-  }, []);
-
-  return (
-    <div className="code-preview">
-      <div className="code-preview__header">
-        <p>{languageName ? slugify(languageName) : ""}</p>
-        <div className="code-preview__buttons">
-          <CopyToClipboard text={code} />
-          <CopyURLButton />
-        </div>
-      </div>
-      <div className="code-preview__body">
-        <SyntaxHighlighter
-          language={extension}
-          style={theme === "dark" ? oneDark : oneLight}
-          wrapLines={true}
-          customStyle={{ margin: "0", maxHeight: "22rem" }}
-        >
-          {code}
-        </SyntaxHighlighter>
-      </div>
-    </div>
-  );
-};
-
-export default CodePreview;
diff --git a/frontend/src/components/Container.tsx b/frontend/src/components/Container.tsx
deleted file mode 100644
index dc657b26..00000000
--- a/frontend/src/components/Container.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { FC } from "react";
-import { Outlet } from "react-router-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import Banner from "@layouts/Banner";
-import Footer from "@layouts/Footer";
-import Header from "@layouts/Header";
-import Sidebar from "@layouts/Sidebar";
-
-interface ContainerProps {}
-
-const Container: FC<ContainerProps> = () => {
-  const { category } = useAppContext();
-
-  return (
-    <div className="container flow">
-      <Header />
-      <Banner />
-      <main className="main">
-        <Sidebar />
-        <section className="flow">
-          <h2 className="section-title">
-            {category ? category : "Select a category"}
-          </h2>
-          <Outlet />
-        </section>
-      </main>
-      <Footer />
-    </div>
-  );
-};
-
-export default Container;
diff --git a/frontend/src/components/CopyToClipboard.tsx b/frontend/src/components/CopyToClipboard.tsx
deleted file mode 100644
index 7bc8a8c4..00000000
--- a/frontend/src/components/CopyToClipboard.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { useState } from "react";
-
-import Button from "./Button";
-import { CopyIcon } from "./Icons";
-
-type Props = {
-  text: string;
-} & React.ButtonHTMLAttributes<HTMLButtonElement>;
-
-const CopyToClipboard = ({ text, ...props }: Props) => {
-  const [isCopied, setIsCopied] = useState(false);
-
-  const copyText = () => {
-    navigator.clipboard
-      .writeText(text)
-      .then(() => {
-        setIsCopied(true);
-        setTimeout(() => setIsCopied(false), 2000);
-      })
-      .catch((err) => alert("Error occurred: " + err));
-  };
-
-  return (
-    <Button isIcon={true} onClick={copyText} {...props}>
-      <CopyIcon />
-      <span>{isCopied ? "Copied!" : "Copy"}</span>
-    </Button>
-  );
-};
-
-export default CopyToClipboard;
diff --git a/frontend/src/components/CopyURLButton.tsx b/frontend/src/components/CopyURLButton.tsx
deleted file mode 100644
index 65547cb9..00000000
--- a/frontend/src/components/CopyURLButton.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useState } from "react";
-import { useLocation } from "react-router-dom";
-
-import Button from "./Button";
-import { ShareIcon } from "./Icons";
-
-type Props = {} & React.ButtonHTMLAttributes<HTMLButtonElement>;
-
-const CopyURLButton = ({ ...props }: Props) => {
-  const location = useLocation();
-  const [isCopied, setIsCopied] = useState(false);
-
-  const copyText = () => {
-    const fullURL =
-      window.location.origin + location.pathname + location.search;
-    navigator.clipboard
-      .writeText(fullURL)
-      .then(() => {
-        setIsCopied(true);
-        setTimeout(() => setIsCopied(false), 2000);
-      })
-      .catch((err) => alert("Error occurred: " + err));
-  };
-
-  return (
-    <Button isIcon={true} onClick={copyText} {...props}>
-      <ShareIcon />
-      <span>{isCopied ? "Shared!" : "Share"}</span>
-    </Button>
-  );
-};
-
-export default CopyURLButton;
diff --git a/frontend/src/components/Icons.tsx b/frontend/src/components/Icons.tsx
deleted file mode 100644
index 4a93d901..00000000
--- a/frontend/src/components/Icons.tsx
+++ /dev/null
@@ -1,200 +0,0 @@
-import { FC } from "react";
-
-const DEFAULT_ICON_COLOR = "var(--clr-icon-primary)";
-const ACCENT_ICON_COLOR = "var(--clr-accent)";
-
-interface IconProps extends React.SVGProps<SVGSVGElement> {
-  fillColor?: string;
-}
-
-export const LogoIcon: FC<IconProps> = ({ fillColor = ACCENT_ICON_COLOR }) => (
-  <svg
-    width="43"
-    height="30"
-    viewBox="0 0 43 30"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-    role="img"
-    aria-labelledby="qs-logo-title qs-logo-description"
-  >
-    <title id="qs-logo-title">QuickSnip Logo</title>
-    <desc id="qs-logo-description">
-      A light blue logo with a thunderbolt in brackets
-    </desc>
-    <path
-      d="M11.0123 3.81725C8.81785 3.81725 7.7866 4.47726 7.9186 5.79726L8.4136 10.871C8.4301 11.0195 8.43835 11.234 8.43835 11.5145C8.43835 12.3065 8.2486 12.917 7.8691 13.346C7.4896 13.7585 6.90385 14.039 6.11185 14.1875C6.92035 14.336 7.5061 14.6165 7.8691 15.029C8.2486 15.425 8.43835 16.0273 8.43835 16.8358C8.43835 17.1163 8.4301 17.339 8.4136 17.504L7.9186 22.5778C7.8526 23.3038 8.1001 23.8153 8.6611 24.1123C9.2221 24.4093 10.0058 24.5578 11.0123 24.5578V26.216C9.52735 26.216 8.3146 25.9603 7.3741 25.4488C6.4336 24.9373 5.96335 24.071 5.96335 22.85C5.96335 22.6355 5.9716 22.4705 5.9881 22.355L6.50785 17.6525C6.52435 17.537 6.5326 17.372 6.5326 17.1575C6.5326 16.4315 6.26035 15.8953 5.71585 15.5488C5.17135 15.2023 4.18135 15.029 2.74585 15.029V13.346C4.18135 13.346 5.17135 13.181 5.71585 12.851C6.26035 12.5045 6.5326 11.9683 6.5326 11.2423C6.5326 11.0443 6.52435 10.8875 6.50785 10.772L5.9881 6.02001C5.9716 5.90451 5.96335 5.73951 5.96335 5.525C5.96335 4.304 6.4336 3.43775 7.3741 2.92625C8.3146 2.41476 9.52735 2.15901 11.0123 2.15901V3.81725Z"
-      fill={fillColor}
-    />
-    <path
-      d="M30.6782 13.2235L18.41 25.8383C18.0691 26.1878 17.5037 25.7829 17.7253 25.3482L22.0922 16.7309C22.1252 16.6659 22.1411 16.5935 22.1381 16.5206C22.1352 16.4477 22.1136 16.3767 22.0754 16.3146C22.0372 16.2524 21.9836 16.2011 21.9199 16.1656C21.8562 16.13 21.7844 16.1114 21.7114 16.1116H12.5259C12.442 16.1115 12.36 16.0867 12.2902 16.0402C12.2203 15.9937 12.1658 15.9277 12.1333 15.8503C12.1008 15.7729 12.0919 15.6877 12.1077 15.6053C12.1235 15.5229 12.1632 15.447 12.2219 15.3871L23.6008 3.85901C23.9304 3.52517 24.4787 3.89169 24.2955 4.32496L21.0324 12.0174C21.0048 12.0827 20.9938 12.1537 21.0006 12.2242C21.0073 12.2947 21.0315 12.3625 21.071 12.4213C21.1105 12.4801 21.164 12.5281 21.2267 12.561C21.2894 12.5939 21.3593 12.6107 21.4302 12.6098L30.3671 12.499C30.4514 12.4977 30.5343 12.5214 30.6051 12.5671C30.676 12.6129 30.7317 12.6786 30.7651 12.7561C30.7986 12.8335 30.8083 12.9191 30.7931 13.0021C30.7779 13.085 30.7384 13.1616 30.6796 13.2221L30.6782 13.2235Z"
-      stroke={fillColor}
-      strokeWidth="1.65"
-    />
-    <path
-      d="M31.7378 2.15901C33.2228 2.15901 34.4355 2.41476 35.376 2.92625C36.3165 3.43775 36.7868 4.304 36.7868 5.525C36.7868 5.73951 36.7785 5.90451 36.762 6.02001L36.2423 10.772C36.2258 10.8545 36.2175 10.9783 36.2175 11.1433C36.2175 11.8858 36.5063 12.4385 37.0838 12.8015C37.6778 13.1645 38.6513 13.346 40.0043 13.346V15.029C38.6348 15.029 37.6613 15.2105 37.0838 15.5735C36.5063 15.9365 36.2175 16.4975 36.2175 17.2565C36.2175 17.4215 36.2258 17.5535 36.2423 17.6525L36.762 22.355C36.7785 22.4705 36.7868 22.6355 36.7868 22.85C36.7868 24.071 36.3165 24.9373 35.376 25.4488C34.4355 25.9603 33.2228 26.216 31.7378 26.216V24.5578C32.7443 24.5578 33.528 24.4093 34.089 24.1123C34.65 23.8153 34.8975 23.3038 34.8315 22.5778L34.3365 17.504C34.3035 17.174 34.287 16.9513 34.287 16.8358C34.287 16.0108 34.4933 15.4003 34.9058 15.0043C35.3183 14.6083 35.9865 14.3443 36.9105 14.2123C36.0195 14.0473 35.3595 13.7585 34.9305 13.346C34.518 12.917 34.3118 12.2983 34.3118 11.4898C34.3118 11.2258 34.32 11.0195 34.3365 10.871L34.8315 5.79726C34.9635 4.47726 33.9323 3.81725 31.7378 3.81725V2.15901Z"
-      fill={fillColor}
-    />
-  </svg>
-);
-
-export const SearchIcon: FC<IconProps> = ({
-  fillColor = DEFAULT_ICON_COLOR,
-}) => (
-  <svg
-    width="24"
-    height="24"
-    viewBox="0 0 24 24"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-    role="img"
-    aria-labelledby="search-icon-title search-icon-description"
-  >
-    <title id="search-icon-title">Search icon</title>
-    <desc id="search-icon-description">A magnifying glass icon</desc>
-    <path
-      d="M19.6 21L13.3 14.7C12.8 15.1 12.225 15.4167 11.575 15.65C10.925 15.8833 10.2333 16 9.5 16C7.68333 16 6.146 15.3707 4.888 14.112C3.63 12.8533 3.00067 11.316 3 9.5C2.99933 7.684 3.62867 6.14667 4.888 4.888C6.14733 3.62933 7.68467 3 9.5 3C11.3153 3 12.853 3.62933 14.113 4.888C15.373 6.14667 16.002 7.684 16 9.5C16 10.2333 15.8833 10.925 15.65 11.575C15.4167 12.225 15.1 12.8 14.7 13.3L21 19.6L19.6 21ZM9.5 14C10.75 14 11.8127 13.5627 12.688 12.688C13.5633 11.8133 14.0007 10.7507 14 9.5C13.9993 8.24933 13.562 7.187 12.688 6.313C11.814 5.439 10.7513 5.00133 9.5 5C8.24867 4.99867 7.18633 5.43633 6.313 6.313C5.43967 7.18967 5.002 8.252 5 9.5C4.998 10.748 5.43567 11.8107 6.313 12.688C7.19033 13.5653 8.25267 14.0027 9.5 14Z"
-      fill={fillColor}
-    />
-  </svg>
-);
-
-export const GitHubIcon: FC<IconProps> = ({
-  fillColor = DEFAULT_ICON_COLOR,
-}) => (
-  <svg
-    width="24"
-    height="24"
-    viewBox="0 0 24 24"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-    role="img"
-    aria-labelledby="gh-logo-title gh-logo-description"
-  >
-    <title id="gh-logo-title">Github Logo</title>
-    <desc id="gh-logo-description">
-      A black cat silhouette inside a white circle
-    </desc>
-    <path
-      d="M12 2C10.6868 2 9.38642 2.25866 8.17317 2.7612C6.95991 3.26375 5.85752 4.00035 4.92893 4.92893C3.05357 6.8043 2 9.34784 2 12C2 16.42 4.87 20.17 8.84 21.5C9.34 21.58 9.5 21.27 9.5 21V19.31C6.73 19.91 6.14 17.97 6.14 17.97C5.68 16.81 5.03 16.5 5.03 16.5C4.12 15.88 5.1 15.9 5.1 15.9C6.1 15.97 6.63 16.93 6.63 16.93C7.5 18.45 8.97 18 9.54 17.76C9.63 17.11 9.89 16.67 10.17 16.42C7.95 16.17 5.62 15.31 5.62 11.5C5.62 10.39 6 9.5 6.65 8.79C6.55 8.54 6.2 7.5 6.75 6.15C6.75 6.15 7.59 5.88 9.5 7.17C10.29 6.95 11.15 6.84 12 6.84C12.85 6.84 13.71 6.95 14.5 7.17C16.41 5.88 17.25 6.15 17.25 6.15C17.8 7.5 17.45 8.54 17.35 8.79C18 9.5 18.38 10.39 18.38 11.5C18.38 15.32 16.04 16.16 13.81 16.41C14.17 16.72 14.5 17.33 14.5 18.26V21C14.5 21.27 14.66 21.59 15.17 21.5C19.14 20.16 22 16.42 22 12C22 10.6868 21.7413 9.38642 21.2388 8.17317C20.7362 6.95991 19.9997 5.85752 19.0711 4.92893C18.1425 4.00035 17.0401 3.26375 15.8268 2.7612C14.6136 2.25866 13.3132 2 12 2Z"
-      fill={fillColor}
-    />
-  </svg>
-);
-
-export const SwitchIcon: FC<IconProps> = ({
-  fillColor = DEFAULT_ICON_COLOR,
-}) => (
-  <svg
-    width="22"
-    height="22"
-    viewBox="0 0 22 22"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-  >
-    <path
-      d="M2.75 8.70833H19.25L13.75 3.20833M19.6162 13.2917H3.11621L8.61621 18.7917"
-      stroke={fillColor}
-      strokeWidth="2"
-      strokeLinecap="round"
-      strokeLinejoin="round"
-    />
-  </svg>
-);
-
-export const ExpandIcon: FC<IconProps> = ({
-  fillColor = DEFAULT_ICON_COLOR,
-}) => (
-  <svg
-    width="16"
-    height="17"
-    viewBox="0 0 16 17"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-  >
-    <path
-      d="M14 14.5L10 10.5M14 14.5V11.3M14 14.5H10.8M2 11.3V14.5M2 14.5H5.2M2 14.5L6 10.5M14 5.7V2.5M14 2.5H10.8M14 2.5L10 6.5M2 5.7V2.5M2 2.5H5.2M2 2.5L6 6.5"
-      stroke={fillColor}
-      strokeWidth="2"
-      strokeLinecap="round"
-      strokeLinejoin="round"
-    />
-  </svg>
-);
-
-export const CloseIcon: FC<IconProps> = ({
-  fillColor = DEFAULT_ICON_COLOR,
-}) => (
-  <svg
-    width="31"
-    height="30"
-    viewBox="0 0 31 30"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-  >
-    <path
-      d="M8.5 23.75L6.75 22L13.75 15L6.75 8L8.5 6.25L15.5 13.25L22.5 6.25L24.25 8L17.25 15L24.25 22L22.5 23.75L15.5 16.75L8.5 23.75Z"
-      fill={fillColor}
-    />
-  </svg>
-);
-
-export const CopyIcon: FC<IconProps> = ({ fillColor = ACCENT_ICON_COLOR }) => (
-  <svg
-    width="20"
-    height="20"
-    viewBox="0 0 20 20"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-  >
-    <path
-      d="M12.7 1.66667H9.455C7.985 1.66667 6.82 1.66667 5.90917 1.79C4.97083 1.91667 4.21167 2.18333 3.61333 2.78417C3.01417 3.385 2.74833 4.1475 2.6225 5.08917C2.5 6.00417 2.5 7.17333 2.5 8.64917V13.5142C2.5 14.7708 3.26667 15.8475 4.35583 16.2992C4.3 15.5408 4.3 14.4783 4.3 13.5933V9.41833C4.3 8.35083 4.3 7.43 4.39833 6.69333C4.50417 5.90333 4.7425 5.14667 5.35417 4.5325C5.96583 3.91833 6.72 3.67917 7.50667 3.5725C8.24 3.47417 9.15667 3.47417 10.2208 3.47417H12.7792C13.8425 3.47417 14.7575 3.47417 15.4917 3.5725C15.2718 3.01108 14.8878 2.52895 14.3898 2.18899C13.8918 1.84902 13.303 1.66701 12.7 1.66667Z"
-      fill={fillColor}
-    />
-    <path
-      d="M5.5 9.4975C5.5 7.22583 5.5 6.09 6.20333 5.38416C6.90583 4.67833 8.03667 4.67833 10.3 4.67833H12.7C14.9625 4.67833 16.0942 4.67833 16.7975 5.38416C17.5008 6.09 17.5 7.22583 17.5 9.4975V13.5142C17.5 15.7858 17.5 16.9217 16.7975 17.6275C16.0942 18.3333 14.9625 18.3333 12.7 18.3333H10.3C8.0375 18.3333 6.90583 18.3333 6.20333 17.6275C5.5 16.9217 5.5 15.7858 5.5 13.5142V9.4975Z"
-      fill={fillColor}
-    />
-  </svg>
-);
-
-export const ShareIcon: FC<IconProps> = ({ fillColor = ACCENT_ICON_COLOR }) => (
-  <svg
-    width="20"
-    height="20"
-    viewBox="0 0 20 20"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-  >
-    <path
-      d="M17.9167 3.75C17.9168 4.3204 17.7497 4.87833 17.436 5.35474C17.1224 5.83115 16.6759 6.20513 16.1518 6.43039C15.6278 6.65565 15.0492 6.72231 14.4877 6.62211C13.9261 6.52191 13.4063 6.25926 12.9925 5.86666L7.00416 9.32333C7.11027 9.7682 7.11027 10.2318 7.00416 10.6767L12.9925 14.1342C13.501 13.6522 14.166 13.3694 14.8659 13.3375C15.5657 13.3056 16.2537 13.5266 16.804 13.9602C17.3543 14.3938 17.7301 15.011 17.8628 15.6989C17.9954 16.3869 17.876 17.0996 17.5264 17.7067C17.1767 18.3138 16.6202 18.7748 15.9587 19.0053C15.2971 19.2359 14.5746 19.2206 13.9234 18.9623C13.2722 18.704 12.7357 18.2199 12.412 17.5985C12.0884 16.9771 11.9992 16.26 12.1608 15.5783L6.17 12.12C5.75586 12.5115 5.23611 12.773 4.67496 12.8724C4.11382 12.9718 3.53585 12.9046 3.01248 12.6791C2.4891 12.4536 2.04323 12.0798 1.72997 11.6037C1.4167 11.1277 1.24976 10.5703 1.24976 10.0004C1.24976 9.43053 1.4167 8.87314 1.72997 8.39709C2.04323 7.92104 2.4891 7.54719 3.01248 7.32173C3.53585 7.09626 4.11382 7.02906 4.67496 7.12842C5.23611 7.22778 5.75586 7.48936 6.17 7.88083L12.1617 4.42166C12.0669 4.02118 12.058 3.60518 12.1355 3.20101C12.213 2.79683 12.3752 2.41364 12.6113 2.0766C12.8474 1.73956 13.1522 1.45631 13.5057 1.24546C13.8591 1.03461 14.2531 0.900943 14.6619 0.853236C15.0706 0.80553 15.4849 0.844866 15.8774 0.968659C16.2698 1.09245 16.6317 1.2979 16.9391 1.5715C17.2465 1.8451 17.4925 2.18066 17.661 2.55612C17.8295 2.93159 17.9166 3.33846 17.9167 3.75Z"
-      fill={fillColor}
-    />
-  </svg>
-);
-
-export const LeftAngleArrowIcon: FC<IconProps> = ({
-  fillColor = DEFAULT_ICON_COLOR,
-  ...props
-}) => (
-  <svg
-    width="76"
-    height="71"
-    viewBox="0 0 76 71"
-    fill="none"
-    xmlns="http://www.w3.org/2000/svg"
-    {...props}
-  >
-    <path
-      d="M73.361 2.64117C72.8587 14.6952 65.2254 29.6432 57.1589 38.4966C45.9765 50.77 24.6768 56.9443 8.64868 58.7252"
-      stroke={fillColor}
-      strokeWidth="5"
-      strokeLinecap="round"
-    />
-    <path
-      d="M17.277 49.234C14.7244 49.234 2.70471 56.0618 2.70471 58.3417C2.70471 64.1794 14.4152 63.672 15.5513 68.2163"
-      stroke={fillColor}
-      strokeWidth="5"
-      strokeLinecap="round"
-    />
-  </svg>
-);
diff --git a/frontend/src/components/LanguageSelector.tsx b/frontend/src/components/LanguageSelector.tsx
deleted file mode 100644
index f9f63900..00000000
--- a/frontend/src/components/LanguageSelector.tsx
+++ /dev/null
@@ -1,236 +0,0 @@
-/**
- * Inspired by https://blog.logrocket.com/creating-custom-select-dropdown-css/
- */
-
-import { useRef, useEffect, useState, useMemo } from "react";
-import { useNavigate } from "react-router-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import { useKeyboardNavigation } from "@hooks/useKeyboardNavigation";
-import { useLanguages } from "@hooks/useLanguages";
-import { LanguageType } from "@types";
-import { configureUserSelection } from "@utils/configureUserSelection";
-import {
-  getLanguageDisplayLogo,
-  getLanguageDisplayName,
-} from "@utils/languageUtils";
-import { slugify } from "@utils/slugify";
-
-import SubLanguageSelector from "./SubLanguageSelector";
-
-const LanguageSelector = () => {
-  const navigate = useNavigate();
-
-  const { language, subLanguage, setSearchText } = useAppContext();
-  const { fetchedLanguages, loading, error } = useLanguages();
-
-  const dropdownRef = useRef<HTMLDivElement>(null);
-  const [isOpen, setIsOpen] = useState<boolean>(false);
-  const [openedLanguages, setOpenedLanguages] = useState<LanguageType[]>([]);
-
-  const keyboardItems = useMemo(() => {
-    return fetchedLanguages.flatMap((lang) =>
-      openedLanguages.map((ol) => ol.name).includes(lang.name)
-        ? [
-            { languageName: lang.name },
-            ...lang.subLanguages.map((sl) => ({
-              languageName: lang.name,
-              subLanguageName: sl.name,
-            })),
-          ]
-        : [{ languageName: lang.name }]
-    );
-  }, [fetchedLanguages, openedLanguages]);
-
-  const displayName = useMemo(
-    () => getLanguageDisplayName(language.name, subLanguage),
-    [language.name, subLanguage]
-  );
-
-  const displayLogo = useMemo(
-    () => getLanguageDisplayLogo(language.name, subLanguage),
-    [language.name, subLanguage]
-  );
-
-  const handleToggleSubLanguage = (name: LanguageType["name"]) => {
-    const isAlreadyOpened = openedLanguages.some((lang) => lang.name === name);
-    const openedLang = fetchedLanguages.find((lang) => lang.name === name);
-    if (openedLang === undefined || openedLang.subLanguages.length === 0) {
-      return;
-    }
-
-    if (!isAlreadyOpened) {
-      setOpenedLanguages((prev) => [...prev, openedLang]);
-    } else {
-      setOpenedLanguages((prev) =>
-        prev.filter((lang) => lang.name !== openedLang.name)
-      );
-    }
-  };
-
-  /**
-   * When setting a new language we need to ensure that a category
-   * has been set given this new language.
-   * Ensure that the search text is cleared.
-   */
-  const handleSelect = async (selected: LanguageType) => {
-    const {
-      language: newLanguage,
-      subLanguage: newSubLanguage,
-      category: newCategory,
-    } = await configureUserSelection({
-      languageName: selected.name,
-    });
-
-    setSearchText("");
-    const navigatePath =
-      newSubLanguage === null
-        ? `/${slugify(newLanguage.name)}/s/${slugify(newCategory)}`
-        : `/${slugify(newLanguage.name)}/${slugify(newSubLanguage)}/${slugify(newCategory)}`;
-    navigate(navigatePath);
-    setIsOpen(false);
-    setOpenedLanguages([]);
-  };
-
-  const afterSelect = () => {
-    setIsOpen(false);
-  };
-
-  const handleSubLanguageSelect = async (
-    selectedLanguageName: LanguageType["name"],
-    selectedSubLanguageName:
-      | LanguageType["subLanguages"][number]["name"]
-      | undefined
-  ) => {
-    const {
-      language: newLanguage,
-      subLanguage: newSubLanguage,
-      category: newCategory,
-    } = await configureUserSelection({
-      languageName: selectedLanguageName,
-      subLanguageName: selectedSubLanguageName,
-    });
-
-    setSearchText("");
-    const navigatePath =
-      newSubLanguage === null
-        ? `/${slugify(newLanguage.name)}/${slugify(newCategory)}`
-        : `/${slugify(newLanguage.name)}/${slugify(newSubLanguage)}/${slugify(newCategory)}`;
-    navigate(navigatePath);
-    afterSelect();
-  };
-
-  const { focusedIndex, handleKeyDown, resetFocus, focusFirst } =
-    useKeyboardNavigation({
-      items: keyboardItems,
-      isOpen,
-      toggleDropdown: (l) => handleToggleSubLanguage(l),
-      onSelect: (l, sl) => handleSubLanguageSelect(l, sl),
-      onClose: () => setIsOpen(false),
-    });
-
-  const handleBlur = () => {
-    setTimeout(() => {
-      if (
-        dropdownRef.current &&
-        !dropdownRef.current.contains(document.activeElement)
-      ) {
-        setIsOpen(false);
-      }
-    }, 0);
-  };
-
-  const toggleDropdown = () => {
-    setIsOpen((prev) => {
-      if (!prev) setTimeout(focusFirst, 0);
-      return !prev;
-    });
-  };
-
-  useEffect(() => {
-    if (!isOpen) {
-      resetFocus();
-    }
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [isOpen]);
-
-  useEffect(() => {
-    if (isOpen && focusedIndex >= 0) {
-      const elements = Array.from(
-        document.querySelectorAll(".selector__item")
-      ) as HTMLElement[];
-      const focusableElements = elements.filter(
-        (el) => el.getAttribute("tabIndex") !== "-1"
-      );
-      const element = focusableElements[focusedIndex];
-      element?.focus();
-    }
-  }, [isOpen, focusedIndex]);
-
-  if (loading) {
-    return <p>Loading languages...</p>;
-  }
-
-  if (error) {
-    return <p>Error fetching languages: {error}</p>;
-  }
-
-  return (
-    <div
-      className={`selector ${isOpen ? "selector--open" : ""}`}
-      ref={dropdownRef}
-      onBlur={handleBlur}
-    >
-      <button
-        className="selector__button"
-        aria-label="select button"
-        aria-haspopup="listbox"
-        aria-expanded={isOpen}
-        onClick={toggleDropdown}
-      >
-        <div className="selector__value">
-          <img src={displayLogo} alt="" />
-          <span>{displayName}</span>
-        </div>
-        <span className="selector__arrow" />
-      </button>
-      <ul
-        className={`selector__dropdown ${isOpen ? "" : " hidden"}`}
-        role="listbox"
-        onKeyDown={handleKeyDown}
-        tabIndex={0}
-      >
-        {fetchedLanguages.map((lang, index) =>
-          lang.subLanguages.length > 0 ? (
-            <SubLanguageSelector
-              key={lang.name}
-              opened={openedLanguages.includes(lang)}
-              parentLanguage={lang}
-              onDropdownToggle={handleToggleSubLanguage}
-              handleParentSelect={handleSelect}
-              afterSelect={afterSelect}
-            />
-          ) : (
-            <li
-              key={lang.name}
-              role="option"
-              tabIndex={0}
-              onClick={() => handleSelect(lang)}
-              className={`selector__item ${
-                language.name === lang.name ? "selected" : ""
-              } ${focusedIndex === index ? "focused" : ""}`}
-              aria-selected={language.name === lang.name}
-            >
-              <label>
-                <img src={lang.icon} alt="" />
-                <span>{lang.name}</span>
-              </label>
-            </li>
-          )
-        )}
-      </ul>
-    </div>
-  );
-};
-
-export default LanguageSelector;
diff --git a/frontend/src/components/LinkButton.tsx b/frontend/src/components/LinkButton.tsx
deleted file mode 100644
index bb9692a9..00000000
--- a/frontend/src/components/LinkButton.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import { AnchorHTMLAttributes, ReactNode } from "react";
-
-type LinkButtonProps = {
-  href: string;
-  children: ReactNode;
-  className?: string;
-} & AnchorHTMLAttributes<HTMLAnchorElement>;
-
-const LinkButton = ({
-  href,
-  className = "",
-  children,
-  ...props
-}: LinkButtonProps) => {
-  return (
-    <a className={`button ${className}`} href={href} {...props}>
-      {children}
-    </a>
-  );
-};
-
-export default LinkButton;
diff --git a/frontend/src/components/Logo.tsx b/frontend/src/components/Logo.tsx
deleted file mode 100644
index c1ae316a..00000000
--- a/frontend/src/components/Logo.tsx
+++ /dev/null
@@ -1,12 +0,0 @@
-import { LogoIcon } from "./Icons";
-
-const Logo = () => {
-  return (
-    <a href="/" className="logo">
-      <LogoIcon />
-      <span>QuickSnip</span>
-    </a>
-  );
-};
-
-export default Logo;
diff --git a/frontend/src/components/SearchInput.tsx b/frontend/src/components/SearchInput.tsx
deleted file mode 100644
index a85a206d..00000000
--- a/frontend/src/components/SearchInput.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import { useCallback, useEffect, useRef } from "react";
-import { useSearchParams } from "react-router-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import { QueryParams } from "@utils/enums";
-
-import { SearchIcon } from "./Icons";
-
-const SearchInput = () => {
-  const [searchParams, setSearchParams] = useSearchParams();
-
-  const { searchText, setSearchText } = useAppContext();
-
-  const inputRef = useRef<HTMLInputElement | null>(null);
-
-  const handleSearchFieldClick = () => {
-    inputRef.current?.focus();
-  };
-
-  const clearSearch = useCallback(() => {
-    setSearchText("");
-    searchParams.delete(QueryParams.SEARCH);
-    setSearchParams(searchParams);
-  }, [searchParams, setSearchParams, setSearchText]);
-
-  const performSearch = useCallback(() => {
-    // Check if the input element is focused.
-    if (document.activeElement !== inputRef.current) {
-      return;
-    }
-
-    const formattedVal = searchText.toLowerCase();
-
-    setSearchText(formattedVal);
-    if (!formattedVal) {
-      searchParams.delete(QueryParams.SEARCH);
-      setSearchParams(searchParams);
-    } else {
-      searchParams.set(QueryParams.SEARCH, formattedVal);
-      setSearchParams(searchParams);
-    }
-  }, [searchParams, searchText, setSearchParams, setSearchText]);
-
-  /**
-   * Focus the search input when the user presses the `/` key.
-   */
-  const handleSearchKeyPress = (e: KeyboardEvent) => {
-    if (e.key === "/") {
-      e.preventDefault();
-      inputRef.current?.focus();
-    }
-  };
-
-  /**
-   * Clear search text and blur the input when the `Escape` key is pressed.
-   */
-  const handleEscapeKeyPress = useCallback(
-    (e: KeyboardEvent) => {
-      if (e.key !== "Escape") {
-        return;
-      }
-
-      // Check if the input element is focused.
-      if (document.activeElement !== inputRef.current) {
-        return;
-      }
-
-      inputRef.current?.blur();
-
-      clearSearch();
-    },
-    [clearSearch]
-  );
-
-  useEffect(() => {
-    window.addEventListener("keydown", handleSearchKeyPress);
-    window.addEventListener("keyup", handleEscapeKeyPress);
-
-    return () => {
-      window.removeEventListener("keydown", handleSearchKeyPress);
-      window.removeEventListener("keyup", handleEscapeKeyPress);
-    };
-  }, [handleEscapeKeyPress]);
-
-  /**
-   * Update the search query in the URL when the search text changes.
-   */
-  useEffect(() => {
-    performSearch();
-  }, [searchText, performSearch]);
-
-  /**
-   * Set the search text to the search query from the URL on mount.
-   */
-  useEffect(() => {
-    const searchQuery = searchParams.get(QueryParams.SEARCH);
-    if (!searchQuery) {
-      return;
-    }
-
-    setSearchText(searchQuery);
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, []);
-
-  return (
-    <div className="search-field" onClick={handleSearchFieldClick}>
-      <SearchIcon />
-      <input
-        ref={inputRef}
-        value={searchText}
-        type="search"
-        id="search"
-        autoComplete="off"
-        onChange={(e) => {
-          const newValue = e.target.value;
-          if (!newValue) {
-            clearSearch();
-            return;
-          }
-          setSearchText(newValue);
-        }}
-      />
-      {!searchText && (
-        <label htmlFor="search">
-          Type <kbd>/</kbd> to search
-        </label>
-      )}
-    </div>
-  );
-};
-
-export default SearchInput;
diff --git a/frontend/src/components/SnippetList.tsx b/frontend/src/components/SnippetList.tsx
deleted file mode 100644
index 9235f560..00000000
--- a/frontend/src/components/SnippetList.tsx
+++ /dev/null
@@ -1,146 +0,0 @@
-import { motion, AnimatePresence, useReducedMotion } from "motion/react";
-import { useEffect, useState } from "react";
-import { useSearchParams } from "react-router-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import { useSnippets } from "@hooks/useSnippets";
-import { SnippetType } from "@types";
-import { QueryParams } from "@utils/enums";
-import {
-  getLanguageDisplayLogo,
-  getLanguageDisplayName,
-} from "@utils/languageUtils";
-import { slugify } from "@utils/slugify";
-
-import SnippetModal from "./SnippetModal";
-
-const SnippetList = () => {
-  const [searchParams, setSearchParams] = useSearchParams();
-  const { fetchedSnippets, loading } = useSnippets();
-  const { language, subLanguage, snippet, setSnippet } = useAppContext();
-
-  const [isModalOpen, setIsModalOpen] = useState<boolean>(false);
-
-  const shouldReduceMotion = useReducedMotion();
-
-  const handleOpenModal = (selected: SnippetType) => () => {
-    setIsModalOpen(true);
-    setSnippet(selected);
-
-    const newParams = new URLSearchParams(searchParams.toString());
-    newParams.set(QueryParams.SNIPPET, slugify(selected.title));
-    setSearchParams(searchParams);
-  };
-
-  const handleCloseModal = () => {
-    setIsModalOpen(false);
-    setSnippet(null);
-
-    const newParams = new URLSearchParams(searchParams.toString());
-    newParams.delete(QueryParams.SNIPPET);
-    setSearchParams(searchParams);
-  };
-
-  /**
-   * open the relevant modal if the snippet is in the search params
-   */
-  const snippetSlug = searchParams.get(QueryParams.SNIPPET);
-
-  useEffect(() => {
-    if (!snippetSlug) return;
-
-    const selectedSnippet = (fetchedSnippets ?? []).find(
-      (item) => slugify(item.title) === snippetSlug
-    );
-
-    if (selectedSnippet) {
-      handleOpenModal(selectedSnippet)();
-    }
-
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, [fetchedSnippets, searchParams]);
-
-  if (loading) return null;
-
-  return (
-    <>
-      <motion.ul
-        role="list"
-        className={`snippets ${fetchedSnippets && fetchedSnippets.length === 0 ? "data-empty" : ""}`}
-      >
-        <AnimatePresence mode="popLayout">
-          {fetchedSnippets && fetchedSnippets.length === 0 && (
-            <div className="category-no-snippets-found">
-              <p>No snippets found for this category. Why not add one? 🚀</p>
-              <a
-                href="https://github.com/technoph1le/quicksnip/blob/main/CONTRIBUTING.md"
-                target="_blank"
-                rel="noopener noreferrer"
-                className="styled-link"
-              >
-                Add your own snippet
-              </a>
-            </div>
-          )}
-
-          {fetchedSnippets.map((snippet, idx) => {
-            const uniqueId = `${language.name}-${snippet.title}-${idx}`;
-            return (
-              <motion.li
-                key={uniqueId}
-                layoutId={uniqueId}
-                initial={{ opacity: 0, y: 20 }}
-                animate={{
-                  opacity: 1,
-                  y: 0,
-                  transition: {
-                    duration: shouldReduceMotion ? 0 : 0.2,
-                  },
-                }}
-                exit={{
-                  opacity: 0,
-                  y: -20,
-                  transition: {
-                    duration: shouldReduceMotion ? 0 : 0.09,
-                  },
-                }}
-                transition={{
-                  ease: [0, 0.75, 0.25, 1],
-                  duration: shouldReduceMotion ? 0 : 0.25,
-                }}
-              >
-                <motion.button
-                  className="snippet | flow"
-                  data-flow-space="sm"
-                  onClick={handleOpenModal(snippet)}
-                  whileHover={{ scale: 1.01 }}
-                  whileTap={{ scale: 0.98 }}
-                >
-                  <div className="snippet__preview">
-                    <img
-                      src={getLanguageDisplayLogo(language.name, subLanguage)}
-                      alt={getLanguageDisplayName(language.name, subLanguage)}
-                    />
-                  </div>
-                  <h3 className="snippet__title">{snippet.title}</h3>
-                </motion.button>
-              </motion.li>
-            );
-          })}
-        </AnimatePresence>
-      </motion.ul>
-
-      <AnimatePresence mode="wait">
-        {isModalOpen && snippet && (
-          <SnippetModal
-            snippet={snippet}
-            handleCloseModal={handleCloseModal}
-            extension={snippet.extension}
-          />
-        )}
-      </AnimatePresence>
-    </>
-  );
-};
-
-export default SnippetList;
diff --git a/frontend/src/components/SnippetModal.tsx b/frontend/src/components/SnippetModal.tsx
deleted file mode 100644
index b7ce3149..00000000
--- a/frontend/src/components/SnippetModal.tsx
+++ /dev/null
@@ -1,125 +0,0 @@
-import { motion, useReducedMotion } from "motion/react";
-import React from "react";
-import ReactDOM from "react-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import { useEscapeKey } from "@hooks/useEscapeKey";
-import { SnippetType } from "@types";
-
-import Button from "./Button";
-import CodePreview from "./CodePreview";
-import { CloseIcon } from "./Icons";
-
-type Props = {
-  snippet: SnippetType;
-  extension: string;
-  handleCloseModal: () => void;
-};
-
-const SnippetModal: React.FC<Props> = ({
-  snippet,
-  extension,
-  handleCloseModal,
-}) => {
-  const modalRoot = document.getElementById("modal-root");
-
-  const { language, subLanguage } = useAppContext();
-  const shouldReduceMotion = useReducedMotion();
-
-  useEscapeKey(handleCloseModal);
-
-  if (!modalRoot) {
-    return null;
-  }
-
-  return ReactDOM.createPortal(
-    <motion.div
-      key="modal-overlay"
-      className="modal-overlay"
-      onClick={(e) => {
-        if (e.target === e.currentTarget) {
-          handleCloseModal();
-        }
-      }}
-      initial={{ opacity: 0 }}
-      animate={{ opacity: 1 }}
-      exit={{ opacity: 0 }}
-      transition={{ duration: shouldReduceMotion ? 0 : 0.2 }}
-    >
-      <motion.div
-        key="modal-content"
-        className="modal | flow"
-        data-flow-space="lg"
-        layoutId={`${extension}-${snippet.title}`}
-        transition={{
-          ease: [0, 0.75, 0.25, 1],
-          duration: shouldReduceMotion ? 0 : 0.3,
-        }}
-      >
-        <div className="modal__header">
-          <h2 className="section-title">{snippet.title}</h2>
-          <Button isIcon={true} onClick={handleCloseModal}>
-            <CloseIcon />
-          </Button>
-        </div>
-        <div className="modal__body | flow">
-          {/* TODO: update the language name and remove all-sub-languages */}
-          <CodePreview
-            languageName={subLanguage === null ? language.name : subLanguage}
-            extension={extension}
-            code={snippet.code}
-          />
-          <p>
-            <b>Description: </b>
-            {snippet.description}
-          </p>
-          <p>
-            Created by{" "}
-            <a
-              href={`https://github.com/${snippet.author}`}
-              target="_blank"
-              rel="noopener noreferrer"
-              className="styled-link"
-            >
-              @{snippet.author}
-            </a>
-          </p>
-          {(snippet.contributors ?? []).length > 0 && (
-            <div className="contributors">
-              <span>Contributors: </span>
-              {snippet.contributors
-                ?.slice(0, 3)
-                .map((contributor, index, slicedArray) => (
-                  <>
-                    <a
-                      key={contributor}
-                      href={`https://github.com/${contributor}`}
-                      target="_blank"
-                      rel="noopener noreferrer"
-                      className="styled-link"
-                    >
-                      @{contributor}
-                    </a>
-                    {index < slicedArray.length - 1 && ", "}
-                  </>
-                ))}
-              {(snippet.contributors?.length ?? 0) > 3 && (
-                <span> & {snippet.contributors!.length - 3} more</span>
-              )}
-            </div>
-          )}
-          <ul role="list" className="modal__tags">
-            {snippet.tags.map((tag) => (
-              <li key={tag} className="modal__tag">
-                {tag}
-              </li>
-            ))}
-          </ul>
-        </div>
-      </motion.div>
-    </motion.div>,
-    modalRoot
-  );
-};
-
-export default SnippetModal;
diff --git a/frontend/src/components/SubLanguageSelector.tsx b/frontend/src/components/SubLanguageSelector.tsx
deleted file mode 100644
index d5d8fe3d..00000000
--- a/frontend/src/components/SubLanguageSelector.tsx
+++ /dev/null
@@ -1,111 +0,0 @@
-import { useNavigate } from "react-router-dom";
-
-import { useAppContext } from "@contexts/AppContext";
-import { LanguageType } from "@types";
-import { configureUserSelection } from "@utils/configureUserSelection";
-import { defaultSubLanguageName } from "@utils/consts";
-import { slugify } from "@utils/slugify";
-
-type SubLanguageSelectorProps = {
-  opened: boolean;
-  parentLanguage: LanguageType;
-  onDropdownToggle: (_: LanguageType["name"]) => void;
-  handleParentSelect: (_: LanguageType) => void;
-  afterSelect: () => void;
-};
-
-const SubLanguageSelector = ({
-  opened,
-  parentLanguage,
-  handleParentSelect,
-  afterSelect,
-  onDropdownToggle,
-}: SubLanguageSelectorProps) => {
-  const navigate = useNavigate();
-
-  const { language, subLanguage, setSearchText } = useAppContext();
-
-  const handleSubLanguageSelect =
-    (selected: LanguageType["subLanguages"][number]) => async () => {
-      const {
-        language: newLanguage,
-        subLanguage: newSubLanguage,
-        category: newCategory,
-      } = await configureUserSelection({
-        languageName: parentLanguage.name,
-        subLanguageName: selected.name,
-      });
-
-      setSearchText("");
-      const navigatePath =
-        newSubLanguage === null
-          ? `/${slugify(newLanguage.name)}/s/${slugify(newCategory)}`
-          : `/${slugify(newLanguage.name)}/${slugify(newSubLanguage)}/${slugify(newCategory)}`;
-      navigate(navigatePath);
-      afterSelect();
-    };
-
-  return (
-    <>
-      <li
-        role="option"
-        tabIndex={0}
-        className={`selector__item ${
-          subLanguage === defaultSubLanguageName &&
-          language.name === parentLanguage.name
-            ? "selected"
-            : ""
-        }`}
-        aria-selected={
-          subLanguage === defaultSubLanguageName &&
-          language.name === parentLanguage.name
-        }
-        onClick={() => handleParentSelect(parentLanguage)}
-      >
-        <label>
-          <img src={parentLanguage.icon} alt={parentLanguage.name} />
-          <span>{parentLanguage.name}</span>
-          <button
-            className="sublanguage__button"
-            tabIndex={-1}
-            aria-expanded={opened}
-            aria-haspopup="listbox"
-            onClick={(e) => {
-              e.stopPropagation();
-              onDropdownToggle(parentLanguage.name);
-            }}
-          >
-            <span className="sublanguage__arrow" />
-          </button>
-        </label>
-      </li>
-
-      {parentLanguage.subLanguages.map((sl) => {
-        const isSelected = subLanguage
-          ? slugify(subLanguage) === slugify(sl.name)
-          : false;
-
-        return (
-          <li
-            key={sl.name}
-            role="option"
-            tabIndex={opened ? 0 : -1}
-            aria-disabled={!opened}
-            className={`selector__item sublanguage__item ${opened ? "" : "hidden"} ${
-              isSelected ? "selected" : ""
-            }`}
-            aria-selected={isSelected}
-            onClick={handleSubLanguageSelect(sl)}
-          >
-            <label>
-              <img src={sl.icon} alt={sl.name} />
-              <span>{sl.name}</span>
-            </label>
-          </li>
-        );
-      })}
-    </>
-  );
-};
-
-export default SubLanguageSelector;
diff --git a/frontend/src/components/ThemeToggle.tsx b/frontend/src/components/ThemeToggle.tsx
deleted file mode 100644
index a8cdd66f..00000000
--- a/frontend/src/components/ThemeToggle.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useState, useEffect } from "react";
-
-const ThemeToggle = () => {
-  const [theme, setTheme] = useState("dark");
-
-  useEffect(() => {
-    // if the theme isn't set, use the user's system preference
-    const savedTheme = localStorage.getItem("theme");
-    if (savedTheme) {
-      setTheme(savedTheme);
-      document.documentElement.setAttribute("data-theme", savedTheme);
-    } else if (window.matchMedia("(prefers-color-scheme: dark)").matches) {
-      setTheme("dark");
-      document.documentElement.setAttribute("data-theme", "dark");
-    } else {
-      setTheme("light");
-      document.documentElement.setAttribute("data-theme", "light");
-    }
-  }, []);
-
-  const toggleTheme = () => {
-    const newTheme = theme === "dark" ? "light" : "dark";
-    setTheme(newTheme);
-    localStorage.setItem("theme", newTheme);
-    document.documentElement.setAttribute("data-theme", newTheme);
-  };
-
-  return (
-    <button onClick={toggleTheme} className="button" aria-label="Toggle theme">
-      {theme === "dark" ? "🌞" : "🌚"}
-    </button>
-  );
-};
-
-export default ThemeToggle;
diff --git a/frontend/src/contexts/AppContext.tsx b/frontend/src/contexts/AppContext.tsx
deleted file mode 100644
index 4462cddb..00000000
--- a/frontend/src/contexts/AppContext.tsx
+++ /dev/null
@@ -1,84 +0,0 @@
-import { createContext, FC, useContext, useEffect, useState } from "react";
-import { useNavigate, useParams } from "react-router-dom";
-
-import { useLanguages } from "@hooks/useLanguages";
-import { AppState, LanguageType, SnippetType } from "@types";
-import { configureUserSelection } from "@utils/configureUserSelection";
-import { defaultState, defaultURLPath } from "@utils/consts";
-import { slugify } from "@utils/slugify";
-
-const AppContext = createContext<AppState>(defaultState);
-
-export const AppProvider: FC<{ children: React.ReactNode }> = ({
-  children,
-}) => {
-  const navigate = useNavigate();
-  const { languageName, subLanguageName, categoryName } = useParams();
-  const { fetchedLanguages } = useLanguages();
-
-  const [language, setLanguage] = useState<LanguageType | null>(null);
-  const [subLanguage, setSubLanguage] = useState<string | null>(null);
-  const [category, setCategory] = useState<string | null>(null);
-  const [snippet, setSnippet] = useState<SnippetType | null>(null);
-  const [searchText, setSearchText] = useState<string>("");
-
-  useEffect(() => {
-    const configure = async () => {
-      const { language, subLanguage, category } = await configureUserSelection({
-        languageName,
-        subLanguageName,
-        categoryName,
-      });
-
-      setLanguage(language);
-      setSubLanguage(subLanguage);
-      setCategory(category);
-    };
-
-    configure();
-  }, [fetchedLanguages, languageName, subLanguageName, categoryName]);
-
-  /**
-   * Set the default language if the language is not found in the URL.
-   */
-  useEffect(() => {
-    const isInvalid =
-      !languageName ||
-      !categoryName ||
-      !fetchedLanguages.find((lang) => slugify(lang.name) === languageName);
-
-    if (isInvalid) {
-      navigate(defaultURLPath, { replace: true });
-    }
-
-    // eslint-disable-next-line react-hooks/exhaustive-deps
-  }, []);
-
-  const isLoading = language === null || category === null;
-
-  if (isLoading) {
-    return <div>Loading...</div>;
-  }
-
-  return (
-    <AppContext.Provider
-      value={
-        {
-          language,
-          subLanguage,
-          category,
-          setCategory,
-          snippet,
-          setSnippet,
-          searchText,
-          setSearchText,
-        } as AppState
-      }
-    >
-      {children}
-    </AppContext.Provider>
-  );
-};
-
-// eslint-disable-next-line react-refresh/only-export-components
-export const useAppContext = () => useContext(AppContext);
diff --git a/frontend/src/hooks/useCategories.ts b/frontend/src/hooks/useCategories.ts
deleted file mode 100644
index 06af3851..00000000
--- a/frontend/src/hooks/useCategories.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useMemo } from "react";
-
-import { useAppContext } from "@contexts/AppContext";
-import { CategoryType } from "@types";
-import { API_BASE } from "@utils/consts";
-import { getLanguageFileName } from "@utils/languageUtils";
-
-import { useFetch } from "./useFetch";
-
-export const useCategories = () => {
-  const { language, subLanguage } = useAppContext();
-
-  const languageSlug = useMemo(
-    () => getLanguageFileName(language.name, subLanguage),
-    [language.name, subLanguage]
-  );
-
-  const { data, loading, error } = useFetch<CategoryType[]>(
-    `${API_BASE}/categories/${languageSlug}`
-  );
-
-  return { fetchedCategories: data || [], loading, error };
-};
diff --git a/frontend/src/hooks/useEscapeKey.ts b/frontend/src/hooks/useEscapeKey.ts
deleted file mode 100644
index 4dbb5896..00000000
--- a/frontend/src/hooks/useEscapeKey.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useEffect } from "react";
-
-export const useEscapeKey = (onEscapeEvent: () => void) => {
-  useEffect(() => {
-    const handleEscape = (event: { key: string }) => {
-      if (event.key === "Escape") onEscapeEvent();
-    };
-    window.addEventListener("keydown", handleEscape);
-
-    return () => {
-      window.removeEventListener("keydown", handleEscape);
-    };
-  }, [onEscapeEvent]);
-};
diff --git a/frontend/src/hooks/useFetch.ts b/frontend/src/hooks/useFetch.ts
deleted file mode 100644
index a9c91ac4..00000000
--- a/frontend/src/hooks/useFetch.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { useEffect, useState } from "react";
-
-export const useFetch = <T>(url: string) => {
-  const [data, setData] = useState<T | null>(null);
-  const [error, setError] = useState<string | null>(null);
-  const [loading, setLoading] = useState<boolean>(true);
-
-  useEffect(() => {
-    const fetchData = async () => {
-      try {
-        const res = await fetch(url);
-        if (!res.ok) {
-          throw new Error(`Failed to fetch data from ${url}`);
-        }
-        const result: T = await res.json();
-        setData(result);
-      } catch (err) {
-        setError((err as Error).message);
-      } finally {
-        setLoading(false);
-      }
-    };
-
-    fetchData();
-  }, [url]);
-
-  return { data, loading, error };
-};
diff --git a/frontend/src/hooks/useGitHubStars.ts b/frontend/src/hooks/useGitHubStars.ts
deleted file mode 100644
index 8bb4f3d0..00000000
--- a/frontend/src/hooks/useGitHubStars.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useFetch } from "@hooks/useFetch";
-import { GITHUB_API } from "@utils/consts";
-
-type GitHubRepo = {
-  stargazers_count: number;
-};
-
-const useGitHubStars = () => {
-  const { data, loading, error } = useFetch<GitHubRepo>(GITHUB_API);
-
-  const starsAmount = data?.stargazers_count ?? 0;
-
-  return { starsAmount, loading, error };
-};
-
-export default useGitHubStars;
diff --git a/frontend/src/hooks/useKeyboardNavigation.ts b/frontend/src/hooks/useKeyboardNavigation.ts
deleted file mode 100644
index 2082b1ac..00000000
--- a/frontend/src/hooks/useKeyboardNavigation.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import { useState } from "react";
-
-interface UseKeyboardNavigationProps {
-  items: { languageName: string; subLanguageName?: string }[];
-  isOpen: boolean;
-  toggleDropdown: (languageName: string) => void;
-  onSelect: (languageName: string, subLanguageName?: string) => void;
-  onClose: () => void;
-}
-
-const keyboardEventKeys = {
-  arrowDown: "ArrowDown",
-  arrowUp: "ArrowUp",
-  arrowRight: "ArrowRight",
-  enter: "Enter",
-  escape: "Escape",
-} as const;
-
-type KeyboardEventKeys =
-  (typeof keyboardEventKeys)[keyof typeof keyboardEventKeys];
-
-export const useKeyboardNavigation = ({
-  items,
-  isOpen,
-  toggleDropdown,
-  onSelect,
-  onClose,
-}: UseKeyboardNavigationProps) => {
-  const [focusedIndex, setFocusedIndex] = useState<number>(-1);
-
-  const handleKeyDown = (event: React.KeyboardEvent) => {
-    if (!isOpen) {
-      return;
-    }
-
-    const key = event.key as KeyboardEventKeys;
-
-    if (Object.values(keyboardEventKeys).includes(key)) {
-      event.preventDefault();
-
-      switch (key) {
-        case "ArrowDown":
-          setFocusedIndex((prev) => (prev < items.length - 1 ? prev + 1 : 0));
-          break;
-        case "ArrowUp":
-          setFocusedIndex((prev) => (prev > 0 ? prev - 1 : items.length - 1));
-          break;
-        case "ArrowRight":
-          if (focusedIndex >= 0) {
-            const selectedItem = items[focusedIndex];
-            toggleDropdown(selectedItem.languageName);
-          }
-          break;
-        case "Enter":
-          if (focusedIndex >= 0) {
-            const selectedItem = items[focusedIndex];
-            onSelect(selectedItem.languageName, selectedItem.subLanguageName);
-          }
-          break;
-        case "Escape":
-          onClose();
-          break;
-      }
-    }
-  };
-
-  const resetFocus = () => setFocusedIndex(-1);
-  const focusFirst = () => setFocusedIndex(0);
-
-  return {
-    focusedIndex,
-    handleKeyDown,
-    resetFocus,
-    focusFirst,
-  };
-};
diff --git a/frontend/src/hooks/useLanguages.ts b/frontend/src/hooks/useLanguages.ts
deleted file mode 100644
index fac1a486..00000000
--- a/frontend/src/hooks/useLanguages.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { LanguageType } from "@types";
-import { API_BASE } from "@utils/consts";
-
-import { useFetch } from "./useFetch";
-
-export const useLanguages = () => {
-  const { data, loading, error } = useFetch<LanguageType[]>(
-    `${API_BASE}/languages`
-  );
-
-  return { fetchedLanguages: data || [], loading, error };
-};
diff --git a/frontend/src/hooks/useSnippets.ts b/frontend/src/hooks/useSnippets.ts
deleted file mode 100644
index 21d2bcd5..00000000
--- a/frontend/src/hooks/useSnippets.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import { useMemo } from "react";
-import { useParams, useSearchParams } from "react-router-dom";
-
-// import { useAppContext } from "@contexts/AppContext";
-import { SnippetType } from "@types";
-import { API_BASE, defaultCategoryName } from "@utils/consts";
-import { QueryParams } from "@utils/enums";
-import { getLanguageFileName } from "@utils/languageUtils";
-import { slugify } from "@utils/slugify";
-
-import { useFetch } from "./useFetch";
-
-export const useSnippets = () => {
-  const [searchParams] = useSearchParams();
-  const {
-    languageName = "",
-    subLanguageName = "",
-    categoryName = "",
-  } = useParams();
-
-  const languageSlug = useMemo(
-    () => getLanguageFileName(languageName, subLanguageName),
-    [languageName, subLanguageName]
-  );
-
-  const selectedCategory = useMemo(() => {
-    return slugify(categoryName) === slugify(defaultCategoryName)
-      ? "all"
-      : categoryName;
-  }, [categoryName]);
-
-  const { data, loading, error } = useFetch<SnippetType[]>(
-    `${API_BASE}/snippets/${languageSlug}/${selectedCategory}`
-  );
-  const search = (searchParams.get(QueryParams.SEARCH) || "").toLowerCase();
-
-  console.log(`${API_BASE}/snippets/${languageSlug}/${selectedCategory}`);
-
-  const fetchedSnippets = useMemo(() => {
-    if (!data) return [];
-    if (!search) return data;
-
-    return data.filter((item) => {
-      return (
-        item.title.toLowerCase().includes(search) ||
-        item.description.toLowerCase().includes(search) ||
-        item.tags.some((tag) => tag.toLowerCase().includes(search))
-      );
-    });
-  }, [data, search]);
-
-  return { fetchedSnippets, loading, error };
-};
diff --git a/frontend/src/layouts/Banner.tsx b/frontend/src/layouts/Banner.tsx
deleted file mode 100644
index ba49ac8a..00000000
--- a/frontend/src/layouts/Banner.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-const Banner = () => {
-  return (
-    <div className="heading">
-      <h1 className="main-title">
-        Made to save your <span className="text-highlight">time.</span>
-      </h1>
-      <p>
-        Find code snippets in seconds, across multiple languages. Just search
-        and copy!
-      </p>
-    </div>
-  );
-};
-
-export default Banner;
diff --git a/frontend/src/layouts/Footer.tsx b/frontend/src/layouts/Footer.tsx
deleted file mode 100644
index aac28b70..00000000
--- a/frontend/src/layouts/Footer.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-const Footer = () => {
-  return (
-    <>
-      <hr className="divider" />
-
-      <footer className="footer">
-        <div className="footer__content flow" data-flow-space="sm">
-          <p>
-            <a href="/" className="styled-link">
-              QuickSnip
-            </a>{" "}
-            is an open-source project that categorizes handy code snippets
-            across various programming languages.
-          </p>
-          <p>
-            Built with love and powered by an{" "}
-            <a
-              href="https://github.com/technoph1le/quicksnip"
-              target="_blank"
-              rel="noopener noreferrer"
-              className="styled-link"
-            >
-              awesome community
-            </a>
-            . 🚀
-          </p>
-        </div>
-        <nav className="footer__nav">
-          <ul className="flow" data-flow-space="sm">
-            <li>
-              <a
-                href="https://github.com/technoph1le/quicksnip/blob/main/CONTRIBUTING.md"
-                target="_blank"
-                rel="noopener noreferrer"
-                className="styled-link"
-              >
-                Add your own snippet
-              </a>
-            </li>
-            <li>
-              <a
-                href="https://github.com/technoph1le/quicksnip"
-                target="_blank"
-                rel="noopener noreferrer"
-                className="styled-link"
-              >
-                Edit this page on GitHub
-              </a>
-            </li>
-          </ul>
-        </nav>
-        <nav className="footer__nav">
-          <ul className="flow" data-flow-space="sm">
-            <li>
-              <a
-                href="https://github.com/technoph1le/quicksnip"
-                target="_blank"
-                rel="noopener noreferrer"
-                className="styled-link"
-              >
-                See the community
-              </a>
-            </li>
-            <li>
-              <a
-                href="https://ko-fi.com/technoph1le"
-                target="_blank"
-                rel="noopener noreferrer"
-                className="styled-link"
-              >
-                Support this project
-              </a>
-            </li>
-          </ul>
-        </nav>
-      </footer>
-    </>
-  );
-};
-
-export default Footer;
diff --git a/frontend/src/layouts/Header.tsx b/frontend/src/layouts/Header.tsx
deleted file mode 100644
index dcf05736..00000000
--- a/frontend/src/layouts/Header.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { GitHubIcon, LeftAngleArrowIcon } from "@components/Icons";
-import LinkButton from "@components/LinkButton";
-import Logo from "@components/Logo";
-import SearchInput from "@components/SearchInput";
-import ThemeToggle from "@components/ThemeToggle";
-import useGitHubStars from "@hooks/useGitHubStars";
-
-const Header = () => {
-  const { starsAmount, loading, error } = useGitHubStars();
-
-  return (
-    <header className="header">
-      <Logo />
-      <nav className="primary-nav">
-        <SearchInput />
-        <ThemeToggle />
-        <LinkButton
-          className="github-stars-btn"
-          href="https://github.com/technoph1le/quicksnip/blob/main/CONTRIBUTING.md"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          <GitHubIcon />
-          <span>Add your snippet</span>
-          <LeftAngleArrowIcon className="github-stars__arrow" />
-          <span className="github-stars__count">
-            {loading
-              ? "Loading..."
-              : error
-                ? "N/A"
-                : `⭐ ${starsAmount}+ stars`}
-          </span>
-        </LinkButton>
-      </nav>
-    </header>
-  );
-};
-
-export default Header;
diff --git a/frontend/src/layouts/Sidebar.tsx b/frontend/src/layouts/Sidebar.tsx
deleted file mode 100644
index 6f53671d..00000000
--- a/frontend/src/layouts/Sidebar.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import CategoryList from "@components/CategoryList";
-import LanguageSelector from "@components/LanguageSelector";
-
-const Sidebar = () => {
-  return (
-    <aside className="sidebar flow">
-      <LanguageSelector />
-      <CategoryList />
-    </aside>
-  );
-};
-
-export default Sidebar;
diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx
deleted file mode 100644
index 957d266f..00000000
--- a/frontend/src/main.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import "@styles/main.css";
-
-import { StrictMode } from "react";
-import { createRoot } from "react-dom/client";
-import { BrowserRouter } from "react-router-dom";
-
-import AppRouter from "@AppRouter";
-
-createRoot(document.getElementById("root")!).render(
-  <StrictMode>
-    <BrowserRouter>
-      <AppRouter />
-    </BrowserRouter>
-  </StrictMode>
-);
diff --git a/frontend/src/styles/main.css b/frontend/src/styles/main.css
deleted file mode 100644
index 7bcc51f2..00000000
--- a/frontend/src/styles/main.css
+++ /dev/null
@@ -1,877 +0,0 @@
-/*------------------------------------*\
-  #SETTINGS
-\*------------------------------------*/
-@font-face {
-  font-family: "Source Sans 3";
-  src: url("/fonts/SourceSans3-VariableFont_wght.woff2") format("woff2");
-  font-weight: 200 900;
-  font-display: swap;
-  font-style: normal;
-}
-
-@font-face {
-  font-family: "Source Sans 3";
-  src: url("/fonts/SourceSans3-Italic-VariableFont_wght.woff2") format("woff2");
-  font-weight: 200 900;
-  font-display: swap;
-  font-style: italic;
-}
-
-:root {
-  /* Base colors - DONT CHANGE THIS */
-  --clr-neutral-100: hsl(0, 0%, 95%);
-  --clr-neutral-200: hsl(0, 0%, 90%);
-  --clr-neutral-300: hsl(0, 0%, 80%);
-  --clr-neutral-400: hsl(0, 0%, 70%);
-  --clr-neutral-500: hsl(0, 0%, 50%);
-  --clr-neutral-600: hsl(0, 0%, 24%);
-  --clr-neutral-700: hsl(0, 0%, 16%);
-  --clr-neutral-800: hsl(0, 0%, 11%);
-  --clr-neutral-900: hsl(0, 0%, 5%);
-  --clr-accent-dark: hsl(181, 100%, 36%);
-  --clr-accent-light: hsl(181, 100%, 22%);
-  --scrollbar-thumb-light: hsl(0, 0%, 73%);
-  --scrollbar-thumb-dark: hsl(0, 0%, 33%);
-
-  /* Main colors - For theming */
-  --clr-accent: var(--clr-accent-dark);
-
-  --clr-bg-primary: var(--clr-neutral-800);
-  --clr-bg-secondary: var(--clr-neutral-700);
-
-  --clr-text-primary: var(--clr-neutral-200);
-  --clr-text-secondary: var(--clr-neutral-300);
-  --clr-text-tertiary: var(--clr-neutral-800);
-
-  --clr-border-primary: var(--clr-neutral-600);
-
-  --clr-icon-primary: var(--clr-neutral-200);
-
-  --clr-gradient-primary-1: var(--clr-accent);
-  --clr-gradient-primary-2: var(--clr-neutral-700);
-
-  --clr-gradient-secondary-1: var(--clr-neutral-600);
-  --clr-gradient-secondary-2: var(--clr-neutral-700);
-
-  /* Gradients */
-  --gradient-primary: linear-gradient(
-    90deg,
-    var(--clr-gradient-primary-1) 0%,
-    var(--clr-gradient-primary-2) 100%
-  );
-  --gradient-secondary: linear-gradient(
-    90deg,
-    var(--clr-gradient-secondary-1) 0%,
-    var(--clr-gradient-secondary-2) 100%
-  );
-
-  /* Font families */
-  --ff-primary: "Source Sans 3", sans-serif;
-  --ff-mono: monospace;
-
-  /* Font sizes */
-  --fs-400: 1rem;
-  --fs-500: 1.125rem;
-  --fs-600: 1.5rem;
-  --fs-700: 2rem;
-  --fs-800: 2.5rem;
-
-  /* Font weights */
-  --fw-bold: 700;
-  --fw-semi: 600;
-  --fw-normal: 400;
-
-  /* Border radius */
-  --br-sm: 0.25rem;
-  --br-md: 0.5rem;
-  --br-lg: 0.75rem;
-
-  /* webkit scrollbar */
-  --scrollbar-thumb: var(--scrollbar-thumb-dark);
-}
-
-/*------------------------------------*\
-  #ACCESSIBILITY/THEMING
-\*------------------------------------*/
-[data-theme="light"] {
-  color-scheme: light;
-
-  --clr-accent: var(--clr-accent-light);
-
-  --clr-bg-primary: var(--clr-neutral-100);
-  --clr-bg-secondary: var(--clr-neutral-200);
-
-  --clr-text-primary: var(--clr-neutral-700);
-  --clr-text-secondary: var(--clr-neutral-600);
-  --clr-text-tertiary: var(--clr-neutral-200);
-
-  --clr-border-primary: var(--clr-neutral-300);
-
-  --clr-icon-primary: var(--clr-neutral-700);
-
-  --clr-gradient-primary-1: var(--clr-accent);
-  --clr-gradient-primary-2: var(--clr-neutral-300);
-
-  --clr-gradient-secondary-1: var(--clr-neutral-100);
-  --clr-gradient-secondary-2: var(--clr-neutral-200);
-
-  --scrollbar-thumb: var(--scrollbar-thumb-light);
-}
-
-/*------------------------------------*\
-  #GENERIC
-\*------------------------------------*/
-/* @link https://piccalil.li/blog/a-more-modern-css-reset/ */
-*,
-*::before,
-*::after {
-  box-sizing: border-box;
-}
-
-body,
-h1,
-h2,
-h3,
-h4,
-p {
-  margin: 0;
-}
-
-body {
-  min-height: 100vh;
-  line-height: 1.5;
-}
-
-h1,
-h2,
-h3,
-h4,
-button,
-input,
-label {
-  line-height: 1.1;
-}
-
-h1,
-h2,
-h3,
-h4 {
-  text-wrap: balance;
-}
-
-img,
-picture {
-  max-width: 100%;
-  display: block;
-}
-
-input,
-button,
-textarea,
-select {
-  font-family: inherit;
-  font-size: inherit;
-}
-
-/*------------------------------------*\
-  #BASE
-\*------------------------------------*/
-html {
-  color-scheme: dark;
-  scrollbar-gutter: stable;
-}
-
-body {
-  font-family: var(--ff-primary);
-  background-color: var(--clr-bg-primary);
-  color: var(--clr-text-secondary);
-}
-
-button {
-  cursor: pointer;
-}
-
-ul:where([role="list"]),
-ol:where([role="list"]) {
-  list-style: none;
-  padding-left: 0;
-  margin: 0;
-}
-
-abbr {
-  text-decoration: none;
-  cursor: help;
-}
-
-/*------------------------------------*\
-  #UTILS
-\*------------------------------------*/
-/* Layout */
-.container {
-  max-width: 100rem;
-  width: 100%;
-  padding-inline: clamp(1rem, 4vw, 3rem);
-  margin-inline: auto;
-}
-
-.flow {
-  --_flow-space: 1rem;
-  display: grid;
-  gap: var(--_flow-space);
-}
-
-.flow[data-flow-space="sm"] {
-  --_flow-space: 0.5rem;
-}
-
-.flow[data-flow-space="lg"] {
-  --_flow-space: 1.5rem;
-}
-
-.flow[data-flow-space="xl"] {
-  --_flow-space: 2rem;
-}
-
-.flow:has(.data-empty) {
-  height: 100%;
-}
-
-/* Text */
-.main-title {
-  font-size: var(--fs-800);
-  font-weight: var(--fw-bold);
-  color: var(--clr-text-primary);
-}
-
-.section-title {
-  font-size: var(--fs-600);
-  font-weight: var(--fw-bold);
-  color: var(--clr-text-primary);
-}
-
-.text-highlight {
-  background-image: var(--gradient-primary);
-  background-clip: text;
-  -webkit-background-clip: text;
-  -webkit-text-fill-color: transparent;
-}
-
-.styled-link {
-  text-decoration: none;
-  font-weight: var(--fw-semi);
-  color: var(--clr-text-primary);
-
-  &:is(:hover, :focus-visible) {
-    color: var(--clr-accent);
-  }
-}
-
-/* Misc */
-.divider {
-  width: 100%;
-  height: 1px;
-  background-image: var(--gradient-primary);
-  border: none;
-}
-
-/*------------------------------------*\
-  #COMPONENTS
-\*------------------------------------*/
-/* Buttons */
-.button {
-  display: inline-flex;
-  min-height: 3rem;
-  align-items: center;
-  gap: 0.75rem;
-  background-color: var(--clr-bg-secondary);
-  border: 1px solid var(--clr-border-primary);
-  padding: 0.75em 1.125em;
-  color: var(--clr-text-primary);
-  border-radius: var(--br-md);
-  cursor: pointer;
-  line-height: 1.1;
-  text-decoration: none;
-  transition: transform 200ms ease;
-}
-
-.button:is(:hover, :focus-visible) {
-  border-color: var(--clr-accent);
-}
-
-.button--icon {
-  min-height: unset;
-  display: inline-flex;
-  gap: 0.35em;
-  align-items: center;
-  justify-content: center;
-  background-color: transparent;
-  border: none;
-  padding: 0.5em;
-}
-
-/* Search field */
-.search-field {
-  display: inline-flex;
-  align-items: center;
-  min-height: 3rem;
-  gap: 0.75rem;
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-md);
-  padding: 0.75em 1.125em;
-  position: relative;
-
-  &:is(:hover, :focus-within) {
-    border-color: var(--clr-accent);
-  }
-}
-
-.search-field label {
-  position: absolute;
-  margin-left: 2.25em;
-}
-
-.search-field:hover,
-.search-field:hover * {
-  cursor: pointer;
-}
-
-/* hide the label when the search field input element is focused */
-.search-field input:focus + label {
-  display: none;
-}
-
-.search-field label kbd {
-  background-color: var(--clr-bg-secondary);
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-sm);
-  padding: 0.25em 0.5em;
-  margin: 0 0.25em;
-  font-family: var(--ff-mono);
-  font-weight: var(--fw-bold);
-  color: var(--clr-text-primary);
-}
-
-.search-field > input {
-  background-color: transparent;
-  border: none;
-
-  &:focus {
-    outline: none;
-  }
-}
-
-/* Custom selector */
-.selector {
-  position: relative;
-  width: 100%;
-}
-
-.selector__button {
-  width: 100%;
-  font-size: var(--fs-500);
-  font-weight: var(--fw-bold);
-  padding: 0.5em 1em;
-  background-color: transparent;
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-md);
-  cursor: pointer;
-
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-}
-
-.selector__value {
-  display: flex;
-  gap: 0.5em;
-  align-items: center;
-  width: calc(100% - 30px); /* 30px accounts for the arrow */
-}
-
-.selector__value > span {
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-}
-
-.selector__value img {
-  width: 30px;
-}
-
-/**
- * 1. Since arrow color acts as a text color,
- *    border color is set to match the text color
- */
-.selector__arrow {
-  border-left: 7px solid transparent;
-  border-right: 7px solid transparent;
-  border-top: 7px solid var(--clr-text-primary); /* [1] */
-  transition: transform 300ms ease;
-}
-
-.selector--open .selector__arrow {
-  transform: rotate(180deg);
-}
-
-.selector__dropdown {
-  display: grid;
-  gap: 0.25rem;
-
-  position: absolute;
-  width: 100%;
-  height: 50vh;
-  overflow-y: auto;
-
-  background-color: var(--clr-bg-secondary);
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-md);
-  margin-top: 0.5rem;
-  padding: 0.5rem;
-  font-size: var(--fs-400);
-  list-style: none;
-
-  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
-  z-index: 1;
-  transition: all 300ms ease;
-}
-
-.selector__dropdown.hidden {
-  border: none;
-  padding: 0;
-  height: 0;
-  opacity: 0;
-  overflow: hidden;
-}
-
-.selector__dropdown::-webkit-scrollbar {
-  width: 8px;
-}
-
-.selector__dropdown::-webkit-scrollbar-thumb {
-  background: var(--scrollbar-thumb);
-  border-radius: 4px;
-}
-
-.selector__dropdown::-webkit-scrollbar-thumb:hover {
-  background: var(--scrollbar-thumb);
-}
-
-.selector__item {
-  position: relative;
-  cursor: pointer;
-  display: flex;
-  gap: 1rem;
-  align-items: center;
-  border-radius: var(--br-md);
-  transition: all 300ms ease;
-}
-
-.sublanguage__item {
-  height: 3rem;
-  margin-left: 1.5rem;
-  transition: all 300ms ease;
-}
-
-.sublanguage__item.hidden {
-  height: 0;
-  opacity: 0;
-  overflow: hidden;
-}
-
-.sublanguage__button {
-  margin-left: auto;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  padding: 1rem 0.5rem;
-  border: 0;
-  background-color: transparent;
-}
-
-.sublanguage__arrow {
-  border-left: 7px solid transparent;
-  border-right: 7px solid transparent;
-  border-top: 7px solid var(--clr-text-primary); /* [1] */
-  transform: rotate(-90deg);
-  transition: transform 100ms ease;
-  cursor: pointer;
-}
-
-[aria-expanded="true"] .sublanguage__arrow {
-  transform: rotate(0deg);
-}
-
-.selector__item.selected .sublanguage__arrow {
-  border-top-color: var(--clr-text-tertiary);
-}
-
-.selector__item label {
-  width: 100%;
-  padding: 0.25em 0.75em;
-  cursor: pointer;
-  border-radius: var(--br-md);
-  display: flex;
-  gap: 1em;
-  align-items: center;
-  color: var(--clr-text-primary);
-}
-
-.selector__item label img {
-  width: 35px;
-}
-
-.selector__item:hover {
-  background-image: var(--gradient-secondary);
-}
-
-.selector__item.selected label {
-  background-color: var(--clr-accent);
-  color: var(--clr-text-tertiary);
-  font-weight: var(--fw-bold);
-}
-
-.selector__item input[type="radio"] {
-  position: absolute;
-  left: 0;
-  opacity: 0;
-}
-
-.logo {
-  display: inline-flex;
-  gap: 0.25em;
-  color: var(--clr-text-primary);
-  text-decoration: none;
-
-  & > span {
-    font-size: var(--fs-600);
-    font-weight: var(--fw-bold);
-  }
-}
-
-/*------------------------------------*\
-  #HEADER
-\*------------------------------------*/
-.header {
-  padding-block: 1rem;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  gap: 2rem;
-  flex-wrap: wrap;
-}
-
-.primary-nav {
-  display: flex;
-  align-items: center;
-  flex-wrap: wrap;
-  gap: 1.5rem;
-}
-
-.github-stars-btn {
-  position: relative;
-}
-
-.github-stars__arrow {
-  position: absolute;
-  top: 105%;
-  left: 50%;
-  scale: 0.7;
-  pointer-events: none;
-}
-
-.github-stars__count {
-  position: absolute;
-  top: 185%;
-  left: -25%;
-  font-size: var(--fs-600);
-  font-weight: var(--fw-semi);
-  pointer-events: none;
-}
-
-@media (width < 60em) {
-  .github-stars__arrow,
-  .github-stars__count {
-    display: none;
-  }
-}
-
-/*------------------------------------*\
-  #MAIN
-\*------------------------------------*/
-.heading {
-  display: grid;
-  gap: 0.5em;
-  padding-bottom: 1rem;
-  text-align: center;
-}
-
-.main {
-  display: grid;
-  gap: 2rem;
-  align-items: start;
-  min-height: 60vh;
-
-  @media (width > 50em) {
-    grid-template-columns: 2fr 6fr;
-  }
-}
-
-/*------------------------------------*\
-  #SIDEBAR
-\*------------------------------------*/
-.categories {
-  display: grid;
-  background-color: var(--clr-bg-secondary);
-  border: 1px solid var(--clr-border-primary);
-  padding: 1.25rem;
-  border-radius: var(--br-lg);
-}
-
-.category:where(:not(:first-child)) {
-  border-top: 1px solid var(--clr-border-primary);
-}
-
-/**
- * 1. Remove the border lines above and below
- *    the selected category
- **/
-.category:has(.category__btn--active),
-.category:has(.category__btn--active) + .category {
-  border-top-color: transparent; /* [1] */
-}
-
-.category__btn {
-  text-decoration: none;
-  background-color: transparent;
-  color: inherit;
-  text-align: start;
-  display: inline-block;
-  padding: 0.75em 1em;
-  width: 100%;
-  font-size: var(--fs-500);
-  border-radius: var(--br-md);
-  border: 1px solid transparent;
-  border-right: 0;
-
-  &:is(:hover, :focus-visible):not(.category__btn--active) {
-    background-image: var(--gradient-secondary);
-  }
-}
-
-.category__btn--active {
-  background-color: var(--clr-accent);
-  border: 1px solid var(--clr-border-primary);
-  font-weight: var(--fw-bold);
-  color: var(--clr-text-tertiary);
-}
-
-/*------------------------------------*\
-  #SNIPPET
-\*------------------------------------*/
-/**
- * 1. Responsive grid that adjusts columns automatically
- *    Each item has a minimum width of 17.5rem and maximum of 100%
- */
-.snippets:not(.data-empty) {
-  display: grid;
-  gap: 1.5rem;
-  grid-template-columns: repeat(
-    auto-fill,
-    minmax(min(17.5rem, 100%), 1fr)
-  ); /* [1] */
-  height: 100%;
-  min-height: 25vh;
-  max-height: 90vh;
-  overflow-y: auto;
-  overflow-x: hidden;
-  padding: 0.5rem;
-  align-content: start;
-}
-
-.snippets::-webkit-scrollbar {
-  width: 8px;
-}
-
-.snippets::-webkit-scrollbar-thumb {
-  background: var(--scrollbar-thumb);
-  border-radius: 4px;
-}
-
-.snippets::-webkit-scrollbar-thumb:hover {
-  background: var(--scrollbar-thumb);
-}
-
-.snippet {
-  width: 100%;
-  background-color: var(--clr-bg-secondary);
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-lg);
-  padding: 0.75em;
-  text-align: start;
-
-  &:is(:hover, :focus-visible) {
-    outline: 2px solid var(--clr-border-primary);
-  }
-}
-
-.snippet__preview {
-  width: 100%;
-  overflow: hidden;
-  aspect-ratio: 9 / 3;
-  background-color: var(--clr-bg-secondary);
-  /* background-image: var(--gradient-secondary); */
-  border: 1px solid var(--clr-border-primary);
-  position: relative;
-  padding-inline: 1em;
-  display: grid;
-  place-items: center;
-}
-
-.snippet__title {
-  color: var(--clr-text-secondary);
-}
-
-.category-no-snippets-found {
-  text-align: center;
-  font-size: var(--fs-500);
-  color: var(--clr-text-primary);
-  padding: 1rem;
-  height: 100%;
-}
-/*------------------------------------*\
-  #MODAL
-\*------------------------------------*/
-body:has(.modal-overlay) {
-  overflow: hidden;
-}
-
-.modal-overlay {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100vw;
-  height: 100vh;
-  background-color: rgba(0, 0, 0, 0.7);
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  z-index: 1000;
-  overflow: hidden;
-}
-
-.modal {
-  background-color: var(--clr-bg-secondary);
-  width: fit-content;
-  min-width: 50%;
-  max-width: 1000px;
-  max-height: 90%;
-  border-radius: var(--br-lg);
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
-  gap: 0;
-  position: relative;
-  overflow: auto;
-}
-
-.modal__header {
-  z-index: 50;
-  display: flex;
-  position: sticky;
-  top: 0;
-  align-items: center;
-  justify-content: space-between;
-  gap: 1rem;
-  padding: 1rem 1.5rem;
-  background-color: var(--clr-bg-secondary);
-  border-radius: var(--br-lg);
-}
-
-.modal__body {
-  padding: 1.5rem;
-  padding-top: 0;
-  gap: 1rem;
-}
-
-.code-preview {
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-md);
-  width: 100%;
-  overflow: hidden;
-  position: relative;
-}
-
-.code-preview__header {
-  display: flex;
-  gap: 1rem;
-  justify-content: space-between;
-  align-items: center;
-  padding: 0.25em 1em;
-}
-
-.code-preview__body {
-  width: 100%;
-  overflow-x: auto;
-}
-
-.code-preview__buttons {
-  display: flex;
-  gap: 0.5em;
-}
-
-.modal__tags {
-  display: flex;
-  gap: 0.5em;
-  flex-wrap: wrap;
-}
-
-.modal__tag {
-  padding: 0.5em 1em;
-  border: 1px solid var(--clr-border-primary);
-  border-radius: var(--br-md);
-  text-transform: lowercase;
-  font-family: var(--ff-mono);
-  font-weight: var(--fw-bold);
-}
-
-/*------------------------------------*\
-  #FOOTER
-\*------------------------------------*/
-.footer {
-  display: grid;
-  gap: clamp(1rem, 2vw, 2rem);
-  grid-template-columns: 1fr;
-  grid-template-areas:
-    "footer_content"
-    "footer_nav1"
-    "footer_nav2";
-  padding-bottom: 3rem;
-}
-
-@media (width > 40rem) {
-  .footer {
-    grid-template-columns: 3fr 2fr;
-    grid-template-areas:
-      "footer_content footer_nav1"
-      "footer_content footer_nav2";
-  }
-}
-
-@media (width > 70rem) {
-  .footer {
-    grid-template-columns: 2fr 1fr 1fr;
-    grid-template-areas: "footer_content footer_nav1 footer_nav2";
-  }
-}
-
-.footer__nav:first-child {
-  grid-area: footer_nav1;
-  width: 100%;
-}
-
-.footer__nav:last-child {
-  grid-area: footer_nav2;
-}
-
-.footer__content {
-  grid-area: footer_content;
-  max-width: 60ch;
-}
diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts
deleted file mode 100644
index ef929cea..00000000
--- a/frontend/src/types/index.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-export type LanguageType = {
-  name: string;
-  icon: string;
-  subLanguages: {
-    name: string;
-    icon: string;
-  }[];
-};
-
-export type CategoryType = string;
-
-export type SnippetType = {
-  title: string;
-  description: string;
-  author: string;
-  code: string;
-  tags: string[];
-  contributors: string[];
-  extension: string;
-};
-
-export type RawSnippetType = {
-  title: string;
-  description: string;
-  author: string;
-  code: string;
-  tags: string;
-  contributors?: string;
-  extension: string;
-};
-
-export type AppState = {
-  language: LanguageType;
-  subLanguage: string | null;
-  category: string;
-  setCategory: React.Dispatch<React.SetStateAction<string | null>>;
-  snippet: SnippetType | null;
-  setSnippet: React.Dispatch<React.SetStateAction<SnippetType | null>>;
-  searchText: string;
-  setSearchText: React.Dispatch<React.SetStateAction<string>>;
-};
diff --git a/frontend/src/utils/configureUserSelection.ts b/frontend/src/utils/configureUserSelection.ts
deleted file mode 100644
index 414f9255..00000000
--- a/frontend/src/utils/configureUserSelection.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { CategoryType, LanguageType } from "@types";
-
-import { API_BASE, defaultCategoryName, defaultLanguage } from "./consts";
-import { slugify } from "./slugify";
-
-interface Params {
-  languageName?: string;
-  subLanguageName?: string;
-  categoryName?: string;
-}
-
-export async function configureUserSelection({
-  languageName,
-  subLanguageName,
-  categoryName,
-}: Params): Promise<{
-  language: LanguageType;
-  subLanguage: LanguageType["name"] | null;
-  category: CategoryType;
-}> {
-  const [langSlug, subLangSlug, catSlug] = [
-    slugify(languageName || ""),
-    slugify(subLanguageName || ""),
-    slugify(categoryName || ""),
-  ];
-
-  const languages: LanguageType[] = await fetch(`${API_BASE}/languages`).then(
-    (res) => res.json()
-  );
-
-  const language =
-    languages.find((lang) => slugify(lang.name) === langSlug) ||
-    defaultLanguage;
-
-  const subLanguage =
-    language.subLanguages.find((sl) => slugify(sl.name) === subLangSlug)
-      ?.name || null;
-
-  let category: CategoryType = defaultCategoryName;
-
-  try {
-    const categories: string[] = await fetch(
-      `${API_BASE}/categories/${slugify(language.name)}`
-    ).then((res) => res.json());
-
-    const matchedCategory = categories.find((cat) => slugify(cat) === catSlug);
-    if (matchedCategory) category = matchedCategory;
-  } catch {
-    console.log("Error with fetching /categories in configureUserSelection.ts");
-  }
-
-  return {
-    language,
-    subLanguage,
-    category,
-  };
-}
diff --git a/frontend/src/utils/consts.ts b/frontend/src/utils/consts.ts
deleted file mode 100644
index c32b145a..00000000
--- a/frontend/src/utils/consts.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import { AppState, CategoryType, LanguageType } from "@types";
-
-export const API_BASE = import.meta.env.VITE_API_BASE;
-export const GITHUB_API = "https://api.github.com/repos/technoph1le/quicksnip";
-
-export const defaultLanguage: LanguageType = {
-  name: "javascript",
-  icon: "/icons/javascript.svg",
-  subLanguages: [],
-};
-
-export const defaultSubLanguageName = "s";
-
-export const defaultCategoryName: CategoryType = "All";
-
-export const defaultURLPath = `/${defaultLanguage.name}/s/${defaultCategoryName}`;
-
-// TODO: add custom loading and error handling
-export const defaultState: AppState = {
-  language: defaultLanguage,
-  subLanguage: null,
-  category: defaultCategoryName,
-  setCategory: () => {},
-  snippet: null,
-  setSnippet: () => {},
-  searchText: "",
-  setSearchText: () => {},
-};
diff --git a/frontend/src/utils/enums.ts b/frontend/src/utils/enums.ts
deleted file mode 100644
index 61de7575..00000000
--- a/frontend/src/utils/enums.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export enum QueryParams {
-  SEARCH = "q",
-  SNIPPET = "snippet",
-}
diff --git a/frontend/src/utils/languageUtils.ts b/frontend/src/utils/languageUtils.ts
deleted file mode 100644
index ceaf7c82..00000000
--- a/frontend/src/utils/languageUtils.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { API_BASE, defaultSubLanguageName } from "./consts";
-import { reverseSlugify, slugify } from "./slugify";
-
-export function getLanguageDisplayName(
-  language: string,
-  subLanguage: string | null
-) {
-  if (subLanguage && subLanguage !== defaultSubLanguageName) {
-    return reverseSlugify(subLanguage).toLocaleUpperCase();
-  } else {
-    return language;
-  }
-}
-
-export function getLanguageDisplayLogo(
-  language: string,
-  subLanguage: string | null
-) {
-  const langSlug = slugify(language);
-
-  if (!subLanguage) {
-    return `${API_BASE}/icons/${slugify(langSlug)}.svg`;
-  } else {
-    return `${API_BASE}/icons/${slugify(langSlug)}--${slugify(subLanguage)}.svg`;
-  }
-}
-
-export function getLanguageFileName(
-  language: string,
-  subLanguage: string | null
-) {
-  if (!subLanguage || subLanguage === "s") {
-    return slugify(language);
-  } else {
-    return `${slugify(language)}--${slugify(subLanguage)}`;
-  }
-
-  // return slugify(subLanguage) !== defaultSubLanguageName
-  //   ? `/consolidated/${slugify(language)}--${slugify(subLanguage)}.json`
-  //   : `/consolidated/${slugify(language)}.json`;
-}
diff --git a/frontend/src/utils/objectUtils.ts b/frontend/src/utils/objectUtils.ts
deleted file mode 100644
index 7526468e..00000000
--- a/frontend/src/utils/objectUtils.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-export function isCorrectType<T>(obj: unknown, keys: (keyof T)[]): obj is T {
-  if (typeof obj !== "object" || obj === null) {
-    return false;
-  }
-  return keys.every((key) => key in obj);
-}
diff --git a/frontend/src/utils/raise.ts b/frontend/src/utils/raise.ts
deleted file mode 100644
index 04952326..00000000
--- a/frontend/src/utils/raise.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export function raise(issue: string, snippet: string = ""): null {
-  console.error(`${issue}${snippet ? ` in '${snippet}'` : ""}`);
-  return null;
-}
diff --git a/frontend/src/utils/slugify.ts b/frontend/src/utils/slugify.ts
deleted file mode 100644
index 7817f7bf..00000000
--- a/frontend/src/utils/slugify.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export function slugify(string: string, separator: string = "-") {
-  return string
-    .toString() // Cast to string (optional)
-    .toLowerCase() // Convert the string to lowercase letters
-    .trim() // Remove whitespace from both sides of a string (optional)
-    .replace(/\s+/g, separator) // Replace spaces with {separator}
-    .replace(/[^\w-]+/g, "") // Remove all non-word chars
-    .replace(/_/g, separator) // Replace _ with {separator}
-    .replace(/--+/g, separator) // Replace multiple - with single {separator}
-    .replace(/-$/g, ""); // Remove trailing -
-}
-
-export function reverseSlugify(s: string, separator: string = "-") {
-  return s
-    .split(separator)
-    .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))
-    .join(" ")
-    .trim();
-}
diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts
deleted file mode 100644
index 11f02fe2..00000000
--- a/frontend/src/vite-env.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-/// <reference types="vite/client" />
diff --git a/frontend/tests/configureUserSelection.test.ts b/frontend/tests/configureUserSelection.test.ts
deleted file mode 100644
index 54d861ac..00000000
--- a/frontend/tests/configureUserSelection.test.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-import { describe, it, expect, vi, beforeEach } from "vitest";
-
-import { CategoryType, LanguageType } from "../src/types";
-import { configureUserSelection } from "../src/utils/configureUserSelection";
-import { defaultCategoryName, defaultLanguage } from "../src/utils/consts";
-import { slugify } from "../src/utils/slugify";
-
-vi.mock("../src/utils/slugify");
-
-describe("configureUserSelection", () => {
-  beforeEach(() => {
-    vi.clearAllMocks();
-  });
-
-  const mockFetch = (urlResponses: Record<string, unknown>) => {
-    global.fetch = vi.fn(async (url) => {
-      const response = urlResponses[url as string];
-      if (response instanceof Error) {
-        throw response;
-      }
-      return {
-        json: async () => response,
-      };
-    }) as unknown as typeof fetch;
-  };
-
-  it("should return default language and category if no arguments are provided", async () => {
-    mockFetch({
-      "/consolidated/_index.json": [],
-    });
-
-    const result = await configureUserSelection({
-      languageName: undefined,
-      categoryName: undefined,
-    });
-
-    expect(result).toEqual({
-      language: defaultLanguage,
-      category: defaultCategoryName,
-    });
-
-    expect(fetch).toHaveBeenCalledWith("/consolidated/_index.json");
-  });
-
-  it("should match the language and default to the first category if categoryName is undefined", async () => {
-    const mockLanguages: LanguageType[] = [
-      {
-        name: "JavaScript",
-        icon: "js-icon",
-        subLanguages: [],
-      },
-      {
-        name: "Python",
-        icon: "python-icon",
-        subLanguages: [],
-      },
-    ];
-    const mockCategories: CategoryType[] = ["Basics", "Advanced"];
-
-    mockFetch({
-      "/consolidated/_index.json": mockLanguages,
-      "/consolidated/javascript.json": mockCategories,
-    });
-
-    vi.mocked(slugify).mockImplementation((str) => str.toLowerCase());
-
-    const result = await configureUserSelection({
-      languageName: "JavaScript",
-      categoryName: undefined,
-    });
-
-    expect(result).toEqual({
-      language: mockLanguages[0],
-      category: defaultCategoryName,
-    });
-
-    expect(slugify).toHaveBeenCalledWith("JavaScript");
-    expect(fetch).toHaveBeenCalledWith("/consolidated/_index.json");
-    expect(fetch).toHaveBeenCalledWith("/consolidated/javascript.json");
-  });
-
-  it("should match the language and specific category if both arguments are provided", async () => {
-    const mockLanguages: LanguageType[] = [
-      {
-        name: "JavaScript",
-        icon: "js-icon",
-        subLanguages: [],
-      },
-      {
-        name: "Python",
-        icon: "python-icon",
-        subLanguages: [],
-      },
-    ];
-    const mockCategories: CategoryType[] = ["Basics", "Advanced"];
-
-    mockFetch({
-      "/consolidated/_index.json": mockLanguages,
-      "/consolidated/javascript.json": mockCategories,
-    });
-
-    vi.mocked(slugify).mockImplementation((str) => str.toLowerCase());
-
-    const result = await configureUserSelection({
-      languageName: "JavaScript",
-      categoryName: "Advanced",
-    });
-
-    expect(result).toEqual({
-      language: mockLanguages[0],
-      category: mockCategories[1],
-    });
-
-    expect(slugify).toHaveBeenCalledWith("JavaScript");
-    expect(slugify).toHaveBeenCalledWith("Advanced");
-    expect(fetch).toHaveBeenCalledWith("/consolidated/_index.json");
-    expect(fetch).toHaveBeenCalledWith("/consolidated/javascript.json");
-  });
-
-  it("should return default category if category fetch fails", async () => {
-    const mockLanguages: LanguageType[] = [
-      {
-        name: "JavaScript",
-        icon: "js-icon",
-        subLanguages: [],
-      },
-      {
-        name: "Python",
-        icon: "python-icon",
-        subLanguages: [],
-      },
-    ];
-
-    mockFetch({
-      "/consolidated/_index.json": mockLanguages,
-      "/consolidated/javascript.json": new Error("Network error"),
-    });
-
-    vi.mocked(slugify).mockImplementation((str) => str.toLowerCase());
-
-    const result = await configureUserSelection({
-      languageName: "JavaScript",
-      categoryName: undefined,
-    });
-
-    expect(result).toEqual({
-      language: mockLanguages[0],
-      category: defaultCategoryName,
-    });
-
-    expect(slugify).toHaveBeenCalledWith("JavaScript");
-    expect(fetch).toHaveBeenCalledWith("/consolidated/_index.json");
-    expect(fetch).toHaveBeenCalledWith("/consolidated/javascript.json");
-  });
-});
diff --git a/frontend/tests/languageUtils.test.ts b/frontend/tests/languageUtils.test.ts
deleted file mode 100644
index 6c484489..00000000
--- a/frontend/tests/languageUtils.test.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { describe, it, expect } from "vitest";
-
-import { defaultSubLanguageName } from "../src/utils/consts";
-import {
-  getLanguageDisplayName,
-  getLanguageDisplayLogo,
-  getLanguageFileName,
-} from "../src/utils/languageUtils";
-
-describe(getLanguageDisplayName.name, () => {
-  it("should return the upper cased subLanguage if it is not the default", () => {
-    const result = getLanguageDisplayName("JAVASCRIPT", "React");
-    expect(result).toBe("REACT");
-  });
-
-  it("should return the language name if subLanguage is the default", () => {
-    const result = getLanguageDisplayName("JAVASCRIPT", defaultSubLanguageName);
-    expect(result).toBe("JAVASCRIPT");
-  });
-});
-
-describe(getLanguageDisplayLogo.name, () => {
-  it("should return a concatenation of the language and subLanguage if subLanguage is not the default", () => {
-    const result = getLanguageDisplayLogo("JAVASCRIPT", "React");
-    expect(result).toBe("/icons/javascript--react.svg");
-  });
-
-  it("should return the language name only if subLanguage is the default", () => {
-    const result = getLanguageDisplayLogo("JAVASCRIPT", defaultSubLanguageName);
-    expect(result).toBe("/icons/javascript.svg");
-  });
-});
-
-describe(getLanguageFileName.name, () => {
-  it("should return a concatenation of the language and subLanguage if subLanguage is not the default", () => {
-    const result = getLanguageFileName("JAVASCRIPT", "React");
-    expect(result).toBe("/consolidated/javascript--react.json");
-  });
-
-  it("should return the language name only if subLanguage is the default", () => {
-    const result = getLanguageFileName("JAVASCRIPT", defaultSubLanguageName);
-    expect(result).toBe("/consolidated/javascript.json");
-  });
-});
diff --git a/frontend/tests/objectUtils.test.ts b/frontend/tests/objectUtils.test.ts
deleted file mode 100644
index c368a8c4..00000000
--- a/frontend/tests/objectUtils.test.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { describe, it, expect } from "vitest";
-
-import { isCorrectType } from "../src/utils/objectUtils";
-
-describe(isCorrectType.name, () => {
-  type TestType = {
-    key1: string;
-    key2: number;
-    key3: boolean;
-  };
-
-  const keys: (keyof TestType)[] = ["key1", "key2", "key3"];
-
-  it("should return true if all keys are present in the object", () => {
-    const obj = { key1: "value", key2: 42, key3: true };
-    expect(isCorrectType<TestType>(obj, keys)).toBe(true);
-  });
-
-  it("should return false if any key is missing from the object", () => {
-    const obj = { key1: "value", key2: 42 };
-    expect(isCorrectType<TestType>(obj, keys)).toBe(false);
-  });
-
-  it("should return false if the object is null", () => {
-    const obj = null;
-    expect(isCorrectType<TestType>(obj, keys)).toBe(false);
-  });
-
-  it("should return false if the object is not an object type", () => {
-    expect(isCorrectType<TestType>("string", keys)).toBe(false);
-    expect(isCorrectType<TestType>(42, keys)).toBe(false);
-    expect(isCorrectType<TestType>(true, keys)).toBe(false);
-  });
-
-  it("should return true if the object has additional keys but includes all required keys", () => {
-    const obj = { key1: "value", key2: 42, key3: true, extraKey: "extra" };
-    expect(isCorrectType<TestType>(obj, keys)).toBe(true);
-  });
-
-  it("should return false if the keys array is empty and the object is not null", () => {
-    const obj = { key1: "value", key2: 42 };
-    expect(isCorrectType<TestType>(obj, [])).toBe(true);
-  });
-
-  it("should return true for an empty keys array, regardless of the object", () => {
-    const obj = {};
-    expect(isCorrectType<TestType>(obj, [])).toBe(true);
-  });
-});
diff --git a/frontend/tests/raise.test.ts b/frontend/tests/raise.test.ts
deleted file mode 100644
index 9d802829..00000000
--- a/frontend/tests/raise.test.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { describe, beforeEach, afterEach, it, expect, vitest } from "vitest";
-
-import { raise } from "../src/utils/raise";
-
-describe(raise.name, () => {
-  beforeEach(() => {
-    vitest.spyOn(console, "error").mockImplementation(() => {}); // Mock console.error
-  });
-
-  afterEach(() => {
-    vitest.restoreAllMocks(); // Restore console.error to its original state
-  });
-
-  it("should log the issue to the console and return null", () => {
-    const issue = "An error occurred";
-    const result = raise(issue);
-    expect(console.error).toHaveBeenCalledWith(issue);
-    expect(result).toBeNull();
-  });
-
-  it("should include the snippet in the log message if provided", () => {
-    const issue = "An error occurred";
-    const snippet = "mySnippet";
-    const result = raise(issue, snippet);
-    expect(console.error).toHaveBeenCalledWith(
-      `An error occurred in 'mySnippet'`
-    );
-    expect(result).toBeNull();
-  });
-
-  it('should not include "in" if the snippet is not provided', () => {
-    const issue = "An error occurred";
-    const result = raise(issue, "");
-    expect(console.error).toHaveBeenCalledWith("An error occurred");
-    expect(result).toBeNull();
-  });
-});
diff --git a/frontend/tests/setup.ts b/frontend/tests/setup.ts
deleted file mode 100644
index 00d3225c..00000000
--- a/frontend/tests/setup.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * This file is automatically loaded before running any tests (entrypoint: vite.config.ts).
- * Use it to configure functions that may need to run before or after tests for example.
- */
diff --git a/frontend/tests/slugify.test.ts b/frontend/tests/slugify.test.ts
deleted file mode 100644
index 46f24d45..00000000
--- a/frontend/tests/slugify.test.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import { describe, it, expect } from "vitest";
-
-import { reverseSlugify, slugify } from "../src/utils/slugify";
-
-describe(slugify.name, () => {
-  it("should convert a string to lowercase and replace spaces with dashes", () => {
-    expect(slugify("Hello World")).toBe("hello-world");
-  });
-
-  it("should trim whitespace from the beginning and end of the string", () => {
-    expect(slugify("  Trim This  ")).toBe("trim-this");
-  });
-
-  it("should remove non-word characters", () => {
-    expect(slugify("Special!@# Characters$%^&*()")).toBe("special-characters");
-  });
-
-  it("should replace underscores with dashes", () => {
-    expect(slugify("underscore_example")).toBe("underscore-example");
-  });
-
-  it("should collapse multiple dashes into a single dash", () => {
-    expect(slugify("Multiple   ---   Dashes")).toBe("multiple-dashes");
-  });
-
-  it("should remove trailing dashes", () => {
-    expect(slugify("Trailing Dash-")).toBe("trailing-dash");
-  });
-
-  it("should handle empty strings correctly", () => {
-    expect(slugify("")).toBe("");
-  });
-
-  it("should use a custom separator if provided", () => {
-    expect(slugify("Custom Separator Example", "_")).toBe(
-      "custom_separator_example"
-    );
-  });
-
-  it("should work with numbers in the string", () => {
-    expect(slugify("123 Number Test")).toBe("123-number-test");
-  });
-
-  it("should handle strings with only non-word characters", () => {
-    expect(slugify("!@#$%^&*()_+=")).toBe("");
-  });
-
-  it("should handle strings with consecutive underscores and spaces", () => {
-    expect(slugify("__Consecutive   ___ Spaces___")).toBe(
-      "-consecutive-spaces"
-    );
-  });
-});
-
-describe(reverseSlugify.name, () => {
-  it("should convert a slugified string back to a human-readable string", () => {
-    expect(reverseSlugify("hello-world")).toBe("Hello World");
-  });
-
-  it("should handle strings with custom separators", () => {
-    expect(reverseSlugify("custom_separator_example", "_")).toBe(
-      "Custom Separator Example"
-    );
-  });
-
-  it("should handle strings with multiple consecutive separators", () => {
-    expect(reverseSlugify("multiple---dashes")).toBe("Multiple   Dashes");
-  });
-
-  it("should handle empty strings correctly", () => {
-    expect(reverseSlugify("")).toBe("");
-  });
-
-  it("should handle strings with a single word", () => {
-    expect(reverseSlugify("single")).toBe("Single");
-  });
-
-  it("should handle strings with trailing separators", () => {
-    expect(reverseSlugify("trailing-dash-")).toBe("Trailing Dash");
-  });
-
-  it("should handle strings with numbers and separators", () => {
-    expect(reverseSlugify("123-number-test")).toBe("123 Number Test");
-  });
-
-  it("should handle strings with only separators", () => {
-    expect(reverseSlugify("---", "-")).toBe("");
-  });
-});
diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json
deleted file mode 100644
index 8253ac4f..00000000
--- a/frontend/tsconfig.app.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "ES2020",
-    "useDefineForClassFields": true,
-    "lib": ["ES2020", "DOM", "DOM.Iterable"],
-    "module": "ESNext",
-    "skipLibCheck": true,
-    "baseUrl": "./",
-    "paths": {
-      "@*": ["src/*"]
-    },
-
-    /* Bundler mode */
-    "moduleResolution": "bundler",
-    "allowImportingTsExtensions": true,
-    "isolatedModules": true,
-    "moduleDetection": "force",
-    "noEmit": true,
-    "jsx": "react-jsx",
-
-    /* Linting */
-    "strict": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
-    "noFallthroughCasesInSwitch": true
-  },
-  "include": ["src"],
-  "exclude": ["node_modules"]
-}
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
deleted file mode 100644
index 1ffef600..00000000
--- a/frontend/tsconfig.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "files": [],
-  "references": [
-    { "path": "./tsconfig.app.json" },
-    { "path": "./tsconfig.node.json" }
-  ]
-}
diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json
deleted file mode 100644
index 0d3d7144..00000000
--- a/frontend/tsconfig.node.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "compilerOptions": {
-    "target": "ES2022",
-    "lib": ["ES2023"],
-    "module": "ESNext",
-    "skipLibCheck": true,
-
-    /* Bundler mode */
-    "moduleResolution": "bundler",
-    "allowImportingTsExtensions": true,
-    "isolatedModules": true,
-    "moduleDetection": "force",
-    "noEmit": true,
-
-    /* Linting */
-    "strict": true,
-    "noUnusedLocals": true,
-    "noUnusedParameters": true,
-    "noFallthroughCasesInSwitch": true
-  },
-  "include": ["vite.config.ts"]
-}
diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts
deleted file mode 100644
index 8cf25cdd..00000000
--- a/frontend/vite.config.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-/// <reference types="vitest/config" />
-import { spawnSync } from "child_process";
-
-import react from "@vitejs/plugin-react-swc";
-import { defineConfig } from "vite";
-import tsconfigPaths from "vite-tsconfig-paths";
-
-function consolidateSnippets(projectRoot: string) {
-  const cmd = spawnSync(
-    "npx",
-    ["tsx", "../backend/scripts/consolidateSnippets.ts"],
-    {
-      cwd: projectRoot,
-      shell: true,
-      stdio: "pipe",
-    }
-  );
-
-  if (cmd.status === 0) return;
-
-  const errorMessage = cmd.stderr?.toString().trim() || "No error message";
-  const outputMessage = cmd.stdout?.toString().trim() || "No additional output";
-
-  console.log(`❌ Consolidating snippets failed!`);
-  console.log(`Error: ${errorMessage}`);
-  console.log(`Output: ${outputMessage}`);
-}
-
-// https://vitejs.dev/config/
-export default defineConfig({
-  plugins: [
-    react(),
-    tsconfigPaths(),
-    {
-      name: "Consolidate Snippet",
-      configResolved({ root }) {
-        consolidateSnippets(root);
-      },
-      handleHotUpdate({ file, server }) {
-        const relativePath = file.slice(server.config.root.length);
-        if (!relativePath.startsWith("/snippets/")) return;
-
-        consolidateSnippets(server.config.root);
-      },
-    },
-  ],
-  test: {
-    setupFiles: ["/tests/setup.ts"],
-    coverage: {
-      provider: "v8",
-    },
-  },
-  build: {
-    rollupOptions: {
-      output: {
-        manualChunks: {
-          prismjs: ["prismjs"],
-          react: ["react"],
-          "react-dom": ["react-dom"],
-          "react-router-dom": ["react-router-dom"],
-          "react-syntax-highlighter": ["react-syntax-highlighter"],
-        },
-      },
-    },
-  },
-});
diff --git a/next.config.ts b/next.config.ts
new file mode 100644
index 00000000..e9ffa308
--- /dev/null
+++ b/next.config.ts
@@ -0,0 +1,7 @@
+import type { NextConfig } from "next";
+
+const nextConfig: NextConfig = {
+  /* config options here */
+};
+
+export default nextConfig;
diff --git a/package-lock.json b/package-lock.json
index 2f4a8cc6..2ce0a42e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,80 +1,1084 @@
 {
   "name": "quicksnip",
-  "version": "1.0.0",
+  "version": "0.1.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "quicksnip",
-      "version": "1.0.0",
-      "license": "ISC",
+      "version": "0.1.0",
+      "dependencies": {
+        "@radix-ui/react-slot": "^1.2.3",
+        "class-variance-authority": "^0.7.1",
+        "clsx": "^2.1.1",
+        "lucide-react": "^0.535.0",
+        "next": "15.4.5",
+        "react": "19.1.0",
+        "react-dom": "19.1.0",
+        "tailwind-merge": "^3.3.1"
+      },
       "devDependencies": {
-        "husky": "^9.1.7",
-        "npm-run-all": "^4.1.5",
-        "tsup": "^8.5.0",
-        "tsx": "^4.19.4"
+        "@eslint/eslintrc": "^3",
+        "@tailwindcss/postcss": "^4",
+        "@types/node": "^20",
+        "@types/react": "^19",
+        "@types/react-dom": "^19",
+        "eslint": "^9",
+        "eslint-config-next": "15.4.5",
+        "tailwindcss": "^4",
+        "tw-animate-css": "^1.3.6",
+        "typescript": "^5"
+      }
+    },
+    "node_modules/@alloc/quick-lru": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+      "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@emnapi/core": {
+      "version": "1.4.5",
+      "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz",
+      "integrity": "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/wasi-threads": "1.0.4",
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@emnapi/runtime": {
+      "version": "1.4.5",
+      "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz",
+      "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@emnapi/wasi-threads": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz",
+      "integrity": "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+      "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+      }
+    },
+    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/config-array": {
+      "version": "0.21.0",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
+      "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@eslint/object-schema": "^2.1.6",
+        "debug": "^4.3.1",
+        "minimatch": "^3.1.2"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/config-helpers": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
+      "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/core": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+      "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@types/json-schema": "^7.0.15"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/eslintrc": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+      "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/js": {
+      "version": "9.32.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz",
+      "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://eslint.org/donate"
+      }
+    },
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+      "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/plugin-kit": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
+      "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@eslint/core": "^0.15.1",
+        "levn": "^0.4.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@humanfs/core": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node": {
+      "version": "0.16.6",
+      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanfs/core": "^0.19.1",
+        "@humanwhocodes/retry": "^0.3.0"
+      },
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/retry": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@img/sharp-darwin-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz",
+      "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-arm64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-darwin-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz",
+      "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">=20"
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-x64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-arm64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz",
+      "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-x64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz",
+      "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz",
+      "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz",
+      "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
-      "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==",
+    "node_modules/@img/sharp-libvips-linux-ppc64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz",
+      "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==",
       "cpu": [
         "ppc64"
       ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-s390x": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz",
+      "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-x64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
+      "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz",
+      "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz",
+      "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-linux-arm": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz",
+      "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-linux-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz",
+      "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-linux-ppc64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz",
+      "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-ppc64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-linux-s390x": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz",
+      "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-s390x": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-linux-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
+      "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-x64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-linuxmusl-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz",
+      "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-arm64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-linuxmusl-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz",
+      "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-x64": "1.2.0"
+      }
+    },
+    "node_modules/@img/sharp-wasm32": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz",
+      "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==",
+      "cpu": [
+        "wasm32"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/runtime": "^1.4.4"
+      },
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz",
+      "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-ia32": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz",
+      "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz",
+      "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@isaacs/fs-minipass": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+      "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "minipass": "^7.0.4"
+      },
+      "engines": {
+        "node": ">=18.0.0"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.12",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
+      "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+      "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.29",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
+      "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@napi-rs/wasm-runtime": {
+      "version": "0.2.12",
+      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+      "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/core": "^1.4.3",
+        "@emnapi/runtime": "^1.4.3",
+        "@tybys/wasm-util": "^0.10.0"
+      }
+    },
+    "node_modules/@next/env": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.5.tgz",
+      "integrity": "sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==",
+      "license": "MIT"
+    },
+    "node_modules/@next/eslint-plugin-next": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.5.tgz",
+      "integrity": "sha512-YhbrlbEt0m4jJnXHMY/cCUDBAWgd5SaTa5mJjzOt82QwflAFfW/h3+COp2TfVSzhmscIZ5sg2WXt3MLziqCSCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-glob": "3.3.1"
+      }
+    },
+    "node_modules/@next/swc-darwin-arm64": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.5.tgz",
+      "integrity": "sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-darwin-x64": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.5.tgz",
+      "integrity": "sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-arm64-gnu": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.5.tgz",
+      "integrity": "sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-arm64-musl": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.5.tgz",
+      "integrity": "sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-x64-gnu": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.5.tgz",
+      "integrity": "sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-x64-musl": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.5.tgz",
+      "integrity": "sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-win32-arm64-msvc": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.5.tgz",
+      "integrity": "sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-win32-x64-msvc": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.5.tgz",
+      "integrity": "sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nolyfill/is-core-module": {
+      "version": "1.0.39",
+      "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
+      "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.4.0"
+      }
+    },
+    "node_modules/@radix-ui/react-compose-refs": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
+      "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-slot": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+      "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@rushstack/eslint-patch": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz",
+      "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=18"
+      "license": "MIT"
+    },
+    "node_modules/@swc/helpers": {
+      "version": "0.5.15",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+      "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^2.8.0"
       }
     },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz",
-      "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/@tailwindcss/node": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
+      "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@ampproject/remapping": "^2.3.0",
+        "enhanced-resolve": "^5.18.1",
+        "jiti": "^2.4.2",
+        "lightningcss": "1.30.1",
+        "magic-string": "^0.30.17",
+        "source-map-js": "^1.2.1",
+        "tailwindcss": "4.1.11"
       }
     },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz",
-      "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@tailwindcss/oxide": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
+      "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
+      "dependencies": {
+        "detect-libc": "^2.0.4",
+        "tar": "^7.4.3"
+      },
       "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz",
-      "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==",
+        "node": ">= 10"
+      },
+      "optionalDependencies": {
+        "@tailwindcss/oxide-android-arm64": "4.1.11",
+        "@tailwindcss/oxide-darwin-arm64": "4.1.11",
+        "@tailwindcss/oxide-darwin-x64": "4.1.11",
+        "@tailwindcss/oxide-freebsd-x64": "4.1.11",
+        "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
+        "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
+        "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
+        "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
+        "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
+        "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
+        "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
+        "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-android-arm64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
+      "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
       "cpu": [
-        "x64"
+        "arm64"
       ],
       "dev": true,
       "license": "MIT",
@@ -83,13 +1087,13 @@
         "android"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz",
-      "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==",
+    "node_modules/@tailwindcss/oxide-darwin-arm64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
+      "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
       "cpu": [
         "arm64"
       ],
@@ -100,13 +1104,13 @@
         "darwin"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz",
-      "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==",
+    "node_modules/@tailwindcss/oxide-darwin-x64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
+      "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
       "cpu": [
         "x64"
       ],
@@ -117,15 +1121,15 @@
         "darwin"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==",
+    "node_modules/@tailwindcss/oxide-freebsd-x64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
+      "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
       "cpu": [
-        "arm64"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
@@ -134,32 +1138,32 @@
         "freebsd"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz",
-      "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==",
+    "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
+      "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
       "cpu": [
-        "x64"
+        "arm"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "freebsd"
+        "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz",
-      "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==",
+    "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
+      "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
       "cpu": [
-        "arm"
+        "arm64"
       ],
       "dev": true,
       "license": "MIT",
@@ -168,13 +1172,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz",
-      "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==",
+    "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
+      "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
       "cpu": [
         "arm64"
       ],
@@ -185,15 +1189,15 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz",
-      "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==",
+    "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
+      "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
       "cpu": [
-        "ia32"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
@@ -202,15 +1206,15 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz",
-      "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==",
+    "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
+      "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
       "cpu": [
-        "loong64"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
@@ -219,316 +1223,441 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz",
-      "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==",
+    "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
+      "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
+      "bundleDependencies": [
+        "@napi-rs/wasm-runtime",
+        "@emnapi/core",
+        "@emnapi/runtime",
+        "@tybys/wasm-util",
+        "@emnapi/wasi-threads",
+        "tslib"
+      ],
       "cpu": [
-        "mips64el"
+        "wasm32"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@emnapi/core": "^1.4.3",
+        "@emnapi/runtime": "^1.4.3",
+        "@emnapi/wasi-threads": "^1.0.2",
+        "@napi-rs/wasm-runtime": "^0.2.11",
+        "@tybys/wasm-util": "^0.9.0",
+        "tslib": "^2.8.0"
+      },
       "engines": {
-        "node": ">=18"
+        "node": ">=14.0.0"
       }
     },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz",
-      "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==",
+    "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
+      "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
       "cpu": [
-        "ppc64"
+        "arm64"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "win32"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz",
-      "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==",
+    "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
+      "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
       "cpu": [
-        "riscv64"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "win32"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 10"
       }
     },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz",
-      "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/@tailwindcss/postcss": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.11.tgz",
+      "integrity": "sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@alloc/quick-lru": "^5.2.0",
+        "@tailwindcss/node": "4.1.11",
+        "@tailwindcss/oxide": "4.1.11",
+        "postcss": "^8.4.41",
+        "tailwindcss": "4.1.11"
       }
     },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz",
-      "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@tybys/wasm-util": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
+      "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "tslib": "^2.4.0"
       }
     },
-    "node_modules/@esbuild/netbsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/json5": {
+      "version": "0.0.29",
+      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/node": {
+      "version": "20.19.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz",
+      "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "undici-types": "~6.21.0"
       }
     },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz",
-      "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@types/react": {
+      "version": "19.1.9",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz",
+      "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==",
+      "devOptional": true,
+      "license": "MIT",
+      "dependencies": {
+        "csstype": "^3.0.2"
+      }
+    },
+    "node_modules/@types/react-dom": {
+      "version": "19.1.7",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz",
+      "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=18"
+      "peerDependencies": {
+        "@types/react": "^19.0.0"
       }
     },
-    "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz",
-      "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@typescript-eslint/eslint-plugin": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz",
+      "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.10.0",
+        "@typescript-eslint/scope-manager": "8.38.0",
+        "@typescript-eslint/type-utils": "8.38.0",
+        "@typescript-eslint/utils": "8.38.0",
+        "@typescript-eslint/visitor-keys": "8.38.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^7.0.0",
+        "natural-compare": "^1.4.0",
+        "ts-api-utils": "^2.1.0"
+      },
       "engines": {
-        "node": ">=18"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "@typescript-eslint/parser": "^8.38.0",
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz",
-      "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
       "engines": {
-        "node": ">=18"
+        "node": ">= 4"
       }
     },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz",
-      "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@typescript-eslint/parser": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz",
+      "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
+      "dependencies": {
+        "@typescript-eslint/scope-manager": "8.38.0",
+        "@typescript-eslint/types": "8.38.0",
+        "@typescript-eslint/typescript-estree": "8.38.0",
+        "@typescript-eslint/visitor-keys": "8.38.0",
+        "debug": "^4.3.4"
+      },
       "engines": {
-        "node": ">=18"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz",
-      "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@typescript-eslint/project-service": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz",
+      "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "@typescript-eslint/tsconfig-utils": "^8.38.0",
+        "@typescript-eslint/types": "^8.38.0",
+        "debug": "^4.3.4"
+      },
       "engines": {
-        "node": ">=18"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz",
-      "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==",
-      "cpu": [
-        "ia32"
-      ],
+    "node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz",
+      "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "@typescript-eslint/types": "8.38.0",
+        "@typescript-eslint/visitor-keys": "8.38.0"
+      },
       "engines": {
-        "node": ">=18"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz",
-      "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@typescript-eslint/tsconfig-utils": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz",
+      "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
-        "node": ">=18"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@isaacs/cliui": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz",
+      "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "string-width": "^5.1.2",
-        "string-width-cjs": "npm:string-width@^4.2.0",
-        "strip-ansi": "^7.0.1",
-        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
-        "wrap-ansi": "^8.1.0",
-        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+        "@typescript-eslint/types": "8.38.0",
+        "@typescript-eslint/typescript-estree": "8.38.0",
+        "@typescript-eslint/utils": "8.38.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^2.1.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+    "node_modules/@typescript-eslint/types": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz",
+      "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz",
+      "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
+        "@typescript-eslint/project-service": "8.38.0",
+        "@typescript-eslint/tsconfig-utils": "8.38.0",
+        "@typescript-eslint/types": "8.38.0",
+        "@typescript-eslint/visitor-keys": "8.38.0",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.3.2",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^2.1.0"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+      "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
+      "dependencies": {
+        "balanced-match": "^1.0.0"
       }
     },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.8"
+      },
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=8.6.0"
       }
     },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "license": "MIT"
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+    "node_modules/@typescript-eslint/utils": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz",
+      "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
+        "@eslint-community/eslint-utils": "^4.7.0",
+        "@typescript-eslint/scope-manager": "8.38.0",
+        "@typescript-eslint/types": "8.38.0",
+        "@typescript-eslint/typescript-estree": "8.38.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <5.9.0"
       }
     },
-    "node_modules/@pkgjs/parseargs": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.38.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz",
+      "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
+      "dependencies": {
+        "@typescript-eslint/types": "8.38.0",
+        "eslint-visitor-keys": "^4.2.1"
+      },
       "engines": {
-        "node": ">=14"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
-      "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
+    "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+      "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
       "cpu": [
         "arm"
       ],
@@ -539,10 +1668,10 @@
         "android"
       ]
     },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
-      "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
+    "node_modules/@unrs/resolver-binding-android-arm64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+      "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
       "cpu": [
         "arm64"
       ],
@@ -553,10 +1682,10 @@
         "android"
       ]
     },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
-      "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
+    "node_modules/@unrs/resolver-binding-darwin-arm64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+      "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
       "cpu": [
         "arm64"
       ],
@@ -567,10 +1696,10 @@
         "darwin"
       ]
     },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
-      "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
+    "node_modules/@unrs/resolver-binding-darwin-x64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+      "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
       "cpu": [
         "x64"
       ],
@@ -581,24 +1710,10 @@
         "darwin"
       ]
     },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
-      "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
-      "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
+    "node_modules/@unrs/resolver-binding-freebsd-x64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+      "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
       "cpu": [
         "x64"
       ],
@@ -609,10 +1724,10 @@
         "freebsd"
       ]
     },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
-      "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
+    "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+      "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
       "cpu": [
         "arm"
       ],
@@ -623,10 +1738,10 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
-      "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
+    "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+      "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
       "cpu": [
         "arm"
       ],
@@ -637,10 +1752,10 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
-      "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
+    "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+      "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
       "cpu": [
         "arm64"
       ],
@@ -651,10 +1766,10 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
-      "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
+    "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+      "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
       "cpu": [
         "arm64"
       ],
@@ -665,12 +1780,12 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
-      "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
+    "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+      "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
       "cpu": [
-        "loong64"
+        "ppc64"
       ],
       "dev": true,
       "license": "MIT",
@@ -679,12 +1794,12 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
-      "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
+    "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+      "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
       "cpu": [
-        "ppc64"
+        "riscv64"
       ],
       "dev": true,
       "license": "MIT",
@@ -693,10 +1808,10 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
-      "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
+    "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+      "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
       "cpu": [
         "riscv64"
       ],
@@ -707,12 +1822,12 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-riscv64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
-      "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
+    "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+      "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
       "cpu": [
-        "riscv64"
+        "s390x"
       ],
       "dev": true,
       "license": "MIT",
@@ -721,12 +1836,12 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
-      "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
+    "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+      "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
       "cpu": [
-        "s390x"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
@@ -735,10 +1850,10 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
-      "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
+    "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+      "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
       "cpu": [
         "x64"
       ],
@@ -749,24 +1864,27 @@
         "linux"
       ]
     },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
-      "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
+    "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+      "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
       "cpu": [
-        "x64"
+        "wasm32"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "@napi-rs/wasm-runtime": "^0.2.11"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
     },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
-      "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
+    "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+      "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
       "cpu": [
         "arm64"
       ],
@@ -777,10 +1895,10 @@
         "win32"
       ]
     },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
-      "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
+    "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+      "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
       "cpu": [
         "ia32"
       ],
@@ -791,10 +1909,10 @@
         "win32"
       ]
     },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
-      "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
+    "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+      "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
       "cpu": [
         "x64"
       ],
@@ -805,17 +1923,10 @@
         "win32"
       ]
     },
-    "node_modules/@types/estree": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
-      "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/acorn": {
-      "version": "8.14.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
-      "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -825,38 +1936,65 @@
         "node": ">=0.4.0"
       }
     },
-    "node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+    "node_modules/acorn-jsx": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=12"
+      "peerDependencies": {
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
     "node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "color-convert": "^1.9.0"
+        "color-convert": "^2.0.1"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/any-promise": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
-      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true,
-      "license": "MIT"
+      "license": "Python-2.0"
+    },
+    "node_modules/aria-query": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+      "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
     "node_modules/array-buffer-byte-length": {
       "version": "1.0.2",
@@ -875,6 +2013,127 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/array-includes": {
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
+      "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.24.0",
+        "es-object-atoms": "^1.1.1",
+        "get-intrinsic": "^1.3.0",
+        "is-string": "^1.1.1",
+        "math-intrinsics": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.findlast": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+      "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.9",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "es-shim-unscopables": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flat": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.tosorted": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+      "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.3",
+        "es-errors": "^1.3.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/arraybuffer.prototype.slice": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
@@ -897,6 +2156,13 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/ast-types-flow": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+      "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/async-function": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
@@ -923,6 +2189,26 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/axe-core": {
+      "version": "4.10.3",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
+      "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/axobject-query": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+      "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
     "node_modules/balanced-match": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -931,9 +2217,9 @@
       "license": "MIT"
     },
     "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+      "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -941,28 +2227,15 @@
         "concat-map": "0.0.1"
       }
     },
-    "node_modules/bundle-require": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz",
-      "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==",
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "load-tsconfig": "^0.2.3"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "fill-range": "^7.1.1"
       },
-      "peerDependencies": {
-        "esbuild": ">=0.18"
-      }
-    },
-    "node_modules/cac": {
-      "version": "6.7.14",
-      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
-      "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
-      "dev": true,
-      "license": "MIT",
       "engines": {
         "node": ">=8"
       }
@@ -1017,62 +2290,133 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001731",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz",
+      "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
     "node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/chokidar": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
-      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+    "node_modules/chownr": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
       "dev": true,
-      "license": "MIT",
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/class-variance-authority": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+      "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "readdirp": "^4.0.1"
+        "clsx": "^2.1.1"
       },
+      "funding": {
+        "url": "https://polar.sh/cva"
+      }
+    },
+    "node_modules/client-only": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+      "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+      "license": "MIT"
+    },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
       "engines": {
-        "node": ">= 14.16.0"
+        "node": ">=6"
+      }
+    },
+    "node_modules/color": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+      "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "color-convert": "^2.0.1",
+        "color-string": "^1.9.0"
       },
-      "funding": {
-        "url": "https://paulmillr.com/funding/"
+      "engines": {
+        "node": ">=12.5.0"
       }
     },
     "node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
-        "color-name": "1.1.3"
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
       }
     },
     "node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true,
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "devOptional": true,
       "license": "MIT"
     },
-    "node_modules/commander": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
-      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
-      "dev": true,
+    "node_modules/color-string": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
       "license": "MIT",
-      "engines": {
-        "node": ">= 6"
+      "optional": true,
+      "dependencies": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
       }
     },
     "node_modules/concat-map": {
@@ -1082,40 +2426,35 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/confbox": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz",
-      "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/consola": {
-      "version": "3.4.2",
-      "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
-      "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^14.18.0 || >=16.10.0"
-      }
-    },
     "node_modules/cross-spawn": {
-      "version": "6.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
-      "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
       },
       "engines": {
-        "node": ">=4.8"
+        "node": ">= 8"
       }
     },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "devOptional": true,
+      "license": "MIT"
+    },
+    "node_modules/damerau-levenshtein": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
     "node_modules/data-view-buffer": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
@@ -1188,6 +2527,13 @@
         }
       }
     },
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/define-data-property": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
@@ -1224,6 +2570,29 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/detect-libc": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+      "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+      "devOptional": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/dunder-proto": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
@@ -1239,13 +2608,6 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/eastasianwidth": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
-      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/emoji-regex": {
       "version": "9.2.2",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
@@ -1253,14 +2615,18 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/error-ex": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
-      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+    "node_modules/enhanced-resolve": {
+      "version": "5.18.2",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
+      "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "is-arrayish": "^0.2.1"
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
       }
     },
     "node_modules/es-abstract": {
@@ -1326,267 +2692,698 @@
         "which-typed-array": "^1.1.19"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-iterator-helpers": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+      "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.6",
+        "es-errors": "^1.3.0",
+        "es-set-tostringtag": "^2.0.3",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.6",
+        "globalthis": "^1.0.4",
+        "gopd": "^1.2.0",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "internal-slot": "^1.1.0",
+        "iterator.prototype": "^1.1.4",
+        "safe-array-concat": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-shim-unscopables": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+      "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-to-primitive": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-callable": "^1.2.7",
+        "is-date-object": "^1.0.5",
+        "is-symbol": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint": {
+      "version": "9.32.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz",
+      "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.12.1",
+        "@eslint/config-array": "^0.21.0",
+        "@eslint/config-helpers": "^0.3.0",
+        "@eslint/core": "^0.15.0",
+        "@eslint/eslintrc": "^3.3.1",
+        "@eslint/js": "9.32.0",
+        "@eslint/plugin-kit": "^0.3.4",
+        "@humanfs/node": "^0.16.6",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@humanwhocodes/retry": "^0.4.2",
+        "@types/estree": "^1.0.6",
+        "@types/json-schema": "^7.0.15",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.6",
+        "debug": "^4.3.2",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^8.4.0",
+        "eslint-visitor-keys": "^4.2.1",
+        "espree": "^10.4.0",
+        "esquery": "^1.5.0",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^8.0.0",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://eslint.org/donate"
+      },
+      "peerDependencies": {
+        "jiti": "*"
+      },
+      "peerDependenciesMeta": {
+        "jiti": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-config-next": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.5.tgz",
+      "integrity": "sha512-IMijiXaZ43qFB+Gcpnb374ipTKD8JIyVNR+6VsifFQ/LHyx+A9wgcgSIhCX5PYSjwOoSYD5LtNHKlM5uc23eww==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@next/eslint-plugin-next": "15.4.5",
+        "@rushstack/eslint-patch": "^1.10.3",
+        "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+        "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+        "eslint-import-resolver-node": "^0.3.6",
+        "eslint-import-resolver-typescript": "^3.5.2",
+        "eslint-plugin-import": "^2.31.0",
+        "eslint-plugin-jsx-a11y": "^6.10.0",
+        "eslint-plugin-react": "^7.37.0",
+        "eslint-plugin-react-hooks": "^5.0.0"
+      },
+      "peerDependencies": {
+        "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
+        "typescript": ">=3.3.1"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-import-resolver-node": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.2.7",
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
+      }
+    },
+    "node_modules/eslint-import-resolver-node/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-import-resolver-typescript": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
+      "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "@nolyfill/is-core-module": "1.0.39",
+        "debug": "^4.4.0",
+        "get-tsconfig": "^4.10.0",
+        "is-bun-module": "^2.0.0",
+        "stable-hash": "^0.0.5",
+        "tinyglobby": "^0.2.13",
+        "unrs-resolver": "^1.6.2"
+      },
+      "engines": {
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint-import-resolver-typescript"
+      },
+      "peerDependencies": {
+        "eslint": "*",
+        "eslint-plugin-import": "*",
+        "eslint-plugin-import-x": "*"
+      },
+      "peerDependenciesMeta": {
+        "eslint-plugin-import": {
+          "optional": true
+        },
+        "eslint-plugin-import-x": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-module-utils": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
+      "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.2.7"
+      },
+      "engines": {
+        "node": ">=4"
+      },
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/eslint-module-utils/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/eslint-plugin-import": {
+      "version": "2.32.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
+      "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.9",
+        "array.prototype.findlastindex": "^1.2.6",
+        "array.prototype.flat": "^1.3.3",
+        "array.prototype.flatmap": "^1.3.3",
+        "debug": "^3.2.7",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.12.1",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.16.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.1",
+        "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.9",
+        "tsconfig-paths": "^3.15.0"
+      },
+      "engines": {
+        "node": ">=4"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "peerDependencies": {
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
       }
     },
-    "node_modules/es-define-property": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+    "node_modules/eslint-plugin-import/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "dependencies": {
+        "ms": "^2.1.1"
       }
     },
-    "node_modules/es-errors": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+    "node_modules/eslint-plugin-import/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "node_modules/es-object-atoms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+    "node_modules/eslint-plugin-jsx-a11y": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+      "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "es-errors": "^1.3.0"
+        "aria-query": "^5.3.2",
+        "array-includes": "^3.1.8",
+        "array.prototype.flatmap": "^1.3.2",
+        "ast-types-flow": "^0.0.8",
+        "axe-core": "^4.10.0",
+        "axobject-query": "^4.1.0",
+        "damerau-levenshtein": "^1.0.8",
+        "emoji-regex": "^9.2.2",
+        "hasown": "^2.0.2",
+        "jsx-ast-utils": "^3.3.5",
+        "language-tags": "^1.0.9",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.8",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.includes": "^2.0.1"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4.0"
+      },
+      "peerDependencies": {
+        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
       }
     },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
-      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+    "node_modules/eslint-plugin-react": {
+      "version": "7.37.5",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
+      "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
+        "array-includes": "^3.1.8",
+        "array.prototype.findlast": "^1.2.5",
+        "array.prototype.flatmap": "^1.3.3",
+        "array.prototype.tosorted": "^1.1.4",
+        "doctrine": "^2.1.0",
+        "es-iterator-helpers": "^1.2.1",
+        "estraverse": "^5.3.0",
+        "hasown": "^2.0.2",
+        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+        "minimatch": "^3.1.2",
+        "object.entries": "^1.1.9",
+        "object.fromentries": "^2.0.8",
+        "object.values": "^1.2.1",
+        "prop-types": "^15.8.1",
+        "resolve": "^2.0.0-next.5",
+        "semver": "^6.3.1",
+        "string.prototype.matchall": "^4.0.12",
+        "string.prototype.repeat": "^1.0.0"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4"
+      },
+      "peerDependencies": {
+        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
       }
     },
-    "node_modules/es-to-primitive": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
-      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+    "node_modules/eslint-plugin-react-hooks": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+      "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-react/node_modules/resolve": {
+      "version": "2.0.0-next.5",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+      "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "is-callable": "^1.2.7",
-        "is-date-object": "^1.0.5",
-        "is-symbol": "^1.0.4"
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "bin": {
+        "resolve": "bin/resolve"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/esbuild": {
-      "version": "0.25.5",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz",
-      "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==",
+    "node_modules/eslint-plugin-react/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
+      "license": "ISC",
       "bin": {
-        "esbuild": "bin/esbuild"
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+      "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": ">=18"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.25.5",
-        "@esbuild/android-arm": "0.25.5",
-        "@esbuild/android-arm64": "0.25.5",
-        "@esbuild/android-x64": "0.25.5",
-        "@esbuild/darwin-arm64": "0.25.5",
-        "@esbuild/darwin-x64": "0.25.5",
-        "@esbuild/freebsd-arm64": "0.25.5",
-        "@esbuild/freebsd-x64": "0.25.5",
-        "@esbuild/linux-arm": "0.25.5",
-        "@esbuild/linux-arm64": "0.25.5",
-        "@esbuild/linux-ia32": "0.25.5",
-        "@esbuild/linux-loong64": "0.25.5",
-        "@esbuild/linux-mips64el": "0.25.5",
-        "@esbuild/linux-ppc64": "0.25.5",
-        "@esbuild/linux-riscv64": "0.25.5",
-        "@esbuild/linux-s390x": "0.25.5",
-        "@esbuild/linux-x64": "0.25.5",
-        "@esbuild/netbsd-arm64": "0.25.5",
-        "@esbuild/netbsd-x64": "0.25.5",
-        "@esbuild/openbsd-arm64": "0.25.5",
-        "@esbuild/openbsd-x64": "0.25.5",
-        "@esbuild/sunos-x64": "0.25.5",
-        "@esbuild/win32-arm64": "0.25.5",
-        "@esbuild/win32-ia32": "0.25.5",
-        "@esbuild/win32-x64": "0.25.5"
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+    "node_modules/eslint-visitor-keys": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">=0.8.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/fdir": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz",
-      "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==",
+    "node_modules/espree": {
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+      "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
       "dev": true,
-      "license": "MIT",
-      "peerDependencies": {
-        "picomatch": "^3 || ^4"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.15.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.2.1"
       },
-      "peerDependenciesMeta": {
-        "picomatch": {
-          "optional": true
-        }
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/fix-dts-default-cjs-exports": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz",
-      "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==",
+    "node_modules/esquery": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "magic-string": "^0.30.17",
-        "mlly": "^1.7.4",
-        "rollup": "^4.34.8"
+        "estraverse": "^5.1.0"
+      },
+      "engines": {
+        "node": ">=0.10"
       }
     },
-    "node_modules/for-each": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
-      "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "is-callable": "^1.2.7"
+        "estraverse": "^5.2.0"
       },
       "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/foreground-child": {
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
       "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
-      "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "cross-spawn": "^7.0.6",
-        "signal-exit": "^4.0.1"
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
       },
       "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": ">=8.6.0"
       }
     },
-    "node_modules/foreground-child/node_modules/cross-spawn": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
+        "is-glob": "^4.0.1"
       },
       "engines": {
-        "node": ">= 8"
+        "node": ">= 6"
       }
     },
-    "node_modules/foreground-child/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+    "node_modules/fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fastq": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/file-entry-cache": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "flat-cache": "^4.0.0"
+      },
       "engines": {
-        "node": ">=8"
+        "node": ">=16.0.0"
       }
     },
-    "node_modules/foreground-child/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "shebang-regex": "^3.0.0"
+        "to-regex-range": "^5.0.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/foreground-child/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
       "engines": {
-        "node": ">=8"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/foreground-child/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+    "node_modules/flat-cache": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.4"
       },
       "engines": {
-        "node": ">= 8"
+        "node": ">=16"
       }
     },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+    "node_modules/flatted": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+      "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/for-each": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+      "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
       "dev": true,
-      "hasInstallScript": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
+      "dependencies": {
+        "is-callable": "^1.2.7"
+      },
       "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/function-bind": {
@@ -1700,51 +3497,30 @@
         "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
       }
     },
-    "node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
+        "is-glob": "^4.0.3"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+      "engines": {
+        "node": ">=10.13.0"
       }
     },
-    "node_modules/glob/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+    "node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/glob/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=18"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/globalthis": {
@@ -1784,6 +3560,13 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/has-bigints": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
@@ -1798,13 +3581,13 @@
       }
     },
     "node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/has-property-descriptors": {
@@ -1878,27 +3661,41 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/hosted-git-info": {
-      "version": "2.8.9",
-      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
-      "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+    "node_modules/ignore": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
-      "license": "ISC"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
     },
-    "node_modules/husky": {
-      "version": "9.1.7",
-      "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
-      "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
+    "node_modules/import-fresh": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "husky": "bin.js"
+      "dependencies": {
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
       },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/typicode"
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.8.19"
       }
     },
     "node_modules/internal-slot": {
@@ -1935,11 +3732,11 @@
       }
     },
     "node_modules/is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
-      "dev": true,
-      "license": "MIT"
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+      "license": "MIT",
+      "optional": true
     },
     "node_modules/is-async-function": {
       "version": "2.1.1",
@@ -1994,6 +3791,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-bun-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+      "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.7.1"
+      }
+    },
     "node_modules/is-callable": {
       "version": "1.2.7",
       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -2058,6 +3865,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/is-finalizationregistry": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
@@ -2074,16 +3891,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-fullwidth-code-point": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
-      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/is-generator-function": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
@@ -2103,6 +3910,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/is-map": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
@@ -2129,6 +3949,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
     "node_modules/is-number-object": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
@@ -2250,154 +4080,487 @@
       "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
       "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
       "dev": true,
-      "license": "MIT",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-weakref": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+      "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-weakset": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+      "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.3",
+        "get-intrinsic": "^1.2.6"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/iterator.prototype": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+      "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.6",
+        "get-proto": "^1.0.0",
+        "has-symbols": "^1.1.0",
+        "set-function-name": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/jiti": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz",
+      "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jiti": "lib/jiti-cli.mjs"
+      }
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/json-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json5": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
+      }
+    },
+    "node_modules/jsx-ast-utils": {
+      "version": "3.3.5",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+      "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-includes": "^3.1.6",
+        "array.prototype.flat": "^1.3.1",
+        "object.assign": "^4.1.4",
+        "object.values": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/keyv": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "json-buffer": "3.0.1"
+      }
+    },
+    "node_modules/language-subtag-registry": {
+      "version": "0.3.23",
+      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+      "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
+    "node_modules/language-tags": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+      "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "language-subtag-registry": "^0.3.20"
+      },
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/levn": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/lightningcss": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
+      "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
+      "dev": true,
+      "license": "MPL-2.0",
+      "dependencies": {
+        "detect-libc": "^2.0.3"
+      },
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      },
+      "optionalDependencies": {
+        "lightningcss-darwin-arm64": "1.30.1",
+        "lightningcss-darwin-x64": "1.30.1",
+        "lightningcss-freebsd-x64": "1.30.1",
+        "lightningcss-linux-arm-gnueabihf": "1.30.1",
+        "lightningcss-linux-arm64-gnu": "1.30.1",
+        "lightningcss-linux-arm64-musl": "1.30.1",
+        "lightningcss-linux-x64-gnu": "1.30.1",
+        "lightningcss-linux-x64-musl": "1.30.1",
+        "lightningcss-win32-arm64-msvc": "1.30.1",
+        "lightningcss-win32-x64-msvc": "1.30.1"
+      }
+    },
+    "node_modules/lightningcss-darwin-arm64": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
+      "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/lightningcss-darwin-x64": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
+      "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/lightningcss-freebsd-x64": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
+      "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/lightningcss-linux-arm-gnueabihf": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
+      "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/lightningcss-linux-arm64-gnu": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
+      "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
+      }
+    },
+    "node_modules/lightningcss-linux-arm64-musl": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
+      "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-weakref": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
-      "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
+    "node_modules/lightningcss-linux-x64-gnu": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
+      "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-weakset": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
-      "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
+    "node_modules/lightningcss-linux-x64-musl": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
+      "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/jackspeak": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
-      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+    "node_modules/lightningcss-win32-arm64-msvc": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
+      "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "BlueOak-1.0.0",
-      "dependencies": {
-        "@isaacs/cliui": "^8.0.2"
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      },
-      "optionalDependencies": {
-        "@pkgjs/parseargs": "^0.11.0"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/joycon": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
-      "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
+    "node_modules/lightningcss-win32-x64-msvc": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
+      "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=10"
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/json-parse-better-errors": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/lilconfig": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
-      "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
       "engines": {
-        "node": ">=14"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/sponsors/antonk52"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/lines-and-columns": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
-      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/load-json-file": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
-      "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^4.0.0",
-        "pify": "^3.0.0",
-        "strip-bom": "^3.0.0"
+        "js-tokens": "^3.0.0 || ^4.0.0"
       },
-      "engines": {
-        "node": ">=4"
+      "bin": {
+        "loose-envify": "cli.js"
       }
     },
-    "node_modules/load-tsconfig": {
-      "version": "0.2.5",
-      "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
-      "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+    "node_modules/lucide-react": {
+      "version": "0.535.0",
+      "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.535.0.tgz",
+      "integrity": "sha512-2E3+YWGLpjZ8ejIYrdqxVjWMSMiRQHmU6xZYE9xA2SC5j2m0NeB4/acjhRdhxbfniBKoNEukDDQnmShTxwOQ4g==",
+      "license": "ISC",
+      "peerDependencies": {
+        "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
       }
     },
-    "node_modules/lodash.sortby": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/magic-string": {
       "version": "0.30.17",
       "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
@@ -2418,13 +4581,28 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/memorystream": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
-      "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
       "engines": {
-        "node": ">= 0.10.0"
+        "node": ">=8.6"
       }
     },
     "node_modules/minimatch": {
@@ -2440,6 +4618,16 @@
         "node": "*"
       }
     },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/minipass": {
       "version": "7.1.2",
       "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
@@ -2450,17 +4638,33 @@
         "node": ">=16 || 14 >=14.17"
       }
     },
-    "node_modules/mlly": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz",
-      "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
+    "node_modules/minizlib": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+      "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "acorn": "^8.14.0",
-        "pathe": "^2.0.1",
-        "pkg-types": "^1.3.0",
-        "ufo": "^1.5.4"
+        "minipass": "^7.1.2"
+      },
+      "engines": {
+        "node": ">= 18"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+      "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mkdirp": "dist/cjs/src/bin.js"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/ms": {
@@ -2470,62 +4674,125 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/mz": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
-      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+    "node_modules/nanoid": {
+      "version": "3.3.11",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+      "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/napi-postinstall": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.2.tgz",
+      "integrity": "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "any-promise": "^1.0.0",
-        "object-assign": "^4.0.1",
-        "thenify-all": "^1.0.0"
+      "bin": {
+        "napi-postinstall": "lib/cli.js"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/napi-postinstall"
       }
     },
-    "node_modules/nice-try": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+    "node_modules/natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/normalize-package-data": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
-      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
+    "node_modules/next": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/next/-/next-15.4.5.tgz",
+      "integrity": "sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==",
+      "license": "MIT",
       "dependencies": {
-        "hosted-git-info": "^2.1.4",
-        "resolve": "^1.10.0",
-        "semver": "2 || 3 || 4 || 5",
-        "validate-npm-package-license": "^3.0.1"
+        "@next/env": "15.4.5",
+        "@swc/helpers": "0.5.15",
+        "caniuse-lite": "^1.0.30001579",
+        "postcss": "8.4.31",
+        "styled-jsx": "5.1.6"
+      },
+      "bin": {
+        "next": "dist/bin/next"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
+      },
+      "optionalDependencies": {
+        "@next/swc-darwin-arm64": "15.4.5",
+        "@next/swc-darwin-x64": "15.4.5",
+        "@next/swc-linux-arm64-gnu": "15.4.5",
+        "@next/swc-linux-arm64-musl": "15.4.5",
+        "@next/swc-linux-x64-gnu": "15.4.5",
+        "@next/swc-linux-x64-musl": "15.4.5",
+        "@next/swc-win32-arm64-msvc": "15.4.5",
+        "@next/swc-win32-x64-msvc": "15.4.5",
+        "sharp": "^0.34.3"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.1.0",
+        "@playwright/test": "^1.51.1",
+        "babel-plugin-react-compiler": "*",
+        "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+        "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
+        "sass": "^1.3.0"
+      },
+      "peerDependenciesMeta": {
+        "@opentelemetry/api": {
+          "optional": true
+        },
+        "@playwright/test": {
+          "optional": true
+        },
+        "babel-plugin-react-compiler": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        }
       }
     },
-    "node_modules/npm-run-all": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
-      "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
-      "dev": true,
+    "node_modules/next/node_modules/postcss": {
+      "version": "8.4.31",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+      "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "license": "MIT",
       "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "chalk": "^2.4.1",
-        "cross-spawn": "^6.0.5",
-        "memorystream": "^0.3.1",
-        "minimatch": "^3.0.4",
-        "pidtree": "^0.3.0",
-        "read-pkg": "^3.0.0",
-        "shell-quote": "^1.6.1",
-        "string.prototype.padend": "^3.0.0"
-      },
-      "bin": {
-        "npm-run-all": "bin/npm-run-all/index.js",
-        "run-p": "bin/run-p/index.js",
-        "run-s": "bin/run-s/index.js"
+        "nanoid": "^3.3.6",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2"
       },
       "engines": {
-        "node": ">= 4"
+        "node": "^10 || ^12 || >=14"
       }
     },
     "node_modules/object-assign": {
@@ -2582,16 +4849,33 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/own-keys": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
-      "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
+    "node_modules/object.entries": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz",
+      "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "get-intrinsic": "^1.2.6",
-        "object-keys": "^1.1.1",
-        "safe-push-apply": "^1.0.0"
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.fromentries": {
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -2600,144 +4884,165 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/package-json-from-dist": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
-      "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
-      "dev": true,
-      "license": "BlueOak-1.0.0"
-    },
-    "node_modules/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
-      "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+    "node_modules/object.groupby": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "error-ex": "^1.3.1",
-        "json-parse-better-errors": "^1.0.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+    "node_modules/object.values": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz",
+      "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
+      },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+    "node_modules/optionator": {
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "dependencies": {
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.5"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
     },
-    "node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+    "node_modules/own-keys": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
+      "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
+      "license": "MIT",
       "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+        "get-intrinsic": "^1.2.6",
+        "object-keys": "^1.1.1",
+        "safe-push-apply": "^1.0.0"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.18"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/path-type": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "pify": "^3.0.0"
+        "yocto-queue": "^0.1.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/pathe": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
-      "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/picocolors": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/picomatch": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
-      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+    "node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/pidtree": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
-      "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
+    "node_modules/parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "pidtree": "bin/pidtree.js"
+      "dependencies": {
+        "callsites": "^3.0.0"
       },
       "engines": {
-        "node": ">=0.10"
+        "node": ">=6"
       }
     },
-    "node_modules/pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
-    "node_modules/pirates": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
-      "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">= 6"
+        "node": ">=8"
       }
     },
-    "node_modules/pkg-types": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz",
-      "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "confbox": "^0.1.8",
-        "mlly": "^1.7.4",
-        "pathe": "^2.0.1"
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
     "node_modules/possible-typed-array-names": {
@@ -2750,16 +5055,20 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/postcss-load-config": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
-      "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+    "node_modules/postcss": {
+      "version": "8.5.6",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
+      "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
       "dev": true,
       "funding": [
         {
           "type": "opencollective",
           "url": "https://opencollective.com/postcss/"
         },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
         {
           "type": "github",
           "url": "https://github.com/sponsors/ai"
@@ -2767,30 +5076,34 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "lilconfig": "^3.1.1"
+        "nanoid": "^3.3.11",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
       },
       "engines": {
-        "node": ">= 18"
-      },
-      "peerDependencies": {
-        "jiti": ">=1.21.0",
-        "postcss": ">=8.0.9",
-        "tsx": "^4.8.1",
-        "yaml": "^2.4.2"
-      },
-      "peerDependenciesMeta": {
-        "jiti": {
-          "optional": true
-        },
-        "postcss": {
-          "optional": true
-        },
-        "tsx": {
-          "optional": true
-        },
-        "yaml": {
-          "optional": true
-        }
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/prelude-ls": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
       }
     },
     "node_modules/punycode": {
@@ -2803,35 +5116,55 @@
         "node": ">=6"
       }
     },
-    "node_modules/read-pkg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
-      "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/react": {
+      "version": "19.1.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
+      "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
       "license": "MIT",
-      "dependencies": {
-        "load-json-file": "^4.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^3.0.0"
-      },
       "engines": {
-        "node": ">=4"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/readdirp": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
-      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
-      "dev": true,
+    "node_modules/react-dom": {
+      "version": "19.1.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
+      "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
       "license": "MIT",
-      "engines": {
-        "node": ">= 14.18.0"
+      "dependencies": {
+        "scheduler": "^0.26.0"
       },
-      "funding": {
-        "type": "individual",
-        "url": "https://paulmillr.com/funding/"
+      "peerDependencies": {
+        "react": "^19.1.0"
       }
     },
+    "node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/reflect.getprototypeof": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -2898,13 +5231,13 @@
       }
     },
     "node_modules/resolve-from": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-      "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
     "node_modules/resolve-pkg-maps": {
@@ -2917,44 +5250,39 @@
         "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
       }
     },
-    "node_modules/rollup": {
-      "version": "4.41.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
-      "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
+    "node_modules/reusify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@types/estree": "1.0.7"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
       "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
-      },
-      "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.41.1",
-        "@rollup/rollup-android-arm64": "4.41.1",
-        "@rollup/rollup-darwin-arm64": "4.41.1",
-        "@rollup/rollup-darwin-x64": "4.41.1",
-        "@rollup/rollup-freebsd-arm64": "4.41.1",
-        "@rollup/rollup-freebsd-x64": "4.41.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.41.1",
-        "@rollup/rollup-linux-arm64-musl": "4.41.1",
-        "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
-        "@rollup/rollup-linux-riscv64-musl": "4.41.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-gnu": "4.41.1",
-        "@rollup/rollup-linux-x64-musl": "4.41.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.41.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.41.1",
-        "@rollup/rollup-win32-x64-msvc": "4.41.1",
-        "fsevents": "~2.3.2"
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
       }
     },
     "node_modules/safe-array-concat": {
@@ -3012,14 +5340,23 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/scheduler": {
+      "version": "0.26.0",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.26.0.tgz",
+      "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
+      "license": "MIT"
+    },
     "node_modules/semver": {
-      "version": "5.7.2",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
-      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
-      "dev": true,
+      "version": "7.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+      "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+      "devOptional": true,
       "license": "ISC",
       "bin": {
-        "semver": "bin/semver"
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
       }
     },
     "node_modules/set-function-length": {
@@ -3071,40 +5408,70 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/sharp": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.3.tgz",
+      "integrity": "sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==",
+      "hasInstallScript": true,
+      "license": "Apache-2.0",
+      "optional": true,
       "dependencies": {
-        "shebang-regex": "^1.0.0"
+        "color": "^4.2.3",
+        "detect-libc": "^2.0.4",
+        "semver": "^7.7.2"
       },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-darwin-arm64": "0.34.3",
+        "@img/sharp-darwin-x64": "0.34.3",
+        "@img/sharp-libvips-darwin-arm64": "1.2.0",
+        "@img/sharp-libvips-darwin-x64": "1.2.0",
+        "@img/sharp-libvips-linux-arm": "1.2.0",
+        "@img/sharp-libvips-linux-arm64": "1.2.0",
+        "@img/sharp-libvips-linux-ppc64": "1.2.0",
+        "@img/sharp-libvips-linux-s390x": "1.2.0",
+        "@img/sharp-libvips-linux-x64": "1.2.0",
+        "@img/sharp-libvips-linuxmusl-arm64": "1.2.0",
+        "@img/sharp-libvips-linuxmusl-x64": "1.2.0",
+        "@img/sharp-linux-arm": "0.34.3",
+        "@img/sharp-linux-arm64": "0.34.3",
+        "@img/sharp-linux-ppc64": "0.34.3",
+        "@img/sharp-linux-s390x": "0.34.3",
+        "@img/sharp-linux-x64": "0.34.3",
+        "@img/sharp-linuxmusl-arm64": "0.34.3",
+        "@img/sharp-linuxmusl-x64": "0.34.3",
+        "@img/sharp-wasm32": "0.34.3",
+        "@img/sharp-win32-arm64": "0.34.3",
+        "@img/sharp-win32-ia32": "0.34.3",
+        "@img/sharp-win32-x64": "0.34.3"
       }
     },
-    "node_modules/shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=8"
       }
     },
-    "node_modules/shell-quote": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
-      "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "node": ">=8"
       }
     },
     "node_modules/side-channel": {
@@ -3183,67 +5550,31 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+    "node_modules/simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "is-arrayish": "^0.3.1"
       }
     },
-    "node_modules/source-map": {
-      "version": "0.8.0-beta.0",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
-      "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
-      "dev": true,
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "license": "BSD-3-Clause",
-      "dependencies": {
-        "whatwg-url": "^7.0.0"
-      },
       "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
-      "dev": true,
-      "license": "CC-BY-3.0"
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
-      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+    "node_modules/stable-hash": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
+      "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==",
       "dev": true,
-      "license": "CC0-1.0"
+      "license": "MIT"
     },
     "node_modules/stop-iteration-iterator": {
       "version": "1.1.0",
@@ -3259,81 +5590,41 @@
         "node": ">= 0.4"
       }
     },
-    "node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/string-width-cjs": {
-      "name": "string-width",
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width-cjs/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width-cjs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/string-width-cjs/node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/string.prototype.includes": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+      "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-regex": "^5.0.1"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.3"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/string.prototype.padend": {
-      "version": "3.1.6",
-      "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
-      "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==",
+    "node_modules/string.prototype.matchall": {
+      "version": "4.0.12",
+      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
+      "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
         "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0"
+        "es-abstract": "^1.23.6",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.6",
+        "gopd": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "internal-slot": "^1.1.0",
+        "regexp.prototype.flags": "^1.5.3",
+        "set-function-name": "^2.0.2",
+        "side-channel": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3342,6 +5633,17 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/string.prototype.repeat": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+      "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.17.5"
+      }
+    },
     "node_modules/string.prototype.trim": {
       "version": "1.2.10",
       "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
@@ -3401,46 +5703,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
-    "node_modules/strip-ansi-cjs": {
-      "name": "strip-ansi",
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/strip-bom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -3451,40 +5713,53 @@
         "node": ">=4"
       }
     },
-    "node_modules/sucrase": {
-      "version": "3.35.0",
-      "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
-      "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.2",
-        "commander": "^4.0.0",
-        "glob": "^10.3.10",
-        "lines-and-columns": "^1.1.6",
-        "mz": "^2.7.0",
-        "pirates": "^4.0.1",
-        "ts-interface-checker": "^0.1.9"
+      "engines": {
+        "node": ">=8"
       },
-      "bin": {
-        "sucrase": "bin/sucrase",
-        "sucrase-node": "bin/sucrase-node"
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/styled-jsx": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
+      "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
+      "license": "MIT",
+      "dependencies": {
+        "client-only": "0.0.1"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">= 12.0.0"
+      },
+      "peerDependencies": {
+        "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@babel/core": {
+          "optional": true
+        },
+        "babel-plugin-macros": {
+          "optional": true
+        }
       }
     },
     "node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "has-flag": "^3.0.0"
+        "has-flag": "^4.0.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/supports-preserve-symlinks-flag": {
@@ -3500,35 +5775,50 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/thenify": {
+    "node_modules/tailwind-merge": {
       "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
-      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
-      "dev": true,
+      "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.3.1.tgz",
+      "integrity": "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==",
       "license": "MIT",
-      "dependencies": {
-        "any-promise": "^1.0.0"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/dcastil"
       }
     },
-    "node_modules/thenify-all": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
-      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+    "node_modules/tailwindcss": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
+      "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/tapable": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+      "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "thenify": ">= 3.1.0 < 4"
-      },
       "engines": {
-        "node": ">=0.8"
+        "node": ">=6"
       }
     },
-    "node_modules/tinyexec": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
-      "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
+    "node_modules/tar": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+      "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
       "dev": true,
-      "license": "MIT"
+      "license": "ISC",
+      "dependencies": {
+        "@isaacs/fs-minipass": "^4.0.0",
+        "chownr": "^3.0.0",
+        "minipass": "^7.1.2",
+        "minizlib": "^3.0.1",
+        "mkdirp": "^3.0.1",
+        "yallist": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
     },
     "node_modules/tinyglobby": {
       "version": "0.2.14",
@@ -3547,104 +5837,100 @@
         "url": "https://github.com/sponsors/SuperchupuDev"
       }
     },
-    "node_modules/tr46": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
-      "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
+    "node_modules/tinyglobby/node_modules/fdir": {
+      "version": "6.4.6",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
+      "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "punycode": "^2.1.0"
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
       }
     },
-    "node_modules/tree-kill": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
-      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+    "node_modules/tinyglobby/node_modules/picomatch": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "tree-kill": "cli.js"
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/ts-interface-checker": {
-      "version": "0.1.13",
-      "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
-      "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
-      "dev": true,
-      "license": "Apache-2.0"
-    },
-    "node_modules/tsup": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz",
-      "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==",
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "bundle-require": "^5.1.0",
-        "cac": "^6.7.14",
-        "chokidar": "^4.0.3",
-        "consola": "^3.4.0",
-        "debug": "^4.4.0",
-        "esbuild": "^0.25.0",
-        "fix-dts-default-cjs-exports": "^1.0.0",
-        "joycon": "^3.1.1",
-        "picocolors": "^1.1.1",
-        "postcss-load-config": "^6.0.1",
-        "resolve-from": "^5.0.0",
-        "rollup": "^4.34.8",
-        "source-map": "0.8.0-beta.0",
-        "sucrase": "^3.35.0",
-        "tinyexec": "^0.3.2",
-        "tinyglobby": "^0.2.11",
-        "tree-kill": "^1.2.2"
-      },
-      "bin": {
-        "tsup": "dist/cli-default.js",
-        "tsup-node": "dist/cli-node.js"
+        "is-number": "^7.0.0"
       },
       "engines": {
-        "node": ">=18"
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/ts-api-utils": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+      "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.12"
       },
       "peerDependencies": {
-        "@microsoft/api-extractor": "^7.36.0",
-        "@swc/core": "^1",
-        "postcss": "^8.4.12",
-        "typescript": ">=4.5.0"
-      },
-      "peerDependenciesMeta": {
-        "@microsoft/api-extractor": {
-          "optional": true
-        },
-        "@swc/core": {
-          "optional": true
-        },
-        "postcss": {
-          "optional": true
-        },
-        "typescript": {
-          "optional": true
-        }
+        "typescript": ">=4.8.4"
       }
     },
-    "node_modules/tsx": {
-      "version": "4.19.4",
-      "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
-      "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
+    "node_modules/tsconfig-paths": {
+      "version": "3.15.0",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "esbuild": "~0.25.0",
-        "get-tsconfig": "^4.7.5"
-      },
-      "bin": {
-        "tsx": "dist/cli.mjs"
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD"
+    },
+    "node_modules/tw-animate-css": {
+      "version": "1.3.6",
+      "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.3.6.tgz",
+      "integrity": "sha512-9dy0R9UsYEGmgf26L8UcHiLmSFTHa9+D7+dAt/G/sF5dCnPePZbfgDYinc7/UzAM7g/baVrmS6m9yEpU46d+LA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/Wombosvideo"
+      }
+    },
+    "node_modules/type-check": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "prelude-ls": "^1.2.1"
       },
       "engines": {
-        "node": ">=18.0.0"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
+        "node": ">= 0.8.0"
       }
     },
     "node_modules/typed-array-buffer": {
@@ -3725,12 +6011,19 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/ufo": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz",
-      "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==",
+    "node_modules/typescript": {
+      "version": "5.8.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+      "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
       "dev": true,
-      "license": "MIT"
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
     },
     "node_modules/unbox-primitive": {
       "version": "1.1.0",
@@ -3751,47 +6044,72 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
-      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
+    "node_modules/undici-types": {
+      "version": "6.21.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+      "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
       "dev": true,
-      "license": "BSD-2-Clause"
+      "license": "MIT"
     },
-    "node_modules/whatwg-url": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
-      "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+    "node_modules/unrs-resolver": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
+      "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
-        "lodash.sortby": "^4.7.0",
-        "tr46": "^1.0.1",
-        "webidl-conversions": "^4.0.2"
+        "napi-postinstall": "^0.3.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/unrs-resolver"
+      },
+      "optionalDependencies": {
+        "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
+        "@unrs/resolver-binding-android-arm64": "1.11.1",
+        "@unrs/resolver-binding-darwin-arm64": "1.11.1",
+        "@unrs/resolver-binding-darwin-x64": "1.11.1",
+        "@unrs/resolver-binding-freebsd-x64": "1.11.1",
+        "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
+        "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
+        "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
+        "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
+        "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
+        "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
+        "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
+        "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
+        "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
+        "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
+        "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
+        "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
+        "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
+        "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
+      }
+    },
+    "node_modules/uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "punycode": "^2.1.0"
       }
     },
     "node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
         "isexe": "^2.0.0"
       },
       "bin": {
-        "which": "bin/which"
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
     "node_modules/which-boxed-primitive": {
@@ -3883,135 +6201,37 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/wrap-ansi": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
-      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^6.1.0",
-        "string-width": "^5.0.1",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrap-ansi-cjs": {
-      "name": "wrap-ansi",
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
-      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+    "node_modules/word-wrap": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/yallist": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+      "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
+      "license": "BlueOak-1.0.0",
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       }
     },
-    "node_modules/wrap-ansi/node_modules/ansi-styles": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+    "node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     }
   }
diff --git a/package.json b/package.json
index b32a63ca..a8ad8857 100644
--- a/package.json
+++ b/package.json
@@ -1,45 +1,33 @@
 {
   "name": "quicksnip",
-  "version": "1.0.0",
-  "description": "QuickSnip is an open-source tool designed for developers who want to organize, search, and share code snippets across various programming languages. It provides a centralized platform for managing handy snippets. Built with love and powered by an awesome community. 🚀",
-  "main": "index.js",
+  "version": "0.1.0",
+  "private": true,
   "scripts": {
-    "build": "npm-run-all --parallel build:backend build:frontend",
-    "build:backend": "npm run build --prefix backend",
-    "build:frontend": "npm run build --prefix frontend",
-    "start:backend": "npm start --prefix backend",
-    "start:frontend": "npm run preview --prefix frontend",
-    "dev": "npm-run-all --parallel dev:backend dev:frontend",
-    "dev:backend": "npm run dev --prefix backend",
-    "dev:frontend": "npm run dev --prefix frontend",
-    "lint": "npm-run-all --parallel lint:backend lint:frontend",
-    "lint:backend": "npm run lint --prefix backend",
-    "lint:frontend": "npm run lint --prefix frontend",
-    "format": "npm-run-all --parallel format:backend format:frontend",
-    "format:backend": "npm run format --prefix backend",
-    "format:frontend": "npm run format --prefix frontend",
-    "cspell:frontend": "npm run cspell --prefix frontend",
-    "prepare": "husky install"
+    "dev": "next dev",
+    "build": "next build",
+    "start": "next start",
+    "lint": "next lint"
   },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/technoph1le/quicksnip.git"
+  "dependencies": {
+    "@radix-ui/react-slot": "^1.2.3",
+    "class-variance-authority": "^0.7.1",
+    "clsx": "^2.1.1",
+    "lucide-react": "^0.535.0",
+    "next": "15.4.5",
+    "react": "19.1.0",
+    "react-dom": "19.1.0",
+    "tailwind-merge": "^3.3.1"
   },
-  "keywords": [],
-  "author": "",
-  "license": "ISC",
-  "type": "module",
-  "engines": {
-    "node": ">=20"
-  },
-  "bugs": {
-    "url": "https://github.com/technoph1le/quicksnip/issues"
-  },
-  "homepage": "https://github.com/technoph1le/quicksnip#readme",
   "devDependencies": {
-    "husky": "^9.1.7",
-    "npm-run-all": "^4.1.5",
-    "tsup": "^8.5.0",
-    "tsx": "^4.19.4"
+    "@eslint/eslintrc": "^3",
+    "@tailwindcss/postcss": "^4",
+    "@types/node": "^20",
+    "@types/react": "^19",
+    "@types/react-dom": "^19",
+    "eslint": "^9",
+    "eslint-config-next": "15.4.5",
+    "tailwindcss": "^4",
+    "tw-animate-css": "^1.3.6",
+    "typescript": "^5"
   }
 }
diff --git a/postcss.config.mjs b/postcss.config.mjs
new file mode 100644
index 00000000..c7bcb4b1
--- /dev/null
+++ b/postcss.config.mjs
@@ -0,0 +1,5 @@
+const config = {
+  plugins: ["@tailwindcss/postcss"],
+};
+
+export default config;
diff --git a/preview.png b/preview.png
deleted file mode 100644
index 64bfd7817b30c2d259ad18be3fc2de6f5c50175c..0000000000000000000000000000000000000000
GIT binary patch
diff --git a/public/file.svg b/public/file.svg
new file mode 100644
index 00000000..004145cd
--- /dev/null
+++ b/public/file.svg
@@ -0,0 +1 @@
+<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
\ No newline at end of file
diff --git a/public/globe.svg b/public/globe.svg
new file mode 100644
index 00000000..567f17b0
--- /dev/null
+++ b/public/globe.svg
@@ -0,0 +1 @@
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
\ No newline at end of file
diff --git a/public/next.svg b/public/next.svg
new file mode 100644
index 00000000..5174b28c
--- /dev/null
+++ b/public/next.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
\ No newline at end of file
diff --git a/public/vercel.svg b/public/vercel.svg
new file mode 100644
index 00000000..77053960
--- /dev/null
+++ b/public/vercel.svg
@@ -0,0 +1 @@
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/public/window.svg b/public/window.svg
new file mode 100644
index 00000000..b2b2a44f
--- /dev/null
+++ b/public/window.svg
@@ -0,0 +1 @@
+<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
\ No newline at end of file
diff --git a/snippets/bash/icon.svg b/snippets/bash/icon.svg
deleted file mode 100644
index 9fb1be15..00000000
--- a/snippets/bash/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 48 48" width="96px" height="96px" fill-rule="evenodd" clip-rule="evenodd" baseProfile="basic"><path fill="#ededed" fill-rule="evenodd" d="M22.903,3.286c0.679-0.381,1.515-0.381,2.193,0 c3.355,1.883,13.451,7.551,16.807,9.434C42.582,13.1,43,13.804,43,14.566c0,3.766,0,15.101,0,18.867 c0,0.762-0.418,1.466-1.097,1.847c-3.355,1.883-13.451,7.551-16.807,9.434c-0.679,0.381-1.515,0.381-2.193,0 c-3.355-1.883-13.451-7.551-16.807-9.434C5.418,34.899,5,34.196,5,33.434c0-3.766,0-15.101,0-18.867 c0-0.762,0.418-1.466,1.097-1.847C9.451,10.837,19.549,5.169,22.903,3.286z" clip-rule="evenodd"/><path fill="#434345" d="M23.987,46.221c-1.085,0-2.171-0.252-3.165-0.757c-2.22-1.127-5.118-2.899-7.921-4.613 c-1.973-1.206-3.836-2.346-5.297-3.157C5.381,36.458,4,34.113,4,31.572V16.627c0-2.59,1.417-4.955,3.699-6.173 c3.733-1.989,9.717-5.234,12.878-7.01h0c2.11-1.184,4.733-1.184,6.844,0c3.576,2.007,10.369,6.064,14.252,8.513 C43.13,12.874,44,14.453,44,16.182V32c0,2.4-0.859,4.048-2.553,4.895c-0.944,0.531-2.628,1.576-4.578,2.787 c-3.032,1.882-6.806,4.225-9.564,5.705C26.27,45.942,25.128,46.221,23.987,46.221z M21.556,5.188 C18.384,6.97,12.382,10.226,8.64,12.22C7.012,13.088,6,14.776,6,16.627v14.945c0,1.814,0.987,3.49,2.576,4.373 c1.498,0.832,3.378,1.981,5.369,3.199c2.77,1.693,5.634,3.445,7.783,4.536c1.458,0.739,3.188,0.717,4.631-0.056 c2.703-1.451,6.447-3.775,9.456-5.643c1.97-1.223,3.671-2.279,4.696-2.854C41.835,34.464,42,33.109,42,32V16.182 c0-1.037-0.521-1.983-1.392-2.532c-3.862-2.435-10.613-6.467-14.165-8.461C24.913,4.331,23.086,4.331,21.556,5.188L21.556,5.188z"/><path fill="#434345" d="M22.977,41.654l-0.057-13.438c-0.011-2.594,1.413-4.981,3.701-6.204l12.01-6.416 c1.998-1.068,4.414,0.38,4.414,2.646v14.73c0,1.041-0.54,2.008-1.426,2.554l-14.068,8.668 C25.557,45.424,22.987,43.996,22.977,41.654z"/><path fill="#ededed" d="M28.799,26.274c0.123-0.063,0.225,0.014,0.227,0.176l0.013,1.32 c0.552-0.219,1.032-0.278,1.467-0.177c0.095,0.024,0.136,0.153,0.098,0.306l-0.291,1.169c-0.024,0.089-0.072,0.178-0.132,0.233 c-0.026,0.025-0.052,0.044-0.077,0.057c-0.04,0.02-0.078,0.026-0.114,0.019c-0.199-0.045-0.671-0.148-1.413,0.228 c-0.778,0.395-1.051,1.071-1.046,1.573c0.007,0.601,0.315,0.783,1.377,0.802c1.416,0.023,2.027,0.643,2.042,2.067 c0.016,1.402-0.733,2.905-1.876,3.826l0.025,1.308c0.001,0.157-0.1,0.338-0.225,0.4l-0.775,0.445 c-0.123,0.063-0.225-0.014-0.227-0.172l-0.013-1.286c-0.664,0.276-1.334,0.342-1.763,0.17c-0.082-0.032-0.117-0.152-0.084-0.288 l0.28-1.181c0.022-0.092,0.071-0.186,0.138-0.246c0.023-0.023,0.048-0.04,0.072-0.053c0.044-0.022,0.087-0.027,0.124-0.013 c0.462,0.155,1.053,0.082,1.622-0.206c0.722-0.365,1.206-1.102,1.198-1.834c-0.007-0.664-0.366-0.939-1.241-0.946 c-1.113,0.002-2.151-0.216-2.168-1.855c-0.014-1.35,0.688-2.753,1.799-3.641l-0.013-1.319c-0.001-0.162,0.098-0.34,0.225-0.405 L28.799,26.274z"/><path fill="#4da925" d="M37.226,34.857l-3.704,2.185c-0.109,0.061-0.244-0.019-0.244-0.143v-1.252 c0-0.113,0.061-0.217,0.16-0.273l3.704-2.185c0.111-0.061,0.246,0.019,0.246,0.145v1.248 C37.388,34.697,37.326,34.801,37.226,34.857"/></svg>
\ No newline at end of file
diff --git a/snippets/bash/system/kill-previous-instances.md b/snippets/bash/system/kill-previous-instances.md
deleted file mode 100644
index 0fcafce3..00000000
--- a/snippets/bash/system/kill-previous-instances.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Kill Previous Instances
-description: Kill all previous instances of a script
-author: saminjay
-tags: kill,process,background
----
-
-```bash
-function kill_prev() {
-    # $$ contains current pid (grep ignore so it doesn't suicide)
-    local processes
-    readarray -t processes < <(pgrep -f "$0" | grep -v "$$")
-    kill "${processes[@]}" >/dev/null 2>&1
-}
-
-# Usage:
-# Add this function to your background running script
-# It will make sure that only one instance of your script is running at a time
-kill_prev
-```
diff --git a/snippets/bash/system/system-resource-monitor.md b/snippets/bash/system/system-resource-monitor.md
deleted file mode 100644
index c382e5ab..00000000
--- a/snippets/bash/system/system-resource-monitor.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: System Resource Monitor
-description: Monitors system resources (CPU, RAM, disk, users)
-author: sponkurtus2
-tags: file,system
----
-
-```bash
-system_resources () {
-      echo "CPU Load: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}')%"
-      echo "Memory Used: $(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2}')"
-      echo "Disk Used: $(df -h / | awk 'NR==2{print $5}')"
-      echo "Active Users: $(who | wc -l)"
-}
-
-system_resources "$@"
-
-# Usage:
-chmod a+x system-resource-monitor.sh # First make it executable for all the users
-
-./system-resource-monitor.sh  # It will print the following system resources (CPU, RAM, disk, and active users)
-```
diff --git a/snippets/c/basics/hello-world.md b/snippets/c/basics/hello-world.md
deleted file mode 100644
index 90b42e7d..00000000
--- a/snippets/c/basics/hello-world.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: 0xHouss
-tags: printing,hello-world
----
-
-```c
-#include <stdio.h> // Includes the input/output library
-
-int main() { // Defines the main function
-  printf("Hello, World!\n") // Outputs Hello, World! and a newline
-
-  return 0; // indicate the program executed successfully
-}
-```
diff --git a/snippets/c/bit-manipulation/check-power-of-two.md b/snippets/c/bit-manipulation/check-power-of-two.md
deleted file mode 100644
index 904c6bac..00000000
--- a/snippets/c/bit-manipulation/check-power-of-two.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Check Power of Two
-description: Checks if a given number is a power of two using bitwise operations.
-tags: bit-manipulation, power-of-two
-author: ashukr07
----
-
-```c
-#include <stdbool.h> // Include the standard boolean library
-
-bool is_power_of_two(int n) {
-    return n > 0 && (n & (n - 1)) == 0; // Bitwise check for power of two
-}
-
-// Usage:
-is_power_of_two(16); // Returns: true
-is_power_of_two(18); // Returns: false
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/clear-ith-bit.md b/snippets/c/bit-manipulation/clear-ith-bit.md
deleted file mode 100644
index 8d0f3c8a..00000000
--- a/snippets/c/bit-manipulation/clear-ith-bit.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Clear ith bit
-description: Clear the ith bit of a number and returns the resulting number
-tags: bit-manipulation, number, clear
-author: aelshinawy
----
-
-```c
-int clear_ith_bit(int n, int i) {
-    return n & ~(1 << i);
-}
-
-
-// Usage:
-clear_ith_bit(10, 1); // Returns: 8
-clear_ith_bit(10, 3); // Returns: 2
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/count-set-bits.md b/snippets/c/bit-manipulation/count-set-bits.md
deleted file mode 100644
index d72ff73f..00000000
--- a/snippets/c/bit-manipulation/count-set-bits.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Count Set Bits
-description: Counts the number of set bits in an int
-tags: bit-manipulation, count
-author: aelshinawy
----
-
-```c
-int count_set_bits(int n) {
-    int count = 0;
-    while (n) {
-        n &= (n - 1);
-        count++;
-    }
-    return count;
-}
-
-
-// Usage:
-count_set_bits(5);   // Returns: 2
-count_set_bits(255); // Returns: 8
-count_set_bits(8);   // Returns: 1
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/get-ith-bit.md b/snippets/c/bit-manipulation/get-ith-bit.md
deleted file mode 100644
index d4dd5288..00000000
--- a/snippets/c/bit-manipulation/get-ith-bit.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Get ith bit
-description: Get the i-th bit of a number
-tags: bit-manipulation, number, get
-author: aelshinawy
----
-
-```c
-int get_ith_bit(int n, int i) {
-    return (n >> i) & 1;
-}
-
-
-// Usage:
-get_ith_bit(10, 0); // Returns: 0
-get_ith_bit(10, 1); // Returns: 1
-get_ith_bit(10, 2); // Returns: 0
-get_ith_bit(10, 3); // Returns: 1
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/is-odd.md b/snippets/c/bit-manipulation/is-odd.md
deleted file mode 100644
index 24a86f6b..00000000
--- a/snippets/c/bit-manipulation/is-odd.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Is Odd
-description: Check if a number is odd
-tags: bit-manipulation, number, is-odd
-author: aelshinawy
----
-
-```c
-bool is_odd(int n) {
-    return n & 1;
-}
-
-
-// Usage:
-is_odd(10); // Returns: false
-is_odd(11); // Returns: true
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/reverse-bits.md b/snippets/c/bit-manipulation/reverse-bits.md
deleted file mode 100644
index 23c6279f..00000000
--- a/snippets/c/bit-manipulation/reverse-bits.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Reverse Bits
-description: Reverses the bits of a given unsigned integer.
-tags: bit-manipulation, reverse-bits
-author: ashukr07
----
-
-```c
-unsigned int reverse_bits(unsigned int n) {
-    unsigned int result = 0;
-    for (int i = 0; i < 32; ++i) {
-        result <<= 1;        // Shift result left by 1
-        result |= n & 1;     // Add the least significant bit of n to result
-        n >>= 1;            // Shift n right by 1
-    }
-    return result;
-}
-
-// Usage:
-reverse_bits(43261596); // Returns: 964176192 (Binary: 00000010100101000001111010011100 -> 00111001011110000010100101000000)
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/set-ith-bit.md b/snippets/c/bit-manipulation/set-ith-bit.md
deleted file mode 100644
index 84ed52c8..00000000
--- a/snippets/c/bit-manipulation/set-ith-bit.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Set ith bit
-description: Set the i-th bit of a number and returns the resulting number
-tags: bit-manipulation, number, set
-author: aelshinawy
----
-
-```c
-int set_ith_bit(int n, int i) {
-    return n | (1 << i);
-}
-
-
-// Usage:
-set_ith_bit(10, 0); // Returns: 11
-set_ith_bit(10, 2); // Returns: 14
-set_ith_bit(1, 8);  // Returns: 257
-set_ith_bit(1, 3);  // Returns: 9
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/swap-numbers.md b/snippets/c/bit-manipulation/swap-numbers.md
deleted file mode 100644
index 79669ad0..00000000
--- a/snippets/c/bit-manipulation/swap-numbers.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Swap Numbers
-description: Swap two numbers without a temporary variable
-tags: bit-manipulation, number, swap
-author: aelshinawy
----
-
-```c
-void swap(int *a, int *b) {
-    *a ^= *b;
-    *b ^= *a;
-    *a ^= *b;
-}
-
-
-// Usage:
-int x = 5, y = 10;
-swap(&x, &y);
-printf("x = %d, y = %d\n", x, y); // x = 10, y = 5
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/toggle-ith-bit.md b/snippets/c/bit-manipulation/toggle-ith-bit.md
deleted file mode 100644
index d8d7cc1b..00000000
--- a/snippets/c/bit-manipulation/toggle-ith-bit.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Toggle ith bit
-description: Toggle the i-th bit of a number and returns the resulting number
-tags: bit-manipulation, number, toggle
-author: aelshinawy
----
-
-```c
-int toggle_ith_bit(int n, int i) {
-    return n ^ (1 << i);
-}
-
-
-// Usage:
-toggle_ith_bit(10, 0); // Returns: 11
-toggle_ith_bit(10, 1); // Returns: 8
-toggle_ith_bit(8, 1);  // Returns: 10
-```
\ No newline at end of file
diff --git a/snippets/c/bit-manipulation/xor-of-range.md b/snippets/c/bit-manipulation/xor-of-range.md
deleted file mode 100644
index 4afed9bd..00000000
--- a/snippets/c/bit-manipulation/xor-of-range.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: XOR of Range
-description: Finds XOR of all numbers from 1 to n using properties of XOR.
-tags: bit-manipulation, xor
-author: ashukr07
----
-
-```c
-int xor_upto_n(int n) {
-    if (n % 4 == 0) return n;
-    if (n % 4 == 1) return 1;
-    if (n % 4 == 2) return n + 1;
-    return 0;
-}
-
-// Usage:
-xor_upto_n(5); // Returns: 1 (1 ^ 2 ^ 3 ^ 4 ^ 5 = 1)
-```
\ No newline at end of file
diff --git a/snippets/c/icon.svg b/snippets/c/icon.svg
deleted file mode 100644
index 94ebe6d9..00000000
--- a/snippets/c/icon.svg
+++ /dev/null
@@ -1,15 +0,0 @@
-<svg viewBox="32.18585611720149 20.47 223.6851360941233 247.05999999999997" xmlns="http://www.w3.org/2000/svg"
-    width="50" height="50">
-    <path
-        d="M252.71 93.61a21.67 21.67 0 0 0-2.65-10.87 20.74 20.74 0 0 0-7.87-7.67Q198.77 50 155.32 25c-7.8-4.51-15.36-4.35-23.11.23C120.69 32 63 65.09 45.81 75.06c-7.08 4.1-10.52 10.38-10.52 18.54v100.8a21.77 21.77 0 0 0 2.55 10.66 20.63 20.63 0 0 0 8 7.88c17.19 10 74.89 43.05 86.41 49.85 7.75 4.58 15.31 4.74 23.12.23q43.41-25.08 86.87-50.09a20.63 20.63 0 0 0 8-7.88 21.77 21.77 0 0 0 2.55-10.66V93.61z"
-        fill="#004482" />
-    <path
-        d="M252.73 194.4a21.72 21.72 0 0 1-2.55 10.66 18.58 18.58 0 0 1-1.45 2.24L144 144l98.19-68.93a20.72 20.72 0 0 1 7.86 7.67 21.57 21.57 0 0 1 2.66 10.87c.02 33.6.02 100.79.02 100.79z"
-        fill="#00599c" />
-    <path
-        d="M250.05 82.74L37.81 205.06a21.75 21.75 0 0 1-2.53-10.65V93.6c0-8.16 3.45-14.44 10.52-18.54C63 65.09 120.69 32 132.22 25.21c7.73-4.58 15.3-4.74 23.1-.23q43.41 25.08 86.87 50.09a20.72 20.72 0 0 1 7.86 7.67z"
-        fill="#659ad2" />
-    <path
-        d="M148.2 184.72a39.91 39.91 0 0 1-35-20.63q-.53-.94-1-1.92A39.94 39.94 0 0 1 179 119.4c.53.64 1 1.31 1.53 2 .24.33.48.66.7 1l35.07-20.2q-1.28-2.06-2.68-4c-.49-.69-1-1.35-1.48-2A79.9 79.9 0 0 0 78 181.92c.34.64.69 1.27 1 1.9a79.91 79.91 0 0 0 136.86 3.62l-34.29-20.73a39.88 39.88 0 0 1-33.37 18.01z"
-        fill="#fff" />
-</svg>
\ No newline at end of file
diff --git a/snippets/c/mathematical-functions/check-perfect-number.md b/snippets/c/mathematical-functions/check-perfect-number.md
deleted file mode 100644
index a155378a..00000000
--- a/snippets/c/mathematical-functions/check-perfect-number.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Check Perfect Number
-description: Checks if a number is a perfect number. A perfect number is a positive integer that is equal to the sum of its proper divisors (excluding itself).
-tags: math, perfect-number
-author: ashukr07
----
-
-```c
-#include <stdbool.h>
-
-// Function to check if a number is a perfect number
-bool is_perfect(int n) {
-    if (n <= 1) return false;
-
-    int sum = 1; // 1 is a divisor for all n > 1
-    for (int i = 2; i * i <= n; ++i) {
-        if (n % i == 0) {
-            sum += i;
-            if (i != n / i) sum += n / i;
-        }
-    }
-    return sum == n;
-}
-
-// Usage
-is_perfect(28); // Returns: true
-is_perfect(12); // Returns: false
-```
\ No newline at end of file
diff --git a/snippets/c/mathematical-functions/compound-interest.md b/snippets/c/mathematical-functions/compound-interest.md
deleted file mode 100644
index 230b3b4e..00000000
--- a/snippets/c/mathematical-functions/compound-interest.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Compound Interest
-description: Calculates the compound interest for a given principal, rate, time, and number of times interest applied per time period.
-tags: math, finance
-author: ashukr07
----
-
-```c
-#include <math.h>
-
-// Function to calculate compound interest
-double compound_interest(double principal, double rate, double time, int n) {
-    return principal * pow(1 + rate / n, n * time);
-}
-
-// Usage:
-double principal = 1000.0;  // Initial amount
-double rate = 0.05;         // Annual interest rate (5%)
-double time = 2;            // Time in years
-int n = 4;                  // Compounded quarterly
-
-compound_interest(principal, rate, time, n); // Returns: 1104.081632653061
-```
\ No newline at end of file
diff --git a/snippets/c/mathematical-functions/factorial-function.md b/snippets/c/mathematical-functions/factorial-function.md
deleted file mode 100644
index 7f8dae94..00000000
--- a/snippets/c/mathematical-functions/factorial-function.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Factorial Function
-description: Calculates the factorial of a number.
-author: 0xHouss
-tags: math,factorial
----
-
-```c
-int factorial(int x) {
-  int y = 1;
-
-  for (int i = 2; i <= x; i++)
-    y *= i;
-
-  return y;
-}
-
-// Usage:
-factorial(4); // Returns: 24
-```
diff --git a/snippets/c/mathematical-functions/fibonacci-number.md b/snippets/c/mathematical-functions/fibonacci-number.md
deleted file mode 100644
index 8855718f..00000000
--- a/snippets/c/mathematical-functions/fibonacci-number.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Fibonacci Number
-description: Calculates the nth Fibonacci number using recursion.
-tags: math, fibonacci, recursion
-author: ashukr07
----
-
-```c
-// Function to calculate the nth Fibonacci number
-int fibonacci(int n) {
-    if (n <= 1) return n;
-    return fibonacci(n - 1) + fibonacci(n - 2);
-}
-
-// Usage:
-fibonacci(6); // Returns: 8
-```
\ No newline at end of file
diff --git a/snippets/c/mathematical-functions/linear-mapping.md b/snippets/c/mathematical-functions/linear-mapping.md
deleted file mode 100644
index 0d4e360b..00000000
--- a/snippets/c/mathematical-functions/linear-mapping.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Linear Mapping
-description: remaps a value from one range to another
-author: JasimAlrawie
-tags: math,number-theory,algebra
----
-
-```c
-float linearMapping(float value, float minIn, float maxIn, float minOut, float maxOut) {
-    return (value - minIn) * (maxOut - minOut)/(maxIn - minIn) + minOut;
-}
-
-
-// Usage:
-linearMapping(value, 0, 1, 0, 255);    // remaps the value from (0,1) to (0,255)
-linearMapping(value, 0, PI*2, 0, 360); // remaps the value from rad to deg
-linearMapping(value, -1, 1, 1, 8);     // remaps the value from (-1,1) to (1,8)
-```
\ No newline at end of file
diff --git a/snippets/c/mathematical-functions/sum-of-digits.md b/snippets/c/mathematical-functions/sum-of-digits.md
deleted file mode 100644
index bc6c4837..00000000
--- a/snippets/c/mathematical-functions/sum-of-digits.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Sum of Digits
-description: Calculates the sum of the digits of an integer.
-tags: math, digits
-author: ashukr07
----
-
-```c
-// Function to calculate the sum of the digits of an integer
-int sum_of_digits(int n) {
-    int sum = 0;
-    while (n != 0) {
-        sum += n % 10;
-        n /= 10;
-    }
-    return sum;
-}
-
-// Usage:
-sum_of_digits(123); // Returns: 6
-```
\ No newline at end of file
diff --git a/snippets/c/mathematical-functions/swap-numbers.md b/snippets/c/mathematical-functions/swap-numbers.md
deleted file mode 100644
index bbbc4a2b..00000000
--- a/snippets/c/mathematical-functions/swap-numbers.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Swap numbers
-description: Swaps two numbers without using third variable
-author: Emosans
-tags: swap,numbers
----
-
-```c
-#include<stdio.h>
-void swap(int* num1,int* num2){
-    *num1 = *num1 + *num2;
-    *num2 = *num1 - *num2;
-    *num1 = *num1 - *num2;
-}
-
-// Usage:
-int a = 3,b = 4;
-swap(&a,&b); // swaps the values of the a and b variables
-```
\ No newline at end of file
diff --git a/snippets/c/search/binary-search.md b/snippets/c/search/binary-search.md
deleted file mode 100644
index 7f65d37e..00000000
--- a/snippets/c/search/binary-search.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Binary Search 
-description: Searches for an element in a sorted array using the Binary Search algorithm.
-author: 0xHouss
-tags: search,binarysearch,array,algorithm
----
-
-```c
-int binarySearch(int arr[], int low, int high, int x) {
-  while (low <= high) {
-    int mid = low + (high - low) / 2;
-
-    // Check if x is present at mid
-    if (arr[mid] == x) {
-      return mid;
-    }
-
-    // If x is smaller, search the left half
-    if (arr[mid] > x) {
-      high = mid - 1;
-    } else { // If x is larger, search the right half
-      low = mid + 1;
-    }
-  }
-  return -1; // Element not found
-}
-
-// Usage:
-int arr[] = {2, 3, 4, 10, 40};
-int n = sizeof(arr) / sizeof(arr[0]);
-int x = 10;
-int result = binarySearch(arr, 0, n - 1, x);
-// result = 3 (index of the element 10)
-
-
-```
\ No newline at end of file
diff --git a/snippets/c/search/linear-search.md b/snippets/c/search/linear-search.md
deleted file mode 100644
index 3e6f4f29..00000000
--- a/snippets/c/search/linear-search.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Linear Search 
-description: Searches for an element in an array using the Linear Search algorithm.
-author: 0xHouss
-tags: search,linearsearch,array,algorithm
----
-
-```c
-int linearSearch(int arr[], int n, int x) {
-  for (int i = 0; i < n; i++) {
-    if (arr[i] == x) {
-      return i; // Element found at index i
-    }
-  }
-  return -1; // Element not found
-}
-
-// Usage:
-int arr[] = {10, 20, 30, 40, 50};
-int n = sizeof(arr) / sizeof(arr[0]);
-int x = 30;
-int result = linearSearch(arr, n, x);
-// result = 2 (index of the element 30)
-
-```
\ No newline at end of file
diff --git a/snippets/c/sorting/bubble-sort.md b/snippets/c/sorting/bubble-sort.md
deleted file mode 100644
index e6c81508..00000000
--- a/snippets/c/sorting/bubble-sort.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Bubble Sort 
-description: Sorts an array of integers using the Bubble Sort algorithm.
-author: 0xHouss
-tags: sorting,bubblesort,array,algorithm
----
-
-```c
-void bubbleSort(int arr[], int n) {
-  for (int i = 0; i < n - 1; i++) {
-    for (int j = 0; j < n - i - 1; j++) {
-      if (arr[j] > arr[j + 1]) {
-        // Swap arr[j] and arr[j + 1]
-        int temp = arr[j];
-        arr[j] = arr[j + 1];
-        arr[j + 1] = temp;
-      }
-    }
-  }
-}
-
-// Usage:
-int arr[] = {64, 34, 25, 12, 22, 11, 90};
-int n = sizeof(arr) / sizeof(arr[0]);
-bubbleSort(arr, n);
-// Now arr[] is sorted: {11, 12, 22, 25, 34, 64, 90}
-```
\ No newline at end of file
diff --git a/snippets/c/sorting/insertion-sort.md b/snippets/c/sorting/insertion-sort.md
deleted file mode 100644
index c26cf552..00000000
--- a/snippets/c/sorting/insertion-sort.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Insertion Sort 
-description: Sorts an array of integers using the Insertion Sort algorithm.
-author: 0xHouss
-tags: sorting,insertionsort,array,algorithm
----
-
-```c
-void insertionSort(int arr[], int n) {
-  for (int i = 1; i < n; i++) {
-    int key = arr[i];
-    int j = i - 1;
-
-    // Move elements of arr[0..i-1] that are greater than key
-    // to one position ahead of their current position
-    while (j >= 0 && arr[j] > key) {
-      arr[j + 1] = arr[j];
-      j--;
-    }
-    arr[j + 1] = key;
-  }
-}
-
-// Usage:
-int arr[] = {12, 11, 13, 5, 6};
-int n = sizeof(arr) / sizeof(arr[0]);
-insertionSort(arr, n);
-// Now arr[] is sorted: {5, 6, 11, 12, 13}
-
-```
\ No newline at end of file
diff --git a/snippets/c/sorting/merge-sort.md b/snippets/c/sorting/merge-sort.md
deleted file mode 100644
index 71fc0315..00000000
--- a/snippets/c/sorting/merge-sort.md
+++ /dev/null
@@ -1,71 +0,0 @@
----
-title: Merge Sort 
-description: Sorts an array of integers using the Merge Sort algorithm.
-author: 0xHouss
-tags: sorting,mergesort,array,algorithm
----
-
-```c
-#include <stdio.h>
-
-void merge(int arr[], int l, int m, int r) {
-  int n1 = m - l + 1;
-  int n2 = r - m;
-
-  // Temporary arrays
-  int L[n1], R[n2];
-
-  // Copy data to temporary arrays L[] and R[]
-  for (int i = 0; i < n1; i++)
-    L[i] = arr[l + i];
-  for (int j = 0; j < n2; j++)
-    R[j] = arr[m + 1 + j];
-
-  int i = 0, j = 0, k = l;
-
-  // Merge the temporary arrays back into arr[l..r]
-  while (i < n1 && j < n2) {
-    if (L[i] <= R[j]) {
-      arr[k] = L[i];
-      i++;
-    } else {
-      arr[k] = R[j];
-      j++;
-    }
-    k++;
-  }
-
-  // Copy remaining elements of L[], if any
-  while (i < n1) {
-    arr[k] = L[i];
-    i++;
-    k++;
-  }
-
-  // Copy remaining elements of R[], if any
-  while (j < n2) {
-    arr[k] = R[j];
-    j++;
-    k++;
-  }
-}
-
-void mergeSort(int arr[], int l, int r) {
-  if (l < r) {
-    int m = l + (r - l) / 2;
-
-    // Sort first and second halves
-    mergeSort(arr, l, m);
-    mergeSort(arr, m + 1, r);
-
-    merge(arr, l, m, r);
-  }
-}
-
-// Usage:
-int arr[] = {38, 27, 43, 3, 9, 82, 10};
-int n = sizeof(arr) / sizeof(arr[0]);
-mergeSort(arr, 0, n - 1);
-// Now arr[] is sorted: {3, 9, 10, 27, 38, 43, 82}
-
-```
\ No newline at end of file
diff --git a/snippets/c/sorting/quick-sort.md b/snippets/c/sorting/quick-sort.md
deleted file mode 100644
index be259147..00000000
--- a/snippets/c/sorting/quick-sort.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-title: Quick Sort 
-description: Sorts an array of integers using the Quick Sort algorithm.
-author: 0xHouss
-tags: sorting,quicksort,array,algorithm
----
-
-```c
-int partition(int arr[], int low, int high) {
-  int pivot = arr[high]; // Pivot element
-  int i = low - 1;
-
-  for (int j = low; j < high; j++) {
-    if (arr[j] < pivot) {
-      i++;
-      // Swap arr[i] and arr[j]
-      int temp = arr[i];
-      arr[i] = arr[j];
-      arr[j] = temp;
-    }
-  }
-
-  // Swap arr[i + 1] and arr[high] (pivot)
-  int temp = arr[i + 1];
-  arr[i + 1] = arr[high];
-  arr[high] = temp;
-
-  return i + 1;
-}
-
-void quickSort(int arr[], int low, int high) {
-  if (low < high) {
-    int pi = partition(arr, low, high);
-
-    // Recursively sort elements before and after partition
-    quickSort(arr, low, pi - 1);
-    quickSort(arr, pi + 1, high);
-  }
-}
-
-// Usage:
-int arr[] = {10, 7, 8, 9, 1, 5};
-int n = sizeof(arr) / sizeof(arr[0]);
-quickSort(arr, 0, n - 1);
-// Now arr[] is sorted: {1, 5, 7, 8, 9, 10}
-
-```
\ No newline at end of file
diff --git a/snippets/c/sorting/selection-sort.md b/snippets/c/sorting/selection-sort.md
deleted file mode 100644
index 3bdfda99..00000000
--- a/snippets/c/sorting/selection-sort.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Selection Sort 
-description: Sorts an array of integers using the Selection Sort algorithm.
-author: 0xHouss
-tags: sorting,selectionsort,array,algorithm
----
-
-```c
-void selectionSort(int arr[], int n) {
-  for (int i = 0; i < n - 1; i++) {
-    int minIdx = i;
-
-    // Find the minimum element in the unsorted part of the array
-    for (int j = i + 1; j < n; j++) {
-      if (arr[j] < arr[minIdx]) {
-        minIdx = j;
-      }
-    }
-
-    // Swap the found minimum element with the first element of the unsorted part
-    int temp = arr[minIdx];
-    arr[minIdx] = arr[i];
-    arr[i] = temp;
-  }
-}
-
-// Usage:
-int arr[] = {64, 25, 12, 22, 11};
-int n = sizeof(arr) / sizeof(arr[0]);
-selectionSort(arr, n);
-// Now arr[] is sorted: {11, 12, 22, 25, 64}
-
-```
\ No newline at end of file
diff --git a/snippets/cpp/basics/hello-world.md b/snippets/cpp/basics/hello-world.md
deleted file mode 100644
index 8036ac6c..00000000
--- a/snippets/cpp/basics/hello-world.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: James-Beans
-tags: printing,hello-world
----
-
-```cpp
-#include <iostream> // Includes the input/output stream library
-
-int main() { // Defines the main function
-    std::cout << "Hello, World!" << std::endl; // Outputs Hello, World! and a newline
-    return 0; // indicate the program executed successfully
-}
-```
diff --git a/snippets/cpp/bit-manipulation/find-non-repeating-number.md b/snippets/cpp/bit-manipulation/find-non-repeating-number.md
deleted file mode 100644
index 60f322bb..00000000
--- a/snippets/cpp/bit-manipulation/find-non-repeating-number.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Find Non-Repeating Number
-description: Finds the number that appears only once in an array where every other number appears twice.
-tags: bit-manipulation, xor
-author: ashukr07
----
-
-```cpp
-#include <vector>
-
-int find_non_repeating(const std::vector<int> nums) {
-    int result = 0;
-    for (const int num : nums) {
-        result ^= num;
-    }
-    return result;
-}
-
-// Usage:
-std::vector<int> nums = {4, 1, 2, 1, 2};
-find_non_repeating(nums); // Returns: 4
-```
diff --git a/snippets/cpp/data-structure-conversion/vector-to-queue.md b/snippets/cpp/data-structure-conversion/vector-to-queue.md
deleted file mode 100644
index f29d86e3..00000000
--- a/snippets/cpp/data-structure-conversion/vector-to-queue.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Vector to Queue
-description: Convert vector into queue quickly
-tags: data structures,queue,vector
-author: mrityunjay2003
-contributors: majvax
----
-
-```cpp
-#include<queue>
-#include<vector>
-#include<deque>
-
-template <typename T>
-std::queue<T> vectorToQueue(const std::vector<T>& v) {
-    return std::queue<T>(std::deque<T>(v.begin(), v.end()));
-}
-
-
-
-// Usage:
-std::vector<int> vec = { 1, 2, 3, 4, 5 };
-vectorToQueue(vec); // Returns: std::queue<int> { 1, 2, 3, 4, 5 }
-```
diff --git a/snippets/cpp/debugging/vector-print.md b/snippets/cpp/debugging/vector-print.md
deleted file mode 100644
index 9fe8550b..00000000
--- a/snippets/cpp/debugging/vector-print.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Vector Print
-description: Overloads the << operator to print the contents of a vector just like in python.
-author: Mohamed-faaris
-tags: printing,debuging,vector
----
-
-```cpp
-#include <iostream> 
-#include <vector>   
-
-template <typename T>
-std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec) {
-    os << "["; 
-    for (size_t i = 0; i < vec.size(); ++i) {
-        os << vec[i]; // Print each vector element
-        if (i != vec.size() - 1) {
-            os << ", "; // Add separator
-        }
-    }
-    os << "]"; 
-    return os; // Return the stream
-}
-
-// Usage:
-std::vector<int> numbers = {1, 2, 3, 4, 5};
-std::cout << numbers << std::endl; // Outputs: [1, 2, 3, 4, 5]
-
-```
diff --git a/snippets/cpp/file-handling/find-files-recursively.md b/snippets/cpp/file-handling/find-files-recursively.md
deleted file mode 100644
index 83d974e4..00000000
--- a/snippets/cpp/file-handling/find-files-recursively.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-Title: Find files recursively
-Description: Find all the files in a directory and subdirectories using a predicate function.
-Author: majvax
-Tags: filesystem,file_search,c++17
----
-
-```cpp
-#include <filesystem>
-#include <vector>
-#include <string>
-
-template <typename P>
-std::vector<std::filesystem::path> find_files_recursive(const std::string& path, P&& predicate) {
-    std::vector<std::filesystem::path> files;
-    std::error_code ec;
-
-    if (!std::filesystem::exists(path, ec) || ec)
-        return files;
-    if (!std::filesystem::is_directory(path, ec) || ec)
-        return files;
-
-    auto it = std::filesystem::recursive_directory_iterator(path, ec);
-    if (ec)
-        return files;
-
-    for (const auto& entry : it)
-        if (!std::filesystem::is_directory(entry) && predicate(entry.path()))
-            files.push_back(entry.path());
-
-    return files;
-}
-
-
-
-// Usage:
-
-// Find all files with size greater than 10MB
-auto files = find_files_recursive("Path", [](const auto& p) {
-    return std::filesystem::file_size(p) > 10 * 1024 * 1024;
-});
-
-// Find all files with ".pdf" as extension
-auto files = find_files_recursive("Path", [](const auto& p) {
-    return p.extension() == ".pdf";
-});
-
-// Find all files writed after The New Year
-#include <chrono>
-// need std=c++20
-auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(
-    std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}
-);
-auto files = find_files_recursive("Path", [jan_1_2025](const auto& p) {
-    return std::filesystem::last_write_time(p) > jan_1_2025;
-}),
-```
diff --git a/snippets/cpp/file-handling/find-files.md b/snippets/cpp/file-handling/find-files.md
deleted file mode 100644
index c0ff9331..00000000
--- a/snippets/cpp/file-handling/find-files.md
+++ /dev/null
@@ -1,57 +0,0 @@
----
-Title: Find files
-Description: Find all the files in a directory using a predicate function.
-Author: majvax
-Tags: filesystem,file_search,c++17
----
-
-```cpp
-#include <filesystem>
-#include <vector>
-#include <string>
-
-template <typename P>
-std::vector<std::filesystem::path> find_files(const std::string& path, P&& predicate) {
-    std::vector<std::filesystem::path> files;
-    std::error_code ec;
-
-    if (!std::filesystem::exists(path, ec) || ec)
-        return files;
-    if (!std::filesystem::is_directory(path, ec) || ec)
-        return files;
-
-    auto it = std::filesystem::directory_iterator(path, ec);
-    if (ec)
-        return files;
-
-    for (const auto& entry : it)
-        if (!std::filesystem::is_directory(entry) && predicate(entry.path()))
-            files.push_back(entry.path());
-
-    return files;
-}
-
-
-
-// Usage:
-
-// Find all files with size greater than 10MB
-auto files = find_files("Path", [](const auto& p) {
-    return std::filesystem::file_size(p) > 10 * 1024 * 1024;
-});
-
-// Find all files with ".pdf" as extension
-auto files = find_files("Path", [](const auto& p) {
-    return p.extension() == ".pdf";
-});
-
-// Find all files writed after The New Year
-#include <chrono>
-// need std=c++20
-auto jan_1_2025 = std::filesystem::file_time_type::clock::from_sys(
-    std::chrono::sys_days{std::chrono::year{2025}/std::chrono::month{1}/std::chrono::day{1}}
-);
-auto files = find_files("Path", [jan_1_2025](const auto& p) {
-    return std::filesystem::last_write_time(p) > jan_1_2025;
-}),
-```
diff --git a/snippets/cpp/file-handling/list-directories.md b/snippets/cpp/file-handling/list-directories.md
deleted file mode 100644
index 028bc095..00000000
--- a/snippets/cpp/file-handling/list-directories.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-Title: List Directories
-Description: Lists all the directories in a path.
-Author: majvax
-Tags: filesystem,directories,c++17
----
-
-```cpp
-#include <filesystem>
-#include <vector>
-#include <string>
-
-std::vector<std::filesystem::path> list_directories(const std::string& path) {
-    std::vector<std::filesystem::path> files;
-    std::error_code ec;
-
-    if (!std::filesystem::exists(path, ec) || ec)
-        return files;
-    if (!std::filesystem::is_directory(path, ec) || ec)
-        return files;
-
-    auto it = std::filesystem::directory_iterator(path, ec);
-    if (ec)
-        return files;
-
-    for (const auto& entry : it)
-        if (std::filesystem::is_directory(entry))
-            files.push_back(entry.path());
-
-    return files;
-}
-
-
-
-// Usage:
-auto directories = list_directories("Path");
-```
diff --git a/snippets/cpp/icon.svg b/snippets/cpp/icon.svg
deleted file mode 100644
index 7e75c38c..00000000
--- a/snippets/cpp/icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 256 288" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" aria-labelledby="cpp-logo-title cpp-logo-description">
-<title id="cpp-logo-title">C++ logo</title>
-<desc id="cpp-logo-description">A two tone blue hexagon with the letters C++ inside in white</desc>
-<path d="M255.569 84.72c-.002-4.83-1.035-9.098-3.124-12.761-2.052-3.602-5.125-6.621-9.247-9.008-34.025-19.619-68.083-39.178-102.097-58.817-9.17-5.294-18.061-5.101-27.163.269C100.395 12.39 32.59 51.237 12.385 62.94 4.064 67.757.015 75.129.013 84.711 0 124.166.013 163.62 0 203.076c.002 4.724.991 8.909 2.988 12.517 2.053 3.711 5.169 6.813 9.386 9.254 20.206 11.703 88.02 50.547 101.56 58.536 9.106 5.373 17.997 5.565 27.17.269 34.015-19.64 68.075-39.198 102.105-58.817 4.217-2.44 7.333-5.544 9.386-9.252 1.994-3.608 2.985-7.793 2.987-12.518 0 0 0-78.889-.013-118.345" fill="#5C8DBC"/>
-<path d="M128.182 143.509L2.988 215.593c2.053 3.711 5.169 6.813 9.386 9.254 20.206 11.703 88.02 50.547 101.56 58.536 9.106 5.373 17.997 5.565 27.17.269 34.015-19.64 68.075-39.198 102.105-58.817 4.217-2.44 7.333-5.544 9.386-9.252l-124.413-72.074" fill="#1A4674"/>
-<path d="M91.101 164.861c7.285 12.718 20.98 21.296 36.69 21.296 15.807 0 29.58-8.687 36.828-21.541l-36.437-21.107-37.081 21.352" fill="#1A4674"/>
-<path d="M255.569 84.72c-.002-4.83-1.035-9.098-3.124-12.761l-124.263 71.55 124.413 72.074c1.994-3.608 2.985-7.793 2.987-12.518 0 0 0-78.889-.013-118.345" fill="#1B598E"/>
-<path d="M248.728 148.661h-9.722v9.724h-9.724v-9.724h-9.721v-9.721h9.721v-9.722h9.724v9.722h9.722v9.721M213.253 148.661h-9.721v9.724h-9.722v-9.724h-9.722v-9.721h9.722v-9.722h9.722v9.722h9.721v9.721" fill="#FFF"/>
-<path d="M164.619 164.616c-7.248 12.854-21.021 21.541-36.828 21.541-15.71 0-29.405-8.578-36.69-21.296a42.062 42.062 0 0 1-5.574-20.968c0-23.341 18.923-42.263 42.264-42.263 15.609 0 29.232 8.471 36.553 21.059l36.941-21.272c-14.683-25.346-42.096-42.398-73.494-42.398-46.876 0-84.875 38-84.875 84.874 0 15.378 4.091 29.799 11.241 42.238 14.646 25.48 42.137 42.637 73.634 42.637 31.555 0 59.089-17.226 73.714-42.781l-36.886-21.371" fill="#FFF"/>
-</svg>
\ No newline at end of file
diff --git a/snippets/cpp/math-and-numbers/binary-to-unsigned-integer-conversion.md b/snippets/cpp/math-and-numbers/binary-to-unsigned-integer-conversion.md
deleted file mode 100644
index b5ab1a8d..00000000
--- a/snippets/cpp/math-and-numbers/binary-to-unsigned-integer-conversion.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Binary to Unsigned Integer Conversion
-description: Converts a binary number represented as a string to its decimal equivalent.
-tags: binary, conversion, c++20
-author: ashukr07
-contributor: majvax
----
-
-```cpp
-#include <string>
-#include <bitset>
-#include <stdexcept>
-
-template <std::unsigned_integral T>
-T binary_to_uintegral(const std::string& binary) {
-    if (binary.size() > sizeof(T) * 8)
-        throw std::invalid_argument("binary string is too long");
-    return static_cast<T>(std::bitset<sizeof(T) * 8>(binary).to_ullong());
-}
-
-// Usage:
-std::string binary(64, '1'); // Binary 8 bytes long with all bits set to 1
-binary_to_uintegral<unsigned long long>(binary); // Returns: 18446744073709551615
-binary_to_uintegral<long long>(binary); // Compiles error: signed/unsigned mismatch
-binary_to_uintegral<unsigned long long>(std::string(65, '1')); // Throws: std::invalid_argument
-```
diff --git a/snippets/cpp/math-and-numbers/check-prime-number.md b/snippets/cpp/math-and-numbers/check-prime-number.md
deleted file mode 100644
index e2059c25..00000000
--- a/snippets/cpp/math-and-numbers/check-prime-number.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Check Prime Number
-description: Check if an integer is a prime number
-tags: number, prime
-author: MihneaMoso
----
-
-```cpp
-bool is_prime(int n) {
-    if (n < 2) return false;
-    if (n == 2 || n == 3) return true;
-    if (n % 2 == 0) return false;
-    for (int i = 3; i * i <= n; i += 2) {
-        if (n % i == 0) return false;
-    }
-    return true;
-}
-
-// Usage:
-is_prime(29); // Returns: true
-```
diff --git a/snippets/cpp/string-manipulation/filter.md b/snippets/cpp/string-manipulation/filter.md
deleted file mode 100644
index b09b50f5..00000000
--- a/snippets/cpp/string-manipulation/filter.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Filter
-description: Filter a string with a predicate function
-author: majvax
-tags: string,filtering,c++23
----
-
-```cpp
-#include <ranges>
-#include <string>
-
-template <typename P>
-std::string filter(const std::string& str, P&& predicate) {
-    return str
-        | std::ranges::views::filter(std::forward<P>(predicate))
-        | std::ranges::to<std::string>();
-}
-
-
-
-// Usage:
-std::string str = "Hello, World!";
-std::string filtered = filter(str, [](char c){ return std::isalpha(c); });
-std::cout << filtered << std::endl; // HelloWorld
-```
diff --git a/snippets/cpp/string-manipulation/palindrome.md b/snippets/cpp/string-manipulation/palindrome.md
deleted file mode 100644
index b563e22c..00000000
--- a/snippets/cpp/string-manipulation/palindrome.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Palindrome
-description: Check if a string is a palindrome or not.
-author: majvax
-tags: string,c++23
----
-
-```cpp
-#include <string>
-#include <ranges>
-#include <algorithm>
-
-bool is_palindrome(const std::string& str) {
-    std::string sanitized_string = str
-        | std::ranges::views::filter([](char c){ return std::isalnum(c); })
-        | std::ranges::views::transform([](char c){ return std::tolower(c); })
-        | std::ranges::to<std::string>();
-    
-    return std::ranges::equal(sanitized_string, sanitized_string | std::views::reverse);
-}
-
-
-
-// Usage:
-bool pal = is_palindrome("A man, a plan, a canal, Panama"); // true
-```
diff --git a/snippets/cpp/string-manipulation/reverse-string.md b/snippets/cpp/string-manipulation/reverse-string.md
deleted file mode 100644
index ed3c3995..00000000
--- a/snippets/cpp/string-manipulation/reverse-string.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Reverse String
-description: Reverses the characters in a string.
-author: Vaibhav-kesarwani
-tags: array,reverse,c++23
----
-
-```cpp
-#include <string>
-#include <algorithm>
-
-std::string reverseString(const std::string& input) {
-    std::string reversed = input;
-    std::reverse(reversed.begin(), reversed.end());
-    return reversed;
-}
-
-reverseString("quicksnip"); // Returns: "pinskciuq"
-```
diff --git a/snippets/cpp/string-manipulation/split-string.md b/snippets/cpp/string-manipulation/split-string.md
deleted file mode 100644
index 362b719c..00000000
--- a/snippets/cpp/string-manipulation/split-string.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Split String
-description: Splits a string by a delimiter
-author: saminjay
-tags: string,split
----
-
-```cpp
-#include <string>
-#include <vector>
-
-std::vector<std::string> split_string(std::string str, std::string delim) {
-    std::vector<std::string> splits;
-    int i = 0, j;
-    int inc = delim.length();
-    while (j != std::string::npos) {
-        j = str.find(delim, i);
-        splits.push_back(str.substr(i, j - i));
-        i = j + inc;
-    }
-    return splits;
-}
-
-// Usage:
-split_string("quick_-snip", "_-"); // Returns: std::vector<std::string> { "quick", "snip" }
-```
diff --git a/snippets/cpp/string-manipulation/transform.md b/snippets/cpp/string-manipulation/transform.md
deleted file mode 100644
index 3d0ee01d..00000000
--- a/snippets/cpp/string-manipulation/transform.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Transform
-description: Transform a string with a function
-author: majvax
-tags: string,transform,c++23
----
-
-```cpp
-#include <ranges>
-#include <string>
-
-template <typename F>
-std::string transform(const std::string& str, F&& transformer) {
-    return str
-        | std::ranges::views::transform(std::forward<F>(transformer))
-        | std::ranges::to<std::string>();
-}
-
-
-
-// Usage:
-std::string str = "Hello, World!";
-std::string transformed = transform(str, [](char c){ return std::toupper(c); });
-std::cout << transformed << std::endl; // HELLO, WORLD!
-```
diff --git a/snippets/cpp/vector-manipulation.md/filter.md b/snippets/cpp/vector-manipulation.md/filter.md
deleted file mode 100644
index 0975969c..00000000
--- a/snippets/cpp/vector-manipulation.md/filter.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-Title: Filter
-Description: Filters a vector using a predicate function.
-Author: majvax
-Tags: array,filter,c++23
----
-
-```cpp
-#include <ranges>
-#include <vector>
-
-template <typename T, typename P>
-auto filter(const std::vector<T>& vec, P&& predicate) {
-    return vec
-        | std::views::filter(std::forward<P>(predicate))
-        | std::ranges::to<std::vector<T>>();
-}
-
-
-
-// Usage:
-std::vector<int> vec = {1, 2, 3, 4, 5};
-std::vector<int> filtered = filter(vec, [](int i){ return i % 2 == 0; });
-// filtered contains 2 and 4
-```
diff --git a/snippets/cpp/vector-manipulation.md/remove-duplicates.md b/snippets/cpp/vector-manipulation.md/remove-duplicates.md
deleted file mode 100644
index 2691b9c3..00000000
--- a/snippets/cpp/vector-manipulation.md/remove-duplicates.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Remove duplicates
-description: Removes duplicates from an vector of ints
-author: AnkushRoy-code
-tags: vector,remove,duplicate
-contributor: majvax
----
-
-```cpp
-#include <algorithm>
-#include <vector>
-
-bool removeDuplicates(std::vector<int> &input) noexcept {
-    if (input.empty()) return false;
-    const auto size = input.size();
-    std::sort(input.begin(), input.end());
-
-    auto last = std::unique(input.begin(), input.end()); // remove duplicates
-    input.erase(last, input.end()); // resize vector and delete the undefined elements
-
-    return size != input.size();
-}
-
-
-
-// Usage:
-std::vector<int> vec = {4, 2, 2, 8, 5, 6, 9, 9, 9, 8, 8, 4};
-removeDuplicates(vec); // returns {2, 4, 5, 6, 8, 9}
-```
diff --git a/snippets/cpp/vector-manipulation.md/remove-n-occurences.md b/snippets/cpp/vector-manipulation.md/remove-n-occurences.md
deleted file mode 100644
index aac7f676..00000000
--- a/snippets/cpp/vector-manipulation.md/remove-n-occurences.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Remove n Occurences
-description: Removes duplicates from an vector of ints
-author: AnkushRoy-code
-tags: vector,remove
-contributor: majvax
----
-
-```cpp
-#include <algorithm>
-#include <unordered_map>
-#include <vector>
-
-bool removeOccurrences(std::vector<int>& vec, const unsigned int n) noexcept {
-    if (vec.empty() || n == 0) return false;
-
-    const auto size = vec.size();
-    std::unordered_map<int, int> frequency; // count frequencies
-    for (int num : vec) {
-        frequency[num]++;
-    }
-
-    vec.erase( // remove elements with n number of occurrences
-        std::remove_if(vec.begin(), vec.end(), [&frequency, n](const int x) {
-            return frequency[x] == n;
-        }),
-        vec.end()
-    );
-    return size != vec.size();
-}
-
-
-
-// Usage:
-std::vector<int> vec = {4, 2, 4, 8, 5, 6, 8, 8, 4, 3 };
-
-int n = 3; // Remove elements that occur exactly 3 times
-removeOccurrences(vec, n); // returns {2, 5, 6, 3}
-```
diff --git a/snippets/cpp/vector-manipulation.md/transform.md b/snippets/cpp/vector-manipulation.md/transform.md
deleted file mode 100644
index 688eb7af..00000000
--- a/snippets/cpp/vector-manipulation.md/transform.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-Title: Transform
-Description: Transforms a vector using a function.
-Author: majvax
-Tags: array,transform,c++23
----
-
-```cpp
-#include <ranges>
-#include <vector>
-
-template <typename T, typename F>
-auto transform(const std::vector<T>& vec, F&& transformer) {
-    using U = std::invoke_result_t<F, T>;
-    return vec
-        | std::views::transform(std::forward<F>(transformer))
-        | std::ranges::to<std::vector<U>>();
-}
-
-
-
-// Usage:
-std::vector<int> vec = {1, 2, 3, 4, 5};
-std::vector<int> transformed = transform(vec, [](int i){ return i * 2; });
-// transformed contains 2, 4, 6, 8, 10
-```
diff --git a/snippets/csharp/basics/hello-world.md b/snippets/csharp/basics/hello-world.md
deleted file mode 100644
index d13463c6..00000000
--- a/snippets/csharp/basics/hello-world.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: chaitanya-jvnm
-tags: printing,hello-world
----
-
-```csharp
-public class Program {
-  public static void Main(string[] args) {
-    System.Console.WriteLine("Hello, World!");
-  }
-}
-```
diff --git a/snippets/csharp/guid-utilities/generate-guid.md b/snippets/csharp/guid-utilities/generate-guid.md
deleted file mode 100644
index 43682edf..00000000
--- a/snippets/csharp/guid-utilities/generate-guid.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Generate GUID
-description: Generates a new GUID
-author: chaitanya-jvnm
-tags: guid,generate
----
-
-```csharp
-public static string GenerateGuid() {
-  return Guid.NewGuid().ToString();
-}
-
-// Usage:
-GenerateGuid(); // Returns: 1c4c38d8-64e4-431b-884a-c6eec2ab02cd (Uuid is random)
-```
diff --git a/snippets/csharp/guid-utilities/validate-guid.md b/snippets/csharp/guid-utilities/validate-guid.md
deleted file mode 100644
index 2989dfb7..00000000
--- a/snippets/csharp/guid-utilities/validate-guid.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Validate GUID
-description: Checks if a string is a valid GUID.
-author: chaitanya-jvnm
-tags: guid,validate
----
-
-```csharp
-public static bool IsGuid(string str) {
-  return Guid.TryParse(str, out _);
-}
-
-// Usage:
-IsGuid("1c4c38d8-64e4-431b-884a-c6eec2ab02cd"); // Returns: true
-IsGuid("quicksnip"); // Returns: false
-```
\ No newline at end of file
diff --git a/snippets/csharp/icon.svg b/snippets/csharp/icon.svg
deleted file mode 100644
index 96cf5abc..00000000
--- a/snippets/csharp/icon.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(63.137257%,47.450981%,86.274511%);fill-opacity:1;" d="M 47.148438 14.660156 C 47.148438 13.824219 46.96875 13.082031 46.605469 12.445312 C 46.25 11.820312 45.714844 11.296875 45 10.882812 C 39.09375 7.476562 33.179688 4.082031 27.273438 0.671875 C 25.683594 -0.246094 24.140625 -0.214844 22.558594 0.71875 C 20.207031 2.105469 8.4375 8.847656 4.929688 10.878906 C 3.484375 11.71875 2.78125 12.996094 2.78125 14.660156 C 2.777344 21.511719 2.78125 28.359375 2.777344 35.210938 C 2.777344 36.03125 2.949219 36.757812 3.296875 37.382812 C 3.652344 38.027344 4.195312 38.566406 4.925781 38.988281 C 8.433594 41.019531 20.207031 47.765625 22.558594 49.152344 C 24.140625 50.085938 25.683594 50.117188 27.273438 49.199219 C 33.179688 45.789062 39.09375 42.394531 45 38.988281 C 45.734375 38.5625 46.273438 38.023438 46.632812 37.382812 C 46.976562 36.753906 47.148438 36.027344 47.148438 35.207031 C 47.148438 35.207031 47.148438 21.511719 47.148438 14.660156 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(15.686275%,0%,40.784314%);fill-opacity:1;" d="M 25.03125 24.867188 L 3.296875 37.382812 C 3.652344 38.027344 4.195312 38.566406 4.925781 38.988281 C 8.433594 41.019531 20.207031 47.765625 22.558594 49.152344 C 24.140625 50.085938 25.683594 50.117188 27.273438 49.199219 C 33.179688 45.789062 39.09375 42.394531 45 38.988281 C 45.734375 38.5625 46.273438 38.023438 46.632812 37.382812 L 25.03125 24.867188 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(22.352941%,0%,56.862748%);fill-opacity:1;" d="M 47.148438 14.660156 C 47.148438 13.824219 46.96875 13.082031 46.605469 12.445312 L 25.03125 24.867188 L 46.632812 37.382812 C 46.976562 36.753906 47.148438 36.027344 47.148438 35.207031 C 47.148438 35.207031 47.148438 21.511719 47.148438 14.660156 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 37.828125 20.191406 L 37.828125 22.527344 L 40.167969 22.527344 L 40.167969 20.191406 L 41.335938 20.191406 L 41.335938 22.527344 L 43.675781 22.527344 L 43.675781 23.699219 L 41.335938 23.699219 L 41.335938 26.039062 L 43.675781 26.039062 L 43.675781 27.207031 L 41.335938 27.207031 L 41.335938 29.546875 L 40.167969 29.546875 L 40.167969 27.207031 L 37.828125 27.207031 L 37.828125 29.546875 L 36.660156 29.546875 L 36.660156 27.207031 L 34.320312 27.207031 L 34.320312 26.039062 L 36.660156 26.039062 L 36.660156 23.699219 L 34.320312 23.699219 L 34.320312 22.527344 L 36.660156 22.527344 L 36.660156 20.191406 Z M 40.167969 23.699219 L 37.828125 23.699219 L 37.828125 26.039062 L 40.167969 26.039062 Z M 40.167969 23.699219 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 25.078125 8.441406 C 31.179688 8.441406 36.507812 11.753906 39.359375 16.679688 L 39.332031 16.632812 L 32.15625 20.765625 C 30.738281 18.371094 28.148438 16.757812 25.171875 16.722656 L 25.078125 16.722656 C 20.542969 16.722656 16.867188 20.398438 16.867188 24.933594 C 16.867188 26.417969 17.261719 27.808594 17.949219 29.007812 C 19.367188 31.480469 22.027344 33.148438 25.078125 33.148438 C 28.152344 33.148438 30.828125 31.460938 32.234375 28.960938 L 32.203125 29.023438 L 39.371094 33.175781 C 36.546875 38.058594 31.292969 41.359375 25.261719 41.425781 L 25.078125 41.429688 C 18.957031 41.429688 13.617188 38.09375 10.769531 33.144531 C 9.382812 30.726562 8.585938 27.921875 8.585938 24.933594 C 8.585938 15.828125 15.96875 8.441406 25.078125 8.441406 Z M 25.078125 8.441406 "/>
-</g>
-</svg>
diff --git a/snippets/csharp/jwt-utilities/decode-jwt.md b/snippets/csharp/jwt-utilities/decode-jwt.md
deleted file mode 100644
index 6c4c9e01..00000000
--- a/snippets/csharp/jwt-utilities/decode-jwt.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Decode JWT
-description: Decodes a JWT.
-author: chaitanya-jvnm
-tags: jwt,decode
----
-
-```csharp
-public static string DecodeJwt(string token) {
-  return new JwtSecurityTokenHandler().ReadJwtToken(token).ToString();
-}
-
-// Usage:
-string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
-DecodeJwt(token); // Returns: "{\"alg\":\"HS256\",\"typ\":\"JWT\"}.{\"sub\":\"1234567890\",\"name\":\"John Doe\",\"iat\":1516239022}"
-```
diff --git a/snippets/csharp/jwt-utilities/validate-jwt.md b/snippets/csharp/jwt-utilities/validate-jwt.md
deleted file mode 100644
index 48765e7d..00000000
--- a/snippets/csharp/jwt-utilities/validate-jwt.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Validate JWT
-description: Validates a JWT.
-author: chaitanya-jvnm
-tags: jwt,validate
----
-
-```csharp
-public static bool ValidateJwt(string token, string secret) {
-  var tokenHandler = new JwtSecurityTokenHandler();
-  var validationParameters = new TokenValidationParameters {
-    ValidateIssuerSigningKey = true,
-    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)),
-    ValidateIssuer = false,
-    ValidateAudience = false
-  };
-  try {
-    tokenHandler.ValidateToken(token, validationParameters, out _);
-    return true;
-  }
-  catch {
-    return false
-  }
-}
-
-// Usage:
-string JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
-string correctSecret = "your-256-bit-secret";
-string wrongSecret = "this-is-not-the-right-secret";
-
-ValidateJwt(JWT, correctSecret); // Returns: true
-ValidateJwt(JWT, wrongSecret); // Returns: false
-```
\ No newline at end of file
diff --git a/snippets/csharp/list-utilities/swap-items-at-index.md b/snippets/csharp/list-utilities/swap-items-at-index.md
deleted file mode 100644
index 5cf47d9f..00000000
--- a/snippets/csharp/list-utilities/swap-items-at-index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Swap items at index
-description: Swaps two items at determined indexes
-author: omegaleo
-tags: list,swapping
----
-
-```csharp
-public static IList<T> Swap<T>(this IList<T> list, int indexA, int indexB)
-{
-    (list[indexA], list[indexB]) = (list[indexB], list[indexA]);
-    return list;
-}
-
-var list = new List<string>() {"Test", "Test2"};
-
-list.Swap(0, 1); // Swaps "Test" and "Test2" in place
-```
diff --git a/snippets/csharp/string-utilities/capitalize-first-letter.md b/snippets/csharp/string-utilities/capitalize-first-letter.md
deleted file mode 100644
index c047398e..00000000
--- a/snippets/csharp/string-utilities/capitalize-first-letter.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Capitalize first letter
-description: Makes the first letter of a string uppercase.
-author: chaitanya-jvnm
-tags: string,capitalize
----
-
-```csharp
-public static string Capitalize(this string str) {
-  return str.Substring(0, 1).ToUpper() + str.Substring(1);
-}
-
-// Usage:
-"quicksnip".Capitalize(); // Returns: "Quicksnip"
-```
diff --git a/snippets/csharp/string-utilities/truncate-string.md b/snippets/csharp/string-utilities/truncate-string.md
deleted file mode 100644
index 6acc4032..00000000
--- a/snippets/csharp/string-utilities/truncate-string.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Truncate String
-description: Cut off a string once it reaches a determined amount of characters and add '...' to the end of the string
-author: omegaleo
-tags: string,truncate
----
-
-```csharp
-public static string Truncate(this string value, int maxChars)
-{
-    return value.Length <= maxChars ? value : value.Substring(0, maxChars) + "...";
-}
-
-// Usage:
-"Quicksnip".Truncate(5); // Returns: "Quick..."
-```
diff --git a/snippets/css/animations/blink-animation.md b/snippets/css/animations/blink-animation.md
deleted file mode 100644
index d3a91390..00000000
--- a/snippets/css/animations/blink-animation.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Blink Animation
-description: Adds an infinite blinking animation to an element
-author: AlsoKnownAs-Ax
-tags: animation,blink,infinite
----
-
-```css
-.blink {
-    animation: blink 1s linear infinite;
-}
-
-@keyframes blink{
-    0%{
-        opacity: 0;
-    }
-    50%{
-        opacity: 1;
-    }
-    100%{
-        opacity: 0;
-    }
-}
-```
diff --git a/snippets/css/animations/pulse-animation.md b/snippets/css/animations/pulse-animation.md
deleted file mode 100644
index 6e2cff26..00000000
--- a/snippets/css/animations/pulse-animation.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Pulse Animation
-description: Adds a smooth pulsing animation with opacity and scale effects
-author: AlsoKnownAs-Ax
-tags: animation,pulse,pulse-scale
-contributors: alanb4rt
----
-
-```css
-.pulse {
-  animation: pulse 1s ease-in-out infinite alternate;
-}
-
-@keyframes pulse {
-  from {
-    opacity: 0.5;
-    transform: scale(1);
-  }
-  to {
-    opacity: 1;
-    transform: scale(1.05);
-  }
-}
-```
diff --git a/snippets/css/animations/shake-animation.md b/snippets/css/animations/shake-animation.md
deleted file mode 100644
index 01f78088..00000000
--- a/snippets/css/animations/shake-animation.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Shake Animation
-description: Adds a shake animation ( commonly used to mark invalid fields )
-author: AlsoKnownAs-Ax
-tags: shake,shake-horizontal
----
-
-```css
-.shake {
-    animation: shake .5s ease-in-out;
-}
-
-@keyframes shake {
-  0%, 100% {
-    transform: translateX(0);
-  }
-  25% {
-    transform: translateX(-10px);
-  }
-  50% {
-    transform: translateX(10px);
-  }
-  75% {
-    transform: translateX(-10px);
-  }
-}
-```
diff --git a/snippets/css/animations/slide-in-animation.md b/snippets/css/animations/slide-in-animation.md
deleted file mode 100644
index 02dd5a2a..00000000
--- a/snippets/css/animations/slide-in-animation.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Slide-in Animation
-description: Adds a slide-in from the right side of the screen
-author: AlsoKnownAs-Ax
-tags: animation,slide-in,slide-right
----
-
-```css
-.slide-in {
-    animation: slide-in 1s ease-in-out;
-}
-
-@keyframes slide-in {
-    from {
-        scale: 300% 1;
-        translate: 150vw 0;
-    }
-
-    to {
-        scale: 100% 1;
-        translate: 0 0;
-    }
-}
-```
diff --git a/snippets/css/animations/typewriter-animation.md b/snippets/css/animations/typewriter-animation.md
deleted file mode 100644
index b8e0ad11..00000000
--- a/snippets/css/animations/typewriter-animation.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: Typewriter Animation
-description: Adds a typewriter animation + blinking cursor
-author: AlsoKnownAs-Ax
-tags: blinking,typewriter
----
-
-```html
-    <div class="typewriter">
-      <div>
-          <p>Typerwriter Animation</p>
-      </div>
-    </div>
-```
-
-```css
-    .typewriter{
-        display: flex;
-        justify-content: center;
-    }
-
-    .typewriter p {
-        overflow: hidden;
-        font-size: 1.5rem;
-        font-family: monospace;
-        border-right: 1px solid;
-        margin-inline: auto;
-        white-space: nowrap;
-        /* The cursor will inherit the text's color by default */
-        /* border-color: red */                
-        /* Steps: number of chars (better to set directly in js)*/
-        animation: typing 3s steps(21) forwards,
-        blink 1s step-end infinite;
-    }
-
-    @keyframes typing{
-        from{
-            width: 0%
-        }
-        to{
-            width: 100%
-        }
-    }
-
-    @keyframes blink{
-        50%{
-            border-color: transparent;
-        }
-    }
-```
diff --git a/snippets/css/buttons/3d-button-effect.md b/snippets/css/buttons/3d-button-effect.md
deleted file mode 100644
index 324b787b..00000000
--- a/snippets/css/buttons/3d-button-effect.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: 3D Button Effect
-description: Adds a 3D effect to a button when clicked.
-author: technoph1le
-tags: button,3D,effect
----
-
-```css
-.button {
-  background-color: #28a745;
-  color: white;
-  padding: 10px 20px;
-  border: none;
-  border-radius: 5px;
-  box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
-  transition: transform 0.1s;
-}
-
-.button:active {
-  transform: translateY(2px);
-  box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1);
-}
-```
diff --git a/snippets/css/buttons/button-hover-effect.md b/snippets/css/buttons/button-hover-effect.md
deleted file mode 100644
index b0788178..00000000
--- a/snippets/css/buttons/button-hover-effect.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Button Hover Effect
-description: Creates a hover effect with a color transition.
-author: technoph1le
-tags: button,hover,transition
----
-
-```css
-.button {
-  background-color: #007bff;
-  color: white;
-  padding: 10px 20px;
-  border: none;
-  border-radius: 5px;
-  cursor: pointer;
-  transition: background-color 0.3s ease;
-}
-
-.button:hover {
-  background-color: #0056b3;
-}
-```
diff --git a/snippets/css/buttons/macos-button.md b/snippets/css/buttons/macos-button.md
deleted file mode 100644
index 2040baa8..00000000
--- a/snippets/css/buttons/macos-button.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: MacOS Button
-description: A macOS-like button style, with hover and shading effects.
-author: e3nviction
-tags: button,macos,hover,transition
----
-
-```css
-.button {
- font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,;
- background: #0a85ff;
- color: #fff;
- padding: 8px 12px;
- border: none;
- margin: 4px;
- border-radius: 10px;
- cursor: pointer;
- box-shadow: inset 0 1px 1px #fff2, 0px 2px 3px -2px rgba(0, 0, 0, 0.3) !important; /*This is really performance heavy*/
- font-size: 14px;
- display: flex;
- align-items: center;
- justify-content: center;
- text-decoration: none;
- transition: all 150ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
-}
-.button:hover {
- background: #0974ee;
- color: #fff
-}
-```
diff --git a/snippets/css/effects/blur-background.md b/snippets/css/effects/blur-background.md
deleted file mode 100644
index 1730d226..00000000
--- a/snippets/css/effects/blur-background.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Blur Background
-description: Applies a blur effect to the background of an element.
-author: technoph1le
-tags: blur,background,effects
----
-
-```css
-.blur-background {
-  backdrop-filter: blur(10px);
-  background: rgba(255, 255, 255, 0.5);
-}
-```
diff --git a/snippets/css/effects/hover-glow-effect.md b/snippets/css/effects/hover-glow-effect.md
deleted file mode 100644
index e05aec0e..00000000
--- a/snippets/css/effects/hover-glow-effect.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Hover Glow Effect
-description: Adds a glowing effect on hover.
-author: technoph1le
-tags: hover,glow,effects
----
-
-```css
-.glow {
-  background-color: #f39c12;
-  padding: 10px 20px;
-  border-radius: 5px;
-  transition: box-shadow 0.3s ease;
-}
-
-.glow:hover {
-  box-shadow: 0 0 15px rgba(243, 156, 18, 0.8);
-}
-```
diff --git a/snippets/css/effects/hover-to-reveal-color.md b/snippets/css/effects/hover-to-reveal-color.md
deleted file mode 100644
index c284ea3a..00000000
--- a/snippets/css/effects/hover-to-reveal-color.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Hover to Reveal Color
-description: A card with an image that transitions from grayscale to full color on hover.
-author: Haider-Mukhtar
-tags: hover,image,effects
----
-
-```css
-.card {
-  height: 300px;
-  width: 200px;
-  border-radius: 5px;
-  overflow: hidden;
-}
-
-.card img{
-  height: 100%;
-  width: 100%;
-  object-fit: cover;
-  filter: grayscale(100%);
-  transition: all 0.3s;
-  transition-duration: 200ms;
-  cursor: pointer;
-}
-
-.card:hover img {
-  filter: grayscale(0%);
-  scale: 1.05;
-}
-```
diff --git a/snippets/css/effects/rgb-border-color-animation.md b/snippets/css/effects/rgb-border-color-animation.md
deleted file mode 100644
index d9fd626a..00000000
--- a/snippets/css/effects/rgb-border-color-animation.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: RGB Border Color Animation
-description: changes border of an Element to rgb onhover (Can be changed)'
-author: Brianali-codes
-tags: animation,effects,borders
----
-
-```css
-.yourElement {
-    /* Your Elements styles go here*/
-    border-style: solid;
-    border-radius: 10px;
-    color: rgb(0, 0, 0);
-
-}
-.yourElement:hover {
-
-    animation: change-color;
-    animation-duration: 0.5s;         /* you can alter the duration of the animation here. */
-    animation-iteration-count: infinite;         /* Choose to play animation infinitely or once on hover. */
-}
-
-@keyframes change-color {
-    0% {
-        border-color: red;
-    }
-
-    50% {
-        border-color: green;
-    }
-
-    100% {
-        border-color: blue;
-    }
-}
-
-
-```
diff --git a/snippets/css/icon.svg b/snippets/css/icon.svg
deleted file mode 100644
index c981c7ac..00000000
--- a/snippets/css/icon.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 1000 1000" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="css-logo-title css-logo-description">
-<title id="css-logo-title">CSS Logo Square</title>
-<desc id="css-logo-description">A purple square with the letters CSS inside in white</desc>
-<path id="bg" fill="#639" d="M0,0H1000V1000H0Z" />
-<path id="fg" fill="#fff" d="m358.1,920c-64.23-.06-103.86-36.23-103.1-102.79,0,0,0-168.39,0-168.39,0-33.74,9.88-59.4,29.64-76.96,35.49-34.19,117.83-36.27,152.59.52,21.42,18.89,29.5,57.48,27.58,93.49h-73.72c.56-14.15-.19-35.58-8.51-43.65-10.81-14.63-39.36-12.91-46.91,2.32-4.64,8.26-6.96,20.49-6.96,36.67v146.18c0,30.65,10.65,46.15,31.96,46.49,9.96,0,17.53-3.62,22.68-10.85,7.19-8.58,8.31-27.58,7.73-41.32h73.72c5.04,70.07-36.32,119.16-106.71,118.29Zm234.04,0c-71.17.98-103.01-49.66-101.04-118.29h69.59c-1.93,29.92,8.35,57.17,32.99,55.27,10.99,0,18.73-3.44,23.2-10.33,8.5-12.59,10.09-48.95-2.06-63.02-8.49-13.55-39.03-25.51-55.16-33.57-23.03-11.02-39.61-24.1-49.75-39.26-22.87-33.64-20.75-107.48,11.34-137.4,31.18-36.92,112.61-38.62,143.82-.77,19.25,19.51,27.66,57.9,26.03,93.23h-67.02c.57-14.52-.8-37.95-6.44-46.49-3.95-7.23-11.43-10.85-22.42-10.85-19.59,0-29.38,11.71-29.38,35.12.21,24.86,9.9,35.06,32.48,45.45,29.24,11.36,66.42,30.76,79.9,54.24,40.2,71.54,12.62,180.82-86.09,176.65Zm224.76,0c-71.17.98-103.01-49.66-101.04-118.29h69.59c-1.93,29.92,8.35,57.17,32.99,55.27,10.99,0,18.73-3.44,23.2-10.33,8.5-12.59,10.09-48.95-2.06-63.02-8.49-13.55-39.03-25.51-55.16-33.57-23.03-11.02-39.61-24.1-49.75-39.26-22.87-33.64-20.75-107.48,11.34-137.4,31.18-36.92,112.61-38.62,143.82-.77,19.25,19.51,27.66,57.9,26.03,93.23h-67.02c.57-14.52-.8-37.95-6.44-46.49-3.95-7.23-11.43-10.85-22.42-10.85-19.59,0-29.38,11.71-29.38,35.12.21,24.86,9.9,35.06,32.48,45.45,29.24,11.36,66.42,30.76,79.9,54.24,40.2,71.54,12.62,180.82-86.09,176.65Z" />
-</svg>
\ No newline at end of file
diff --git a/snippets/css/layouts/css-reset.md b/snippets/css/layouts/css-reset.md
deleted file mode 100644
index 69b7cb37..00000000
--- a/snippets/css/layouts/css-reset.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: CSS Reset
-description: Resets some default browser styles, ensuring consistency across browsers.
-author: AmeerMoustafa
-tags: reset,browser,layout
----
-
-```css
-* {
-  margin: 0;
-  padding: 0;
-  box-sizing: border-box
-}
-```
diff --git a/snippets/css/layouts/equal-width-columns.md b/snippets/css/layouts/equal-width-columns.md
deleted file mode 100644
index e1cae2a9..00000000
--- a/snippets/css/layouts/equal-width-columns.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Equal-Width Columns
-description: Creates columns with equal widths using flexbox.
-author: technoph1le
-tags: flexbox,columns,layout
----
-
-```css
-.columns {
-  display: flex;
-  justify-content: space-between;
-}
-
-.column {
-  flex: 1;
-  margin: 0 10px;
-}
-```
diff --git a/snippets/css/layouts/grid-layout.md b/snippets/css/layouts/grid-layout.md
deleted file mode 100644
index 56595e2c..00000000
--- a/snippets/css/layouts/grid-layout.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Grid layout
-description: Equal sized items in a responsive grid
-author: xshubhamg
-contributors: tryoxiss
-tags: layout,grid
----
-
-```css
-.grid-container {
-  display: grid;
-  grid-template-columns: repeat(auto-fit, minmax(min(250px, 100%), 1fr));
-/* Explanation:
-- `auto-fit`: Automatically fits as many columns as possible within the container.
-- `minmax(min(250px, 100%), 1fr)`: Defines a minimum column size of 250px and a maximum size of 1fr (fraction of available space). However, that minimum column size is allowed to shrink to fit all avalible space if the space is otherwise less than the minimum.
-  - NOTE: the `min(x, 100%)` trick does not do much for very small sizes like 250px, but it will help massively if you increase the min column size yourself.
-*/
-}
-```
diff --git a/snippets/css/layouts/responsive-design.md b/snippets/css/layouts/responsive-design.md
deleted file mode 100644
index 95d5f028..00000000
--- a/snippets/css/layouts/responsive-design.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-title: Responsive Design
-description: The different responsive breakpoints.
-author: kruimol
-tags: responsive,media queries
----
-
-```css
-/* Phone */
-.element {
-  margin: 0 10%
-}
-
-/* Tablet */
-@media (min-width: 640px) {
-  .element {
-    margin: 0 20%
-  }
-}
-
-/* Desktop base */
-@media (min-width: 768px) {
-  .element {
-    margin: 0 30%
-  }
-}
-
-/* Desktop large */
-@media (min-width: 1024px) {
-  .element {
-    margin: 0 40%
-  }
-}
-
-/* Desktop extra large */
-@media (min-width: 1280px) {
-  .element {
-    margin: 0 60%
-  }
-}
-
-/* Desktop bige */
-@media (min-width: 1536px) {
-  .element {
-    margin: 0 80%
-  }
-}
-```
diff --git a/snippets/css/layouts/sticky-footer.md b/snippets/css/layouts/sticky-footer.md
deleted file mode 100644
index 18486392..00000000
--- a/snippets/css/layouts/sticky-footer.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Sticky Footer
-description: Ensures the footer always stays at the bottom of the page.
-author: technoph1le
-tags: layout,footer,sticky
----
-
-```css
-body {
-  display: flex;
-  flex-direction: column;
-  min-height: 100vh;
-}
-
-footer {
-  margin-top: auto;
-}
-```
diff --git a/snippets/css/typography/letter-spacing.md b/snippets/css/typography/letter-spacing.md
deleted file mode 100644
index dff6a7bc..00000000
--- a/snippets/css/typography/letter-spacing.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Letter Spacing
-description: Adds space between letters for better readability.
-author: technoph1le
-tags: typography,spacing
----
-
-```css
-p {
-  letter-spacing: 0.05em;
-}
-```
diff --git a/snippets/css/typography/responsive-font-sizing.md b/snippets/css/typography/responsive-font-sizing.md
deleted file mode 100644
index 19880305..00000000
--- a/snippets/css/typography/responsive-font-sizing.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Responsive Font Sizing
-description: Adjusts font size based on viewport width.
-author: technoph1le
-tags: font,responsive,typography
----
-
-```css
-h1 {
-  font-size: calc(1.5rem + 2vw);
-}
-```
diff --git a/snippets/haskell/array-manipulation/binary-search.md b/snippets/haskell/array-manipulation/binary-search.md
deleted file mode 100644
index 0e6a2e9f..00000000
--- a/snippets/haskell/array-manipulation/binary-search.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Binary Search
-description: Searches for an element in a sorted array using binary search.
-author: ACR1209
-tags: array,binary-search,search
----
-
-```hs
-binarySearch :: Ord a => a -> [a] -> Maybe Int
-binarySearch _ [] = Nothing
-binarySearch target xs = go 0 (length xs - 1)
-  where
-    go low high
-        | low > high = Nothing
-        | midElem < target = go (mid + 1) high
-        | midElem > target = go low (mid - 1)
-        | otherwise = Just mid
-      where
-        mid = (low + high) `div` 2
-        midElem = xs !! mid
-
--- Usage:
-main :: IO ()
-main = do
-    let array = [1, 2, 3, 4, 5]
-    print $ binarySearch 3 array -- Output: Just 2
-    print $ binarySearch 6 array -- Output: Nothing
-```
\ No newline at end of file
diff --git a/snippets/haskell/array-manipulation/chunk-array.md b/snippets/haskell/array-manipulation/chunk-array.md
deleted file mode 100644
index 006727fa..00000000
--- a/snippets/haskell/array-manipulation/chunk-array.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Chunk Array
-description: Splits an array into chunks of a specified size.
-author: ACR1209
-tags: array,chunk,utility
----
-
-```hs
-chunkArray :: Int -> [a] -> [[a]]
-chunkArray _ [] = []
-chunkArray n xs = take n xs : chunkArray n (drop n xs)
-
--- Usage:
-main :: IO ()
-main = do
-    let array = [1, 2, 3, 4, 5, 6]
-    print $ chunkArray 2 array -- Output: [[1, 2], [3, 4], [5, 6]]
-```
\ No newline at end of file
diff --git a/snippets/haskell/array-manipulation/matrix-transpose.md b/snippets/haskell/array-manipulation/matrix-transpose.md
deleted file mode 100644
index 38d81d37..00000000
--- a/snippets/haskell/array-manipulation/matrix-transpose.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Matrix Transpose
-description: Transposes a 2D matrix.
-author: ACR1209
-tags: array,matrix,transpose
----
-
-```hs
-transposeMatrix :: [[a]] -> [[a]]
-transposeMatrix [] = []
-transposeMatrix ([]:_) = []
-transposeMatrix xs = map head xs : transposeMatrix (map tail xs)
-
--- Usage:
-main :: IO ()
-main = do
-    let matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
-    print $ transposeMatrix matrix -- Output: [[1,4,7],[2,5,8],[3,6,9]]
-```
\ No newline at end of file
diff --git a/snippets/haskell/basics/hello-world.md b/snippets/haskell/basics/hello-world.md
deleted file mode 100644
index 044d5671..00000000
--- a/snippets/haskell/basics/hello-world.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: ACR1209
-tags: printing,hello-world,utility
----
-
-```haskell
-putStrLn "Hello, World!"
-```
diff --git a/snippets/haskell/file-handling/find-files-in-directory-by-type.md b/snippets/haskell/file-handling/find-files-in-directory-by-type.md
deleted file mode 100644
index 58a0dab4..00000000
--- a/snippets/haskell/file-handling/find-files-in-directory-by-type.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Find Files in Directory by Type
-description: Finds all files in a directory with a specific extension.
-author: ACR1209
-tags: file,search,extension,filesystem
----
-
-```hs
-import System.Directory (listDirectory)
-import System.FilePath (takeExtension)
-
-findFilesByExtension :: FilePath -> String -> IO [FilePath]
-findFilesByExtension dir ext = do
-    files <- listDirectory dir
-    return $ filter (\f -> takeExtension f == ext) files
-
--- Usage:
-main :: IO ()
-main = do
-    let directory = "."
-    let ext = ".txt"
-    files <- findFilesByExtension directory ext
-    mapM_ putStrLn files -- Output: list of txt files on the current directory
-```
\ No newline at end of file
diff --git a/snippets/haskell/file-handling/read-file-in-chunks.md b/snippets/haskell/file-handling/read-file-in-chunks.md
deleted file mode 100644
index ca5c3868..00000000
--- a/snippets/haskell/file-handling/read-file-in-chunks.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Read File in Chunks
-description: Reads a file in chunks grouped by lines.
-author: ACR1209
-tags: file,read,chunks,utility
----
-
-```hs
-import System.IO (openFile, IOMode(ReadMode), hGetContents)
-import Data.List (unfoldr)
-
-readFileInChunks :: FilePath -> Int -> IO [[String]]
-readFileInChunks filePath chunkSize = do
-    handle <- openFile filePath ReadMode
-    contents <- hGetContents handle
-    let linesList = lines contents
-    return $ go linesList
-  where
-    go [] = []
-    go xs = take chunkSize xs : go (drop chunkSize xs)
-
--- Usage:
-main :: IO ()
-main = do
-    let file = "example.txt"
-    let chunkSize = 3 -- Number of lines per chunk
-    chunks <- readFileInChunks file chunkSize
-    mapM_ (putStrLn . unlines) chunks
-
-```
\ No newline at end of file
diff --git a/snippets/haskell/icon.svg b/snippets/haskell/icon.svg
deleted file mode 100644
index 8163876f..00000000
--- a/snippets/haskell/icon.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 12" width="50" height="50">
-		<path fill="#453a62" d="M 0 12 L 4 6 L 0 0 L 3 0 L 7 6 L 3 12"/>
-		<path fill="#5e5086" d="M 4 12 L 8 6 L 4 0 L 7 0 L 15 12 L 12 12 L 9.5 8.25 L 7 12"/>
-		<path fill="#8f4e8b" d="M 13.66 8.5 L 12.333 6.5 L 17 6.5 L 17 8.5 M 11.666 5.5 L 10.333 3.5 L 17 3.5 L 17 5.5"/>
-</svg>
\ No newline at end of file
diff --git a/snippets/haskell/monads/either-monad-for-error-handling.md b/snippets/haskell/monads/either-monad-for-error-handling.md
deleted file mode 100644
index bf4c107d..00000000
--- a/snippets/haskell/monads/either-monad-for-error-handling.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Either Monad for Error Handling
-description: Using the Either monad to handle errors in a computation.
-author: ACR1209
-tags: monads, either, error handling
----
-
-```hs
-safeDiv :: Int -> Int -> Either String Int
-safeDiv _ 0 = Left "Division by zero error"
-safeDiv x y = Right (x `div` y)
-
--- Usage:
-main :: IO ()
-main = do
-    let result = do
-            a <- safeDiv 10 2
-            b <- safeDiv a 0  -- This will trigger an error
-            return b
-    print result  -- Output: Left "Division by zero error"
-```
\ No newline at end of file
diff --git a/snippets/haskell/monads/maybe-monad.md b/snippets/haskell/monads/maybe-monad.md
deleted file mode 100644
index b452f70d..00000000
--- a/snippets/haskell/monads/maybe-monad.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Maybe Monad
-description: Using the Maybe monad to handle computations that might fail.
-author: ACR1209
-tags: monads, maybe
----
-
-```hs
-safeDiv :: Int -> Int -> Maybe Int
-safeDiv _ 0 = Nothing
-safeDiv x y = Just (x `div` y)
-
--- Usage:
-main :: IO ()
-main = do
-    let result = do
-            a <- safeDiv 10 2
-            b <- safeDiv a 2
-            return b
-    print result  -- Output: Just 2
-```
\ No newline at end of file
diff --git a/snippets/haskell/monads/state-monad.md b/snippets/haskell/monads/state-monad.md
deleted file mode 100644
index baa09f14..00000000
--- a/snippets/haskell/monads/state-monad.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: State Monad
-description: Managing mutable state using the State monad.
-author: ACR1209
-tags: monads, state, state-management
----
-
-```hs
-import Control.Monad.State
-
-increment :: State Int Int
-increment = do
-    count <- get
-    put (count + 1)
-    return count
-
--- Usage:
-main :: IO ()
-main = do
-    let (res1, intermediateState) = runState increment 0
-    print res1      -- Output: 0
-    let (result, finalState) = runState increment intermediateState
-    print result    -- Output: 1
-    print finalState  -- Output: 2
-
-```
\ No newline at end of file
diff --git a/snippets/haskell/monads/writer-monad.md b/snippets/haskell/monads/writer-monad.md
deleted file mode 100644
index 089e2b17..00000000
--- a/snippets/haskell/monads/writer-monad.md
+++ /dev/null
@@ -1,24 +0,0 @@
---- 
-title: Writer Monad
-description: Using the Writer monad to accumulate logs or other outputs alongside a computation.
-author: ACR1209
-tags: monads, writer, logs
----
-
-```hs
-import Control.Monad.Writer
-
-addAndLog :: Int -> Int -> Writer [String] Int
-addAndLog x y = do
-    tell ["Adding " ++ show x ++ " and " ++ show y]
-    return (x + y)
-
--- Usage:
-main :: IO ()
-main = do
-    let (result, logs) = runWriter $ do
-            res1 <- addAndLog 3 5
-            addAndLog res1 1
-    print result  -- Output: 9
-    print logs  -- Output: ["Adding 3 and 5", "Adding 8 and 1"]
-```
\ No newline at end of file
diff --git a/snippets/haskell/string-manipulation/camelcase-to-snake-case.md b/snippets/haskell/string-manipulation/camelcase-to-snake-case.md
deleted file mode 100644
index 11c0fb34..00000000
--- a/snippets/haskell/string-manipulation/camelcase-to-snake-case.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: CamelCase to snake_case
-description: Converts a Camel Case string to Snake case.
-author: ACR1209
-tags: string,convert,camel-case,snake-case,utility
----
-
-```hs
-import Data.Char (isUpper, toLower)
-
-camelToSnake :: String -> String
-camelToSnake [] = []
-camelToSnake (x:xs)
-    | isUpper x = '_' : toLower x : camelToSnake xs
-    | otherwise = x : camelToSnake xs
-
--- Usage:
-main :: IO ()
-main = do
-    let camelCase = "camelCaseToSnakeCase"
-    print $ camelToSnake camelCase -- Output: "camel_case_to_snake_case"
-```
\ No newline at end of file
diff --git a/snippets/haskell/string-manipulation/capitalize-words.md b/snippets/haskell/string-manipulation/capitalize-words.md
deleted file mode 100644
index 613bf1d5..00000000
--- a/snippets/haskell/string-manipulation/capitalize-words.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Capitalize Words
-description: Capitalizes the first letter of each word in a string.
-author: ACR1209
-tags: string,capitalize,words
----
-
-```hs
-import Data.Char (toUpper)
-
-capitalizeWords :: String -> String
-capitalizeWords = unwords . map capitalize . words
-  where
-    capitalize []     = []
-    capitalize (x:xs) = toUpper x : xs
-
--- Usage:
-main :: IO ()
-main = do
-    let sentence = "haskell is awesome"
-    print $ capitalizeWords sentence -- Output: "Haskell Is Awesome"
-```
\ No newline at end of file
diff --git a/snippets/haskell/string-manipulation/count-word-occurrences-in-string.md b/snippets/haskell/string-manipulation/count-word-occurrences-in-string.md
deleted file mode 100644
index eacf7249..00000000
--- a/snippets/haskell/string-manipulation/count-word-occurrences-in-string.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Count Word Occurrences in String
-description: Counts the occurrences of each word in a given string.
-author: ACR1209
-tags: string,occurrences,word-count
----
-
-```hs
-import Data.List (group, sort)
-
-countWordOccurrences :: String -> [(String, Int)]
-countWordOccurrences = map (\(w:ws) -> (w, length (w:ws))) . group . sort . words
-
--- Usage:
-main :: IO ()
-main = do
-    let text = "haskell is awesome and haskell is fun"
-    print $ countWordOccurrences text -- Output: [("and",1),("awesome",1),("fun",1),("haskell",2),("is",2)]
-```
\ No newline at end of file
diff --git a/snippets/haskell/string-manipulation/remove-punctuation.md b/snippets/haskell/string-manipulation/remove-punctuation.md
deleted file mode 100644
index b2e3d4ff..00000000
--- a/snippets/haskell/string-manipulation/remove-punctuation.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Remove Punctuation
-description: Removes all punctuation from a given string.
-author: ACR1209
-tags: string,punctuation,remove
----
-
-```hs
-import Data.Char (isPunctuation)
-
-removePunctuation :: String -> String
-removePunctuation = filter (not . isPunctuation)
-
--- Usage:
-main :: IO ()
-main = do
-    let text = "Hello, Haskell! How's it going?"
-    print $ removePunctuation text -- Output: "Hello Haskell Hows it going"
-``` 
\ No newline at end of file
diff --git a/snippets/haskell/string-manipulation/snake-case-to-camelcase.md b/snippets/haskell/string-manipulation/snake-case-to-camelcase.md
deleted file mode 100644
index 6086ddf9..00000000
--- a/snippets/haskell/string-manipulation/snake-case-to-camelcase.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Snake_Case to CamelCase
-description: Converts a Snake Case string to Camel Case.
-author: ACR1209
-tags: string,convert,snake-case,camel-case,utilty
----
-
-```hs
-import Data.Char (toUpper)
-
-snakeToCamel :: String -> String
-snakeToCamel [] = []
-snakeToCamel ('_':x:xs) = toUpper x : snakeToCamel xs
-snakeToCamel (x:xs) = x : snakeToCamel xs
-
--- Usage:
-main :: IO ()
-main = do
-    let snakeCase = "snake_case_to_camel_case"
-    print $ snakeToCamel snakeCase -- Output: "snakeCaseToCamelCase"
-```
\ No newline at end of file
diff --git a/snippets/haskell/string-manipulation/truncate-string.md b/snippets/haskell/string-manipulation/truncate-string.md
deleted file mode 100644
index bf4aebff..00000000
--- a/snippets/haskell/string-manipulation/truncate-string.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Truncate String
-description: Truncates a string to a specified length, optionally adding an ellipsis.
-author: ACR1209
-tags: string,truncate,utility
----
-
-```hs
-truncateString :: Int -> String -> String
-truncateString maxLength str
-    | length str <= maxLength = str
-    | otherwise = take (maxLength - 3) str ++ "..."
-
--- Usage:
-main :: IO ()
-main = do
-    let longString = "Haskell is a powerful functional programming language."
-    print $ truncateString 20 longString -- Output: "Haskell is a powe..."
-    print $ truncateString 54 longString -- Output: "Haskell is a powerful functional programming language."
-```
\ No newline at end of file
diff --git a/snippets/html/basic-layouts/grid-layout-with-navigation.md b/snippets/html/basic-layouts/grid-layout-with-navigation.md
deleted file mode 100644
index fc23914e..00000000
--- a/snippets/html/basic-layouts/grid-layout-with-navigation.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: Grid Layout with Navigation
-description: Full-height grid layout with header navigation using nesting syntax.
-author: GreenMan36
-tags: css,layout,sticky,grid,full-height
----
-
-```html
-<!DOCTYPE html>
-<html>
-  <head>
-    <style>
-      body {
-        margin: 0;
-        min-height: 100vh;
-        display: grid;
-        grid-template-rows: auto 1fr auto;
-        background: red; /* Shouldn't be visible */
-      }
-
-      .header {
-        background: #3b82f6;
-        padding: 1rem;
-        display: flex;
-        & .menu {
-          margin-left: auto;
-        }
-        & .menu ul {
-          margin-left: auto;
-          display: flex;
-          gap: 1rem;
-        }
-      }
-
-      .main {
-        background: #f3f4f6;
-        padding: 1rem;
-      }
-
-      .footer {
-        background: #1f2937;
-        padding: 1rem;
-      }
-    </style>
-  </head>
-  <body>
-    <div class="header">
-      Header
-      <nav class="menu">
-        <ul>
-          <li><a href="#">Home</a></li>
-          <li><a href="#">About</a></li>
-          <li><a href="#">Contact</a></li>
-        </ul>
-      </nav>
-    </div>
-    <div class="main">Main Content</div>
-    <div class="footer">Footer</div>
-  </body>
-</html>
-```
diff --git a/snippets/html/basic-layouts/sticky-header-footer-layout.md b/snippets/html/basic-layouts/sticky-header-footer-layout.md
deleted file mode 100644
index 56aae47f..00000000
--- a/snippets/html/basic-layouts/sticky-header-footer-layout.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Sticky Header-Footer Layout
-description: Full-height layout with sticky header and footer, using modern viewport units and flexbox.
-author: GreenMan36
-tags: css,layout,sticky,flexbox,viewport
----
-
-```html
-<!DOCTYPE html>
-<html style="margin: 0">
-  <head>
-    <style type="text/css">
-      body {
-        margin: 0;
-        display: flex;
-        flex-direction: column;
-        min-height: 100svh; /* Smallest viewport height */
-        min-height: 100vh;  /* Standard viewport height */
-        min-height: 100dvh; /* Dynamic viewport height */
-        min-height: 100lvh; /* Largest viewport height */
-        background-color: red;
-      }
-
-      .header {
-        position: sticky;
-        top: 0;
-        left: 0;
-        right: 0;
-        background-color: blue;
-      }
-
-      .body {
-        flex-grow: 1;
-        background-color: whitesmoke;
-      }
-
-      .footer {
-        position: sticky;
-        bottom: 0;
-        left: 0;
-        right: 0;
-        background-color: blue;
-      }
-    </style>
-  <head>
-  <body>
-    <div class="header">header</div>
-    <div class="body">body/content</div>
-    <div class="footer">footer</div>
-  </body>
-</html>
-```
diff --git a/snippets/html/icon.svg b/snippets/html/icon.svg
deleted file mode 100644
index 59345ce4..00000000
--- a/snippets/html/icon.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="html5-logo-title html5-logo-description">
-<title id="html5-logo-title">HTML5 Logo</title>
-<desc id="html5-logo-description">A two tone orange shield with a white number 5 in it</desc>
-<path fill="#E34F26" d="M71,460 L30,0 481,0 440,460 255,512"/>
-<path fill="#EF652A" d="M256,472 L405,431 440,37 256,37"/>
-<path fill="#EBEBEB" d="M256,208 L181,208 176,150 256,150 256,94 255,94 114,94 115,109 129,265 256,265zM256,355 L255,355 192,338 188,293 158,293 132,293 139,382 255,414 256,414z"/>
-<path fill="#FFF" d="M255,208 L255,265 325,265 318,338 255,355 255,414 371,382 372,372 385,223 387,208 371,208zM255,94 L255,129 255,150 255,150 392,150 392,150 392,150 393,138 396,109 397,94z"/>
-</svg>
\ No newline at end of file
diff --git a/snippets/java/array-manipulation/remove-duplicates.md b/snippets/java/array-manipulation/remove-duplicates.md
deleted file mode 100644
index a6fc9ef8..00000000
--- a/snippets/java/array-manipulation/remove-duplicates.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Remove duplicates
-description: Removes duplicate elements from an list
-author: Mcbencrafter
-tags: list,duplicates,unique
----
-
-```java
-import java.util.List;
-import java.util.stream.Collectors;
-
-public static <T> List<T> removeDuplicates(List<T> list) {
-    return list.stream()
-        .distinct()
-        .collect(Collectors.toList());
-}
-
-// Usage:
-List<Integer> list = List.of(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);
-List<Integer> result = removeDuplicates(list);
-System.out.println("List with duplicates removed: " + result); // [1, 2, 3, 4, 5]
-```
\ No newline at end of file
diff --git a/snippets/java/array-manipulation/zip-two-lists.md b/snippets/java/array-manipulation/zip-two-lists.md
deleted file mode 100644
index 800d2ce9..00000000
--- a/snippets/java/array-manipulation/zip-two-lists.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Zip Two Lists
-description: Zips two lists into a list of paired elements, combining corresponding elements from both lists.
-author: davidanukam
-tags: lists,zip,stream-api,collections
----
-
-```java
-import java.util.*; // Importing utility classes for List and Arrays
-import java.util.stream.IntStream; // Importing IntStream for range and mapping
-import java.util.stream.Collectors; // Importing Collectors for collecting stream results
-
-public <A, B> List<List<Object>> zip(List<A> list1, List<B> list2) {
-    // Create pairs by iterating through the indices of both lists
-    return IntStream.range(0, Math.min(list1.size(), list2.size())) // Limit the range to the smaller list
-            .mapToObj(i -> Arrays.asList(list1.get(i), list2.get(i))) // Pair elements from both lists at index i
-            .collect(Collectors.toList()); // Collect the pairs into a List
-}
-
-// Usage:
-List<String> arr1 = Arrays.asList("a", "b", "c");
-List<Integer> arr2 = Arrays.asList(1, 2, 3);
-List<List<Object>> zipped = zip(arr1, arr2);
-
-System.out.println(zipped); // Output: [[a, 1], [b, 2], [c, 3]]
-```
diff --git a/snippets/java/basics/hello-world.md b/snippets/java/basics/hello-world.md
deleted file mode 100644
index 634b38eb..00000000
--- a/snippets/java/basics/hello-world.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Hello-World
-description: Prints Hello world in the console
-author: SarvariHarshitha
-tags: java, console, printing
----
-
-```java
-// This is the main class of the Java program
-public class Main {
-    // The main method is the entry point of the program
-    public static void main(String args[]) {
-        // This statement prints "Hello, World!" to the console
-        System.out.println("Hello, World!");
-    }
-}
-
-```
\ No newline at end of file
diff --git a/snippets/java/bit-manipulation/bit-counting.md b/snippets/java/bit-manipulation/bit-counting.md
deleted file mode 100644
index 8eeb2d2a..00000000
--- a/snippets/java/bit-manipulation/bit-counting.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Bit Counting
-description: Counts the set bits in the binary representation of an integer
-author: Mcbencrafter
-tags: math,number,bits,bit-counting
----
-
-```java
-public static int countBits(int number) {
-    int bits = 0;
-        
-    while (number > 0) {
-        bits += number & 1;
-        number >>= 1;
-    }
-
-    return bits;
-}
-
-// Usage:
-int number = 5;
-System.out.println(countBits(5)); // 2 (101)
-```
\ No newline at end of file
diff --git a/snippets/java/bit-manipulation/is-power-of-two.md b/snippets/java/bit-manipulation/is-power-of-two.md
deleted file mode 100644
index d71d26c4..00000000
--- a/snippets/java/bit-manipulation/is-power-of-two.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Is Power Of Two
-description: Checks if a number is a power of two
-author: Mcbencrafter
-tags: math,number,bit,power-of-two
----
-
-```java
-public static boolean isPowerOfTwo(int number) {
-    return (number > 0) && ((number & (number - 1)) == 0);
-}
-
-// Usage:
-int number = 16;
-System.out.println(isPowerOfTwo(number)); // true (2^4)
-```
diff --git a/snippets/java/date-time/date-time-formatting-american.md b/snippets/java/date-time/date-time-formatting-american.md
deleted file mode 100644
index 569d5457..00000000
--- a/snippets/java/date-time/date-time-formatting-american.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Date Time Formatting American
-description: Formats a timestamp to a human-readable date-time string in the format "MM/dd/yyyy hh:mm:ss a"
-author: Mcbencrafter
-tags: date,time,date-time,formatting,american
----
-
-```java
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.concurrent.TimeUnit;
-
-// using the system default time zone
-public static String formatDateTimeAmerican(long time, TimeUnit timeUnit) {
-    return formatDateTimeAmerican(time, timeUnit, ZoneId.systemDefault());
-}
-
-public static String formatDateTimeAmerican(long time, TimeUnit timeUnit, ZoneId timeZone) {
-    return DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss a")
-            .withZone(
-                timeZone != null ? timeZone : ZoneId.systemDefault()
-            )
-            .format(Instant.ofEpochSecond(
-                timeUnit.toSeconds(time)
-            ));
-}
-
-// Usage:
-System.out.println(formatDateTimeAmerican(1735689599, TimeUnit.SECONDS)); // "12/31/2024 | 11:59:59 PM" for GMT+0000
-System.out.println(formatDateTimeAmerican(1735689599, TimeUnit.SECONDS, ZoneId.of("GMT+0000"))); // "12/31/2024 | 11:59:59 PM"
-```
\ No newline at end of file
diff --git a/snippets/java/date-time/date-time-formatting-european.md b/snippets/java/date-time/date-time-formatting-european.md
deleted file mode 100644
index 5c966b6e..00000000
--- a/snippets/java/date-time/date-time-formatting-european.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Date Time Formatting European
-description: Formats a timestamp to a human-readable date-time string in the format "dd.MM.yyyy HH:mm:ss"
-author: Mcbencrafter
-tags: date,time,date-time,formatting,european
----
-
-```java
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.concurrent.TimeUnit;
-
-// using the system default time zone
-public static String formatDateTimeEuropean(long time, TimeUnit timeUnit) {
-    return formatDateTimeEuropean(time, timeUnit, ZoneId.systemDefault());
-}
-
-public static String formatDateTimeEuropean(long time, TimeUnit timeUnit, ZoneId timeZone) {
-    return DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
-            .withZone(
-                timeZone != null ? timeZone : ZoneId.systemDefault()
-            )
-            .format(Instant.ofEpochSecond(
-                    timeUnit.toSeconds(time)
-            ));
-}
-
-// Usage:
-System.out.println(formatDateTimeEuropean(1735689599, TimeUnit.SECONDS)); // "31.12.2024 | 23:59:59" for GMT+0000
-System.out.println(formatDateTimeEuropean(1735689599, TimeUnit.SECONDS, ZoneId.of("GMT+0000"))); // "31.12.2024 | 23:59:59"
-```
\ No newline at end of file
diff --git a/snippets/java/date-time/duration-formatting-hours-minutes-seconds.md b/snippets/java/date-time/duration-formatting-hours-minutes-seconds.md
deleted file mode 100644
index 76660b9f..00000000
--- a/snippets/java/date-time/duration-formatting-hours-minutes-seconds.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Duration Formatting Hours Minutes Seconds
-description: Converts a given time duration to a human-readable string in the format "hh:mm(:ss)"
-author: Mcbencrafter
-tags: time,formatting,hours,minutes,seconds
----
-
-```java
-import java.util.concurrent.TimeUnit;
-    
-public static String formatDurationToHoursMinutesAndSeconds(int time, TimeUnit timeUnit, boolean showSeconds) {
-    long totalSeconds = timeUnit.toSeconds(time);
-
-    if (totalSeconds < 0)
-        throw new IllegalArgumentException("Duration must be a non-negative value.");
-
-    // These variables can be directly used in the return statement,
-    // but are kept as separate variables here for better readability.
-    long hours = totalSeconds / 3600;
-    long minutes = (totalSeconds % 3600) / 60;
-    long seconds = totalSeconds % 60;
-
-    if (showSeconds) {
-        return String.format("%02d:%02d:%02d", hours, minutes, seconds);
-    } else {
-        return String.format("%02d:%02d", hours, minutes);
-    }
-}
-
-// Usage:
-System.out.println(formatDurationToHoursMinutesAndSeconds(3810, TimeUnit.SECONDS, true)); // "01:03:30"
-System.out.println(formatDurationToHoursMinutesAndSeconds(3810, TimeUnit.SECONDS, false)); // "01:03"
-```
\ No newline at end of file
diff --git a/snippets/java/date-time/duration-formatting-minutes-seconds.md b/snippets/java/date-time/duration-formatting-minutes-seconds.md
deleted file mode 100644
index 19175d19..00000000
--- a/snippets/java/date-time/duration-formatting-minutes-seconds.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Duration Formatting Minutes Seconds
-description: Converts a given time duration to a human-readable string in the format "mm:ss"
-author: Mcbencrafter
-tags: time,formatting,minutes,seconds
----
-
-```java
-import java.util.concurrent.TimeUnit;
-
-public static String formatDurationToMinutesAndSeconds(int time, TimeUnit timeUnit) {
-    long totalSeconds = timeUnit.toSeconds(time);
-
-    if (totalSeconds < 0)
-        throw new IllegalArgumentException("Duration must be a non-negative value.");
-
-    // These variables can be directly used in the return statement,
-    // but are kept here as separate variables for better readability.
-    long minutes = totalSeconds / 60;
-    long seconds = totalSeconds % 60;
-
-    return String.format("%02d:%02d", minutes, seconds);
-}
-
-// Usage:
-System.out.println(formatDurationToMinutesAndSeconds(120, TimeUnit.SECONDS)); // "02:00"
-System.out.println(formatDurationToMinutesAndSeconds(75, TimeUnit.SECONDS)); // "01:15"
-```
\ No newline at end of file
diff --git a/snippets/java/icon.svg b/snippets/java/icon.svg
deleted file mode 100644
index e51aae9c..00000000
--- a/snippets/java/icon.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 37.308594 39.429688 L 37.121094 39.429688 L 37.121094 39.324219 L 37.628906 39.324219 L 37.628906 39.429688 L 37.441406 39.429688 L 37.441406 39.953125 L 37.308594 39.953125 Z M 38.320312 39.457031 L 38.316406 39.457031 L 38.132812 39.953125 L 38.046875 39.953125 L 37.859375 39.457031 L 37.859375 39.953125 L 37.734375 39.953125 L 37.734375 39.324219 L 37.917969 39.324219 L 38.089844 39.769531 L 38.261719 39.324219 L 38.441406 39.324219 L 38.441406 39.953125 L 38.320312 39.953125 Z M 38.320312 39.457031 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 20.445312 26.523438 C 20.445312 26.523438 19.136719 27.285156 21.378906 27.542969 C 24.097656 27.851562 25.484375 27.808594 28.480469 27.242188 C 28.480469 27.242188 29.269531 27.734375 30.367188 28.164062 C 23.652344 31.039062 15.171875 27.996094 20.445312 26.523438 M 19.625 22.769531 C 19.625 22.769531 18.15625 23.855469 20.402344 24.089844 C 23.304688 24.386719 25.597656 24.410156 29.5625 23.648438 C 29.5625 23.648438 30.113281 24.203125 30.976562 24.507812 C 22.859375 26.882812 13.816406 24.695312 19.625 22.769531 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 26.542969 16.398438 C 28.195312 18.304688 26.109375 20.015625 26.109375 20.015625 C 26.109375 20.015625 30.308594 17.847656 28.378906 15.132812 C 26.578125 12.601562 25.195312 11.34375 32.675781 7.003906 C 32.675781 7.003906 20.933594 9.9375 26.542969 16.398438 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 35.421875 29.300781 C 35.421875 29.300781 36.390625 30.097656 34.355469 30.71875 C 30.476562 31.890625 18.222656 32.246094 14.820312 30.765625 C 13.597656 30.230469 15.890625 29.492188 16.613281 29.339844 C 17.367188 29.175781 17.796875 29.203125 17.796875 29.203125 C 16.433594 28.246094 9 31.085938 14.019531 31.902344 C 27.707031 34.121094 38.972656 30.902344 35.421875 29.300781 M 21.078125 18.878906 C 21.078125 18.878906 14.84375 20.359375 18.871094 20.894531 C 20.570312 21.125 23.957031 21.070312 27.113281 20.808594 C 29.695312 20.589844 32.285156 20.128906 32.285156 20.128906 C 32.285156 20.128906 31.375 20.515625 30.714844 20.964844 C 24.386719 22.628906 12.160156 21.855469 15.679688 20.152344 C 18.65625 18.714844 21.078125 18.878906 21.078125 18.878906 M 32.257812 25.128906 C 38.691406 21.785156 35.71875 18.570312 33.640625 19.003906 C 33.132812 19.109375 32.90625 19.203125 32.90625 19.203125 C 32.90625 19.203125 33.09375 18.90625 33.453125 18.777344 C 37.5625 17.332031 40.722656 23.035156 32.128906 25.296875 C 32.128906 25.296875 32.230469 25.207031 32.257812 25.128906 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 28.378906 0 C 28.378906 0 31.941406 3.566406 25 9.046875 C 19.429688 13.441406 23.730469 15.949219 24.996094 18.816406 C 21.746094 15.882812 19.363281 13.300781 20.960938 10.898438 C 23.308594 7.371094 29.816406 5.664062 28.378906 0 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.549021%,50.980395%,63.137257%);fill-opacity:1;" d="M 21.710938 34.1875 C 27.886719 34.582031 37.371094 33.96875 37.59375 31.046875 C 37.59375 31.046875 37.164062 32.152344 32.488281 33.035156 C 27.21875 34.027344 20.714844 33.910156 16.859375 33.273438 C 16.859375 33.273438 17.648438 33.925781 21.710938 34.1875 "/>
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(90.588236%,43.529412%,0%);fill-opacity:1;" d="M 20.695312 45.355469 C 20.113281 45.859375 19.5 46.144531 18.945312 46.144531 C 18.160156 46.144531 17.734375 45.671875 17.734375 44.914062 C 17.734375 44.09375 18.1875 43.492188 20.019531 43.492188 L 20.695312 43.492188 L 20.695312 45.355469 M 22.304688 47.167969 L 22.304688 41.554688 C 22.304688 40.117188 21.488281 39.171875 19.515625 39.171875 C 18.363281 39.171875 17.355469 39.457031 16.535156 39.820312 L 16.769531 40.8125 C 17.417969 40.578125 18.25 40.355469 19.070312 40.355469 C 20.207031 40.355469 20.695312 40.8125 20.695312 41.757812 L 20.695312 42.46875 L 20.128906 42.46875 C 17.371094 42.46875 16.125 43.539062 16.125 45.148438 C 16.125 46.539062 16.945312 47.328125 18.488281 47.328125 C 19.484375 47.328125 20.222656 46.917969 20.917969 46.316406 L 21.042969 47.167969 Z M 27.671875 47.167969 L 25.664062 47.167969 L 23.25 39.316406 L 25.003906 39.316406 L 26.5 44.140625 L 26.832031 45.589844 C 27.589844 43.492188 28.125 41.363281 28.394531 39.316406 L 30.097656 39.316406 C 29.640625 41.902344 28.820312 44.738281 27.671875 47.167969 M 35.363281 45.355469 C 34.777344 45.859375 34.160156 46.144531 33.609375 46.144531 C 32.824219 46.144531 32.394531 45.671875 32.394531 44.914062 C 32.394531 44.09375 32.851562 43.492188 34.683594 43.492188 L 35.363281 43.492188 L 35.363281 45.355469 M 36.96875 47.167969 L 36.96875 41.554688 C 36.96875 40.117188 36.148438 39.171875 34.179688 39.171875 C 33.027344 39.171875 32.019531 39.457031 31.199219 39.820312 L 31.433594 40.8125 C 32.082031 40.578125 32.917969 40.355469 33.738281 40.355469 C 34.871094 40.355469 35.363281 40.8125 35.363281 41.757812 L 35.363281 42.46875 L 34.792969 42.46875 C 32.03125 42.46875 30.789062 43.539062 30.789062 45.148438 C 30.789062 46.539062 31.609375 47.328125 33.152344 47.328125 C 34.148438 47.328125 34.886719 46.917969 35.582031 46.316406 L 35.707031 47.167969 Z M 14.359375 48.503906 C 13.902344 49.171875 13.164062 49.699219 12.351562 50 L 11.558594 49.066406 C 12.175781 48.75 12.703125 48.238281 12.949219 47.761719 C 13.164062 47.339844 13.25 46.792969 13.25 45.488281 L 13.25 36.523438 L 14.957031 36.523438 L 14.957031 45.363281 C 14.957031 47.109375 14.820312 47.816406 14.359375 48.503906 "/>
-</g>
-</svg>
diff --git a/snippets/java/math/checksum.md b/snippets/java/math/checksum.md
deleted file mode 100644
index adda949b..00000000
--- a/snippets/java/math/checksum.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Checksum
-description: Calculates the checksum of an int
-author: Mcbencrafter
-tags: math,number,checksum
----
-
-```java
-public static int checksum(int number) {
-    number = Math.abs(number);
-    int sum = 0;
-
-    while (number != 0) {
-        sum += number % 10;
-        number /= 10;
-    }
-
-    return sum;
-}
-
-// Usage:
-int number = 12345;
-System.out.println(checksum(number)); // 15 = 1+2+3+4+5
-```
\ No newline at end of file
diff --git a/snippets/java/math/factorial.md b/snippets/java/math/factorial.md
deleted file mode 100644
index a9f0ffab..00000000
--- a/snippets/java/math/factorial.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Factorial
-description: Computes the factorial of a given number
-author: Mcbencrafter
-tags: math,number,factorial
----
-
-```java
-import java.math.BigInteger;
-
-public static BigInteger factorial(int number) {
-    BigInteger result = BigInteger.ONE;
-
-    for (int currentNumber = 1; currentNumber <= number; currentNumber++) {
-        result = result.multiply(BigInteger.valueOf(currentNumber));
-    }
-
-    return result;
-}
-
-// Usage:
-int number = 6;
-System.out.println(factorial(number)); // 720 = 6*5*4*3*2
-```
diff --git a/snippets/java/math/fibonacci.md b/snippets/java/math/fibonacci.md
deleted file mode 100644
index 0f07aa96..00000000
--- a/snippets/java/math/fibonacci.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Fibonacci
-description: Calculates the nth fibonacci number
-author: Mcbencrafter
-tags: math,number,fibonacci
----
-
-```java
-public static int fibonacci(int number) {
-    if (number <= 1) 
-        return number;
-        
-    return fibonacci(number - 1) + fibonacci(number - 2);
-}
-
-// Usage:
-int number = 5;
-System.out.println(fibonacci(number)) // 3 (0, 1, 1, 2, 3)
-```
\ No newline at end of file
diff --git a/snippets/java/math/greatest-common-divisor.md b/snippets/java/math/greatest-common-divisor.md
deleted file mode 100644
index 8d777ee3..00000000
--- a/snippets/java/math/greatest-common-divisor.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Greatest Common Divisor
-description: Calculates the greatest common divisor (gcd) of two numbers
-author: Mcbencrafter
-tags: math,number,greatest-common-devisor,gcd,euclidean-algorithm
----
-
-```java
-public static int gcd(int number1, int number2) {
-    while (number2 != 0) {
-        int remainder = number2;
-        number2 = number1 % number2;
-        number1 = remainder;
-    }
-
-    return number1;
-}
-
-// Usage:
-int a = 16;
-int b = 12;
-System.out.println(gcd(a, b)); // 4
-```
\ No newline at end of file
diff --git a/snippets/java/math/least-common-multiple.md b/snippets/java/math/least-common-multiple.md
deleted file mode 100644
index 0ee1de99..00000000
--- a/snippets/java/math/least-common-multiple.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Least Common Multiple
-description: Calculates the least common multiple (lcm) of two numbers
-author: Mcbencrafter
-tags: math,number,least-common-multiple,lcm,euclidean-algorithm
----
-
-```java
-public static int lcm(int number1, int number2) {
-    int gcdNumber1 = number1;
-    int gcdNumber2 = number2;
-    
-    while (gcdNumber2 != 0) {
-        int remainder = gcdNumber2;
-        gcdNumber2 = gcdNumber1 % gcdNumber2;
-        gcdNumber1 = remainder;
-    }
-    
-    return (number1 / gcdNumber1) * number2;
-}
-
-// Usage:
-int a = 16;
-int b = 12;
-System.out.println(lcm(a, b)); // 48
-```
\ No newline at end of file
diff --git a/snippets/java/math/prime-check.md b/snippets/java/math/prime-check.md
deleted file mode 100644
index 121ee2a5..00000000
--- a/snippets/java/math/prime-check.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Prime Check
-description: Checks if a number is a prime
-author: Mcbencrafter
-tags: math,number,prime
----
-
-```java
-public static boolean isPrime(int number) {
-    if (number <= 1) 
-        return false;
-
-    if (number <= 3) 
-        return true;
-
-    boolean prime = true;
-    for (int divisor = 3; divisor < number; divisor++) {
-        if (number % divisor != 0)
-            continue;
-
-        prime = false;
-        break;
-    }
-
-    return prime;
-}
-
-// Usage:
-int number = 31;
-System.out.println(isPrime(number)); // true
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/ascii-to-string.md b/snippets/java/string-manipulation/ascii-to-string.md
deleted file mode 100644
index eb544572..00000000
--- a/snippets/java/string-manipulation/ascii-to-string.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Ascii To String
-description: Converts a list of ascii numbers into a string
-author: Mcbencrafter
-tags: string,ascii,encoding,decode,conversion
----
-
-```java
-import java.util.List;
-
-public static String asciiToString(List<Integer> asciiCodes) {
-    StringBuilder text = new StringBuilder();
-
-    for (int asciiCode : asciiCodes) {
-        text.append((char) asciiCode);
-    }
-
-    return text.toString();
-}
-
-// Usage:
-System.out.println(asciiToString(List.of(104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100))); // "hello world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/camelcase-to-snake-case.md b/snippets/java/string-manipulation/camelcase-to-snake-case.md
deleted file mode 100644
index 1814ab42..00000000
--- a/snippets/java/string-manipulation/camelcase-to-snake-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: camelCase to snake_case
-description: Converts a camelCase string into snake_case
-author: Mcbencrafter
-tags: string,conversion,camel-case,snake-case
----
-
-```java
-public static String camelToSnake(String camelCase) {
-    return camelCase.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase();
-}
-
-// Usage:
-System.out.println(camelToSnake("helloWorld")); // "hello_world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/capitalize-words.md b/snippets/java/string-manipulation/capitalize-words.md
deleted file mode 100644
index 360b2f00..00000000
--- a/snippets/java/string-manipulation/capitalize-words.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Capitalize Words
-description: Capitalizes the first letter of each word in a string
-author: Mcbencrafter
-tags: string,capitalize,words
----
-
-```java
-public static String capitalizeWords(String text) {
-    String[] words = text.split("(?<=\\S)(?=\\s+)|(?<=\\s+)(?=\\S)"); // this is needed to preserve spaces (text.split(" ") would remove multiple spaces)
-    StringBuilder capitalizedText = new StringBuilder();
-    
-    for (String word : words) {
-        if (word.trim().isEmpty()) {
-            capitalizedText.append(word);
-            continue;
-        }
-        capitalizedText.append(Character.toUpperCase(word.charAt(0)))
-                .append(word.substring(1));
-    }
-    
-    return capitalizedText.toString();
-}
-
-// Usage:
-System.out.println(capitalizeWords("hello  world")); // "Hello  World"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/check-anagram.md b/snippets/java/string-manipulation/check-anagram.md
deleted file mode 100644
index 2c0cdfb0..00000000
--- a/snippets/java/string-manipulation/check-anagram.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Check Anagram
-description: Checks if two strings are anagrams, meaning they contain the same characters ignoring order, spaces and case sensitivity
-author: Mcbencrafter
-tags: string,anagram,compare,arrays
----
-
-```java
-import java.util.Arrays;
-
-public static boolean isAnagram(String text1, String text2) {
-    String text1Normalized = text1.replaceAll("\\s+", "");
-    String text2Normalized = text2.replaceAll("\\s+", "");
-
-    if (text1Normalized.length() != text2Normalized.length())
-        return false;
-        
-    char[] text1Array = text1Normalized.toCharArray();
-    char[] text2Array = text2Normalized.toCharArray();
-    Arrays.sort(text1Array);
-    Arrays.sort(text2Array);
-    return Arrays.equals(text1Array, text2Array);
-}
-
-// Usage:
-System.out.println(isAnagram("listen", "silent")); // true
-System.out.println(isAnagram("hello", "world"));   // false
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/check-palindrome.md b/snippets/java/string-manipulation/check-palindrome.md
deleted file mode 100644
index 9d0da856..00000000
--- a/snippets/java/string-manipulation/check-palindrome.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Check Palindrome
-description: Checks if a string reads the same backward as forward, ignoring whitespaces and case sensitivity
-author: Mcbencrafter
-tags: string,palindrome,compare,reverse
----
-
-```java
-public static boolean isPalindrome(String text) {
-    String cleanText = text.toLowerCase().replaceAll("\\s+", "");
-        
-    return new StringBuilder(cleanText)
-            .reverse()
-            .toString()
-            .equals(cleanText);
-}
-
-// Usage:
-System.out.println(isPalindrome("A man a plan a canal Panama")); // true
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/count-character-frequency.md b/snippets/java/string-manipulation/count-character-frequency.md
deleted file mode 100644
index f1a8e14a..00000000
--- a/snippets/java/string-manipulation/count-character-frequency.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Count Character Frequency
-description: Counts the frequency of each character in a string
-author: Mcbencrafter
-tags: string,character,frequency,character-frequency
----
-
-```java
-public static Map<Character, Integer> characterFrequency(String text, boolean countSpaces, boolean caseSensitive) {
-    Map<Character, Integer> frequencyMap = new HashMap<>();
-
-    for (char character : text.toCharArray()) {
-        if (character == ' ' && !countSpaces)
-            continue;
-
-        if (!caseSensitive)
-            character = Character.toLowerCase(character);
-
-        frequencyMap.put(character, frequencyMap.getOrDefault(character, 0) + 1);
-    }
-
-    return frequencyMap;
-}
-
-// Usage:
-System.out.println(characterFrequency("hello world", false, false)); // {r=1, d=1, e=1, w=1, h=1, l=3, o=2}
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/count-character-occurrences.md b/snippets/java/string-manipulation/count-character-occurrences.md
deleted file mode 100644
index 5b15f8f6..00000000
--- a/snippets/java/string-manipulation/count-character-occurrences.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Count Character Occurrences
-description: Counts the occurrences of the specified characters in a given string
-author: Mcbencrafter
-tags: string,characters,counter,occurence
----
-
-```java
-import java.util.List;
-
-public static int countCharacterOccurrences(String text, List<Character> characters) {
-    int count = 0;
-    
-    for (char character : text.toCharArray()) {
-        if (characters.indexOf(character) == -1)
-            continue;
-                
-        count++;
-    }
-    
-    return count;
-}
-
-// Usage:
-System.out.println(countCharacterOccurrences("hello world", List.of('l', 'o'))); // 5
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/count-words.md b/snippets/java/string-manipulation/count-words.md
deleted file mode 100644
index 7284ac83..00000000
--- a/snippets/java/string-manipulation/count-words.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Count Words
-description: Counts the number of words in a string
-author: Mcbencrafter
-tags: string,word,count
----
-
-```java
-public static int countWords(String text) {
-    return text.split("\\s+").length;
-}
-
-// Usage:
-System.out.println(countWords("hello world")); // 2
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/extract-text-between-delimiters.md b/snippets/java/string-manipulation/extract-text-between-delimiters.md
deleted file mode 100644
index e377cde8..00000000
--- a/snippets/java/string-manipulation/extract-text-between-delimiters.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Extract Text Between Delimiters
-description: Extracts a text between two given delimiters from a string
-author: Mcbencrafter
-tags: string,delimiters,start,end
----
-
-```java
-public static String extractBetweenDelimiters(String text, String start, String end) {
-    int startIndex = text.indexOf(start);
-    int endIndex = text.indexOf(end, startIndex + start.length());
-    
-    if (startIndex == -1 || endIndex == -1)
-        return "";
-    
-    return text.substring(startIndex + start.length(), endIndex);
-}
-
-// Usage:
-System.out.println(extractBetweenDelimiters("hello, world!", ",", "!")); // " world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/find-longest-word.md b/snippets/java/string-manipulation/find-longest-word.md
deleted file mode 100644
index 24a62016..00000000
--- a/snippets/java/string-manipulation/find-longest-word.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Find Longest Word
-description: Returns the longest word in a string
-author: Mcbencrafter
-tags: string,length,words
----
-
-```java
-public static String findLongestWord(String text) {
-    String[] words = text.split("\\s+");
-    String longestWord = words[0];
-    
-    for (String word : words) {
-        if (word.length() <= longestWord.length())
-            continue;
-            
-        longestWord = word;
-    }
-
-    return longestWord;
-}
-
-// Usage:
-System.out.println(findLongestWord("hello world123")); // "world123"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/find-unique-characters.md b/snippets/java/string-manipulation/find-unique-characters.md
deleted file mode 100644
index aed5942d..00000000
--- a/snippets/java/string-manipulation/find-unique-characters.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-Title: Find Unique Characters
-Description: Returns a set of unique characters from a string, with options to include spaces and control case sensitivity
-Author: Mcbencrafter
-Tags: string,unique,characters,case-sensitive
----
-
-```java
-public static Set<Character> findUniqueCharacters(String text, boolean countSpaces, boolean caseSensitive) {
-    Set<Character> uniqueCharacters = new TreeSet<>();
-    
-    for (char character : text.toCharArray()) {
-        if (character == ' ' && !countSpaces)
-            continue;
-        if (!caseSensitive)
-            character = Character.toLowerCase(character);
-        uniqueCharacters.add(character);
-    }
-    
-    return uniqueCharacters;
-}
-
-// Usage:
-System.out.println(findUniqueCharacters("hello world", false, true)); // Output: [d, e, h, l, o, r, w]
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/mask-text.md b/snippets/java/string-manipulation/mask-text.md
deleted file mode 100644
index cc66ff71..00000000
--- a/snippets/java/string-manipulation/mask-text.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Mask Text
-description: Masks portions of a string, leaving specific parts at the beginning and end visible while replacing the rest with a specified character
-author: Mcbencrafter
-tags: string,mask,hide
----
-
-```java
-public static String partialMask(String text, int maskLengthStart, int maskLengthEnd, char mask) 
-    if (text == null)
-        return null;
-    
-    StringBuilder maskedText = new StringBuilder();
-    maskedText.append(text, 0, maskLengthStart);
-    
-    for (int currentChar = maskLengthStart; currentChar < text.length(); currentChar++) {
-        maskedText.append(mask);
-    }
-    maskedText.append(text, text.length() - maskLengthEnd, text.length());
-    return maskedText.toString();
-}
-
-// Usage:
-System.out.println(partialMask("1234567890", 4, 2, '*')); // "1234****90"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/normalize-whitespace.md b/snippets/java/string-manipulation/normalize-whitespace.md
deleted file mode 100644
index e9e7f310..00000000
--- a/snippets/java/string-manipulation/normalize-whitespace.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Normalize Whitespace
-description: Replaces consecutive whitespaces with a single space
-author: Mcbencrafter
-tags: string,whitespace,normalize
----
-
-```java
-public static String normalizeWhitespace(String text) {
-    return text.replaceAll(" {2,}", " ");
-}
-
-// Usage:
-System.out.println(normalizeWhitespace("hello   world")); // "hello world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/password-generator.md b/snippets/java/string-manipulation/password-generator.md
deleted file mode 100644
index 7a1cffa6..00000000
--- a/snippets/java/string-manipulation/password-generator.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: Password Generator
-description: Generates a random string with specified length and character set, including options for letters, numbers, and special characters 
-author: Mcbencrafter
-tags: string,password,generator,security,random,token
----
-
-```java
-public static String randomString(int length, boolean useLetters, boolean useNumbers, boolean useSpecialCharacters) {
-    String characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
-    String numbers = "0123456789";
-    String specialCharacters = "!@#$%^&*()_+-=[]{}|;:,.<>?";
-    
-    String allowedCharacters = "";
-    
-    if (useLetters)
-        allowedCharacters += characters;
-
-    if (useNumbers)
-        allowedCharacters += numbers;
-
-    if (useSpecialCharacters)
-        allowedCharacters += specialCharacters;
-
-    SecureRandom random = new SecureRandom();
-    StringBuilder result = new StringBuilder(length);
-
-    for (int i = 0; i < length; i++) {
-        int index = random.nextInt(allowedCharacters.length());
-        result.append(allowedCharacters.charAt(index));
-    }
-
-    return result.toString();
-}
-
-// Usage:
-System.out.println(randomString(10, true, true, false)); // Random string containing letters, numbers but no special characters with 10 characters
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/remove-punctuation.md b/snippets/java/string-manipulation/remove-punctuation.md
deleted file mode 100644
index 9cabdc79..00000000
--- a/snippets/java/string-manipulation/remove-punctuation.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Remove Punctuation
-description: Removes punctuation (, . !) from a string
-author: Mcbencrafter
-tags: string,punctuation,clean,normalization
----
-
-```java
-public static String removePunctuation(String text) {
-    return text.replaceAll("[,!.?;:]", "");
-}
-
-// Usage:
-System.out.println(removePunctuation("hello, world!")); // "hello world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/remove-special-characters.md b/snippets/java/string-manipulation/remove-special-characters.md
deleted file mode 100644
index 22c00a84..00000000
--- a/snippets/java/string-manipulation/remove-special-characters.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Remove Special Characters
-description: Removes any character which is not alphabetic (A-Z, a-z) or numeric (0-9)
-author: Mcbencrafter
-tags: string,special-characters,clean,normalization
----
-
-```java
-public static String removeSpecialCharacters(String text) {
-    return text.replaceAll("[^a-zA-Z0-9]", "");
-}
-
-// Usage:
-System.out.println(removeSpecialCharacters("hello, world!#%")); // "hello world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/reverse-word-contents.md b/snippets/java/string-manipulation/reverse-word-contents.md
deleted file mode 100644
index 90b1dd6b..00000000
--- a/snippets/java/string-manipulation/reverse-word-contents.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-Title: Reverse Word Contents
-Description: Reverses the characters of each word in a string while preserving word order
-Author: Mcbencrafter
-Tags: string,reverse,words,transformation,order
----
-
-```java
-public static String reverseWords(String text) {
-    String[] words = text.split("\\s+"); 
-    StringBuilder reversedText = new StringBuilder();
-
-    for (String word : words) {
-        StringBuilder reversedWord = new StringBuilder(word).reverse();
-        reversedText.append(reversedWord).append(" ");
-    }
-
-    return reversedText.toString().trim();
-}
-
-// Usage:
-System.out.println(reverseWordContents("hello world")); // "olleh dlrow"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/reverse-word-order.md b/snippets/java/string-manipulation/reverse-word-order.md
deleted file mode 100644
index 1d582c9f..00000000
--- a/snippets/java/string-manipulation/reverse-word-order.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-Title: Reverse Word Order
-Description: Reverses the order of words in a sentence while preserving the content of each word
-Author: Mcbencrafter
-Tags: string,reverse,words,transformation,sentence
----
-
-```java
-public static String reverseWords(String text) {
-    String[] words = text.split("\\s+");
-    StringBuilder reversedSentence = new StringBuilder();
-
-    for (int currentWord = words.length - 1; currentWord >= 0; currentWord--) {
-        reversedSentence.append(words[currentWord]).append(" ");
-    }
-
-    return reversedSentence.toString().trim();
-}
-
-// Usage:
-System.out.println(reverseWords("hello world")); // Output: world hello
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/slugify-string.md b/snippets/java/string-manipulation/slugify-string.md
deleted file mode 100644
index 46f4c83f..00000000
--- a/snippets/java/string-manipulation/slugify-string.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Slugify String
-description: Converts a string into a URL-friendly slug format
-author: Mcbencrafter
-tags: string,slug,slugify
----
-
-```java
-public static String slugify(String text, String separator) {
-    if (text == null)
-        return "";
-
-    // used to decompose accented characters to their base characters (e.g. "é" to "e")
-    String normalizedString = Normalizer.normalize(text, Normalizer.Form.NFD);
-    normalizedString = normalizedString.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
-
-    String slug = normalizedString.trim()
-            .toLowerCase()
-            .replaceAll("\\s+", separator)
-            .replaceAll("[^a-z0-9\\-_" + separator + "]", "")
-            .replaceAll("_", separator)
-            .replaceAll("-", separator)
-            .replaceAll(separator + "+", separator)
-            .replaceAll(separator + "$", "");
-
-    return slug;
-}
-
-// Usage:
-System.out.println(slugify("Hello World-#123-é", "-")); // "hello-world-123-e"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/snake-case-to-camelcase.md b/snippets/java/string-manipulation/snake-case-to-camelcase.md
deleted file mode 100644
index 58d6829d..00000000
--- a/snippets/java/string-manipulation/snake-case-to-camelcase.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: snake_case to camelCase
-description: Converts a snake_case string into camelCase
-author: Mcbencrafter
-tags: string,conversion,camel-case,snake-case
----
-
-```java
-import java.util.regex.Pattern;
-
-public static String snakeToCamel(String snakeCase) {
-    return Pattern.compile("(_)([a-z])")
-        .matcher(snakeCase)
-        .replaceAll(match -> match.group(2).toUpperCase());
-}
-
-// Usage:
-System.out.println(snakeToCamel("hello_world")); // "helloWorld"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/spaces-to-tabs.md b/snippets/java/string-manipulation/spaces-to-tabs.md
deleted file mode 100644
index 1142f263..00000000
--- a/snippets/java/string-manipulation/spaces-to-tabs.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-Title: Spaces To Tabs
-description: Converts spaces into tabs
-author: Mcbencrafter
-tags: string,tab,space,conversion
----
-
-```java
-public static String convertSpacesToTab(String text, int spacesPerTab) {
-    return text.replaceAll(" ".repeat(spacesPerTab), "\t");
-}
-
-// Usage:
-System.out.println(convertSpacesToTab("hello    world", 4)); // Output: hello\tworld
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-ascii.md b/snippets/java/string-manipulation/string-to-ascii.md
deleted file mode 100644
index 56fc81aa..00000000
--- a/snippets/java/string-manipulation/string-to-ascii.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: String To Ascii
-description: Converts a string into ascii numbers
-author: Mcbencrafter
-tags: string,ascii,encoding,conversion
----
-
-```java
-import java.util.ArrayList;
-import java.util.List;
-
-public static List<Integer> stringToAscii(String text) {
-    List<Integer> asciiCodes = new ArrayList<>();
-
-    for (char character : text.toCharArray()) {
-        asciiCodes.add((int) character);
-    }
-
-    return asciiCodes;
-}
-
-// Usage:
-System.out.println(stringToAscii("hello world")); // [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-camelcase.md b/snippets/java/string-manipulation/string-to-camelcase.md
deleted file mode 100644
index daf654d8..00000000
--- a/snippets/java/string-manipulation/string-to-camelcase.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: String To camelCase
-description: Converts a string into camelCase
-author: Mcbencrafter
-tags: string,conversion,camel-case
----
-
-```java
-public static String stringToCamelCase(String text) {
-    String[] words = text.split("\\s+");
-    StringBuilder camelCase = new StringBuilder(
-        words[0].substring(0, 1).toLowerCase() + words[0].substring(1)
-    );
-
-    for (int i = 1; i < words.length; i++) {
-        camelCase.append(words[i].substring(0, 1).toUpperCase());
-        camelCase.append(words[i].substring(1));
-    }
-
-    return camelCase.toString();
-}
-
-// Usage:
-System.out.println(stringToCamelCase("Hello world test")); // "helloWorldTest"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-param-case.md b/snippets/java/string-manipulation/string-to-param-case.md
deleted file mode 100644
index 181308db..00000000
--- a/snippets/java/string-manipulation/string-to-param-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: String To param-case
-description: Converts a string into param-case
-author: Mcbencrafter
-tags: string,conversion,param-case
----
-
-```java
-public static String stringToParamCase(String text) {
-    return text.toLowerCase().replaceAll("\\s+", "-");
-}
-
-// Usage:
-System.out.println(stringToParamCase("Hello World 123")); // "hello-world-123"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-pascalcase.md b/snippets/java/string-manipulation/string-to-pascalcase.md
deleted file mode 100644
index 120d88da..00000000
--- a/snippets/java/string-manipulation/string-to-pascalcase.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: String To PascalCase
-description: Converts a string into PascalCase
-author: Mcbencrafter
-tags: string,conversion,pascal-case
----
-
-```java
-public static String stringToPascalCase(String text) {
-    String[] words = text.split("\\s+");
-    StringBuilder pascalCase = new StringBuilder();
-
-    for (String word : words) {
-        pascalCase.append(word.substring(0, 1).toUpperCase());
-        pascalCase.append(word.substring(1).toLowerCase());
-    }
-
-    return pascalCase.toString();
-}
-
-// Usage:
-System.out.println(stringToPascalCase("hello world")); // "HelloWorld"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-snake-case.md b/snippets/java/string-manipulation/string-to-snake-case.md
deleted file mode 100644
index 83c4a36f..00000000
--- a/snippets/java/string-manipulation/string-to-snake-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: String To snake_case
-description: Converts a string into snake_case
-author: Mcbencrafter
-tags: string,conversion,snake-case
----
-
-```java
-public static String stringToSnakeCase(String text) {
-    return text.toLowerCase().replaceAll("\\s+", "_");
-}
-
-// Usage:
-System.out.println(stringToSnakeCase("Hello World 123")); // "hello_world_123"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-titlecase.md b/snippets/java/string-manipulation/string-to-titlecase.md
deleted file mode 100644
index 89d5c9c3..00000000
--- a/snippets/java/string-manipulation/string-to-titlecase.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: String To Titlecase
-description: Converts a string into Title Case, where the first letter of each word is capitalized and the remaining letters are lowercase
-author: Mcbencrafter
-tags: string,conversion,title-case
----
-
-```java
-public static String convertToTitleCase(String text) {
-    String[] words = text.split("(?<=\\S)(?=\\s+)|(?<=\\s+)(?=\\S)"); // this is needed to preserve spaces (text.split(" ") would remove multiple spaces)
-    StringBuilder capitalizedText = new StringBuilder();
-
-    for (String word : words) {
-        if (word.trim().isEmpty()) {
-            capitalizedText.append(word);
-            continue;
-        }
-
-        capitalizedText.append(Character.toUpperCase(word.charAt(0)))
-                .append(word.substring(1).toLowerCase());
-    }
-
-    return capitalizedText.toString().trim();
-}
-
-// Usage:
-System.out.println(convertToTitleCase("heLlo wOrld")); // "Hello World"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/string-to-unicode.md b/snippets/java/string-manipulation/string-to-unicode.md
deleted file mode 100644
index 7c66775e..00000000
--- a/snippets/java/string-manipulation/string-to-unicode.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: String To Unicode
-description: Converts characters of a string into their unicode representation
-author: Mcbencrafter
-tags: string,unicode,encoding,conversion
----
-
-```java
-public static String stringToUnicode(String text) {
-    StringBuilder unicodeText = new StringBuilder();
-
-    for (char character : text.toCharArray()) {
-        unicodeText.append(String.format("\\u%04x", (int) character));
-    }
-
-    return unicodeText.toString();
-}
-
-// Usage:
-System.out.println(stringToUnicode("hello world")); // \u0068\u0065\u006C\u006C\u006F\u0020\u0077\u006F\u0072\u006C\u0064
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/tabs-to-spaces.md b/snippets/java/string-manipulation/tabs-to-spaces.md
deleted file mode 100644
index e37163db..00000000
--- a/snippets/java/string-manipulation/tabs-to-spaces.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-Title: Tabs To Spaces
-description: Converts tabs into spaces
-author: Mcbencrafter
-tags: string,tab,space,conversion
----
-
-```java
-public static String convertTabToSpace(String text, int spacesPerTab) {
-    return text.replaceAll("\t", " ".repeat(spacesPerTab));
-}
-
-// Usage:
-System.out.println(convertTabToSpace("hello\tworld", 2)); // "hello  world"
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/truncate-string.md b/snippets/java/string-manipulation/truncate-string.md
deleted file mode 100644
index 38f85281..00000000
--- a/snippets/java/string-manipulation/truncate-string.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Truncate String
-description: Truncates a string after a specified length (can also be used for hiding information)
-author: Mcbencrafter
-tags: string,truncate,mask,hide
----
-
-```java
-public static String truncate(String text, int length, String suffix) {
-    if (text.length() <= length)
-        return text;
-    
-    return text.substring(0, length).trim() + (suffix != null ? suffix : "");
-}
-
-// Usage:
-System.out.println(truncate("hello world", 5, "...")); // "hello..."
-```
\ No newline at end of file
diff --git a/snippets/java/string-manipulation/unicode-to-string.md b/snippets/java/string-manipulation/unicode-to-string.md
deleted file mode 100644
index 8f0385c7..00000000
--- a/snippets/java/string-manipulation/unicode-to-string.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Unicode To String
-description: Converts a unicode String into its normal representation
-author: Mcbencrafter
-tags: string,unicode,encoding,decoding,conversion
----
-
-```java
-public static String unicodeToString(String unicode) {
-    StringBuilder string = new StringBuilder();
-    String[] hex = unicode.split("\\\\u");
-
-    for (int symbol = 1; symbol < hex.length; symbol++) {
-        int data = Integer.parseInt(hex[symbol], 16);
-        string.append((char) data);
-    }
-
-    return string.toString();
-}
-
-// Usage:
-System.out.println(unicodeToString("\\u0068\\u0065\\u006c\\u006c\\u006f\\u0020\\u0077\\u006f\\u0072\\u006c\\u0064")); // "hello world"
-```
\ No newline at end of file
diff --git a/snippets/javascript/[react]/basics/hello-world.md b/snippets/javascript/[react]/basics/hello-world.md
deleted file mode 100644
index 5cdaba09..00000000
--- a/snippets/javascript/[react]/basics/hello-world.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Hello, World!
-description: Show Hello World on the page.
-author: ACR1209
-tags: printing,hello-world
----
-
-```tsx
-import React from 'react';
-import ReactDOM from 'react-dom';
-
-const App = () => {
-    return (
-        <div>
-            <h1>Hello, World!</h1>
-        </div>
-    );
-};
-
-ReactDOM.render(<App />, document.getElementById('root'));
-```
diff --git a/snippets/javascript/[react]/icon.svg b/snippets/javascript/[react]/icon.svg
deleted file mode 100644
index b9025712..00000000
--- a/snippets/javascript/[react]/icon.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" height="50" width="50" viewBox="-11.5 -10.23174 23 20.46348">
-  <title>React Logo</title>
-  <circle cx="0" cy="0" r="2.05" fill="#61dafb"/>
-  <g stroke="#61dafb" stroke-width="1" fill="none">
-    <ellipse rx="11" ry="4.2"/>
-    <ellipse rx="11" ry="4.2" transform="rotate(60)"/>
-    <ellipse rx="11" ry="4.2" transform="rotate(120)"/>
-  </g>
-</svg>
\ No newline at end of file
diff --git a/snippets/javascript/array-manipulation/compare-arrays.md b/snippets/javascript/array-manipulation/compare-arrays.md
deleted file mode 100644
index 3215ee1d..00000000
--- a/snippets/javascript/array-manipulation/compare-arrays.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Compare Arrays
-description: Deeply compares two arrays to check if they are equal to each other (supports nested arrays and objects).
-author: KCSquid
-tags: array,object,compare,equal
----
-
-```js
-const compareArrays = (a, b) => {
-  if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
-  return a.every((v, i) => 
-    Array.isArray(v) && Array.isArray(b[i]) ? compareArrays(v, b[i]) :
-    typeof v === "object" && typeof b[i] === "object" ? compareObjects(v, b[i]) :
-    v === b[i]
-  );
-};
-
-const compareObjects = (a, b) => {
-  if (typeof a !== "object" || typeof b !== "object" || Object.keys(a).length !== Object.keys(b).length) return false;
-  return Object.keys(a).every(k => 
-    Array.isArray(a[k]) && Array.isArray(b[k]) ? compareArrays(a[k], b[k]) :
-    typeof a[k] === "object" && typeof b[k] === "object" ? compareObjects(a[k], b[k]) :
-    a[k] === b[k]
-  );
-};
-
-// Usage:
-compareArrays([1, 2, 3], [1, 2, 3]); // Returns: true
-compareArrays([1, 2, 3], [3, 2, 1]); // Returns: false
-compareArrays([{a:1}], [{a:1}]);     // Returns: true
-compareArrays([{a:1}], null);        // Returns: false
-```
\ No newline at end of file
diff --git a/snippets/javascript/array-manipulation/partition-array.md b/snippets/javascript/array-manipulation/partition-array.md
deleted file mode 100644
index 92c9bb3c..00000000
--- a/snippets/javascript/array-manipulation/partition-array.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Partition Array
-description: Splits an array into two arrays based on a callback function.
-author: Swaraj-Singh-30
-tags: array,partition,reduce
----
-
-```js
-const partition = (arr, callback) =>
-  arr.reduce(
-    ([pass, fail], elem) => (callback(elem) ? [[...pass, elem], fail] : [pass, [...fail, elem]]),
-    [[], []]
-  );
-
-// Usage:
-const numbers = [1, 2, 3, 4, 5, 6];
-const isEven = (n) => n % 2 === 0;
-partition(numbers, isEven); // Returns: [[2, 4, 6], [1, 3, 5]]
-```
\ No newline at end of file
diff --git a/snippets/javascript/array-manipulation/remove-duplicates.md b/snippets/javascript/array-manipulation/remove-duplicates.md
deleted file mode 100644
index 4ba5de74..00000000
--- a/snippets/javascript/array-manipulation/remove-duplicates.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Remove Duplicates
-description: Removes duplicate values from an array.
-author: technoph1le
-tags: array,deduplicate
----
-
-```js
-const removeDuplicates = (arr) => [...new Set(arr)];
-
-// Usage:
-const numbers = [1, 2, 2, 3, 4, 4, 5];
-removeDuplicates(numbers); // Returns: [1, 2, 3, 4, 5]
-```
diff --git a/snippets/javascript/array-manipulation/remove-falsy-values.md b/snippets/javascript/array-manipulation/remove-falsy-values.md
deleted file mode 100644
index 2a6c72d7..00000000
--- a/snippets/javascript/array-manipulation/remove-falsy-values.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Remove Falsy Values
-description: Removes falsy values from an array.
-author: mubasshir
-tags: array,falsy,filter
----
-
-```js
-const removeFalsy = (arr) => arr.filter(Boolean);
-
-// Usage:
-const array = [0, 1, false, 2, "", 3, null];
-removeFalsy(array); // Returns: [1, 2, 3]
-```
diff --git a/snippets/javascript/array-manipulation/shuffle-array.md b/snippets/javascript/array-manipulation/shuffle-array.md
deleted file mode 100644
index 97670824..00000000
--- a/snippets/javascript/array-manipulation/shuffle-array.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Shuffle Array
-description: Shuffles an Array.
-author: loxt-nixo
-tags: array,shuffle
----
-
-```js
-function shuffleArray(array) {
-    for (let i = array.length - 1; i >= 0; i--) {
-        const j = Math.floor(Math.random() * (i + 1));
-        [array[i], array[j]] = [array[j], array[i]];
-    }
-}
-
-// Usage:
-const array = [1, 2, 3, 4, 5];
-shuffleArray(array); // Shuffles `array` in place
-```
diff --git a/snippets/javascript/array-manipulation/zip-arrays.md b/snippets/javascript/array-manipulation/zip-arrays.md
deleted file mode 100644
index d18a8371..00000000
--- a/snippets/javascript/array-manipulation/zip-arrays.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Zip Arrays
-description: Combines two arrays by pairing corresponding elements from each array.
-author: Swaraj-Singh-30
-tags: array,map
----
-
-```js
-const zip = (arr1, arr2) => arr1.map((value, index) => [value, arr2[index]]);
-
-// Usage:
-const arr1 = ['a', 'b', 'c'];
-const arr2 = [1, 2, 3];
-console.log(zip(arr1, arr2)); // Output: [['a', 1], ['b', 2], ['c', 3]]
-```
diff --git a/snippets/javascript/basics/hello-world.md b/snippets/javascript/basics/hello-world.md
deleted file mode 100644
index d553cde6..00000000
--- a/snippets/javascript/basics/hello-world.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: James-Beans
-tags: printing,hello-world
----
-
-```js
-console.log("Hello, World!"); // Prints Hello, World! to the console
-```
diff --git a/snippets/javascript/color-manipulation/hex-to-rgb-color.md b/snippets/javascript/color-manipulation/hex-to-rgb-color.md
deleted file mode 100644
index 3d0108d1..00000000
--- a/snippets/javascript/color-manipulation/hex-to-rgb-color.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Hex to RGB Color
-description: Converts hexadecimal color code to RGB color values.
-author: pvictordev
-tags: color,conversion
----
-
-```js
-function hexToRgb(hex) {
-  let sanitizedHex = hex.startsWith("#") ? hex.slice(1) : hex;
-
-  if (sanitizedHex.length === 3) {
-    sanitizedHex = [...sanitizedHex].map((char) => char + char).join("");
-  }
-
-  const bigint = parseInt(sanitizedHex, 16);
-
-  return {
-    r: (bigint >> 16) & 0xff, 
-    g: (bigint >> 8) & 0xff,  
-    b: bigint & 0xff,       
-  };
-}
-
-// Usage:
-console.log(hexToRgb("#ff5733")); // { r: 255, g: 87, b: 51 }
-console.log(hexToRgb("#ffff")); // { r: 0, g: 255, b: 255 }
-```
\ No newline at end of file
diff --git a/snippets/javascript/color-manipulation/hsl-to-rgb-color.md b/snippets/javascript/color-manipulation/hsl-to-rgb-color.md
deleted file mode 100644
index 23390237..00000000
--- a/snippets/javascript/color-manipulation/hsl-to-rgb-color.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: HSL to RGB Color
-description: Converts HSL color values to RGB color values.
-author: pvictordev
-tags: color,conversion
----
-
-```js
-function hslToRgb(h, s, l) {
-  s /= 100;
-  l /= 100;
-  const c = (1 - Math.abs(2 * l - 1)) * s;
-  const x = c * (1 - Math.abs((h / 60) % 2 - 1));
-  const m = l - c / 2;
-
-  const [r, g, b] = 
-    h < 60  ? [c, x, 0] :
-    h < 120 ? [x, c, 0] :
-    h < 180 ? [0, c, x] :
-    h < 240 ? [0, x, c] :
-    h < 300 ? [x, 0, c] :
-              [c, 0, x];
-
-  return {
-    r: Math.round((r + m) * 255),
-    g: Math.round((g + m) * 255),
-    b: Math.round((b + m) * 255),
-  };
-}
-
-// Usage:
-console.log(hslToRgb(14, 100, 60)); // { r: 255, g: 87, b: 51 }
-console.log(hslToRgb(0, 0, 100)); // { r: 255, g: 255, b: 255 }
-``` 
\ No newline at end of file
diff --git a/snippets/javascript/color-manipulation/rgb-to-hex-color.md b/snippets/javascript/color-manipulation/rgb-to-hex-color.md
deleted file mode 100644
index ce62b106..00000000
--- a/snippets/javascript/color-manipulation/rgb-to-hex-color.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: RGB to Hex Color
-description: Converts RGB color values to hexadecimal color code.
-author: jjcantu
-tags: color,conversion
----
-
-```js
-function rgbToHex(r, g, b) {
-  const toHex = (n) => {
-    const hex = n.toString(16);
-    return hex.length === 1 ? "0" + hex : hex;
-  };
-
-  return "#" + toHex(r) + toHex(g) + toHex(b);
-}
-
-// Usage:
-console.log(rgbToHex(255, 128, 0)); // Output: "#ff8000"
-console.log(rgbToHex(0, 255, 0)); // Output: "#00ff00"
-``` 
\ No newline at end of file
diff --git a/snippets/javascript/color-manipulation/rgb-to-hsl-color.md b/snippets/javascript/color-manipulation/rgb-to-hsl-color.md
deleted file mode 100644
index 51e29a86..00000000
--- a/snippets/javascript/color-manipulation/rgb-to-hsl-color.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: RGB to HSL Color
-description: Converts RGB color values to HSL color values.
-author: pvictordev
-tags: color,conversion
----
-
-```js
-function rgbToHsl(r, g, b) {
-  [r, g, b] = [r, g, b].map((v) => v / 255);
-
-  const max = Math.max(r, g, b);
-  const min = Math.min(r, g, b);
-  const delta = max - min;
-
-  const l = (max + min) / 2;
-
-  if (delta === 0) return { h: 0, s: 0, l: Math.round(l * 100) };
-
-  const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
-
-  const h = 
-    max === r ? ((g - b) / delta + (g < b ? 6 : 0)) :
-    max === g ? (b - r) / delta + 2 :
-                (r - g) / delta + 4;
-
-  return {
-    h: Math.round(h * 60), 
-    s: Math.round(s * 100),
-    l: Math.round(l * 100), 
-  };
-}
-
-// Usage:
-console.log(rgbToHsl(255, 87, 51)); // { h: 14, s: 100, l: 60 }
-console.log(rgbToHsl(255, 255, 255)); // { h: 0, s: 0, l: 100 }
-``` 
\ No newline at end of file
diff --git a/snippets/javascript/date-and-time/check-leap-year.md b/snippets/javascript/date-and-time/check-leap-year.md
deleted file mode 100644
index 520b990f..00000000
--- a/snippets/javascript/date-and-time/check-leap-year.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Check Leap Year
-description: Determines if a given year is a leap year.
-author: axorax
-tags: date,leap-year
----
-
-```js
-const isLeapYear = (year) => (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
-
-// Usage:
-isLeapYear(2024); // Returns: true
-isLeapYear(2023); // Returns: false
-```
diff --git a/snippets/javascript/date-and-time/convert-to-unix-timestamp.md b/snippets/javascript/date-and-time/convert-to-unix-timestamp.md
deleted file mode 100644
index 12020d26..00000000
--- a/snippets/javascript/date-and-time/convert-to-unix-timestamp.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Convert to Unix Timestamp
-description: Converts a date to a Unix timestamp in seconds.
-author: Yugveer06
-tags: date,unix,timestamp
----
-
-```js
-function convertToUnixSeconds(input) {
-  if (typeof input === 'string') {
-    if (!input.trim()) {
-      throw new Error('Date string cannot be empty or whitespace');
-    }
-  } else if (!input) {
-    throw new Error('Input is required');
-  }
-
-  let date;
-
-  if (typeof input === 'string') {
-    date = new Date(input);
-  } else if (input instanceof Date) {
-    date = input;
-  } else {
-    throw new Error('Input must be a valid date string or Date object');
-  }
-
-  if (isNaN(date.getTime())) {
-    throw new Error('Invalid date provided');
-  }
-
-  return Math.floor(date.getTime() / 1000);
-}
-
-// Usage:
-convertToUnixSeconds('2025-01-01T12:00:00Z'); // Returns: 1735732800
-convertToUnixSeconds(new Date('2025-01-01T12:00:00Z')); // Returns: 1735732800
-convertToUnixSeconds(new Date()); // Returns: Current Unix timestamp in seconds
-```
diff --git a/snippets/javascript/date-and-time/format-date.md b/snippets/javascript/date-and-time/format-date.md
deleted file mode 100644
index d68606c4..00000000
--- a/snippets/javascript/date-and-time/format-date.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Format Date
-description: Formats a date in 'YYYY-MM-DD' format.
-author: technoph1le
-tags: date,format
----
-
-```js
-const formatDate = (date) => date.toISOString().split('T')[0];
-
-// Usage:
-formatDate(new Date(2024, 11, 10)); // Returns: '2024-12-10'
-```
diff --git a/snippets/javascript/date-and-time/get-day-of-the-year.md b/snippets/javascript/date-and-time/get-day-of-the-year.md
deleted file mode 100644
index 6c7349c1..00000000
--- a/snippets/javascript/date-and-time/get-day-of-the-year.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Get Day of the Year
-description: Calculates the day of the year (1-365 or 1-366 for leap years) for a given date.
-author: axorax
-tags: date,day-of-year
----
-
-```js
-const getDayOfYear = (date) => {
-  const startOfYear = new Date(date.getFullYear(), 0, 0);
-  const diff = date - startOfYear + (startOfYear.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000;
-  return Math.floor(diff / (1000 * 60 * 60 * 24));
-};
-
-// Usage:
-getDayOfYear(new Date('2024-12-31')) // Returns: 366 (Leap year)
-```
diff --git a/snippets/javascript/date-and-time/get-days-in-month.md b/snippets/javascript/date-and-time/get-days-in-month.md
deleted file mode 100644
index a9eb8661..00000000
--- a/snippets/javascript/date-and-time/get-days-in-month.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Get Days in Month
-description: Calculates the number of days in a specific month of a given year.
-author: axorax
-tags: date,days-in-month
----
-
-```js
-const getDaysInMonth = (year, month) => new Date(year, month + 1, 0).getDate();
-
-// Usage:
-getDaysInMonth(2024, 1); // Returns: 29 (February in a leap year)
-getDaysInMonth(2023, 1); // Returns: 28
-```
diff --git a/snippets/javascript/date-and-time/get-time-difference.md b/snippets/javascript/date-and-time/get-time-difference.md
deleted file mode 100644
index 37189c10..00000000
--- a/snippets/javascript/date-and-time/get-time-difference.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Get Time Difference
-description: Calculates the time difference in days between two dates.
-author: technoph1le
-tags: date,time-difference
----
-
-```js
-const getTimeDifference = (date1, date2) => {
-  const diff = Math.abs(date2 - date1);
-  return Math.ceil(diff / (1000 * 60 * 60 * 24));
-};
-
-// Usage:
-const date1 = new Date('2024-01-01');
-const date2 = new Date('2024-12-31');
-getTimeDifference(date1, date2); // Returns: 365
-```
diff --git a/snippets/javascript/date-and-time/relative-time-formatter.md b/snippets/javascript/date-and-time/relative-time-formatter.md
deleted file mode 100644
index bc095bae..00000000
--- a/snippets/javascript/date-and-time/relative-time-formatter.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Relative Time Formatter
-description: Displays how long ago a date occurred or how far in the future a date is.
-author: Yugveer06
-tags: date,time,relative,future,past
----
-
-```js
-const getRelativeTime = (date) => {
-  const now = Date.now();
-  const diff = date.getTime() - now;
-  const seconds = Math.abs(Math.floor(diff / 1000));
-  const minutes = Math.abs(Math.floor(seconds / 60));
-  const hours = Math.abs(Math.floor(minutes / 60));
-  const days = Math.abs(Math.floor(hours / 24));
-  const years = Math.abs(Math.floor(days / 365));
-
-  if (Math.abs(diff) < 1000) return 'just now';
-
-  const isFuture = diff > 0;
-
-  if (years > 0) return `${isFuture ? 'in ' : ''}${years} ${years === 1 ? 'year' : 'years'}${isFuture ? '' : ' ago'}`;
-  if (days > 0) return `${isFuture ? 'in ' : ''}${days} ${days === 1 ? 'day' : 'days'}${isFuture ? '' : ' ago'}`;
-  if (hours > 0) return `${isFuture ? 'in ' : ''}${hours} ${hours === 1 ? 'hour' : 'hours'}${isFuture ? '' : ' ago'}`;
-  if (minutes > 0) return `${isFuture ? 'in ' : ''}${minutes} ${minutes === 1 ? 'minute' : 'minutes'}${isFuture ? '' : ' ago'}`;
-
-  return `${isFuture ? 'in ' : ''}${seconds} ${seconds === 1 ? 'second' : 'seconds'}${isFuture ? '' : ' ago'}`;
-}
-
-// Usage:
-const pastDate = new Date('2021-12-29 13:00:00');
-const futureDate = new Date('2099-12-29 13:00:00');
-getRelativeTime(pastDate); // x years ago
-getRelativeTime(new Date()); // just now
-getRelativeTime(futureDate); // in x years
-```
diff --git a/snippets/javascript/date-and-time/start-of-the-day.md b/snippets/javascript/date-and-time/start-of-the-day.md
deleted file mode 100644
index f9f78524..00000000
--- a/snippets/javascript/date-and-time/start-of-the-day.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Start of the Day
-description: Returns the start of the day (midnight) for a given date.
-author: axorax
-tags: date,start-of-day
----
-
-```js
-const startOfDay = (date) => new Date(date.setHours(0, 0, 0, 0));
-
-// Usage:
-const today = new Date();
-startOfDay(today); // Returns: Date object for midnight
-```
diff --git a/snippets/javascript/dom-manipulation/change-element-style.md b/snippets/javascript/dom-manipulation/change-element-style.md
deleted file mode 100644
index 453a212c..00000000
--- a/snippets/javascript/dom-manipulation/change-element-style.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Change Element Style
-description: Changes the inline style of an element.
-author: axorax
-tags: dom,style
----
-
-```js
-const changeElementStyle = (element, styleObj) => {
-  Object.entries(styleObj).forEach(([property, value]) => {
-    element.style[property] = value;
-  });
-};
-
-// Usage:
-const element = document.querySelector('.my-element');
-changeElementStyle(element, { color: 'red', backgroundColor: 'yellow' });
-```
diff --git a/snippets/javascript/dom-manipulation/remove-element.md b/snippets/javascript/dom-manipulation/remove-element.md
deleted file mode 100644
index f319b964..00000000
--- a/snippets/javascript/dom-manipulation/remove-element.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Remove Element
-description: Removes a specified element from the DOM.
-author: axorax
-tags: dom,remove
----
-
-```js
-const removeElement = (element) => {
-  if (element && element.parentNode) {
-    element.parentNode.removeChild(element);
-  }
-};
-
-// Usage:
-const element = document.querySelector('.my-element');
-removeElement(element);
-```
diff --git a/snippets/javascript/function-utilities/compose-functions.md b/snippets/javascript/function-utilities/compose-functions.md
deleted file mode 100644
index d56b95d2..00000000
--- a/snippets/javascript/function-utilities/compose-functions.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Compose Functions
-description: Composes multiple functions into a single function, where the output of one function becomes the input of the next.
-author: axorax
-tags: function,compose
----
-
-```js
-const compose = (...funcs) => (initialValue) => {
-  return funcs.reduce((acc, func) => func(acc), initialValue);
-};
-
-// Usage:
-const add2 = (x) => x + 2;
-const multiply3 = (x) => x * 3;
-const composed = compose(multiply3, add2);
-composed(5); // Returns: 17 ((5 * 3) + 2)
-```
diff --git a/snippets/javascript/function-utilities/curry-function.md b/snippets/javascript/function-utilities/curry-function.md
deleted file mode 100644
index a16bb16b..00000000
--- a/snippets/javascript/function-utilities/curry-function.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Curry Function
-description: Transforms a function into its curried form.
-author: axorax
-tags: curry,function
----
-
-```js
-const curry = (func) => {
-  const curried = (...args) => {
-    if (args.length >= func.length) {
-      return func(...args);
-    }
-    return (...nextArgs) => curried(...args, ...nextArgs);
-  };
-  return curried;
-};
-
-// Usage:
-const add = (a, b, c) => a + b + c;
-const curriedAdd = curry(add);
-curriedAdd(1)(2)(3); // Returns: 6
-curriedAdd(1, 2)(3); // Returns: 6
-```
diff --git a/snippets/javascript/function-utilities/debounce-function.md b/snippets/javascript/function-utilities/debounce-function.md
deleted file mode 100644
index d63e39b2..00000000
--- a/snippets/javascript/function-utilities/debounce-function.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Debounce Function
-description: Delays a function execution until after a specified time.
-author: technoph1le
-tags: debounce,performance
----
-
-```js
-const debounce = (func, delay) => {
-  let timeout;
-
-  return (...args) => {
-    clearTimeout(timeout);
-    timeout = setTimeout(() => func(...args), delay);
-  };
-};
-
-// Usage:
-window.addEventListener(
-  'resize',
-  debounce(() => console.log('Resized!'), 500), // Will only output after resizing has stopped for 500ms
-);
-```
diff --git a/snippets/javascript/function-utilities/get-contrast-color.md b/snippets/javascript/function-utilities/get-contrast-color.md
deleted file mode 100644
index 4f07dbe7..00000000
--- a/snippets/javascript/function-utilities/get-contrast-color.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Get Contrast Color
-description: Returns either black or white text color based on the brightness of the provided hex color.
-author: yaya12085
-tags: color,hex,contrast,brightness
----
-
-```js
-const getContrastColor = (hexColor) => {
-  // Expand short hex color to full format
-  if (hexColor.length === 4) {
-    hexColor = `#${hexColor[1]}${hexColor[1]}${hexColor[2]}${hexColor[2]}${hexColor[3]}${hexColor[3]}`;
-  }
-  const r = parseInt(hexColor.slice(1, 3), 16);
-  const g = parseInt(hexColor.slice(3, 5), 16);
-  const b = parseInt(hexColor.slice(5, 7), 16);
-  const brightness = (r * 299 + g * 587 + b * 114) / 1000;
-  return brightness >= 128 ? "#000000" : "#FFFFFF";
-};
-
-// Usage:
-getContrastColor('#fff'); // Returns: #000000 (black)
-getContrastColor('#123456'); // Returns: #FFFFFF (white)
-getContrastColor('#ff6347'); // Returns: #000000 (black)
-getContrastColor('#f4f'); // Returns: #000000 (black)
-```
diff --git a/snippets/javascript/function-utilities/memoize-function.md b/snippets/javascript/function-utilities/memoize-function.md
deleted file mode 100644
index 8902e100..00000000
--- a/snippets/javascript/function-utilities/memoize-function.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Memoize Function
-description: Caches the result of a function based on its arguments to improve performance.
-author: axorax
-tags: memoization,optimization
----
-
-```js
-const memoize = (func) => {
-  const cache = new Map();
-  return (...args) => {
-    const key = JSON.stringify(args);
-    if (cache.has(key)) {
-      return cache.get(key);
-    }
-    const result = func(...args);
-    cache.set(key, result);
-    return result;
-  };
-};
-
-// Usage:
-const factorial = memoize((n) => (n <= 1 ? 1 : n * factorial(n - 1)));
-factorial(5); // Returns: 120
-factorial(5); // Returns: 120 (retrieved from cache)
-```
diff --git a/snippets/javascript/function-utilities/once-function.md b/snippets/javascript/function-utilities/once-function.md
deleted file mode 100644
index 59be4260..00000000
--- a/snippets/javascript/function-utilities/once-function.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Once Function
-description: Ensures a function is only called once.
-author: axorax
-tags: function,once
----
-
-```js
-const once = (func) => {
-  let called = false;
-  return (...args) => {
-    if (!called) {
-      called = true;
-      return func(...args);
-    }
-  };
-};
-
-// Usage:
-const initialize = once(() => console.log('Initialized!'));
-initialize(); // Output: Initialized!
-initialize(); // No output
-```
diff --git a/snippets/javascript/function-utilities/rate-limit-function.md b/snippets/javascript/function-utilities/rate-limit-function.md
deleted file mode 100644
index fb1e19ed..00000000
--- a/snippets/javascript/function-utilities/rate-limit-function.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Rate Limit Function
-description: Limits how often a function can be executed within a given time window.
-author: axorax
-tags: function,rate-limiting
----
-
-```js
-const rateLimit = (func, limit, timeWindow) => {
-  let queue = [];
-  setInterval(() => {
-    if (queue.length) {
-      const next = queue.shift();
-      func(...next.args);
-    }
-  }, timeWindow);
-  return (...args) => {
-    if (queue.length < limit) {
-      queue.push({ args });
-    }
-  };
-};
-
-// Usage:
-const fetchData = () => console.log('Fetching data...');
-const rateLimitedFetch = rateLimit(fetchData, 2, 1000);
-setInterval(() => rateLimitedFetch(), 200); // Limits fetchData calls to twice a seconds
-```
diff --git a/snippets/javascript/function-utilities/repeat-function-invocation.md b/snippets/javascript/function-utilities/repeat-function-invocation.md
deleted file mode 100644
index 71b59f15..00000000
--- a/snippets/javascript/function-utilities/repeat-function-invocation.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Repeat Function Invocation
-description: Invokes a function a specified number of times.
-author: technoph1le
-tags: function,repeat
----
-
-```js
-const times = (func, n) => {
-  Array.from(Array(n)).forEach(() => {
-    func();
-  });
-};
-
-// Usage:
-const randomFunction = () => console.log('Function called!');
-times(randomFunction, 3); // Logs 'Function called!' three times
-```
diff --git a/snippets/javascript/function-utilities/sleep-function.md b/snippets/javascript/function-utilities/sleep-function.md
deleted file mode 100644
index a84ca69c..00000000
--- a/snippets/javascript/function-utilities/sleep-function.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Sleep Function
-description: Waits for a specified amount of milliseconds before resolving.
-author: 0xHouss
-tags: javascript,sleep,delay,utility,promises
----
-
-```js
-const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
-
-// Usage:
-console.log('Hello');
-await sleep(2000); // Waits for 2 seconds
-console.log('World!');
-```
diff --git a/snippets/javascript/function-utilities/throttle-function.md b/snippets/javascript/function-utilities/throttle-function.md
deleted file mode 100644
index d3ab8a78..00000000
--- a/snippets/javascript/function-utilities/throttle-function.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Throttle Function
-description: Ensures a function is only called at most once in a specified time interval. Useful for optimizing events like scrolling or resizing.
-author: WizardOfDigits
-tags: throttle,performance,optimization
----
-
-```js
-const throttle = (func, limit) => {
-  let inThrottle;
-  return (...args) => {
-    if (!inThrottle) {
-      func(...args);
-      inThrottle = true;
-      setTimeout(() => (inThrottle = false), limit);
-    }
-  };
-};
-
-// Usage:
-// Ensures the function can only be called once every 1000 milliseconds
-const logScroll = throttle(() => console.log("Scroll event triggered"), 1000);
-
-// Attach to scroll event
-window.addEventListener("scroll", logScroll);
-```
diff --git a/snippets/javascript/icon.svg b/snippets/javascript/icon.svg
deleted file mode 100644
index 25ccdbaa..00000000
--- a/snippets/javascript/icon.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="js-logo-title js-logo-description">
-<title id="js-logo-title">JS Logo Square</title>
-<desc id="js-logo-description">A yellow square with the letters JS inside in white</desc>
-<path d="M3.125 3.125H46.875V46.875H3.125V3.125Z" fill="#F5DE19"/>
-<path d="M32.5141 37.3047C32.8874 38.0614 33.4667 38.6974 34.1853 39.1396C34.904 39.5819 35.7328 39.8124 36.5766 39.8047C38.2797 39.8047 39.3687 38.9531 39.3687 37.7734C39.3687 36.3672 38.25 35.8641 36.375 35.0437L35.3469 34.6031C32.3781 33.3391 30.4094 31.7562 30.4094 28.4094C30.4094 25.3266 32.7531 22.9781 36.4297 22.9781C37.6198 22.8924 38.8089 23.1588 39.8486 23.7443C40.8883 24.3297 41.7327 25.2082 42.2765 26.2703L39.0625 28.325C38.853 27.7984 38.4884 27.348 38.0171 27.0332C37.5459 26.7185 36.9901 26.5543 36.4234 26.5625C36.1762 26.5377 35.9265 26.5648 35.6903 26.6418C35.454 26.7189 35.2364 26.8444 35.0514 27.0102C34.8663 27.176 34.7178 27.3785 34.6153 27.6049C34.5129 27.8313 34.4587 28.0765 34.4562 28.325C34.4562 29.5578 35.2203 30.0578 36.9844 30.825L38.0125 31.2656C41.5062 32.7641 43.4812 34.2906 43.4812 37.7234C43.4812 41.425 40.5734 43.4531 36.6687 43.4531C35.1475 43.5491 33.6309 43.2032 32.3017 42.4572C30.9724 41.7113 29.8872 40.5969 29.1766 39.2484L32.5141 37.3047ZM17.9906 37.6609C18.6359 38.8062 19.2234 39.775 20.6359 39.775C21.9859 39.775 22.8391 39.2469 22.8391 37.1922V23.2125H26.95V37.2469C26.95 41.5031 24.45 43.4406 20.8109 43.4406C19.5246 43.5109 18.2471 43.1904 17.1464 42.5211C16.0456 41.8517 15.1732 40.865 14.6437 39.6906L17.9906 37.6609Z" fill="black"/>
-</svg>
diff --git a/snippets/javascript/local-storage/add-item-to-localstorage.md b/snippets/javascript/local-storage/add-item-to-localstorage.md
deleted file mode 100644
index 057254d8..00000000
--- a/snippets/javascript/local-storage/add-item-to-localstorage.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Add Item to localStorage
-description: Stores a value in localStorage under the given key.
-author: technoph1le
-tags: localStorage,storage
----
-
-```js
-const addToLocalStorage = (key, value) => {
-  localStorage.setItem(key, JSON.stringify(value));
-};
-
-// Usage:
-addToLocalStorage('user', { name: 'John', age: 30 });
-```
diff --git a/snippets/javascript/local-storage/check-if-item-exists-in-localstorage.md b/snippets/javascript/local-storage/check-if-item-exists-in-localstorage.md
deleted file mode 100644
index 077234f3..00000000
--- a/snippets/javascript/local-storage/check-if-item-exists-in-localstorage.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Check if Item Exists in localStorage
-description: Checks if a specific item exists in localStorage.
-author: axorax
-tags: localStorage,storage
----
-
-```js
-const isItemInLocalStorage = (key) => {
-  return localStorage.getItem(key) !== null;
-};
-
-// Usage:
-console.log(isItemInLocalStorage('user')); // Output: true or false
-```
diff --git a/snippets/javascript/local-storage/retrieve-item-from-localstorage.md b/snippets/javascript/local-storage/retrieve-item-from-localstorage.md
deleted file mode 100644
index 8417138f..00000000
--- a/snippets/javascript/local-storage/retrieve-item-from-localstorage.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Retrieve Item from localStorage
-description: Retrieves a value from localStorage by key and parses it.
-author: technoph1le
-tags: localStorage,storage
----
-
-```js
-const getFromLocalStorage = (key) => {
-  const item = localStorage.getItem(key);
-  return item ? JSON.parse(item) : null;
-};
-
-// Usage:
-getFromLocalStorage('user'); // Returns: { name: 'John', age: 30 }
-```
diff --git a/snippets/javascript/mathematical-functions/combinations.md b/snippets/javascript/mathematical-functions/combinations.md
deleted file mode 100644
index 080c8fd9..00000000
--- a/snippets/javascript/mathematical-functions/combinations.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Combinations
-description: Calculates the number of combinations (denoted as C(n,r) or "n choose r"), which determines how many ways you can select r items from n items without considering the order.
-author: JanluOfficial
-tags: math,number-theory,algebra
----
-
-```js
-function combinations(n, r) {
-    if (n < 0 || r < 0 || n < r) {
-        throw new Error('Invalid input: n and r must be non-negative and n must be greater than or equal to r.');
-    }
-
-    function factorial(x) {
-        if (x === 0 || x === 1) return 1;
-        let result = 1;
-        for (let i = 2; i <= x; i++) {
-            result *= i;
-        }
-        return result;
-    }
-
-    const numerator = factorial(n);
-    const denominator = factorial(r) * factorial(n - r);
-    return numerator / denominator;
-}
-
-// Usage:
-combinations(24,22); // Returns:    276
-combinations(5,3);   // Returns:     10
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/cross-product.md b/snippets/javascript/mathematical-functions/cross-product.md
deleted file mode 100644
index 4ed5404f..00000000
--- a/snippets/javascript/mathematical-functions/cross-product.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Cross Product
-description: Computes the cross product of two 3D vectors, which results in a vector perpendicular to both.
-author: JanluOfficial
-tags: math,vector-algebra
----
-
-```js
-function crossProduct(a, b) {
-    if (a.length !== 3 || b.length !== 3) {
-        throw new Error('Vectors must be 3-dimensional');
-    }
-
-    return [
-        a[1] * b[2] - a[2] * b[1],
-        a[2] * b[0] - a[0] * b[2],
-        a[0] * b[1] - a[1] * b[0]
-    ];
-}
-
-// Usage:
-crossProduct([1, 2, 3], [4, 5, 6]); // Returns: [-3, 6, -3] 
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/dot-product.md b/snippets/javascript/mathematical-functions/dot-product.md
deleted file mode 100644
index d1b1e397..00000000
--- a/snippets/javascript/mathematical-functions/dot-product.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Dot Product
-description: Computes the dot product of two vectors, which is the sum of the products of corresponding elements.
-author: JanluOfficial
-tags: math,vector-algebra
----
-
-```js
-function dotProduct(a, b) {
-    if (a.length !== b.length) {
-        throw new Error('Vectors must be of the same length');
-    }
-
-    return a.reduce((sum, value, index) => sum + value * b[index], 0);
-}
-
-// Usage:
-dotProduct([1, 2, 3], [4, 5, 6]); // Returns: 32
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/error-function.md b/snippets/javascript/mathematical-functions/error-function.md
deleted file mode 100644
index 211171d8..00000000
--- a/snippets/javascript/mathematical-functions/error-function.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Error function
-description: Computes the error function (erf(x)) for a given input x, which is a mathematical function used frequently in probability, statistics, and partial differential equations.
-author: JanluOfficial
-tags: math
----
-
-```js
-function erf(x) {
-    const sign = Math.sign(x);
-    const absX = Math.abs(x);
-    const t = 1 / (1 + 0.3275911 * absX);
-    const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741, a4 = -1.453152027, a5 = 1.061405429;
-    const poly = t * (a1 + t * (a2 + t * (a3 + t * (a4 + t * a5))));
-    return sign * (1 - poly * Math.exp(-absX * absX));
-}
-
-// Usage:
-erf(-1); // Returns:    -0.8427006897475899
-erf(1);  // Returns:     0.8427006897475899
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/greatest-common-divisor.md b/snippets/javascript/mathematical-functions/greatest-common-divisor.md
deleted file mode 100644
index fec36324..00000000
--- a/snippets/javascript/mathematical-functions/greatest-common-divisor.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Greatest Common Divisor
-description: Calculates the largest positive integer that divides each of the integers without leaving a remainder. Useful for calculating aspect ratios.
-author: JanluOfficial
-tags: math,division,number-theory,algebra
----
-
-```js
-function gcd(a, b) {
-    while (b !== 0) {
-        let temp = b;
-        b = a % b;
-        a = temp;
-    }
-    return a;
-}
-
-// Usage:
-gcd(1920, 1080); // Returns:    120
-gcd(1920, 1200); // Returns:    240
-gcd(5,12);       // Returns:      1
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/least-common-multiple.md b/snippets/javascript/mathematical-functions/least-common-multiple.md
deleted file mode 100644
index 40ac9721..00000000
--- a/snippets/javascript/mathematical-functions/least-common-multiple.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Least common multiple
-description: Computes the least common multiple (LCM) of two numbers 𝑎 and b. The LCM is the smallest positive integer that is divisible by both a and b.
-author: JanluOfficial
-tags: math,number-theory,algebra
----
-
-```js
-function lcm(a, b) {
-    function gcd(x, y) {
-        while (y !== 0) {
-            const temp = y;
-            y = x % y;
-            x = temp;
-        }
-        return Math.abs(x);
-    }
-    return Math.abs(a * b) / gcd(a, b);
-}
-
-// Usage:
-lcm(12,16); // Returns:    48
-lcm(8,20);  // Returns:    40
-lcm(16,17); // Returns:   272
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/linear-mapping.md b/snippets/javascript/mathematical-functions/linear-mapping.md
deleted file mode 100644
index 5baada59..00000000
--- a/snippets/javascript/mathematical-functions/linear-mapping.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Linear Mapping
-description: remaps a value from one range to another
-author: JasimAlrawie
-tags: math,number-theory,algebra
----
-
-```js
-function linearMapping(value, minIn, maxIn, minOut, maxOut) {
-    return (value - minIn) * (maxOut - minOut)/(maxIn - minIn) + minOut
-}
-
-// Usage:
-linearMapping(value, 0, 1, 0, 255)    // remaps the value from (0,1) to (0,255)
-linearMapping(value, 0, PI*2, 0, 360) // remaps the value from rad to deg
-linearMapping(value, -1, 1, 1, 8)     // remaps the value from (-1,1) to (1,8)
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/matrix-multiplication.md b/snippets/javascript/mathematical-functions/matrix-multiplication.md
deleted file mode 100644
index 65799530..00000000
--- a/snippets/javascript/mathematical-functions/matrix-multiplication.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Matrix Multiplication
-description: Multiplies two matrices, where the number of columns in the first matrix equals the number of rows in the second.
-author: JanluOfficial
-tags: math,matrix-algebra
----
-
-```js
-function matrixMultiply(A, B) {
-    const rowsA = A.length;
-    const colsA = A[0].length;
-    const rowsB = B.length;
-    const colsB = B[0].length;
-
-    if (colsA !== rowsB) {
-        throw new Error('Number of columns of A must equal the number of rows of B');
-    }
-
-    let result = Array.from({ length: rowsA }, () => Array(colsB).fill(0));
-
-    for (let i = 0; i < rowsA; i++) {
-        for (let j = 0; j < colsB; j++) {
-            for (let k = 0; k < colsA; k++) {
-                result[i][j] += A[i][k] * B[k][j];
-            }
-        }
-    }
-
-    return result;
-}
-
-// Usage:
-matrixMultiply([[1, 2], [3, 4]], [[5, 6], [7, 8]]); // Returns: [[19, 22], [43, 50]]
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/modular-inverse.md b/snippets/javascript/mathematical-functions/modular-inverse.md
deleted file mode 100644
index 313ab46a..00000000
--- a/snippets/javascript/mathematical-functions/modular-inverse.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Modular Inverse
-description: Computes the modular multiplicative inverse of a number a under modulo m, which is the integer x such that (a*x) mod m=1.
-author: JanluOfficial
-tags: math,number-theory,algebra
----
-
-```js
-function modInverse(a, m) {
-    function extendedGCD(a, b) {
-        if (b === 0) {
-            return { gcd: a, x: 1, y: 0 };
-        }
-        const { gcd, x: x1, y: y1 } = extendedGCD(b, a % b);
-        const x = y1;
-        const y = x1 - Math.floor(a / b) * y1;
-        return { gcd, x, y };
-    }
-
-    const { gcd, x } = extendedGCD(a, m);
-
-    if (gcd !== 1) {
-        return null;
-    }
-
-    return (x % m + m) % m;
-}
-
-// Usage:
-modInverse(3, 26);  // Returns: 9
-modInverse(10, 17); // Returns: 12
-modInverse(6, 9);   // Returns: null
-```
\ No newline at end of file
diff --git a/snippets/javascript/mathematical-functions/prime-number.md b/snippets/javascript/mathematical-functions/prime-number.md
deleted file mode 100644
index 028b8567..00000000
--- a/snippets/javascript/mathematical-functions/prime-number.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Prime Number
-description: Checks if a number is a prime number or not.
-author: JanluOfficial
-tags: math,number-theory,algebra
----
-
-```js
-function isPrime(num) {
-    if (num <= 1) return false; // 0 and 1 are not prime numbers
-    if (num <= 3) return true;  // 2 and 3 are prime numbers
-    if (num % 2 === 0 || num % 3 === 0) return false; // Exclude multiples of 2 and 3
-
-    // Check divisors from 5 to √num, skipping multiples of 2 and 3
-    for (let i = 5; i * i <= num; i += 6) {
-        if (num % i === 0 || num % (i + 2) === 0) return false;
-    }
-    return true;
-}
-
-// Usage:
-isPrime(69); // Returns:  false
-isPrime(17); // Returns:  true
-```
\ No newline at end of file
diff --git a/snippets/javascript/number-formatting/convert-number-to-currency.md b/snippets/javascript/number-formatting/convert-number-to-currency.md
deleted file mode 100644
index 8ec168cc..00000000
--- a/snippets/javascript/number-formatting/convert-number-to-currency.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Convert Number to Currency
-description: Converts a number to a currency format with a specific locale.
-author: axorax
-tags: number,currency
----
-
-```js
-const convertToCurrency = (num, locale = 'en-US', currency = 'USD') => {
-  return new Intl.NumberFormat(locale, {
-    style: 'currency',
-    currency: currency
-  }).format(num);
-};
-
-// Usage:
-convertToCurrency(1234567.89); // Returns: '$1,234,567.89'
-convertToCurrency(987654.32, 'de-DE', 'EUR'); // Returns: '987.654,32 €'
-```
diff --git a/snippets/javascript/number-formatting/convert-number-to-roman-numerals.md b/snippets/javascript/number-formatting/convert-number-to-roman-numerals.md
deleted file mode 100644
index 21fa4c96..00000000
--- a/snippets/javascript/number-formatting/convert-number-to-roman-numerals.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Convert Number to Roman Numerals
-description: Converts a number to Roman numeral representation.
-author: axorax
-tags: number,roman
----
-
-```js
-const numberToRoman = (num) => {
-  const romanNumerals = {
-    1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L',
-    90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'
-  };
-  let result = '';
-  Object.keys(romanNumerals).reverse().forEach(value => {
-    while (num >= value) {
-      result += romanNumerals[value];
-      num -= value;
-    }
-  });
-  return result;
-};
-
-// Usage:
-numberToRoman(1994); // Returns: 'MCMXCIV'
-numberToRoman(58); // Returns: 'LVIII'
-```
diff --git a/snippets/javascript/number-formatting/convert-to-scientific-notation.md b/snippets/javascript/number-formatting/convert-to-scientific-notation.md
deleted file mode 100644
index 1d4a2f68..00000000
--- a/snippets/javascript/number-formatting/convert-to-scientific-notation.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Convert to Scientific Notation
-description: Converts a number to scientific notation.
-author: axorax
-tags: number,scientific
----
-
-```js
-const toScientificNotation = (num) => {
-  if (isNaN(num)) {
-    throw new Error('Input must be a number');
-  }
-  if (num === 0) {
-    return '0e+0';
-  }
-  const exponent = Math.floor(Math.log10(Math.abs(num)));
-  const mantissa = num / Math.pow(10, exponent);
-  return `${mantissa.toFixed(2)}e${exponent >= 0 ? '+' : ''}${exponent}`;
-};
-
-// Usage:
-toScientificNotation(12345); // Returns: '1.23e+4'
-toScientificNotation(0.0005678); // Returns: '5.68e-4'
-toScientificNotation(1000); // Returns: '1.00e+3'
-toScientificNotation(0); // Returns: '0e+0'
-toScientificNotation(-54321); // Returns: '-5.43e+4'
-```
diff --git a/snippets/javascript/number-formatting/format-file-size.md b/snippets/javascript/number-formatting/format-file-size.md
deleted file mode 100644
index fa7fb3a1..00000000
--- a/snippets/javascript/number-formatting/format-file-size.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Format File Size
-description: Converts bytes into human-readable file size format.
-author: jjcantu
-tags: format,size
----
-
-```js
-function formatFileSize(bytes) {
-  if (bytes === 0) return '0 Bytes';
-  
-  const k = 1024;
-  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
-  const i = Math.floor(Math.log(bytes) / Math.log(k));
-  
-  return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
-}
-
-// Usage:
-console.log(formatFileSize(1234)); // Output: "1.21 KB"
-console.log(formatFileSize(1234567)); // Output: "1.18 MB"
-``` 
\ No newline at end of file
diff --git a/snippets/javascript/number-formatting/format-number-with-commas.md b/snippets/javascript/number-formatting/format-number-with-commas.md
deleted file mode 100644
index 5275e833..00000000
--- a/snippets/javascript/number-formatting/format-number-with-commas.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Format Number with Commas
-description: Formats a number with commas for better readability (e.g., 1000 -> 1,000).
-author: axorax
-tags: number,format
----
-
-```js
-const formatNumberWithCommas = (num) => {
-  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
-};
-
-// Usage:
-formatNumberWithCommas(1000); // Returns: '1,000'
-formatNumberWithCommas(1234567); // Returns: '1,234,567'
-formatNumberWithCommas(987654321); // Returns: '987,654,321'
-```
diff --git a/snippets/javascript/number-formatting/number-formatter.md b/snippets/javascript/number-formatting/number-formatter.md
deleted file mode 100644
index 8633ade3..00000000
--- a/snippets/javascript/number-formatting/number-formatter.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Number Formatter
-description: Formats a number with suffixes (K, M, B, etc.).
-author: realvishalrana
-tags: number,format
----
-
-```js
-const nFormatter = (num) => {
-  if (!num) return;
-  num = parseFloat(num.toString().replace(/[^0-9.]/g, ''));
-  const suffixes = ['', 'K', 'M', 'B', 'T', 'P', 'E'];
-  let index = 0;
-  while (num >= 1000 && index < suffixes.length - 1) {
-    num /= 1000;
-    index++;
-  }
-  return num.toFixed(2).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + suffixes[index];
-};
-
-// Usage:
-nFormatter(1234567); // Returns: '1.23M'
-```
diff --git a/snippets/javascript/number-formatting/number-to-words-converter.md b/snippets/javascript/number-formatting/number-to-words-converter.md
deleted file mode 100644
index 7878d12a..00000000
--- a/snippets/javascript/number-formatting/number-to-words-converter.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Number to Words Converter
-description: Converts a number to its word representation in English.
-author: axorax
-tags: number,words
----
-
-```js
-const numberToWords = (num) => {
-  const below20 = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'];
-  const tens = ['', '', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety'];
-  const above1000 = ['Hundred', 'Thousand', 'Million', 'Billion'];
-  if (num < 20) return below20[num];
-  let words = '';
-  for (let i = 0; num > 0; i++) {
-    if (i > 0 && num % 1000 !== 0) words = above1000[i] + ' ' + words;
-    if (num % 100 >= 20) {
-      words = tens[Math.floor(num / 10)] + ' ' + words;
-      num %= 10;
-    }
-    if (num < 20) words = below20[num] + ' ' + words;
-    num = Math.floor(num / 100);
-  }
-  return words.trim();
-};
-
-// Usage:
-numberToWords(123); // Returns: 'One Hundred Twenty Three'
-numberToWords(2045); // Returns: 'Two Thousand Forty Five'
-```
diff --git a/snippets/javascript/object-manipulation/check-if-object-is-empty.md b/snippets/javascript/object-manipulation/check-if-object-is-empty.md
deleted file mode 100644
index f89b5087..00000000
--- a/snippets/javascript/object-manipulation/check-if-object-is-empty.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Check if Object is Empty
-description: Checks whether an object has no own enumerable properties.
-author: axorax
-tags: object,check,empty
----
-
-```js
-function isEmptyObject(obj) {
-  return Object.keys(obj).length === 0;
-}
-
-// Usage:
-isEmptyObject({}); // Returns: true
-isEmptyObject({ a: 1 }); // Returns: false
-```
diff --git a/snippets/javascript/object-manipulation/compare-two-objects-shallowly.md b/snippets/javascript/object-manipulation/compare-two-objects-shallowly.md
deleted file mode 100644
index 03dd41f6..00000000
--- a/snippets/javascript/object-manipulation/compare-two-objects-shallowly.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Compare Two Objects Shallowly
-description: Compares two objects shallowly and returns whether they are equal.
-author: axorax
-tags: object,compare,shallow
----
-
-```js
-function shallowEqual(obj1, obj2) {
-  const keys1 = Object.keys(obj1);
-  const keys2 = Object.keys(obj2);
-  if (keys1.length !== keys2.length) return false;
-  return keys1.every(key => obj1[key] === obj2[key]);
-}
-
-// Usage:
-const obj1 = { a: 1, b: 2 };
-const obj2 = { a: 1, b: 2 };
-const obj3 = { a: 1, b: 3 };
-shallowEqual(obj1, obj2); // Returns: true
-shallowEqual(obj1, obj3); // Returns: false
-```
diff --git a/snippets/javascript/object-manipulation/convert-object-to-query-string.md b/snippets/javascript/object-manipulation/convert-object-to-query-string.md
deleted file mode 100644
index 31abe05d..00000000
--- a/snippets/javascript/object-manipulation/convert-object-to-query-string.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Convert Object to Query String
-description: Converts an object to a query string for use in URLs.
-author: axorax
-tags: object,query string,url
----
-
-```js
-function toQueryString(obj) {
-  return Object.entries(obj)
-    .map(([key, value]) => encodeURIComponent(key) + '=' + encodeURIComponent(value))
-    .join('&');
-}
-
-// Usage:
-const params = { search: 'test', page: 1 };
-toQueryString(params); // Returns: 'search=test&page=1'
-```
diff --git a/snippets/javascript/object-manipulation/count-properties-in-object.md b/snippets/javascript/object-manipulation/count-properties-in-object.md
deleted file mode 100644
index 577eb30e..00000000
--- a/snippets/javascript/object-manipulation/count-properties-in-object.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Count Properties in Object
-description: Counts the number of own properties in an object.
-author: axorax
-tags: object,count,properties
----
-
-```js
-function countProperties(obj) {
-  return Object.keys(obj).length;
-}
-
-// Usage:
-const obj = { a: 1, b: 2, c: 3 };
-countProperties(obj); // Returns: 3
-```
diff --git a/snippets/javascript/object-manipulation/deep-clone-object.md b/snippets/javascript/object-manipulation/deep-clone-object.md
deleted file mode 100644
index a925d9b3..00000000
--- a/snippets/javascript/object-manipulation/deep-clone-object.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Deep Clone Object
-description: Creates a deep copy of an object or array without reference.
-author: jjcantu
-tags: object,clone
----
-
-```js
-function deepClone(obj) {
-  if (obj === null || typeof obj !== 'object') return obj;
-  
-  const clone = Array.isArray(obj) ? [] : {};
-  
-  for (let key in obj) {
-    if (Object.prototype.hasOwnProperty.call(obj, key)) {
-      clone[key] = deepClone(obj[key]);
-    }
-  }
-  
-  return clone;
-}
-
-// Usage:
-const original = { a: 1, b: { c: 2 }, d: [1, 2, 3] };
-const cloned = deepClone(original);
-console.log(cloned); // Output: 'original' but cloned
-``` 
\ No newline at end of file
diff --git a/snippets/javascript/object-manipulation/filter-object.md b/snippets/javascript/object-manipulation/filter-object.md
deleted file mode 100644
index ee24f7d2..00000000
--- a/snippets/javascript/object-manipulation/filter-object.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Filter Object
-description: Filter out entries in an object where the value is falsy, including empty strings, empty objects, null, and undefined.
-author: realvishalrana
-tags: object,filter
----
-
-```js
-export const filterObject = (object = {}) =>
-  Object.fromEntries(
-    Object.entries(object)
-      .filter(([key, value]) => value !== null && value !== undefined && value !== '' && (typeof value !== 'object' || Object.keys(value).length > 0))
-  );
-
-// Usage:
-const obj1 = { a: 1, b: null, c: undefined, d: 4, e: '', f: {} };
-filterObject(obj1); // Returns: { a: 1, d: 4 }
-
-const obj2 = { x: 0, y: false, z: 'Hello', w: [] };
-filterObject(obj2); // Returns: { z: 'Hello' }
-
-const obj3 = { name: 'John', age: null, address: { city: 'New York' }, phone: '' };
-filterObject(obj3); // Returns: { name: 'John', address: { city: 'New York' } }
-
-const obj4 = { a: 0, b: '', c: false, d: {}, e: 'Valid' };
-filterObject(obj4); // Returns: { e: 'Valid' }
-```
diff --git a/snippets/javascript/object-manipulation/flatten-nested-object.md b/snippets/javascript/object-manipulation/flatten-nested-object.md
deleted file mode 100644
index 8e1726d8..00000000
--- a/snippets/javascript/object-manipulation/flatten-nested-object.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Flatten Nested Object
-description: Flattens a nested object into a single-level object with dot notation for keys.
-author: axorax
-tags: object,flatten
----
-
-```js
-function flattenObject(obj, prefix = '') {
-  return Object.keys(obj).reduce((acc, key) => {
-    const fullPath = prefix ? `${prefix}.${key}` : key;
-    if (typeof obj[key] === 'object' && obj[key] !== null) {
-      Object.assign(acc, flattenObject(obj[key], fullPath));
-    } else {
-      acc[fullPath] = obj[key];
-    }
-    return acc;
-  }, {});
-}
-
-// Usage:
-const nestedObj = { a: { b: { c: 1 }, d: 2 }, e: 3 };
-flattenObject(nestedObj); // Returns: { 'a.b.c': 1, 'a.d': 2, e: 3 }
-```
diff --git a/snippets/javascript/object-manipulation/freeze-object.md b/snippets/javascript/object-manipulation/freeze-object.md
deleted file mode 100644
index dbdd481a..00000000
--- a/snippets/javascript/object-manipulation/freeze-object.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Freeze Object
-description: Freezes an object to make it immutable.
-author: axorax
-tags: object,freeze,immutable
----
-
-```js
-function freezeObject(obj) {
-  return Object.freeze(obj);
-}
-
-// Usage:
-const obj = { a: 1, b: 2 };
-const frozenObj = freezeObject(obj);
-frozenObj.a = 42;         // This will fail silently in strict mode.
-frozenObj.a; // Returns: 1
-```
diff --git a/snippets/javascript/object-manipulation/get-nested-value.md b/snippets/javascript/object-manipulation/get-nested-value.md
deleted file mode 100644
index d0d87149..00000000
--- a/snippets/javascript/object-manipulation/get-nested-value.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Get Nested Value
-description: Retrieves the value at a given path in a nested object.
-author: realvishalrana
-tags: object,nested
----
-
-```js
-const getNestedValue = (obj, path) => {
-  const keys = path.split('.');
-  return keys.reduce((currentObject, key) => {
-    return currentObject && typeof currentObject === 'object' ? currentObject[key] : undefined;
-  }, obj);
-};
-
-// Usage:
-const obj = { a: { b: { c: 42 } } };
-getNestedValue(obj, 'a.b.c'); // Returns: 42
-```
diff --git a/snippets/javascript/object-manipulation/invert-object-keys-and-values.md b/snippets/javascript/object-manipulation/invert-object-keys-and-values.md
deleted file mode 100644
index 91441360..00000000
--- a/snippets/javascript/object-manipulation/invert-object-keys-and-values.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Invert Object Keys and Values
-description: Creates a new object by swapping keys and values of the given object.
-author: axorax
-tags: object,invert
----
-
-```js
-function invertObject(obj) {
-  return Object.fromEntries(
-    Object.entries(obj).map(([key, value]) => [value, key])
-  );
-}
-
-// Usage:
-const obj = { a: 1, b: 2, c: 3 };
-invertObject(obj); // Returns: { '1': 'a', '2': 'b', '3': 'c' }
-```
diff --git a/snippets/javascript/object-manipulation/merge-objects-deeply.md b/snippets/javascript/object-manipulation/merge-objects-deeply.md
deleted file mode 100644
index 6e6e92e3..00000000
--- a/snippets/javascript/object-manipulation/merge-objects-deeply.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Merge Objects Deeply
-description: Deeply merges two or more objects, including nested properties.
-author: axorax
-tags: object,merge,deep
----
-
-```js
-function deepMerge(...objects) {
-  return objects.reduce((acc, obj) => {
-    Object.keys(obj).forEach(key => {
-      if (typeof obj[key] === 'object' && obj[key] !== null) {
-        acc[key] = deepMerge(acc[key] || {}, obj[key]);
-      } else {
-        acc[key] = obj[key];
-      }
-    });
-    return acc;
-  }, {});
-}
-
-// Usage:
-const obj1 = { a: 1, b: { c: 2 } };
-const obj2 = { b: { d: 3 }, e: 4 };
-deepMerge(obj1, obj2); // Returns: { a: 1, b: { c: 2, d: 3 }, e: 4 }
-```
diff --git a/snippets/javascript/object-manipulation/omit-keys-from-object.md b/snippets/javascript/object-manipulation/omit-keys-from-object.md
deleted file mode 100644
index 846ce038..00000000
--- a/snippets/javascript/object-manipulation/omit-keys-from-object.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Omit Keys from Object
-description: Creates a new object with specific keys omitted.
-author: axorax
-tags: object,omit
----
-
-```js
-function omitKeys(obj, keys) {
-  return Object.fromEntries(
-    Object.entries(obj).filter(([key]) => !keys.includes(key))
-  );
-}
-
-// Usage:
-const obj = { a: 1, b: 2, c: 3 };
-omitKeys(obj, ['b', 'c']); // Returns: { a: 1 }
-```
diff --git a/snippets/javascript/object-manipulation/pick-keys-from-object.md b/snippets/javascript/object-manipulation/pick-keys-from-object.md
deleted file mode 100644
index 36e3e67e..00000000
--- a/snippets/javascript/object-manipulation/pick-keys-from-object.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Pick Keys from Object
-description: Creates a new object with only the specified keys.
-author: axorax
-tags: object,pick
----
-
-```js
-function pickKeys(obj, keys) {
-  return Object.fromEntries(
-    Object.entries(obj).filter(([key]) => keys.includes(key))
-  );
-}
-
-// Usage:
-const obj = { a: 1, b: 2, c: 3 };
-pickKeys(obj, ['a', 'c']); // Returns: { a: 1, c: 3 }
-```
diff --git a/snippets/javascript/object-manipulation/unique-by-key.md b/snippets/javascript/object-manipulation/unique-by-key.md
deleted file mode 100644
index 07d2fc07..00000000
--- a/snippets/javascript/object-manipulation/unique-by-key.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Unique By Key
-description: Filters an array of objects to only include unique objects by a specified key.
-author: realvishalrana
-tags: array,unique
----
-
-```js
-const uniqueByKey = (key, arr) =>
-  arr.filter((obj, index, self) => index === self.findIndex((t) => t?.[key] === obj?.[key]));
-
-// Usage:
-const arr = [
-  { id: 1, name: 'John' },
-  { id: 2, name: 'Jane' },
-  { id: 1, name: 'John' }
-];
-uniqueByKey('id', arr); // Returns: [{ id: 1, name: 'John' }, { id: 2, name: 'Jane' }]
-```
diff --git a/snippets/javascript/string-manipulation/capitalize-string.md b/snippets/javascript/string-manipulation/capitalize-string.md
deleted file mode 100644
index 2e136fc0..00000000
--- a/snippets/javascript/string-manipulation/capitalize-string.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Capitalize String
-description: Capitalizes the first letter of a string.
-author: technoph1le
-tags: string,capitalize
----
-
-```js
-function capitalize(str) {
-    return str.charAt(0).toUpperCase() + str.slice(1);
-}
-
-// Usage:
-capitalize('hello'); // Returns: 'Hello'
-```
diff --git a/snippets/javascript/string-manipulation/check-if-string-is-a-palindrome.md b/snippets/javascript/string-manipulation/check-if-string-is-a-palindrome.md
deleted file mode 100644
index 51845254..00000000
--- a/snippets/javascript/string-manipulation/check-if-string-is-a-palindrome.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Check if String is a Palindrome
-description: Checks whether a given string is a palindrome.
-author: axorax
-tags: check,palindrome,string
----
-
-```js
-function isPalindrome(str) {
-  const cleanStr = str.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
-  return cleanStr === cleanStr.split('').reverse().join('');
-}
-
-// Example usage:
-isPalindrome('A man, a plan, a canal, Panama'); // Returns: true
-```
diff --git a/snippets/javascript/string-manipulation/convert-string-to-camel-case.md b/snippets/javascript/string-manipulation/convert-string-to-camel-case.md
deleted file mode 100644
index b282fd74..00000000
--- a/snippets/javascript/string-manipulation/convert-string-to-camel-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert String to Camel Case
-description: Converts a given string into camelCase.
-author: aumirza
-tags: string,case,camelCase
----
-
-```js
-function toCamelCase(str) {
-  return str.replace(/\W+(.)/g, (match, chr) => chr.toUpperCase());
-}
-
-// Usage:
-toCamelCase('hello world test'); // Returns: 'helloWorldTest'
-```
diff --git a/snippets/javascript/string-manipulation/convert-string-to-param-case.md b/snippets/javascript/string-manipulation/convert-string-to-param-case.md
deleted file mode 100644
index 31e023ed..00000000
--- a/snippets/javascript/string-manipulation/convert-string-to-param-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert String to Param Case
-description: Converts a given string into param-case.
-author: aumirza
-tags: string,case,paramCase
----
-
-```js
-function toParamCase(str) {
-  return str.toLowerCase().replace(/\s+/g, '-');
-}
-
-// Usage:
-toParamCase('Hello World Test'); // Returns: 'hello-world-test'
-```
diff --git a/snippets/javascript/string-manipulation/convert-string-to-pascal-case.md b/snippets/javascript/string-manipulation/convert-string-to-pascal-case.md
deleted file mode 100644
index baa71de5..00000000
--- a/snippets/javascript/string-manipulation/convert-string-to-pascal-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert String to Pascal Case
-description: Converts a given string into Pascal Case.
-author: aumirza
-tags: string,case,pascalCase
----
-
-```js
-function toPascalCase(str) {
-  return str.replace(/\b\w/g, (s) => s.toUpperCase()).replace(/\W+(.)/g, (match, chr) => chr.toUpperCase());
-}
-
-// Usage:
-toPascalCase('hello world test'); // Returns: 'HelloWorldTest'
-```
diff --git a/snippets/javascript/string-manipulation/convert-string-to-snake-case.md b/snippets/javascript/string-manipulation/convert-string-to-snake-case.md
deleted file mode 100644
index ed42eec0..00000000
--- a/snippets/javascript/string-manipulation/convert-string-to-snake-case.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Convert String to Snake Case
-description: Converts a given string into snake_case.
-author: axorax
-tags: string,case,snake_case
----
-
-```js
-function toSnakeCase(str) {
-  return str.replace(/([a-z])([A-Z])/g, '$1_$2')
-            .replace(/\s+/g, '_')
-            .toLowerCase();
-}
-
-// Usage:
-toSnakeCase('Hello World Test'); // Returns: 'hello_world_test'
-```
diff --git a/snippets/javascript/string-manipulation/convert-string-to-title-case.md b/snippets/javascript/string-manipulation/convert-string-to-title-case.md
deleted file mode 100644
index 32bdaf72..00000000
--- a/snippets/javascript/string-manipulation/convert-string-to-title-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert String to Title Case
-description: Converts a given string into Title Case.
-author: aumirza
-tags: string,case,titleCase
----
-
-```js
-function toTitleCase(str) {
-  return str.toLowerCase().replace(/\b\w/g, (s) => s.toUpperCase());
-}
-
-// Usage:
-toTitleCase('hello world test'); // Returns: 'Hello World Test'
-```
diff --git a/snippets/javascript/string-manipulation/convert-tabs-to-spaces.md b/snippets/javascript/string-manipulation/convert-tabs-to-spaces.md
deleted file mode 100644
index b6ae634a..00000000
--- a/snippets/javascript/string-manipulation/convert-tabs-to-spaces.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert Tabs to Spaces
-description: Converts all tab characters in a string to spaces.
-author: axorax
-tags: string,tabs,spaces
----
-
-```js
-function tabsToSpaces(str, spacesPerTab = 4) {
-  return str.replace(/\t/g, ' '.repeat(spacesPerTab));
-}
-
-// Usage:
-tabsToSpaces('Hello\tWorld', 2); // Returns: 'Hello  World'
-```
diff --git a/snippets/javascript/string-manipulation/count-words-in-a-string.md b/snippets/javascript/string-manipulation/count-words-in-a-string.md
deleted file mode 100644
index 1816cec6..00000000
--- a/snippets/javascript/string-manipulation/count-words-in-a-string.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Count Words in a String
-description: Counts the number of words in a string.
-author: axorax
-tags: string,manipulation,word count,count
----
-
-```js
-function countWords(str) {
-  return str.trim().split(/\s+/).length;
-}
-
-// Usage:
-countWords('Hello world! This is a test.'); // Returns: 6
-```
diff --git a/snippets/javascript/string-manipulation/data-with-prefix.md b/snippets/javascript/string-manipulation/data-with-prefix.md
deleted file mode 100644
index 04fd1f47..00000000
--- a/snippets/javascript/string-manipulation/data-with-prefix.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Data with Prefix
-description: Adds a prefix and postfix to data, with a fallback value.
-author: realvishalrana
-tags: data,prefix,postfix,format
----
-
-```js
-const dataWithPrefix = (data, fallback = '-', prefix = '', postfix = '') => {
-  return data ? `${prefix}${data}${postfix}` : fallback;
-};
-
-// Usage:
-dataWithPrefix('123', '-', '(', ')'); // Returns: '(123)'
-dataWithPrefix('', '-', '(', ')'); // Returns: '-'
-dataWithPrefix('Hello', 'N/A', 'Mr. ', ''); // Returns: 'Mr. Hello'
-dataWithPrefix(null, 'N/A', 'Mr. ', ''); // Returns: 'N/A'
-```
diff --git a/snippets/javascript/string-manipulation/extract-initials-from-name.md b/snippets/javascript/string-manipulation/extract-initials-from-name.md
deleted file mode 100644
index da3a09e2..00000000
--- a/snippets/javascript/string-manipulation/extract-initials-from-name.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Extract Initials from Name
-description: Extracts and returns the initials from a full name.
-author: axorax
-tags: string,initials,name
----
-
-```js
-function getInitials(name) {
-  return name.split(' ').map(part => part.charAt(0).toUpperCase()).join('');
-}
-
-// Usage:
-getInitials('John Doe'); // Returns: 'JD'
-```
diff --git a/snippets/javascript/string-manipulation/generate-uuid.md b/snippets/javascript/string-manipulation/generate-uuid.md
deleted file mode 100644
index b8f84bb7..00000000
--- a/snippets/javascript/string-manipulation/generate-uuid.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Generate UUID
-description: Generates a UUID (v4) string.
-author: jjcantu
-tags: uuid, generate, string
----
-
-```js
-function generateUUID() {
-  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
-    const r = Math.random() * 16 | 0;
-    const v = c === 'x' ? r : (r & 0x3 | 0x8);
-    return v.toString(16);
-  });
-}
-
-// Usage:
-console.log(generateUUID()); // Output: "a1b2c3d4-e5f6-4g7h-8i9j-k0l1m2n3o4p5"
-``` 
\ No newline at end of file
diff --git a/snippets/javascript/string-manipulation/mask-sensitive-information.md b/snippets/javascript/string-manipulation/mask-sensitive-information.md
deleted file mode 100644
index bd0e2dde..00000000
--- a/snippets/javascript/string-manipulation/mask-sensitive-information.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Mask Sensitive Information
-description: Masks parts of a sensitive string, like a credit card or email address.
-author: axorax
-tags: string,mask,sensitive
----
-
-```js
-function maskSensitiveInfo(str, visibleCount = 4, maskChar = '*') {
-  return str.slice(0, visibleCount) + maskChar.repeat(Math.max(0, str.length - visibleCount));
-}
-
-// Usage:
-maskSensitiveInfo('123456789', 4); // Returns: '1234*****'
-maskSensitiveInfo('example@mail.com', 2, '#'); // Returns: 'ex#############'
-```
diff --git a/snippets/javascript/string-manipulation/pad-string-on-both-sides.md b/snippets/javascript/string-manipulation/pad-string-on-both-sides.md
deleted file mode 100644
index 2be57616..00000000
--- a/snippets/javascript/string-manipulation/pad-string-on-both-sides.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Pad String on Both Sides
-description: Pads a string on both sides with a specified character until it reaches the desired length.
-author: axorax
-tags: string,pad,manipulation
----
-
-```js
-function padString(str, length, char = ' ') {
-  const totalPad = length - str.length;
-  const padStart = Math.floor(totalPad / 2);
-  const padEnd = totalPad - padStart;
-  return char.repeat(padStart) + str + char.repeat(padEnd);
-}
-
-// Usage:
-padString('hello', 10, '*'); // Returns: '**hello***'
-```
diff --git a/snippets/javascript/string-manipulation/random-string.md b/snippets/javascript/string-manipulation/random-string.md
deleted file mode 100644
index 9c3a5cc1..00000000
--- a/snippets/javascript/string-manipulation/random-string.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Random string
-description: Generates a random string of characters of a certain length
-author: kruimol
-tags: function,random
----
-
-```js
-function makeid(length, characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789') {
-  return Array.from({ length }, () => characters.charAt(Math.floor(Math.random() * characters.length))).join('');
-}
-
-makeid(3); // Returns: gDs (Random)
-makeid(5, "1234" /* (optional) */); // Returns: "35453" (Random)
-```
diff --git a/snippets/javascript/string-manipulation/remove-all-whitespace.md b/snippets/javascript/string-manipulation/remove-all-whitespace.md
deleted file mode 100644
index a24b6deb..00000000
--- a/snippets/javascript/string-manipulation/remove-all-whitespace.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Remove All Whitespace
-description: Removes all whitespace from a string.
-author: axorax
-tags: string,whitespace
----
-
-```js
-function removeWhitespace(str) {
-  return str.replace(/\s+/g, '');
-}
-
-// Usage:
-removeWhitespace('Hello world!'); // Returns: 'Helloworld!'
-```
diff --git a/snippets/javascript/string-manipulation/remove-vowels-from-a-string.md b/snippets/javascript/string-manipulation/remove-vowels-from-a-string.md
deleted file mode 100644
index 49f15601..00000000
--- a/snippets/javascript/string-manipulation/remove-vowels-from-a-string.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Remove Vowels from a String
-description: Removes all vowels from a given string.
-author: axorax
-tags: string,remove,vowels
----
-
-```js
-function removeVowels(str) {
-  return str.replace(/[aeiouAEIOU]/g, '');
-}
-
-// Usage:
-removeVowels('Hello World'); // Returns: 'Hll Wrld'
-```
diff --git a/snippets/javascript/string-manipulation/reverse-string.md b/snippets/javascript/string-manipulation/reverse-string.md
deleted file mode 100644
index f29cebb6..00000000
--- a/snippets/javascript/string-manipulation/reverse-string.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Reverse String
-description: Reverses the characters in a string.
-author: technoph1le
-tags: string,reverse
----
-
-```js
-const reverseString = (str) => str.split('').reverse().join('');
-
-// Usage:
-reverseString('hello'); // Returns: 'olleh'
-```
diff --git a/snippets/javascript/string-manipulation/slugify-string.md b/snippets/javascript/string-manipulation/slugify-string.md
deleted file mode 100644
index afb7b1ad..00000000
--- a/snippets/javascript/string-manipulation/slugify-string.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Slugify String
-description: Converts a string into a URL-friendly slug format.
-author: technoph1le
-tags: string,slug
----
-
-```js
-const slugify = (string, separator = "-") => {
-  return string
-    .toString() // Cast to string (optional)
-    .toLowerCase() // Convert the string to lowercase letters
-    .trim() // Remove whitespace from both sides of a string (optional)
-    .replace(/\s+/g, separator) // Replace spaces with {separator}
-    .replace(/[^\w\-]+/g, "") // Remove all non-word chars
-    .replace(/\_/g, separator) // Replace _ with {separator}
-    .replace(/\-\-+/g, separator) // Replace multiple - with single {separator}
-    .replace(/\-$/g, ""); // Remove trailing -
-};
-
-// Usage:
-const title = "Hello, World! This is a Test.";
-slugify(title); // Returns: 'hello-world-this-is-a-test'
-slugify(title, "_"); // Returns: 'hello_world_this_is_a_test'
-```
diff --git a/snippets/javascript/string-manipulation/truncate-text.md b/snippets/javascript/string-manipulation/truncate-text.md
deleted file mode 100644
index a66e6db3..00000000
--- a/snippets/javascript/string-manipulation/truncate-text.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Truncate Text
-description: Truncates the text to a maximum length and appends '...' if the text exceeds the maximum length.
-author: realvishalrana
-tags: string,truncate,text
----
-
-```js
-const truncateText = (text = '', maxLength = 50) => {
-  return `${text.slice(0, maxLength)}${text.length >= maxLength ? '...' : ''}`;
-};
-
-// Usage:
-const title = "Hello, World! This is a Test.";
-truncateText(title); // Returns: 'Hello, World! This is a Test.'
-truncateText(title, 10); // Returns: 'Hello, Wor...'
-```
diff --git a/snippets/python/[fastapi]/basics/hello-world.md b/snippets/python/[fastapi]/basics/hello-world.md
deleted file mode 100644
index 69afb9cf..00000000
--- a/snippets/python/[fastapi]/basics/hello-world.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Hello, World!
-description: Returns Hello, World! when it recives a GET request made to the root endpoint.
-author: ACR1209
-tags: printing,hello-world,web,api
----
-
-```py
-from typing import Union
-from fastapi import FastAPI
-
-app = FastAPI()
-
-
-@app.get("/")
-def read_root():
-    return {"msg": "Hello, World!"}
-
-# Usage: 
-# -> Go to http://127.0.0.1:8000/ and you'll see {"msg", "Hello, World!"}
-```
diff --git a/snippets/python/[fastapi]/icon.svg b/snippets/python/[fastapi]/icon.svg
deleted file mode 100644
index a7be660d..00000000
--- a/snippets/python/[fastapi]/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" height="50" width="50" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 154 154"><circle cx="77" cy="77" fill="#05998b" r="77"/><path d="M81.375 18.667l-38.75 70H77.5l-3.875 46.666 38.75-70H77.5z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/snippets/python/[tkinter]/basics/display-a-pillow-image.md b/snippets/python/[tkinter]/basics/display-a-pillow-image.md
deleted file mode 100644
index 050d1a98..00000000
--- a/snippets/python/[tkinter]/basics/display-a-pillow-image.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: Display a Pillow Image
-description: Use Pillow to show an image in a Tkinter window.
-author: Legopitstop
-tags: app,hello-world,object-oriented
----
-
-```py
-from tkinter import Tk, Label
-from PIL import Image, ImageDraw, ImageTk
-
-
-class App(Tk):
-    def __init__(self):
-        Tk.__init__(self)
-        self.geometry("200x200")
-
-        # PhotoImage must be global or be assigned to a class or it will be garbage collected.
-        self.photo = ImageTk.PhotoImage(self.make_image())
-        lbl = Label(self, image=self.photo)
-        lbl.pack(expand=1)
-
-    def make_image(self):
-        width, height = 200, 200
-        image = Image.new("RGB", (width, height), "white")
-
-        # Create a drawing context
-        draw = ImageDraw.Draw(image)
-
-        # Draw a circle
-        radius = 80
-        center = (width // 2, height // 2)
-        draw.ellipse(
-            [
-                (center[0] - radius, center[1] - radius),
-                (center[0] + radius, center[1] + radius),
-            ],
-            fill="red",
-            outline="black",
-            width=3,
-        )
-        return image
-
-
-# Usage:
-root = App()
-root.mainloop()
-
-```
diff --git a/snippets/python/[tkinter]/basics/hello-world.md b/snippets/python/[tkinter]/basics/hello-world.md
deleted file mode 100644
index 12b6e724..00000000
--- a/snippets/python/[tkinter]/basics/hello-world.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Hello, World!
-description: Creates a basic Tkinter window with a "Hello, World!" label.
-author: Legopitstop
-tags: app,hello-world,object-oriented
----
-
-```py
-from tkinter import Tk, Label
-
-class App(Tk):
-    def __init__(self):
-        Tk.__init__(self)
-        self.geometry("200x200")
-
-        self.lbl = Label(self, text='Hello, World!')
-        self.lbl.pack(expand=1)
-
-# Usage:
-root = App()
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md b/snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md
deleted file mode 100644
index 93677aaa..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-alphanumeric.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Allow Alphanumeric
-description: A validation function to allow alphanumeric characters.
-author: Legopitstop
-tags: validation,alphanumeric
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_alphanumeric(value):
-    return value.isalnum() or value == ""
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_alphanumeric)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-decimal.md b/snippets/python/[tkinter]/entry-validation/allow-decimal.md
deleted file mode 100644
index 3b3e465d..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-decimal.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Allow Decimal
-description: A validation function to allow only decimal numbers.
-author: Legopitstop
-tags: validation,decimals
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_decimal(action, value):
-    if action == "1":
-        if value == "":
-            return True
-        try:
-            float(value)
-            return True
-        except ValueError:
-            return False
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_decimal)
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md b/snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md
deleted file mode 100644
index 34559991..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-digits-with-a-max-length.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Allow Digits with A Max Length
-description: A validation function to allow only digits with a specified maximum length.
-author: Legopitstop
-tags: validation,max,length
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_digits_with_max_length(action, value, max_length):
-    if action == "1":
-        return value == "" or (value.isdigit() and len(value) <= int(max_length))
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_digits_with_max_length)
-# 4 is the max length
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P", 4)).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-lowercase.md b/snippets/python/[tkinter]/entry-validation/allow-lowercase.md
deleted file mode 100644
index c016932f..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-lowercase.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Allow Lowercase
-description: A validation function to allow only lowercase alphabetic characters.
-author: Legopitstop
-tags: validation,lowercase
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_lowercase(value):
-    return value.islower() or value == ""
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_lowercase)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-negative-integers.md b/snippets/python/[tkinter]/entry-validation/allow-negative-integers.md
deleted file mode 100644
index 71286f70..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-negative-integers.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Allow Negative Integers
-description: A validation function to allow only negative integers.
-author: Legopitstop
-tags: validation,negative,integers
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_negative_integers(value):
-    return (
-        value in ("", "-") or value.startswith("-") and value[1:].isdigit()
-        if value
-        else True
-    )
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_negative_integers)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md b/snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md
deleted file mode 100644
index a0837b40..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-numbers-in-range.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Allow Numbers in Range
-description: A validation function to allow only numbers within a specified range.
-author: Legopitstop
-tags: validation,number,range
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_numbers_in_range(action, value, min_value, max_value):
-    if action == "1":  
-        try:
-            num = float(value)
-            return float(min_value) <= num <= float(max_value)
-        except ValueError:
-            return False
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_numbers_in_range)
-# 0 is the minimum value
-# 10 is the maximum value
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P", 0, 10)).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md b/snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md
deleted file mode 100644
index c11b11bc..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-only-alphabets.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Allow Only Alphabets
-description: A validation function to allow only alphabetic characters.
-author: Legopitstop
-tags: validation,alphabets
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_only_alphabets(value):
-    return value.isalpha() or value == ""
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_only_alphabets)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-only-digits.md b/snippets/python/[tkinter]/entry-validation/allow-only-digits.md
deleted file mode 100644
index a0663cce..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-only-digits.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Allow Only Digits
-description: A validation function to allow only digits.
-author: Legopitstop
-tags: validation,digits
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_only_digits(value):
-    return value.isdigit() or value == ""
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_only_digits)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-positive-integers.md b/snippets/python/[tkinter]/entry-validation/allow-positive-integers.md
deleted file mode 100644
index a552958d..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-positive-integers.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Allow Positive Integers
-description: A validation function to allow only positive integers.
-author: Legopitstop
-tags: validation,positive,integers
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_positive_integers(value):
-    return value.isdigit() and (value == "" or int(value) > 0)
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_positive_integers)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md b/snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md
deleted file mode 100644
index e19e8d1b..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-signed-decimals.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Allow signed Decimals
-description: A validation function to allow only signed decimal numbers.
-author: Legopitstop
-tags: validation,signed,decimals
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_signed_decimals(action, value):
-    if action == "1":
-        try:
-            if value in ("", "-"):
-                return True
-            float(value)
-            return True
-        except ValueError:
-            return False
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_signed_decimals)
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-signed-integers.md b/snippets/python/[tkinter]/entry-validation/allow-signed-integers.md
deleted file mode 100644
index eae6307b..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-signed-integers.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Allow Signed Integers
-description: A validation function to allow only signed integers.
-author: Legopitstop
-tags: validation,signed,integers
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_signed_integers(action, value):
-    if action == "1":
-        return (
-            value in ("", "-")
-            or value.isdigit()
-            or (value.startswith("-") and value[1:].isdigit())
-        )
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_signed_integers)
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-specific-characters.md b/snippets/python/[tkinter]/entry-validation/allow-specific-characters.md
deleted file mode 100644
index 5f852915..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-specific-characters.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Allow Specific Characters
-description: A validation function to allow specific characters.
-author: Legopitstop
-tags: validation,regex
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_specific_characters(value, allowed_chars):
-    return all(char in allowed_chars for char in value)
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_specific_characters)
-allowed_chars = "0123456789ABCDEFabcdef"  # Hexadecimal characters
-Entry(root, validate="key", validatecommand=(reg, "%P", allowed_chars)).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/allow-uppercase.md b/snippets/python/[tkinter]/entry-validation/allow-uppercase.md
deleted file mode 100644
index 0fac61a1..00000000
--- a/snippets/python/[tkinter]/entry-validation/allow-uppercase.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Allow Uppercase
-description: A validation function to allow uppercase letters.
-author: Legopitstop
-tags: validation,uppercase
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def allow_uppercase(value):
-    return value.isupper() or value == ""
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(allow_uppercase)
-Entry(root, validate="key", validatecommand=(reg, "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/custom-regular-expression.md b/snippets/python/[tkinter]/entry-validation/custom-regular-expression.md
deleted file mode 100644
index 16b35a87..00000000
--- a/snippets/python/[tkinter]/entry-validation/custom-regular-expression.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Custom Regular Expression
-description: A validation function to match a regular expression pattern.
-author: Legopitstop
-tags: validation,regex,pattern
----
-
-```py
-from tkinter import Tk, Entry
-import re
-
-
-def custom_regular_expression(action, value, pattern):
-    if action == "1":
-        return re.fullmatch(pattern, value) is not None
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(custom_regular_expression)
-pattern = r"^\d{0,4}$"  # Allow up to 4 digits
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P", pattern)).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/restrict-length.md b/snippets/python/[tkinter]/entry-validation/restrict-length.md
deleted file mode 100644
index e1d67cba..00000000
--- a/snippets/python/[tkinter]/entry-validation/restrict-length.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Restrict Length
-description: A validation function to limit the length.
-author: Legopitstop
-tags: validation,length
----
-
-```py
-from tkinter import Tk, Entry
-
-
-def restrict_length(value, max_length):
-    return len(value) <= int(max_length)
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(restrict_length)
-# 10 is the maximum length allowed
-Entry(root, validate="key", validatecommand=(reg, "%P", 10)).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/entry-validation/validate-file-path.md b/snippets/python/[tkinter]/entry-validation/validate-file-path.md
deleted file mode 100644
index 351d7a2a..00000000
--- a/snippets/python/[tkinter]/entry-validation/validate-file-path.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Validate File Path
-description: A validation function to ensure the file path exists.
-author: Legopitstop
-tags: validation,filepath,fp
----
-
-```py
-from tkinter import Tk, Entry
-import os
-
-
-def validate_file_path(action, value):
-    if action == "1":
-        return value == "" or os.path.exists(os.path.expandvars(value))
-    return True
-
-
-# Usage:
-root = Tk()
-root.geometry("200x200")
-
-reg = root.register(validate_file_path)
-Entry(root, validate="key", validatecommand=(reg, "%d", "%P")).pack()
-
-root.mainloop()
-```
diff --git a/snippets/python/[tkinter]/icon.svg b/snippets/python/[tkinter]/icon.svg
deleted file mode 100644
index 9316a704..00000000
--- a/snippets/python/[tkinter]/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50" height="50"><style>.a{fill:#f14729}.b{fill:#1e5cb3}.c{fill:#fff}.d{fill:#fff200}</style><path class="a" d="m19.9 48.8l20.4 0.7-1.2-25.2 1.9-23-9.4 0.5-4.4-1.8-19.2 1 1 22.7-1 26.2z"/><path class="b" d="m26.5 30.7l-1.8 0.4 1-2.3 0.9-6.3-1.1-0.3 1.4-2 1.7-6.6-3.1 0.7c0 0 1.7-3 3.4-5l-2.3-1.7c0 0-7.3 3.2-5.3 13.7l-1.5-0.3 1.4 11-1.2 0.3c0 0 1.3 2.6 3 3.8 0.2 0.1-2.2-8.6 0.3-17.3l0.3 0.6c0 0-2 9.2 0 16.7 0 0 0.1 0.2 1.1 0.1 0 0 1.8-3.5 1.8-5.5z"/><path class="c" d="m13.6 38.5h0.3v-0.7q0.3 0 0.5 0v0.7h0.5v0.2h-0.5v1.8c0 0.1 0 0.3 0.2 0.3 0.2 0 0.2-0.1 0.3-0.2h0.1c-0.1 0.3-0.4 0.4-0.6 0.4-0.4 0-0.5-0.2-0.5-0.5v-1.8h-0.3z"/><path class="c" d="m18.9 40.2c-0.2 0.4-0.4 0.8-1.1 0.8-0.9 0-1.2-0.8-1.2-1.2 0-1.1 0.9-1.3 1.2-1.3 0.4 0 1 0.1 1 0.6 0 0.2-0.1 0.3-0.3 0.3-0.2 0-0.3-0.1-0.3-0.3 0-0.2 0.2-0.2 0.2-0.3 0-0.1-0.4-0.2-0.5-0.2-0.6 0-0.7 0.4-0.7 1.2 0 0.4 0.1 0.6 0.1 0.7q0.1 0.3 0.6 0.4c0.3 0 0.7-0.3 0.8-0.7z"/><path class="c" d="m20.5 40.9v-0.1h0.5v-3.9h-0.5v-0.1h0.3q0.3 0 0.7-0.1v4.1h0.4v0.1z"/><path class="c" d="m26.3 38.5h0.4v-0.7q0.2 0 0.4 0v0.7h0.5v0.2h-0.5v1.8c0 0.1 0 0.3 0.2 0.3 0.2 0 0.3-0.1 0.4-0.2h0.1c-0.1 0.3-0.4 0.4-0.7 0.4-0.4 0-0.5-0.2-0.5-0.5v-1.8h-0.3z"/><path class="c" d="m30.8 38.7v-0.2h1v0.2h-0.4l-0.8 0.7 1.1 1.4h0.3v0.1h-1.2v-0.1h0.3l-1-1.2 1.1-0.9zm-1.5 2.2v-0.1h0.3v-3.9h-0.3v-0.1h0.1q0.4 0 0.7-0.1v4.1h0.4v0.1z"/><path class="c" d="m24.1 18c0 0-1.1 4.8-0.8 12.5 0.1 2.3 0.4 4.4 0.7 6.2 0.2 1.7 0.3 2.2 0.9 4.2l-0.1 1.2c0 0-4.2-13.3-0.7-24.1z"/><path class="c" d="m26.7 13.9c0 0 0.9-0.4 2.3-0.6 0 0 1.4 2.7-2.2 7.3 0 0 2.2-4.8 1.7-6.3 0 0-0.6-0.4-1.8-0.4z"/><path class="c" d="m26.2 22c0 0 0.9 0.2 1.3-0.1 0 0-0.8 3.1-0.6 4.8 0.2 1.8-1.3 2.9-1.3 2.9 0 0 1.3-1.7 0.9-3-0.3-0.9 0-3.3 0.4-4 0 0-0.4-0.1-0.7-0.6z"/><path class="c" d="m25.4 30.3c0 0 1.4-0.2 1.5-0.9 0 0 0.2 4.2-1.7 5.9 0 0 1.4-2.3 1.2-4.6z"/><path class="c" d="m21.5 32c0 0-0.5 0.5-1.8-0.6 0 0 0.4 2.8 3.1 4.1 0 0-1.9-1.3-2.4-2.8 0 0 0.7-0.2 1.1-0.7z"/><path class="c" d="m21 30.9c0 0-1.8-4.6-1.4-10.9 0 0 0.4 1.2 1.8 1.6 0 0-0.7 0.1-1 0 0 0-1 2.7 0.6 9.3z"/><path class="c" d="m28.7 9.4c0 0-0.7-5-5 0.1-3.4 4-3 7.4-2.8 9.4 0.1 0.5-0.6-5.2 3.1-8.9 3.8-3.7 4.6-0.8 4.7-0.6z"/><path class="d" d="m22.4 5.1c0 0-3.4-1-4.4 10.2 0 0-0.9-3.5 1.3-8.3 2.1-4.9 3.1-1.9 3.1-1.9z"/><path class="d" d="m18.2 4.3c0 0-1.7 2.6-1.3 5.3 0 0-1.3-5.2 1.3-5.3z"/><path class="d" d="m30.8 11.5c0 0 2.1-0.7-0.8 6.8 0 0 1.5-2.2 2.4-5.7 0.6-2.2-1.6-1.1-1.6-1.1z"/><path class="d" d="m34.1 10.9c0 0 1.5 1.3 0.4 3 0 0 2.6-2.6-0.4-3z"/><path class="d" d="m14 43.6c0 0.1 0 0.2-0.1 0.2-0.2 0-0.2-0.1-0.2-0.2v-0.6h0.1v0.5c0 0.2 0 0.3 0.1 0.3 0.1 0 0.1-0.1 0.1-0.3v-0.5z"/><path class="d" d="m15.1 43v0.5q0 0.1 0 0.2 0-0.1 0-0.1l-0.2-0.6h-0.1v0.8h0.1v-0.5q0-0.1-0.1-0.2 0.1 0.1 0.1 0.1l0.2 0.6z"/><path class="d" d="m16 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m16.9 43.8h-0.1l-0.1-0.8 0.2 0.6q0 0 0 0.1 0-0.1 0-0.1l0.1-0.6h0.1z"/><path class="d" d="m18 43h-0.2v0.3h0.2v0.1h-0.2v0.4h0.2-0.2v-0.8h0.2z"/><path class="d" d="m18.8 43.8v-0.8c0.2 0 0.3 0 0.3 0.2 0 0.1 0 0.2-0.2 0.2l0.2 0.4h-0.1l-0.2-0.4v0.4zm0.1-0.5h0.1c0.1 0 0.1 0 0.1-0.1 0-0.2-0.1-0.2-0.2-0.2z"/><path class="d" d="m20.1 43.1q0-0.1-0.1-0.1-0.1 0-0.1 0.2c0 0.1 0 0.1 0.1 0.2 0.1 0 0.2 0.1 0.2 0.2 0 0.1-0.1 0.2-0.3 0.2q0 0-0.1 0v-0.1q0.1 0.1 0.1 0.1c0.1 0 0.2-0.1 0.2-0.2 0-0.1-0.1-0.1-0.2-0.2-0.1 0-0.1-0.1-0.1-0.2 0-0.1 0-0.3 0.2-0.3q0 0 0.1 0.1z"/><path class="d" d="m21.2 43.8h-0.1v-0.2h-0.2v0.2h-0.1l0.2-0.8zm-0.1-0.3l-0.1-0.3q0-0.1 0-0.2 0 0.1 0 0.2l-0.1 0.3z"/><path class="d" d="m22 43.8h0.2-0.3v-0.8h0.1z"/><path class="d" d="m24 43.1q-0.1-0.1-0.2-0.1-0.1 0-0.1 0.2c0 0.1 0.1 0.1 0.2 0.2 0 0 0.1 0.1 0.1 0.2 0 0.1-0.1 0.2-0.2 0.2q-0.1 0-0.1 0v-0.1q0 0.1 0.1 0.1c0.1 0 0.1-0.1 0.1-0.2 0-0.1 0-0.1-0.1-0.2-0.1 0-0.2-0.1-0.2-0.2 0-0.1 0.1-0.3 0.2-0.3q0.1 0 0.2 0.1z"/><path class="d" d="m25 43.7q0 0.1-0.1 0.1c-0.1 0-0.1-0.3-0.1-0.4 0-0.2 0-0.4 0.1-0.4q0.1 0 0.1 0.1v-0.1q0-0.1-0.1-0.1c-0.2 0-0.2 0.4-0.2 0.5 0 0.2 0 0.4 0.2 0.4q0.1 0 0.1 0z"/><path class="d" d="m25.8 43.8v-0.8c0.2 0 0.3 0 0.3 0.2 0 0.1 0 0.2-0.2 0.2l0.2 0.4h-0.1l-0.2-0.4v0.4zm0.1-0.5c0.2 0 0.2 0 0.2-0.1 0-0.2-0.1-0.2-0.2-0.2z"/><path class="d" d="m26.9 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m27.6 43.8v-0.8h0.1c0.1 0 0.3 0 0.3 0.2 0 0.2-0.1 0.2-0.3 0.2v0.4zm0.1-0.5c0.1 0 0.1 0 0.1-0.1 0-0.1 0-0.2-0.1-0.2z"/><path class="d" d="m28.9 43h-0.3 0.1v0.8h0.1v-0.8h0.1z"/><path class="d" d="m29.7 43.8h-0.1v-0.8h0.1z"/><path class="d" d="m30.8 43.8h-0.1l-0.2-0.6q0 0 0-0.1 0 0.1 0 0.2v0.5h-0.1v-0.8h0.1l0.2 0.6q0 0 0 0.1 0-0.1 0-0.2v-0.5h0.1z"/><path class="d" d="m31.7 43.4h0.2v0.1c0 0.2 0 0.3-0.2 0.3-0.2 0-0.2-0.2-0.2-0.4 0-0.2 0-0.5 0.2-0.5q0.2 0.1 0.2 0.2h-0.1c0 0 0-0.1-0.1-0.1-0.1 0-0.1 0.2-0.1 0.4 0 0.3 0 0.4 0.1 0.4 0.1 0 0.1-0.1 0.1-0.3v-0.1h-0.1z"/></svg>
\ No newline at end of file
diff --git a/snippets/python/[tkinter]/menus/context-menu.md b/snippets/python/[tkinter]/menus/context-menu.md
deleted file mode 100644
index 866ad08b..00000000
--- a/snippets/python/[tkinter]/menus/context-menu.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Context Menu
-description: Opens a menu when you right click a widget.
-author: Legopitstop
-tags: menu
----
-
-```py
-from tkinter import Tk, Label, Menu
-
-
-class App(Tk):
-    def __init__(self):
-        Tk.__init__(self)
-        self.geometry("200x200")
-
-        lbl = Label(self, text="Right-click me!")
-        lbl.bind("<Button-3>", self.do_popup)
-        lbl.pack(expand=1, ipadx=10, ipady=10)
-
-    def do_popup(self, event):
-        menu = Menu(self, tearoff=0)
-        menu.add_command(label="Option 1", command=lambda: print("Option 1"))
-        menu.add_command(label="Option 2", command=lambda: print("Option 2"))
-        menu.post(event.x_root, event.y_root)
-
-
-# Usage:
-root = App()
-root.mainloop()
-```
diff --git a/snippets/python/basics/hello-world.md b/snippets/python/basics/hello-world.md
deleted file mode 100644
index 0910bbb5..00000000
--- a/snippets/python/basics/hello-world.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: James-Beans
-tags: printing,hello-world
----
-
-```py
-print("Hello, World!") # Prints Hello, World! to the terminal.
-```
diff --git a/snippets/python/datetime-utilities/calculate-date-difference-in-milliseconds.md b/snippets/python/datetime-utilities/calculate-date-difference-in-milliseconds.md
deleted file mode 100644
index a24139b5..00000000
--- a/snippets/python/datetime-utilities/calculate-date-difference-in-milliseconds.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Calculate Date Difference in Milliseconds
-description: Calculates the difference between two dates in milliseconds.
-author: e3nviction
-tags: datetime,difference
----
-
-```py
-from datetime import datetime
-
-def date_difference_in_millis(date1, date2):
-    delta = date2 - date1
-    return delta.total_seconds() * 1000
-
-# Usage:
-d1 = datetime(2023, 1, 1, 12, 0, 0)
-d2 = datetime(2023, 1, 1, 12, 1, 0)
-date_difference_in_millis(d1, d2) # Returns: 60000
-```
diff --git a/snippets/python/datetime-utilities/check-if-date-is-a-weekend.md b/snippets/python/datetime-utilities/check-if-date-is-a-weekend.md
deleted file mode 100644
index 0bb1c80c..00000000
--- a/snippets/python/datetime-utilities/check-if-date-is-a-weekend.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Check if Date is a Weekend
-description: Checks whether a given date falls on a weekend.
-author: axorax
-tags: datetime,weekend
----
-
-```py
-from datetime import datetime
-
-def is_weekend(date):
-    try:
-        return date.weekday() >= 5  # Saturday = 5, Sunday = 6
-    except AttributeError:
-        raise TypeError("Input must be a datetime object")
-
-# Usage:
-date = datetime(2023, 1, 1)
-is_weekend(date) # Returns: True (Sunday)
-```
diff --git a/snippets/python/datetime-utilities/day-of-the-week-string.md b/snippets/python/datetime-utilities/day-of-the-week-string.md
deleted file mode 100644
index 3846602a..00000000
--- a/snippets/python/datetime-utilities/day-of-the-week-string.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Day of the Week String
-description: Gets the string of the day of the week for a given date.
-author: axorax
-tags: datetime,weekday
----
-
-```py
-from datetime import datetime
-
-def get_day_of_week(date):
-    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
-    try:
-        return days[date.weekday()]
-    except IndexError:
-        raise ValueError("Invalid date")
-
-# Usage:
-date = datetime(2023, 1, 1)
-get_day_of_week(date) # Returns: 'Sunday'
-```
diff --git a/snippets/python/datetime-utilities/generate-date-range-list.md b/snippets/python/datetime-utilities/generate-date-range-list.md
deleted file mode 100644
index 2d92b00a..00000000
--- a/snippets/python/datetime-utilities/generate-date-range-list.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: Generate Date Range List
-description: Generates a list of dates between two given dates.
-author: axorax
-tags: datetime,range
----
-
-```py
-from datetime import datetime, timedelta
-
-def generate_date_range(start_date, end_date):
-    if start_date > end_date:
-        raise ValueError("start_date must be before end_date")
-
-    current_date = start_date
-    date_list = []
-    while current_date <= end_date:
-        date_list.append(current_date)
-        current_date += timedelta(days=1)
-
-    return date_list
-
-# Usage:
-start = datetime(2023, 1, 1)
-end = datetime(2023, 1, 5)
-dates = generate_date_range(start, end)
-for d in dates:
-    print(d.strftime('%Y-%m-%d'))
-# Outputs: '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05'
-```
diff --git a/snippets/python/datetime-utilities/get-current-date-and-time-as-string.md b/snippets/python/datetime-utilities/get-current-date-and-time-as-string.md
deleted file mode 100644
index 6b56fe56..00000000
--- a/snippets/python/datetime-utilities/get-current-date-and-time-as-string.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Get Current Date and Time as String
-description: Fetches the current date and time as a formatted string.
-author: e3nviction
-tags: datetime,current,string
----
-
-```py
-from datetime import datetime
-
-def get_current_datetime_string():
-    return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
-
-# Usage:
-get_current_datetime_string() # Returns: '2023-01-01 12:00:00'
-```
diff --git a/snippets/python/datetime-utilities/get-number-of-days-in-a-month.md b/snippets/python/datetime-utilities/get-number-of-days-in-a-month.md
deleted file mode 100644
index 61fcb0f8..00000000
--- a/snippets/python/datetime-utilities/get-number-of-days-in-a-month.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Get Number of Days in a Month
-description: Determines the number of days in a specific month and year.
-author: axorax
-tags: datetime,calendar
----
-
-```py
-from calendar import monthrange
-from datetime import datetime
-
-def get_days_in_month(year, month):
-    try:
-        return monthrange(year, month)[1]
-    except ValueError as e:
-        raise ValueError(f"Invalid month or year: {e}")
-
-# Usage:
-get_days_in_month(2023, 2) # Returns: 28 (for non-leap year February)
-```
diff --git a/snippets/python/datetime-utilities/measure-execution-time.md b/snippets/python/datetime-utilities/measure-execution-time.md
deleted file mode 100644
index ad8bc341..00000000
--- a/snippets/python/datetime-utilities/measure-execution-time.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Measure Execution Time
-description: Measures the execution time of a code block.
-author: technoph1le
-tags: time,execution
----
-
-```py
-import time
-
-def measure_time(func, *args):
-    start = time.time()
-    result = func(*args)
-    end = time.time()
-    print(f'Execution time: {end - start:.6f} seconds')
-    return result
-
-# Usage:
-def slow_function():
-    time.sleep(2)
-
-measure_time(slow_function) # Outputs an execution time of ~2s
-```
diff --git a/snippets/python/error-handling/create-custom-exception-type.md b/snippets/python/error-handling/create-custom-exception-type.md
deleted file mode 100644
index c985e069..00000000
--- a/snippets/python/error-handling/create-custom-exception-type.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Create Custom Exception Type
-description: Create a Custom Exception Type that can be called with raise.
-author: mrcool7387
-tags: python,error-creation,organisation,utility
----
-
-```py
-class ExceptionName(BaseException):
-    def __init__(message: str):
-        super().__init__(message)
-
-# Usage
-a: int = 1
-
-if a > 0:
-  raise ExceptionName('Error Message')
-```
diff --git a/snippets/python/error-handling/retry-function-execution-on-exception.md b/snippets/python/error-handling/retry-function-execution-on-exception.md
deleted file mode 100644
index 3dac2f56..00000000
--- a/snippets/python/error-handling/retry-function-execution-on-exception.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Retry Function Execution on Exception
-description: Retries a function execution a specified number of times if it raises an exception.
-author: axorax
-tags: error-handling,retry
----
-
-```py
-import time
-
-def retry(func, retries=3, delay=1):
-    for attempt in range(retries):
-        try:
-            return func()
-        except Exception as e:
-            print(f"Attempt {attempt + 1} failed: {e}")
-            time.sleep(delay)
-    raise Exception("All retry attempts failed")
-
-# Usage:
-def unstable_function():
-    raise ValueError("Simulated failure")
-
-# Retry 3 times with 2 seconds delay:
-try:
-    retry(unstable_function, retries=3, delay=2)
-except Exception as e:
-    print(e)  # Output: All retry attempts failed
-```
diff --git a/snippets/python/file-handling/find-files.md b/snippets/python/file-handling/find-files.md
deleted file mode 100644
index 92b22972..00000000
--- a/snippets/python/file-handling/find-files.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Find Files
-description: Finds all files of the specified type within a given directory.
-author: Jackeastern
-tags: os,filesystem,file_search
----
-
-```py
-import os
-
-def find_files(directory, file_type):
-  file_type = file_type.lower()  # Convert file_type to lowercase
-  found_files = []
-
-  for root, _, files in os.walk(directory):
-    for file in files:
-      file_ext = os.path.splitext(file)[1].lower()
-      if file_ext == file_type:
-        full_path = os.path.join(root, file)
-        found_files.append(full_path)
-
-  return found_files
-
-# Example Usage:
-find_files('/path/to/your/directory', '.pdf') # Returns all .pdf in directory
-```
diff --git a/snippets/python/file-handling/get-file-extension.md b/snippets/python/file-handling/get-file-extension.md
deleted file mode 100644
index 2947eec2..00000000
--- a/snippets/python/file-handling/get-file-extension.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Get File Extension
-description: Gets the extension of a file.
-author: axorax
-tags: file,extension
----
-
-```py
-import os
-
-def get_file_extension(filepath):
-    return os.path.splitext(filepath)[1]
-
-# Usage:
-get_file_extension('example.txt') # Returns: '.txt'
-```
diff --git a/snippets/python/file-handling/list-files-in-directory.md b/snippets/python/file-handling/list-files-in-directory.md
deleted file mode 100644
index 40adf0ac..00000000
--- a/snippets/python/file-handling/list-files-in-directory.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: List Files in Directory
-description: Lists all files in a specified directory.
-author: axorax
-tags: file,list,directory
----
-
-```py
-import os
-
-def list_files(directory):
-    return [f for f in os.listdir(directory) if os.path.isfile(os.path.join(directory, f))]
-
-# Usage:
-list_files('/path/to/directory') # Returns: List of file in the directory
-```
diff --git a/snippets/python/file-handling/read-file-in-chunks.md b/snippets/python/file-handling/read-file-in-chunks.md
deleted file mode 100644
index 44a8bd4f..00000000
--- a/snippets/python/file-handling/read-file-in-chunks.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Read File in Chunks
-description: Reads a file in chunks of a specified size.
-author: axorax
-tags: file,read,chunks
----
-
-```py
-def read_file_in_chunks(filepath, chunk_size):
-    with open(filepath, 'r') as file:
-        while chunk := file.read(chunk_size):
-            yield chunk
-
-# Usage:
-for chunk in read_file_in_chunks('example.txt', 1024):
-    print(chunk) # Outputs: Chucks of 1024 bytes
-```
diff --git a/snippets/python/icon.svg b/snippets/python/icon.svg
deleted file mode 100644
index 3755e98e..00000000
--- a/snippets/python/icon.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="python-logo-title python-logo-description">
-<title id="python-logo-title">Python Logo</title>
-<desc id="python-logo-description">A blue and yellow snake symbol forming a plus with a somewhat circular or rounded shape</desc>
-<path d="M24.7621 4.78437C23.1129 4.79218 21.5387 4.93242 20.1528 5.17773C16.0707 5.89882 15.3301 7.4082 15.3301 10.1922V13.8684H24.9758V15.0937H11.7098C8.90666 15.0937 6.45197 16.7785 5.684 19.9848C4.79806 23.6586 4.759 25.9516 5.684 29.7879C6.36955 32.6437 8.00705 34.6781 10.8106 34.6781H14.1274V30.2711C14.1274 27.0871 16.8817 24.2789 20.1531 24.2789H29.7879C32.4699 24.2789 34.6106 22.0703 34.6106 19.3773V10.1926C34.6106 7.57812 32.4051 5.61445 29.7879 5.17812C28.1301 4.90234 26.411 4.77695 24.7621 4.78437ZM19.5457 7.74101C20.5418 7.74101 21.3559 8.56796 21.3559 9.58515C21.3559 10.598 20.5422 11.4172 19.5457 11.4172C18.5457 11.4172 17.736 10.598 17.736 9.58515C17.7356 8.56796 18.5457 7.74101 19.5457 7.74101Z" fill="url(#paint0_linear_98_155)"/>
-<path d="M35.8133 15.0937V19.3773C35.8133 22.6977 32.9977 25.4926 29.7875 25.4926H20.1527C17.5137 25.4926 15.3301 27.7516 15.3301 30.3945V39.5801C15.3301 42.1937 17.6027 43.7316 20.1527 44.4812C23.2059 45.3785 26.134 45.541 29.7875 44.4812C32.2156 43.7777 34.6102 42.3629 34.6102 39.5801V35.9035H24.9758V34.6777H39.4336C42.2367 34.6777 43.282 32.7227 44.257 29.7875C45.2641 26.766 45.2207 23.8602 44.257 19.9844C43.5641 17.1934 42.241 15.0934 39.4336 15.0934L35.8133 15.0937ZM30.3941 38.3543C31.3945 38.3543 32.2043 39.1734 32.2043 40.1871C32.2043 41.2035 31.3941 42.0305 30.3941 42.0305C29.398 42.0305 28.5844 41.2035 28.5844 40.1871C28.5844 39.1734 29.398 38.3543 30.3941 38.3543Z" fill="url(#paint1_linear_98_155)"/>
-<path opacity="0.444" d="M38.0113 46.7176C38.0113 48.1016 32.2238 49.2238 25.0851 49.2238C17.9461 49.2238 12.1586 48.1016 12.1586 46.7176C12.1586 45.3336 17.9457 44.2109 25.0851 44.2109C32.2238 44.2109 38.0113 45.3328 38.0113 46.7176Z" fill="url(#paint2_radial_98_155)"/>
-<defs>
-<linearGradient id="paint0_linear_98_155" x1="4.03786" y1="5.93383" x2="26.2854" y2="24.9064" gradientUnits="userSpaceOnUse">
-<stop stop-color="#5A9FD4"/>
-<stop offset="1" stop-color="#306998"/>
-</linearGradient>
-<linearGradient id="paint1_linear_98_155" x1="34.6558" y1="36.7001" x2="26.6775" y2="25.5118" gradientUnits="userSpaceOnUse">
-<stop stop-color="#FFD43B"/>
-<stop offset="1" stop-color="#FFE873"/>
-</linearGradient>
-<radialGradient id="paint2_radial_98_155" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(25.0329 46.6458) rotate(-90) scale(2.50716 11.021)">
-<stop stop-color="#B8B8B8" stop-opacity="0.498"/>
-<stop offset="1" stop-color="#7F7F7F" stop-opacity="0"/>
-</radialGradient>
-</defs>
-</svg>
diff --git a/snippets/python/json-manipulation/filter-json-data.md b/snippets/python/json-manipulation/filter-json-data.md
deleted file mode 100644
index 79edafd6..00000000
--- a/snippets/python/json-manipulation/filter-json-data.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Filter JSON Data
-description: Filters a JSON object based on a condition and returns the filtered data.
-author: axorax
-tags: json,filter,data
----
-
-```py
-import json
-
-def filter_json_data(filepath, condition):
-    with open(filepath, 'r') as file:
-        data = json.load(file)
-
-    # Filter data based on the provided condition
-    filtered_data = [item for item in data if condition(item)]
-
-    return filtered_data
-
-# Usage:
-condition = lambda x: x['age'] > 25
-filter_json_data('data.json', condition) # Returns: `data.json` filtered with `condition`
-```
diff --git a/snippets/python/json-manipulation/flatten-nested-json.md b/snippets/python/json-manipulation/flatten-nested-json.md
deleted file mode 100644
index 3a1710ba..00000000
--- a/snippets/python/json-manipulation/flatten-nested-json.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Flatten Nested JSON
-description: Flattens a nested JSON object into a flat dictionary.
-author: axorax
-tags: json,flatten,nested
----
-
-```py
-def flatten_json(nested_json, prefix=''):
-    flat_dict = {}
-    for key, value in nested_json.items():
-        if isinstance(value, dict):
-            flat_dict.update(flatten_json(value, prefix + key + '.'))
-        else:
-            flat_dict[prefix + key] = value
-    return flat_dict
-
-# Usage:
-nested_json = {'name': 'John', 'address': {'city': 'New York', 'zip': '10001'}}
-flatten_json(nested_json) # Returns: {'name': 'John', 'address.city': 'New York', 'address.zip': '10001'}
-```
diff --git a/snippets/python/json-manipulation/merge-multiple-json-files.md b/snippets/python/json-manipulation/merge-multiple-json-files.md
deleted file mode 100644
index c32a3f46..00000000
--- a/snippets/python/json-manipulation/merge-multiple-json-files.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Merge Multiple JSON Files
-description: Merges multiple JSON files into one and writes the merged data into a new file.
-author: axorax
-tags: json,merge,file
----
-
-```py
-import json
-
-def merge_json_files(filepaths, output_filepath):
-    merged_data = []
-
-    # Read each JSON file and merge their data
-    for filepath in filepaths:
-        with open(filepath, 'r') as file:
-            data = json.load(file)
-            merged_data.extend(data)
-
-    # Write the merged data into a new file
-    with open(output_filepath, 'w') as file:
-        json.dump(merged_data, file, indent=4)
-
-# Usage:
-files_to_merge = ['file1.json', 'file2.json']
-merge_json_files(files_to_merge, 'merged.json')
-```
diff --git a/snippets/python/json-manipulation/read-json-file.md b/snippets/python/json-manipulation/read-json-file.md
deleted file mode 100644
index e3db2285..00000000
--- a/snippets/python/json-manipulation/read-json-file.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Read JSON File
-description: Reads a JSON file and parses its content.
-author: e3nviction
-tags: json,file,read
----
-
-```py
-import json
-
-def read_json(filepath):
-    with open(filepath, 'r') as file:
-        return json.load(file)
-
-# Usage:
-read_json('data.json') # Returns: Content of file as dict
-```
diff --git a/snippets/python/json-manipulation/update-json-file.md b/snippets/python/json-manipulation/update-json-file.md
deleted file mode 100644
index c8b191a6..00000000
--- a/snippets/python/json-manipulation/update-json-file.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Update JSON File
-description: Updates an existing JSON file with new data or modifies the existing values.
-author: axorax
-tags: json,update,file
----
-
-```py
-import json
-
-def update_json(filepath, new_data):
-    # Read the existing JSON data
-    with open(filepath, 'r') as file:
-        data = json.load(file)
-
-    # Update the data with the new content
-    data.update(new_data)
-
-    # Write the updated data back to the JSON file
-    with open(filepath, 'w') as file:
-        json.dump(data, file, indent=4)
-
-# Usage:
-new_data = {'age': 31}
-update_json('data.json', new_data) # Updates `age` in `data.json` without modifying other keys
-```
diff --git a/snippets/python/json-manipulation/write-json-file.md b/snippets/python/json-manipulation/write-json-file.md
deleted file mode 100644
index 18a66b36..00000000
--- a/snippets/python/json-manipulation/write-json-file.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Write JSON File
-description: Writes a dictionary to a JSON file.
-author: e3nviction
-tags: json,file,write
----
-
-```py
-import json
-
-def write_json(filepath, data):
-    with open(filepath, 'w') as file:
-        json.dump(data, file, indent=4)
-
-# Usage:
-data = {'name': 'John', 'age': 30}
-write_json('data.json', data)
-```
diff --git a/snippets/python/list-manipulation/find-duplicates-in-a-list.md b/snippets/python/list-manipulation/find-duplicates-in-a-list.md
deleted file mode 100644
index 3a38c97c..00000000
--- a/snippets/python/list-manipulation/find-duplicates-in-a-list.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Find Duplicates in a List
-description: Identifies duplicate elements in a list.
-author: axorax
-tags: list,duplicates
----
-
-```py
-def find_duplicates(lst):
-    seen = set()
-    duplicates = set()
-    for item in lst:
-        if item in seen:
-            duplicates.add(item)
-        else:
-            seen.add(item)
-    return list(duplicates)
-
-# Usage:
-data = [1, 2, 3, 2, 4, 5, 1]
-find_duplicates(data) # Returns: [1, 2]
-```
diff --git a/snippets/python/list-manipulation/find-intersection-of-two-lists.md b/snippets/python/list-manipulation/find-intersection-of-two-lists.md
deleted file mode 100644
index 1682db62..00000000
--- a/snippets/python/list-manipulation/find-intersection-of-two-lists.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Find Intersection of Two Lists
-description: Finds the common elements between two lists.
-author: axorax
-tags: list,intersection
----
-
-```py
-def list_intersection(lst1, lst2):
-    return [item for item in lst1 if item in lst2]
-
-# Usage:
-list_a = [1, 2, 3, 4]
-list_b = [3, 4, 5, 6]
-list_intersection(list_a, list_b) # Returns: [3, 4]
-```
diff --git a/snippets/python/list-manipulation/find-maximum-difference-in-list.md b/snippets/python/list-manipulation/find-maximum-difference-in-list.md
deleted file mode 100644
index 776d6644..00000000
--- a/snippets/python/list-manipulation/find-maximum-difference-in-list.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Find Maximum Difference in List
-description: Finds the maximum difference between any two elements in a list.
-author: axorax
-tags: list,difference
----
-
-```py
-def max_difference(lst):
-    if not lst or len(lst) < 2:
-        return 0
-    return max(lst) - min(lst)
-
-# Usage:
-data = [10, 3, 5, 20, 7]
-max_difference(data) # Returns: 17
-```
diff --git a/snippets/python/list-manipulation/flatten-nested-list.md b/snippets/python/list-manipulation/flatten-nested-list.md
deleted file mode 100644
index bdcc1b66..00000000
--- a/snippets/python/list-manipulation/flatten-nested-list.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Flatten Nested List
-description: Flattens a multi-dimensional list into a single list.
-author: technoph1le
-tags: list,flatten
----
-
-```py
-def flatten_list(lst):
-    return [item for sublist in lst for item in sublist]
-
-# Usage:
-nested_list = [[1, 2], [3, 4], [5]]
-flatten_list(nested_list)  # Returns: [1, 2, 3, 4, 5]
-```
diff --git a/snippets/python/list-manipulation/flatten-unevenly-nested-lists.md b/snippets/python/list-manipulation/flatten-unevenly-nested-lists.md
deleted file mode 100644
index 98bd1273..00000000
--- a/snippets/python/list-manipulation/flatten-unevenly-nested-lists.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Flatten Unevenly Nested Lists
-description: Converts unevenly nested lists of any depth into a single flat list.
-author: agilarasu
-tags: list,flattening,nested-lists,depth
----
-
-```py
-def flatten(nested_list):
-    for item in nested_list:
-        if isinstance(item, list):
-            yield from flatten(item)
-        else:
-            yield item
-
-# Usage:
-nested_list = [1, [2, [3, 4]], 5]
-list(flatten(nested_list))  # Returns: [1, 2, 3, 4, 5]
-```
diff --git a/snippets/python/list-manipulation/partition-list.md b/snippets/python/list-manipulation/partition-list.md
deleted file mode 100644
index be2f832b..00000000
--- a/snippets/python/list-manipulation/partition-list.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Partition List
-description: Partitions a list into sublists of a given size.
-author: axorax
-tags: list,partition
----
-
-```py
-def partition_list(lst, size):
-    for i in range(0, len(lst), size):
-        yield lst[i:i + size]
-
-# Usage:
-data = [1, 2, 3, 4, 5, 6, 7]
-list(partition_list(data, 3)) # Returns: [[1, 2, 3], [4, 5, 6], [7]]
-```
diff --git a/snippets/python/list-manipulation/remove-duplicates.md b/snippets/python/list-manipulation/remove-duplicates.md
deleted file mode 100644
index 4416c22a..00000000
--- a/snippets/python/list-manipulation/remove-duplicates.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Remove Duplicates
-description: Removes duplicate elements from a list while maintaining order.
-author: technoph1le
-tags: list,duplicates,filter
----
-
-```py
-def remove_duplicates(lst):
-    return list(dict.fromkeys(lst))
-
-# Usage:
-remove_duplicates([1, 2, 2, 3, 4, 4, 5])  # Returns: [1, 2, 3, 4, 5]
-```
diff --git a/snippets/python/math-and-numbers/calculate-compound-interest.md b/snippets/python/math-and-numbers/calculate-compound-interest.md
deleted file mode 100644
index 18f81a9e..00000000
--- a/snippets/python/math-and-numbers/calculate-compound-interest.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Calculate Compound Interest
-description: Calculates compound interest for a given principal amount, rate, and time period.
-author: axorax
-tags: math,compound interest,finance
----
-
-```py
-def compound_interest(principal, rate, time, n=1):
-    return principal * (1 + rate / n) ** (n * time)
-
-# Usage:
-compound_interest(1000, 0.05, 5) # Returns: 1276.2815625000003
-compound_interest(1000, 0.05, 5, 12) # Returns: 1283.68
-```
diff --git a/snippets/python/math-and-numbers/check-perfect-square.md b/snippets/python/math-and-numbers/check-perfect-square.md
deleted file mode 100644
index 41395d71..00000000
--- a/snippets/python/math-and-numbers/check-perfect-square.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Check Perfect Square
-description: Checks if a number is a perfect square.
-author: axorax
-tags: math,perfect square,check
----
-
-```py
-def is_perfect_square(n):
-    if n < 0:
-        return False
-    root = int(n**0.5)
-    return root * root == n
-
-# Usage:
-is_perfect_square(16) # Returns: True
-is_perfect_square(20) # Returns: False
-```
diff --git a/snippets/python/math-and-numbers/check-prime-number.md b/snippets/python/math-and-numbers/check-prime-number.md
deleted file mode 100644
index 46851399..00000000
--- a/snippets/python/math-and-numbers/check-prime-number.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Check Prime Number
-description: Checks if a number is a prime number.
-author: technoph1le
-tags: math,prime,check
----
-
-```py
-def is_prime(n):
-    if n <= 1:
-        return False
-    for i in range(2, int(n**0.5) + 1):
-        if n % i == 0:
-            return False
-    return True
-
-# Usage:
-is_prime(17) # Returns: True
-```
diff --git a/snippets/python/math-and-numbers/convert-binary-to-decimal.md b/snippets/python/math-and-numbers/convert-binary-to-decimal.md
deleted file mode 100644
index 6f1c4771..00000000
--- a/snippets/python/math-and-numbers/convert-binary-to-decimal.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert Binary to Decimal
-description: Converts a binary string to its decimal equivalent.
-author: axorax
-tags: math,binary,decimal,conversion
----
-
-```py
-def binary_to_decimal(binary_str):
-    return int(binary_str, 2)
-
-# Usage:
-binary_to_decimal('1010') # Returns: 10
-binary_to_decimal('1101') # Returns: 13
-```
diff --git a/snippets/python/math-and-numbers/convert-bytes-to-human-readable-format.md b/snippets/python/math-and-numbers/convert-bytes-to-human-readable-format.md
deleted file mode 100644
index 96f5ddc7..00000000
--- a/snippets/python/math-and-numbers/convert-bytes-to-human-readable-format.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Convert Bytes to Human-Readable Format
-description: Converts a size in bytes to a human-readable format.
-author: axorax
-tags: bytes,format
----
-
-```py
-def bytes_to_human_readable(num):
-    for unit in ['B', 'KB', 'MB', 'GB', 'TB', 'PB']:
-        if num < 1024:
-            return f"{num:.2f} {unit}"
-        num /= 1024
-
-# Usage:
-bytes_to_human_readable(123456789) # Returns: '117.74 MB'
-```
diff --git a/snippets/python/math-and-numbers/find-lcm-least-common-multiple.md b/snippets/python/math-and-numbers/find-lcm-least-common-multiple.md
deleted file mode 100644
index c749bf7f..00000000
--- a/snippets/python/math-and-numbers/find-lcm-least-common-multiple.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Find LCM (Least Common Multiple)
-description: Calculates the least common multiple (LCM) of two numbers.
-author: axorax
-tags: python,math,lcm,gcd,utility
----
-
-```py
-def lcm(a, b):
-    return abs(a * b) // gcd(a, b)
-
-# Usage:
-lcm(12, 15) # Returns: 60
-lcm(7, 5) # Returns: 35
-```
diff --git a/snippets/python/math-and-numbers/linear-mapping.md b/snippets/python/math-and-numbers/linear-mapping.md
deleted file mode 100644
index 3f7f5daf..00000000
--- a/snippets/python/math-and-numbers/linear-mapping.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Linear Mapping
-description: remaps a value from one range to another
-author: JasimAlrawie
-tags: math,number-theory,algebra
----
-
-```py
-def linear_mapping(value, min_in, max_in, min_out, max_out):
-    return (value - min_in) * (max_out - min_out) / (max_in - min_in) + min_out
-
-#Usage:
-linear_mapping(value, 0, 1, 0, 255)    # remaps the value from (0,1) to (0,255)
-linear_mapping(value, 0, PI*2, 0, 360) # remaps the value from rad to deg
-linear_mapping(value, -1, 1, 1, 8)     # remaps the value from (-1,1) to (1,8)
-```
\ No newline at end of file
diff --git a/snippets/python/math-and-numbers/solve-quadratic-equation.md b/snippets/python/math-and-numbers/solve-quadratic-equation.md
deleted file mode 100644
index e4d56263..00000000
--- a/snippets/python/math-and-numbers/solve-quadratic-equation.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Solve Quadratic Equation
-description: Solves a quadratic equation ax^2 + bx + c = 0 and returns the roots.
-author: axorax
-tags: math,quadratic,equation,solver
----
-
-```py
-import cmath
-
-def solve_quadratic(a, b, c):
-    discriminant = cmath.sqrt(b**2 - 4 * a * c)
-    root1 = (-b + discriminant) / (2 * a)
-    root2 = (-b - discriminant) / (2 * a)
-    return root1, root2
-
-# Usage:
-solve_quadratic(1, -3, 2) # Returns: ((2+0j), (1+0j))
-solve_quadratic(1, 2, 5) # Returns: ((-1+2j), (-1-2j))
-```
diff --git a/snippets/python/sqlite-database/create-sqlite-database-table.md b/snippets/python/sqlite-database/create-sqlite-database-table.md
deleted file mode 100644
index be2da737..00000000
--- a/snippets/python/sqlite-database/create-sqlite-database-table.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Create SQLite Database Table
-description: Creates a table in an SQLite database with a dynamic schema.
-author: e3nviction
-tags: sqlite,database,table
----
-
-```py
-import sqlite3
-
-def create_table(db_name, table_name, schema):
-    conn = sqlite3.connect(db_name)
-    cursor = conn.cursor()
-    schema_string = ', '.join([f'{col} {dtype}' for col, dtype in schema.items()])
-    cursor.execute(f'''
-        CREATE TABLE IF NOT EXISTS {table_name} (
-            {schema_string}
-        )''')
-    conn.commit()
-    conn.close()
-
-# Usage:
-db_name = 'example.db'
-table_name = 'users'
-schema = {
-    'id': 'INTEGER PRIMARY KEY',
-    'name': 'TEXT',
-    'age': 'INTEGER',
-    'email': 'TEXT'
-}
-create_table(db_name, table_name, schema)
-```
diff --git a/snippets/python/sqlite-database/insert-data-into-sqlite-table.md b/snippets/python/sqlite-database/insert-data-into-sqlite-table.md
deleted file mode 100644
index 44c4e736..00000000
--- a/snippets/python/sqlite-database/insert-data-into-sqlite-table.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-title: Insert Data into Sqlite Table
-description: Inserts a row into a specified SQLite table using a dictionary of fields and values.
-author: e3nviction
-tags: sqlite,database
----
-
-```py
-import sqlite3
-
-def insert_into_table(db_path, table_name, data):
-    with sqlite3.connect(db_path) as conn:
-        columns = ', '.join(data.keys())
-        placeholders = ', '.join(['?'] * len(data))
-        sql = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})"
-        conn.execute(sql, tuple(data.values()))
-        conn.commit()
-
-# Usage:
-db_path = 'example.db'
-table_name = 'users'
-data = {
-    'name': 'John Doe',
-    'email': 'john@example.com',
-    'age': 30
-}
-insert_into_table(db_path, table_name, data)
-```
diff --git a/snippets/python/sqlite-database/query-data-from-sqlite-table.md b/snippets/python/sqlite-database/query-data-from-sqlite-table.md
deleted file mode 100644
index 4a06079e..00000000
--- a/snippets/python/sqlite-database/query-data-from-sqlite-table.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Query Data from Sqlite Table
-description: Fetches data from a specified SQLite table, with options for selecting specific columns and applying a WHERE clause.
-author: pl44t
-tags: sqlite,database
----
-
-```py
-import sqlite3
-
-def query_table(db_path, table_name, columns='*', where_clause=None):
-    with sqlite3.connect(db_path) as conn:
-        cursor = conn.cursor()
-        sql = f"SELECT {columns} FROM {table_name}"
-        if where_clause:
-            sql += f" WHERE {where_clause}"
-        cursor.execute(sql)
-        return cursor.fetchall()
-
-# Usage:
-db_path = 'example.db'
-table_name = 'users'
-columns = 'id, name, email'
-where_clause = 'age > 25'
-result = query_table(db_path, table_name, columns, where_clause)
-for row in result:
-    print(row)
-
-```
diff --git a/snippets/python/sqlite-database/update-records-in-sqlite-table.md b/snippets/python/sqlite-database/update-records-in-sqlite-table.md
deleted file mode 100644
index ffee4e87..00000000
--- a/snippets/python/sqlite-database/update-records-in-sqlite-table.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Update Records in Sqlite Table
-description: Updates records in a specified SQLite table, allowing dynamic column updates and an optional WHERE clause.
-author: pl44t
-tags: sqlite,database
----
-
-```py
-import sqlite3
-
-def update_table(db_path, table_name, updates, where_clause=None):
-    with sqlite3.connect(db_path) as conn:
-        set_clause = ', '.join([f"{col} = ?" for col in updates.keys()])
-        sql = f"UPDATE {table_name} SET {set_clause}"
-        if where_clause:
-            sql += f" WHERE {where_clause}"
-        conn.execute(sql, tuple(updates.values()))
-        conn.commit()
-
-# Usage:
-db_path = 'example.db'
-table_name = 'users'
-updates = {'name': 'Jane Doe', 'age': 28}
-where_clause = "id = 1"
-update_table(db_path, table_name, updates, where_clause)
-
-```
diff --git a/snippets/python/string-manipulation/capitalize-words.md b/snippets/python/string-manipulation/capitalize-words.md
deleted file mode 100644
index ed55311d..00000000
--- a/snippets/python/string-manipulation/capitalize-words.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Capitalize Words
-description: Capitalizes the first letter of each word in a string.
-author: axorax
-tags: string,capitalize
----
-
-```py
-def capitalize_words(s):
-    return ' '.join(word.capitalize() for word in s.split())
-
-# Usage:
-capitalize_words('hello world') # Returns: 'Hello World'
-```
diff --git a/snippets/python/string-manipulation/check-anagram.md b/snippets/python/string-manipulation/check-anagram.md
deleted file mode 100644
index ddaa63b6..00000000
--- a/snippets/python/string-manipulation/check-anagram.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Check Anagram
-description: Checks if two strings are anagrams of each other.
-author: SteliosGee
-tags: string,anagram,check
----
-
-```py
-def is_anagram(s1, s2):
-    return sorted(s1) == sorted(s2)
-
-# Usage:
-is_anagram('listen', 'silent') # Returns: True
-```
diff --git a/snippets/python/string-manipulation/check-palindrome.md b/snippets/python/string-manipulation/check-palindrome.md
deleted file mode 100644
index 7c3d5b06..00000000
--- a/snippets/python/string-manipulation/check-palindrome.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Check Palindrome
-description: Checks if a string is a palindrome.
-author: technoph1le
-tags: string,palindrome
----
-
-```py
-def is_palindrome(s):
-    s = s.lower().replace(' ', '')
-    return s == s[::-1]
-
-# Usage:
-is_palindrome('A man a plan a canal Panama') # Returns: True
-```
diff --git a/snippets/python/string-manipulation/convert-snake-case-to-camel-case.md b/snippets/python/string-manipulation/convert-snake-case-to-camel-case.md
deleted file mode 100644
index 30956259..00000000
--- a/snippets/python/string-manipulation/convert-snake-case-to-camel-case.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Convert Snake Case to Camel Case
-description: Converts a snake_case string to camelCase.
-author: axorax
-tags: string,snake-case,camel-case,convert
----
-
-```py
-def snake_to_camel(s):
-    parts = s.split('_')
-    return parts[0] + ''.join(word.capitalize() for word in parts[1:])
-
-# Usage:
-snake_to_camel('hello_world') # Returns: 'helloWorld'
-```
diff --git a/snippets/python/string-manipulation/convert-string-to-unicode.md b/snippets/python/string-manipulation/convert-string-to-unicode.md
deleted file mode 100644
index 28d3f676..00000000
--- a/snippets/python/string-manipulation/convert-string-to-unicode.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Convert String to Unicode
-description: Converts a string into its Unicode representation.
-author: axorax
-tags: string,ascii,unicode,convert
----
-
-```py
-def string_to_unicode(s):
-    return [ord(char) for char in s]
-
-# Usage:
-string_to_unicode('hello') # Returns: [104, 101, 108, 108, 111]
-```
diff --git a/snippets/python/string-manipulation/count-character-frequency.md b/snippets/python/string-manipulation/count-character-frequency.md
deleted file mode 100644
index ce8d8563..00000000
--- a/snippets/python/string-manipulation/count-character-frequency.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Count Character Frequency
-description: Counts the frequency of each character in a string.
-author: axorax
-tags: string,character-frequency
----
-
-```py
-from collections import Counter
-
-def char_frequency(s):
-    return dict(Counter(s))
-
-# Usage:
-char_frequency('hello') # Returns: {'h': 1, 'e': 1, 'l': 2, 'o': 1}
-```
diff --git a/snippets/python/string-manipulation/count-vowels.md b/snippets/python/string-manipulation/count-vowels.md
deleted file mode 100644
index 7dbcacab..00000000
--- a/snippets/python/string-manipulation/count-vowels.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Count Vowels
-description: Counts the number of vowels in a string.
-author: SteliosGee
-tags: string,vowels,count
----
-
-```py
-def count_vowels(s):
-    vowels = 'aeiou'
-    return len([char for char in s.lower() if char in vowels])
-
-# Usage:
-count_vowels('hello') # Returns: 2
-```
diff --git a/snippets/python/string-manipulation/count-words.md b/snippets/python/string-manipulation/count-words.md
deleted file mode 100644
index 60aeb369..00000000
--- a/snippets/python/string-manipulation/count-words.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Count Words
-description: Counts the number of words in a string.
-author: axorax
-tags: string,word-count
----
-
-```py
-def count_words(s):
-    return len(s.split())
-
-# Usage:
-count_words('The quick brown fox') # Returns: 4
-```
diff --git a/snippets/python/string-manipulation/find-all-substrings.md b/snippets/python/string-manipulation/find-all-substrings.md
deleted file mode 100644
index 0148e356..00000000
--- a/snippets/python/string-manipulation/find-all-substrings.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Find All Substrings
-description: Finds all substrings of a given string.
-author: axorax
-tags: string,substring,find
----
-
-```py
-def find_substrings(s):
-    substrings = []
-    for i in range(len(s)):
-        for j in range(i + 1, len(s) + 1):
-            substrings.append(s[i:j])
-    return substrings
-
-# Usage:
-find_substrings('abc') # Returns: ['a', 'ab', 'abc', 'b', 'bc', 'c']
-```
diff --git a/snippets/python/string-manipulation/find-longest-word.md b/snippets/python/string-manipulation/find-longest-word.md
deleted file mode 100644
index 2422b2c2..00000000
--- a/snippets/python/string-manipulation/find-longest-word.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Find Longest Word
-description: Finds the longest word in a string.
-author: axorax
-tags: string,longest-word
----
-
-```py
-def find_longest_word(s):
-    words = s.split()
-    return max(words, key=len) if words else ''
-
-# Usage:
-find_longest_word('The quick brown fox') # Returns: 'quick'
-```
diff --git a/snippets/python/string-manipulation/find-unique-characters.md b/snippets/python/string-manipulation/find-unique-characters.md
deleted file mode 100644
index d6306254..00000000
--- a/snippets/python/string-manipulation/find-unique-characters.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Find Unique Characters
-description: Finds all unique characters in a string.
-author: axorax
-tags: string,unique,characters
----
-
-```py
-def find_unique_chars(s):
-    return ''.join(sorted(set(s)))
-
-# Usage:
-find_unique_chars('banana') # Results: 'abn'
-```
diff --git a/snippets/python/string-manipulation/generate-random-string.md b/snippets/python/string-manipulation/generate-random-string.md
deleted file mode 100644
index 1d92dd85..00000000
--- a/snippets/python/string-manipulation/generate-random-string.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Generate Random String
-description: Generates a random alphanumeric string.
-author: technoph1le
-tags: random,string
----
-
-```py
-import random
-import string
-
-def random_string(length):
-    letters_and_digits = string.ascii_letters + string.digits
-    return ''.join(random.choice(letters_and_digits) for _ in range(length))
-
-# Usage:
-random_string(10) # Results: Random 10-character string
-```
diff --git a/snippets/python/string-manipulation/remove-characters.md b/snippets/python/string-manipulation/remove-characters.md
deleted file mode 100644
index b4a5366a..00000000
--- a/snippets/python/string-manipulation/remove-characters.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Remove Characters
-description: Removes specific characters from a string.
-author: axorax
-tags: string,remove,characters
----
-
-```py
-def remove_chars(s, chars):
-    return ''.join(c for c in s if c not in chars)
-
-# Usage:
-remove_chars('hello world', 'eo') # Returns: 'hll wrld'
-```
diff --git a/snippets/python/string-manipulation/remove-duplicate-characters.md b/snippets/python/string-manipulation/remove-duplicate-characters.md
deleted file mode 100644
index fda3d0a4..00000000
--- a/snippets/python/string-manipulation/remove-duplicate-characters.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Remove Duplicate Characters
-description: Removes duplicate characters from a string while maintaining the order.
-author: axorax
-tags: string,duplicates,remove
----
-
-```py
-def remove_duplicate_chars(s):
-    seen = set()
-    return ''.join(char for char in s if not (char in seen or seen.add(char)))
-
-# Usage:
-remove_duplicate_chars('programming') # Returns: 'progamin'
-```
diff --git a/snippets/python/string-manipulation/remove-punctuation.md b/snippets/python/string-manipulation/remove-punctuation.md
deleted file mode 100644
index 301be4f7..00000000
--- a/snippets/python/string-manipulation/remove-punctuation.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Remove Punctuation
-description: Removes punctuation from a string.
-author: SteliosGee
-tags: string,punctuation,remove
----
-
-```py
-import string
-
-def remove_punctuation(s):
-    return s.translate(str.maketrans('', '', string.punctuation))
-
-# Usage:
-remove_punctuation('Hello, World!') # Returns: 'Hello World'
-```
diff --git a/snippets/python/string-manipulation/remove-whitespace.md b/snippets/python/string-manipulation/remove-whitespace.md
deleted file mode 100644
index c541a198..00000000
--- a/snippets/python/string-manipulation/remove-whitespace.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Remove Whitespace
-description: Removes all whitespace from a string.
-author: axorax
-tags: string,whitespace,remove
----
-
-```py
-def remove_whitespace(s):
-    return ''.join(s.split())
-
-# Usage:
-remove_whitespace('hello world') # Returns: 'helloworld'
-```
diff --git a/snippets/python/string-manipulation/reverse-string.md b/snippets/python/string-manipulation/reverse-string.md
deleted file mode 100644
index ad9a76da..00000000
--- a/snippets/python/string-manipulation/reverse-string.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Reverse String
-description: Reverses the characters in a string.
-author: technoph1le
-tags: string,reverse
----
-
-```py
-def reverse_string(s:str) -> str:
-    return s[::-1]
-
-# Usage:
-reverse_string('hello') # Returns: 'olleh'
-```
diff --git a/snippets/python/string-manipulation/split-camel-case.md b/snippets/python/string-manipulation/split-camel-case.md
deleted file mode 100644
index bb57c42d..00000000
--- a/snippets/python/string-manipulation/split-camel-case.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Split Camel Case
-description: Splits a camel case string into separate words.
-author: axorax
-tags: string,camel-case,split
----
-
-```py
-import re
-
-def split_camel_case(s):
-    return ' '.join(re.findall(r'[A-Z][a-z]*|[a-z]+', s))
-
-# Usage:
-split_camel_case('camelCaseString') # Returns: 'camel Case String'
-```
diff --git a/snippets/python/string-manipulation/truncate.md b/snippets/python/string-manipulation/truncate.md
deleted file mode 100644
index 5238f53b..00000000
--- a/snippets/python/string-manipulation/truncate.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Truncate
-description: Truncates a string to a specified length and a toggleable truncation notation.
-author: axorax
-contributors: MinerMinerMods
-tags: string,truncate
----
-
-```py
-def truncate(s:str, length:int, suffix:bool = True) -> str :
-    return (s[:length] + ("..." if suffix else "")) if len(s) > length else s
-
-# Usage:
-truncate('This is a long string', 10) # Returns: 'This is a ...'
-truncate('This is a long string', 10, False) # Returns: 'This is a '
-```
diff --git a/snippets/regex/icon.svg b/snippets/regex/icon.svg
deleted file mode 100644
index bdbe2fc2..00000000
--- a/snippets/regex/icon.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 30.242188 34.101562 L 30.242188 22.550781 L 20.726562 28.382812 L 17.371094 22.539062 L 27.300781 17.105469 L 17.371094 11.589844 L 20.742188 5.851562 L 30.242188 11.65625 L 30.242188 0.0585938 L 37.019531 0.0585938 L 37.019531 11.65625 L 46.605469 5.851562 L 50 11.589844 L 40.027344 17.105469 L 50 22.539062 L 46.59375 28.40625 L 37.019531 22.550781 L 37.019531 34.101562 Z M 14.175781 42.851562 C 14.175781 37.414062 8.25 34 3.535156 36.714844 C -1.179688 39.433594 -1.179688 46.265625 3.535156 48.984375 C 8.25 51.703125 14.175781 48.289062 14.175781 42.851562 Z M 14.175781 42.851562 "/>
-</g>
-</svg>
diff --git a/snippets/regex/miscellaneous/hexadecimal-color.md b/snippets/regex/miscellaneous/hexadecimal-color.md
deleted file mode 100644
index 7f3dfce4..00000000
--- a/snippets/regex/miscellaneous/hexadecimal-color.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-Title: Hexadecimal Color
-Description: Matches hex color codes
-Author: majvax
-Tags: color,hexadecimal
----
-
-
-```regex
-^#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
-
-
--> Usage:
-#FFF1 ✗
-#FFF ✓
-#FFF000 ✓
-```
diff --git a/snippets/regex/miscellaneous/ipv4.md b/snippets/regex/miscellaneous/ipv4.md
deleted file mode 100644
index 8ca4a157..00000000
--- a/snippets/regex/miscellaneous/ipv4.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-Title: IPv4
-Description: Matches IPv4 address
-Author: majvax
-Tags: ipv4,networking
----
-
-
-```regex
-^((25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})$
-
-
--> Usage:
-123.300.0.101 ✗
-127.0.0.1 ✓
-192.168.0.1 ✓
-```
diff --git a/snippets/regex/miscellaneous/unintentional-duplication.md b/snippets/regex/miscellaneous/unintentional-duplication.md
deleted file mode 100644
index ee6713f3..00000000
--- a/snippets/regex/miscellaneous/unintentional-duplication.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-Title: Unintentional Duplication
-Description: Matches duplicated word in a text.
-Author: majvax
-Tags: duplication
----
-
-
-```regex
-\b(\w+)\s+\1\b
-
-
--> Usage:
-I need to finish this task ✗
-I need to to finish this task ✓
-```
diff --git a/snippets/regex/miscellaneous/whitespace-trimmer.md b/snippets/regex/miscellaneous/whitespace-trimmer.md
deleted file mode 100644
index e55ae56f..00000000
--- a/snippets/regex/miscellaneous/whitespace-trimmer.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-Title: Whitespace Trimmer
-Description: Matches leading and/or trailing whitespace.
-Author: majvax
-Tags: trim
----
-
-
-```regex
-^\s+|\s+$
-
-
--> Usage:
-(don't account for the quotation marks, it just to visualize whitespace)
-"Hello World" ✗
-" Hello World" ✓
-"Hello World " ✓
-" Hello World " ✓
-```
diff --git a/snippets/regex/validation pattern/email-address.md b/snippets/regex/validation pattern/email-address.md
deleted file mode 100644
index 5a89f76e..00000000
--- a/snippets/regex/validation pattern/email-address.md	
+++ /dev/null
@@ -1,15 +0,0 @@
----
-Title: Email Address
-Description: Match any email address
-Author: majvax
-Tags: email
----
-
-
-```regex
-^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
-
--> Usage:
-example.name@domain.com.ru ✓
-name.surname@gmail.com ✓
-```
diff --git a/snippets/regex/validation pattern/strong-password.md b/snippets/regex/validation pattern/strong-password.md
deleted file mode 100644
index bda4352b..00000000
--- a/snippets/regex/validation pattern/strong-password.md	
+++ /dev/null
@@ -1,17 +0,0 @@
----
-Title: Strong Password
-Description: Match password with at least 12 characters, one uppercased letter, one number, and one special character.
-Author: majvax
-Tags: password
----
-
-
-```regex
-^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{12,}$
-
--> Usage:
-longpassword ✗
-longpassw0rd ✗
-longp@ssw0rd ✗
-Longp@ssw0rd ✓
-```
diff --git a/snippets/ruby/array-manipulation/binary-search.md b/snippets/ruby/array-manipulation/binary-search.md
deleted file mode 100644
index 1ed1e34d..00000000
--- a/snippets/ruby/array-manipulation/binary-search.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Binary Search
-description: Searches for an element in a sorted array using binary search.
-author: ACR1209
-tags: array,binary-search,search
----
-
-```rb
-def binary_search(array, target)
-  low = 0
-  high = array.length - 1
-
-  while low <= high
-    mid = (low + high) / 2
-    guess = array[mid]
-
-    if guess == target
-      return mid
-    elsif guess > target
-      high = mid - 1
-    else
-      low = mid + 1
-    end
-  end
-
-  return nil
-end
-
-# Usage:
-array = [1, 3, 5, 7, 9]
-target = 5
-result = binary_search(array, target)
-puts result # Output: 2
-```
\ No newline at end of file
diff --git a/snippets/ruby/array-manipulation/chunk-array.md b/snippets/ruby/array-manipulation/chunk-array.md
deleted file mode 100644
index 102de3c6..00000000
--- a/snippets/ruby/array-manipulation/chunk-array.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Chunk Array
-description: Splits an array into chunks of a specified size.
-author: ACR1209
-tags: array,chunk
----
-
-```rb
-def chunk_array(array, size)
-    array.each_slice(size).to_a
-end
-
-# Usage:
-arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
-chunked_arr = chunk_array(arr, 2)
-puts chunked_arr.inspect # Output: [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
-```
\ No newline at end of file
diff --git a/snippets/ruby/array-manipulation/matrix-transpose.md b/snippets/ruby/array-manipulation/matrix-transpose.md
deleted file mode 100644
index 041d35ea..00000000
--- a/snippets/ruby/array-manipulation/matrix-transpose.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title: Matrix Transpose
-description: Transposes a 2D matrix.
-author: ACR1209
-tags: array,matrix,transpose
----
-
-```ruby
-def transpose_matrix(matrix)
-    return [] if matrix.empty?
-    return [] if matrix.first.empty?
-
-    matrix.first.zip(*matrix[1..-1])
-end
-
-# Usage:
-matrix = [
-    [1, 2, 3],
-    [4, 5, 6],
-    [7, 8, 9]
-]
-print transpose_matrix(matrix) # Output: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
-```
\ No newline at end of file
diff --git a/snippets/ruby/basics/hello-world.md b/snippets/ruby/basics/hello-world.md
deleted file mode 100644
index 962c50c3..00000000
--- a/snippets/ruby/basics/hello-world.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: ACR1209
-tags: printing,hello-world,utility
----
-
-```rb
-puts 'Hello, World!'
-```
diff --git a/snippets/ruby/error-handling/custom-error-class.md b/snippets/ruby/error-handling/custom-error-class.md
deleted file mode 100644
index af9ed6ef..00000000
--- a/snippets/ruby/error-handling/custom-error-class.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Custom Error Class
-description: Defines and raises a custom error class in Ruby.
-author: ACR1209
-tags: error handling,custom error
----
-
-```rb
-class MyCustomError < StandardError; end
-
-def risky_method(value)
-    raise MyCustomError, "Value must be positive" if value <= 0
-    "Valid value: #{value}"
-end
-
-# Usage:
-begin
-    puts risky_method(-1)
-rescue MyCustomError => e
-    puts e.message # Output: "Value must be positive"
-end
-```
\ No newline at end of file
diff --git a/snippets/ruby/icon.svg b/snippets/ruby/icon.svg
deleted file mode 100644
index 10ec5836..00000000
--- a/snippets/ruby/icon.svg
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="50px" height="50px" viewBox="0 0 50 50" version="1.1">
-<defs>
-<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="174.0737" y1="215.548798" x2="132.276306" y2="141.753296" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(98.431373%,46.27451%,33.333333%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(98.431373%,46.27451%,33.333333%);stop-opacity:1;"/>
-<stop offset="0.41" style="stop-color:rgb(89.411765%,16.862745%,11.764706%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(60%,0%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(60%,0%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="194.895004" y1="153.557602" x2="141.027603" y2="117.409302" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="151.795395" y1="217.785202" x2="97.929703" y2="181.638" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(52.941176%,6.666667%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(56.862745%,7.058824%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="38.696301" y1="127.390602" x2="47.046902" y2="181.661407" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.23" style="stop-color:rgb(89.803922%,44.705882%,32.156863%);stop-opacity:1;"/>
-<stop offset="0.46" style="stop-color:rgb(87.058824%,23.137255%,12.54902%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.098039%,0%,1.176471%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.098039%,0%,1.176471%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="96.132797" y1="76.715302" x2="99.209602" y2="132.102097" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.23" style="stop-color:rgb(89.411765%,44.313725%,30.588235%);stop-opacity:1;"/>
-<stop offset="0.56" style="stop-color:rgb(74.509804%,10.196078%,5.098039%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="147.102997" y1="25.521" x2="156.314102" y2="65.216202" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.18" style="stop-color:rgb(89.411765%,38.823529%,25.882353%);stop-opacity:1;"/>
-<stop offset="0.4" style="stop-color:rgb(78.431373%,14.117647%,6.27451%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear6" gradientUnits="userSpaceOnUse" x1="118.976097" y1="11.5415" x2="158.668594" y2="-8.3048" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.54" style="stop-color:rgb(78.431373%,12.156863%,6.666667%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(74.901961%,3.529412%,1.960784%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(74.901961%,3.529412%,1.960784%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear7" gradientUnits="userSpaceOnUse" x1="3.9033" y1="113.554703" x2="7.1702" y2="146.262802" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.31" style="stop-color:rgb(87.058824%,25.098039%,14.117647%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(74.901961%,9.803922%,4.313725%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(74.901961%,9.803922%,4.313725%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear8" gradientUnits="userSpaceOnUse" x1="-18.5557" y1="155.104507" x2="135.015198" y2="-2.8093" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(74.117647%,0%,7.058824%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(74.117647%,0%,7.058824%);stop-opacity:1;"/>
-<stop offset="0.07" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.17" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
-<stop offset="0.27" style="stop-color:rgb(78.431373%,18.431373%,10.980392%);stop-opacity:1;"/>
-<stop offset="0.33" style="stop-color:rgb(50.980392%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.46" style="stop-color:rgb(63.921569%,8.627451%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.72" style="stop-color:rgb(70.196078%,7.45098%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(90.980392%,14.901961%,3.529412%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(90.980392%,14.901961%,3.529412%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear9" gradientUnits="userSpaceOnUse" x1="99.074699" y1="171.033203" x2="52.817699" y2="159.616592" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(54.901961%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(54.901961%,4.705882%,0.392157%);stop-opacity:1;"/>
-<stop offset="0.54" style="stop-color:rgb(60%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(65.882353%,5.098039%,5.490196%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(65.882353%,5.098039%,5.490196%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear10" gradientUnits="userSpaceOnUse" x1="178.525894" y1="115.514603" x2="137.432693" y2="78.683998" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(49.411765%,6.666667%,4.313725%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(49.411765%,6.666667%,4.313725%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(61.960784%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(61.960784%,4.705882%,0%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear11" gradientUnits="userSpaceOnUse" x1="193.623505" y1="47.937" x2="173.154205" y2="26.053801" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(47.45098%,7.45098%,5.098039%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(47.45098%,7.45098%,5.098039%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(61.960784%,7.058824%,4.313725%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(61.960784%,7.058824%,4.313725%);stop-opacity:1;"/>
-</linearGradient>
-<radialGradient id="radial0" gradientUnits="userSpaceOnUse" cx="143.831497" cy="79.388199" fx="143.831497" fy="79.388199" r="50.357601" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(65.882353%,5.098039%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(49.411765%,5.490196%,3.137255%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(49.411765%,5.490196%,3.137255%);stop-opacity:1;"/>
-</radialGradient>
-<radialGradient id="radial1" gradientUnits="userSpaceOnUse" cx="74.0923" cy="145.751007" fx="74.0923" fy="145.751007" r="66.943703" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(63.921569%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(63.921569%,4.705882%,0%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(50.196078%,5.490196%,3.137255%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(50.196078%,5.490196%,3.137255%);stop-opacity:1;"/>
-</radialGradient>
-<linearGradient id="linear12" gradientUnits="userSpaceOnUse" x1="26.669901" y1="197.335907" x2="9.9887" y2="140.742004" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(54.509804%,12.941176%,7.843137%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(54.509804%,12.941176%,7.843137%);stop-opacity:1;"/>
-<stop offset="0.43" style="stop-color:rgb(61.960784%,6.27451%,3.921569%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(70.196078%,6.27451%,4.705882%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(70.196078%,6.27451%,4.705882%);stop-opacity:1;"/>
-</linearGradient>
-<linearGradient id="linear13" gradientUnits="userSpaceOnUse" x1="154.641098" y1="9.7979" x2="192.039001" y2="26.305901" gradientTransform="matrix(0.252525,0,0,0.252525,0,0)">
-<stop offset="0" style="stop-color:rgb(70.196078%,6.27451%,0%);stop-opacity:1;"/>
-<stop offset="0" style="stop-color:rgb(70.196078%,6.27451%,0%);stop-opacity:1;"/>
-<stop offset="0.44" style="stop-color:rgb(56.862745%,5.882353%,3.137255%);stop-opacity:1;"/>
-<stop offset="0.99" style="stop-color:rgb(47.45098%,10.980392%,7.058824%);stop-opacity:1;"/>
-<stop offset="1" style="stop-color:rgb(47.45098%,10.980392%,7.058824%);stop-opacity:1;"/>
-</linearGradient>
-</defs>
-<g id="surface1">
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear0);" d="M 38.761719 32.933594 L 10.195312 49.894531 L 47.183594 47.382812 L 50.03125 10.089844 Z M 38.761719 32.933594 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear1);" d="M 47.246094 47.359375 L 44.066406 25.417969 L 35.40625 36.851562 Z M 47.246094 47.359375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear2);" d="M 47.289062 47.359375 L 23.996094 45.53125 L 10.320312 49.847656 Z M 47.289062 47.359375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear3);" d="M 10.355469 49.851562 L 16.171875 30.789062 L 3.367188 33.527344 Z M 10.355469 49.851562 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear4);" d="M 35.402344 36.914062 L 30.050781 15.945312 L 14.730469 30.304688 Z M 35.402344 36.914062 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear5);" d="M 48.816406 16.238281 L 34.335938 4.410156 L 30.304688 17.449219 Z M 48.816406 16.238281 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear6);" d="M 42.046875 0.195312 L 33.527344 4.902344 L 28.152344 0.132812 Z M 42.046875 0.195312 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear7);" d="M 0 39.921875 L 3.566406 33.414062 L 0.683594 25.660156 Z M 0 39.921875 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 0.488281 25.417969 L 3.394531 33.652344 L 16.011719 30.824219 L 30.417969 17.433594 L 34.484375 4.519531 L 28.082031 0 L 17.199219 4.074219 C 13.769531 7.261719 7.117188 13.574219 6.875 13.691406 C 6.640625 13.8125 2.480469 21.667969 0.488281 25.417969 Z M 0.488281 25.417969 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear8);" d="M 10.6875 10.617188 C 18.117188 3.25 27.699219 -1.105469 31.375 2.605469 C 35.050781 6.316406 31.152344 15.332031 23.722656 22.695312 C 16.289062 30.0625 6.828125 34.65625 3.152344 30.945312 C -0.523438 27.238281 3.253906 17.984375 10.6875 10.617188 Z M 10.6875 10.617188 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear9);" d="M 10.355469 49.84375 L 16.125 30.722656 L 35.296875 36.882812 C 28.367188 43.382812 20.65625 48.875 10.355469 49.84375 Z M 10.355469 49.84375 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear10);" d="M 30.445312 17.394531 L 35.367188 36.890625 C 41.15625 30.804688 46.355469 24.257812 48.898438 16.160156 Z M 30.445312 17.394531 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear11);" d="M 48.847656 16.261719 C 50.816406 10.316406 51.273438 1.789062 41.984375 0.203125 L 34.363281 4.414062 Z M 48.847656 16.261719 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:rgb(61.960787%,7.058824%,3.529412%);fill-opacity:1;" d="M 0 39.835938 C 0.273438 49.648438 7.351562 49.792969 10.367188 49.878906 L 3.402344 33.613281 Z M 0 39.835938 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#radial0);" d="M 30.472656 17.425781 C 34.921875 20.160156 43.890625 25.652344 44.070312 25.753906 C 44.351562 25.914062 47.9375 19.710938 48.75 16.207031 Z M 30.472656 17.425781 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#radial1);" d="M 16.117188 30.722656 L 23.835938 45.609375 C 28.398438 43.136719 31.972656 40.121094 35.246094 36.890625 Z M 16.117188 30.722656 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear12);" d="M 3.371094 33.632812 L 2.277344 46.652344 C 4.339844 49.472656 7.179688 49.71875 10.15625 49.496094 C 8.003906 44.136719 3.699219 33.417969 3.371094 33.632812 Z M 3.371094 33.632812 "/>
-<path style=" stroke:none;fill-rule:evenodd;fill:url(#linear13);" d="M 34.316406 4.445312 L 49.648438 6.597656 C 48.832031 3.132812 46.316406 0.894531 42.035156 0.195312 Z M 34.316406 4.445312 "/>
-</g>
-</svg>
diff --git a/snippets/ruby/math-and-numbers/calculate-compound-interest.md b/snippets/ruby/math-and-numbers/calculate-compound-interest.md
deleted file mode 100644
index c13faf26..00000000
--- a/snippets/ruby/math-and-numbers/calculate-compound-interest.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Calculate Compound Interest
-description: Calculates compound interest for a given principal amount, rate, and time period.
-author: ACR1209
-contributors: axorax
-tags: math,compound interest,finance
----
-
-```rb
-def compound_interest(principal, rate, time, n = 1)
-    principal * (1 + rate / n) ** (n * time)
-end
-
-# Usage:
-puts compound_interest(1000, 0.05, 5)   # Output: 1276.2815625000003
-puts compound_interest(1000, 0.05, 5, 12) # Output: 1283.3586785035118
-```
diff --git a/snippets/ruby/math-and-numbers/calculate-factorial.md b/snippets/ruby/math-and-numbers/calculate-factorial.md
deleted file mode 100644
index b4110ee6..00000000
--- a/snippets/ruby/math-and-numbers/calculate-factorial.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Calculate Factorial
-description: Computes the factorial of a given integer.
-author: ACR1209
-tags: math,factorial
----
-
-```rb
-def factorial(n)
-    return 1 if n <= 1
-    (2..n).reduce(1, :*)
-end
-
-# Usage:
-puts factorial(5) # Output: 120
-```
\ No newline at end of file
diff --git a/snippets/ruby/math-and-numbers/check-prime-number.md b/snippets/ruby/math-and-numbers/check-prime-number.md
deleted file mode 100644
index 9793f209..00000000
--- a/snippets/ruby/math-and-numbers/check-prime-number.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Check Prime Number
-description: Checks if a number is a prime number.
-author: ACR1209
-contributors: technoph1le
-tags: math,prime,check
----
-
-```rb
-def is_prime?(n)
-    return false if n <= 1
-    (2..Math.sqrt(n)).each do |i|
-        return false if n % i == 0
-    end
-    true
-end
-
-# Usage:
-puts is_prime?(29) # Output: true
-puts is_prime?(30) # Output: false
-```
diff --git a/snippets/ruby/math-and-numbers/find-all-primes-up-to-integer-sieve-of-sundaram.md b/snippets/ruby/math-and-numbers/find-all-primes-up-to-integer-sieve-of-sundaram.md
deleted file mode 100644
index 123f970e..00000000
--- a/snippets/ruby/math-and-numbers/find-all-primes-up-to-integer-sieve-of-sundaram.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-title: Find all primes up to integer (Sieve of Sundaram)
-description: Finds all the prime numbers up to a specific integer.
-author: ACR1209
-tags: math,prime numbers
----
-
-```rb
-def sieve_of_sundaram(limit)
-    n = (limit - 1) / 2
-    marked = Array.new(n + 1, false)
-
-    (1..n).each do |i|
-        j = i
-        while (i + j + 2 * i * j) <= n
-            marked[i + j + 2 * i * j] = true
-            j += 1
-        end
-    end
-
-    primes = [2]
-    (1..n).each do |i|
-        primes << (2 * i + 1) unless marked[i]
-    end
-
-    primes
-end
-
-# Usage:
-print sieve_of_sundaram(30) # Output: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
-```
\ No newline at end of file
diff --git a/snippets/ruby/string-manipulation/capitalize-words.md b/snippets/ruby/string-manipulation/capitalize-words.md
deleted file mode 100644
index 4287d12f..00000000
--- a/snippets/ruby/string-manipulation/capitalize-words.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Capitalize Words
-description: Capitalizes the first letter of each word in a string.
-author: ACR1209
-tags: string,capitalize,words
----
-
-```rb
-def capitalize_words(str)
-  str.split.map(&:capitalize).join(' ')
-end
-
-# Usage:
-sentence = "ruby is awesome"
-puts capitalize_words(sentence) # Output: "Ruby Is Awesome"
-```
diff --git a/snippets/ruby/string-manipulation/count-word-occurrences-in-string.md b/snippets/ruby/string-manipulation/count-word-occurrences-in-string.md
deleted file mode 100644
index 7765d4b3..00000000
--- a/snippets/ruby/string-manipulation/count-word-occurrences-in-string.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Count Word Occurrences in String
-description: Counts the occurrences of each word in a given string.
-author: ACR1209
-tags: string,occurrences,word-count
----
-
-```rb
-def count_word_occurrences(text)
-    words = text.downcase.scan(/\w+/)
-    occurrences = Hash.new(0)
-    words.each { |word| occurrences[word] += 1 }
-    occurrences
-end
-
-# Usage:
-text = "ruby is awesome and Ruby is fun"
-puts count_word_occurrences(text) # Output: {"ruby"=>2, "is"=>2, "awesome"=>1, "and"=>1, "fun"=>1}
-```
\ No newline at end of file
diff --git a/snippets/ruby/string-manipulation/remove-punctuation.md b/snippets/ruby/string-manipulation/remove-punctuation.md
deleted file mode 100644
index d549d53e..00000000
--- a/snippets/ruby/string-manipulation/remove-punctuation.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Remove Punctuation
-description: Removes all punctuation from a given string.
-author: ACR1209
-tags: string,punctuation,remove
----
-
-```rb
-def remove_punctuation(str)
-    str.gsub(/[[:punct:]]/, '')
-end
-
-# Usage:
-text = "Hello, Ruby! How's it going?"
-puts remove_punctuation(text) # Output: "Hello Ruby Hows it going"
-```
diff --git a/snippets/ruby/string-manipulation/transform-camel-case-to-snake-case.md b/snippets/ruby/string-manipulation/transform-camel-case-to-snake-case.md
deleted file mode 100644
index 1828c98f..00000000
--- a/snippets/ruby/string-manipulation/transform-camel-case-to-snake-case.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Transform Camel Case to Snake Case
-description: Converts a Camel or Pascal Case string to Snake case.
-author: ACR1209
-tags: string,convert,camel-case,snake-case,pascal-case
----
-
-```rb
-def camel_to_snake(str)
-    str.gsub(/([A-Z])/, '_\1').sub(/^_/, '').downcase
-end
-
-# Usage:
-camel_case = "camelCaseToSnakeCase"
-pascal_case = "PascalCaseToSnakeCase"
-puts camel_to_snake(camel_case) # Output: "camel_case_to_snake_case"
-puts camel_to_snake(pascal_case) # Output: "pascal_case_to_snake_case"
-```
\ No newline at end of file
diff --git a/snippets/ruby/string-manipulation/transform-from-snake-case-to-camel-case.md b/snippets/ruby/string-manipulation/transform-from-snake-case-to-camel-case.md
deleted file mode 100644
index 4714ca3b..00000000
--- a/snippets/ruby/string-manipulation/transform-from-snake-case-to-camel-case.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Transform from Snake Case to Camel Case
-description: Converts a Snake Case string to Camel Case.
-author: ACR1209
-tags: string,convert,snake-case,camel-case
----
-
-```rb
-def snake_to_camel(str)
-    str.split('_').map.with_index { |word, index| 
-        index == 0 ? word : word.capitalize 
-    }.join
-end
-
-# Usage:
-snake_case = "snake_case_to_camel_case"
-puts snake_to_camel(snake_case) # Output: "snakeCaseToCamelCase"
-```
diff --git a/snippets/ruby/string-manipulation/transform-from-snake-case-to-pascal-case.md b/snippets/ruby/string-manipulation/transform-from-snake-case-to-pascal-case.md
deleted file mode 100644
index 8a8ef980..00000000
--- a/snippets/ruby/string-manipulation/transform-from-snake-case-to-pascal-case.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Transform from Snake Case to Pascal Case
-description: Converts a Snake Case string to Pascal Case.
-author: ACR1209
-tags: string,convert,snake-case,pascal-case
----
-
-```rb
-def snake_to_pascal(str)
-    str.split('_').map.with_index { |word, index| 
-        word.capitalize 
-    }.join
-end
-
-# Usage:
-snake_case = "snake_case_to_pascal_case"
-puts snake_to_pascal(snake_case) # Output: "SnakeCaseToPascalCase"
-```
diff --git a/snippets/ruby/string-manipulation/truncate-string.md b/snippets/ruby/string-manipulation/truncate-string.md
deleted file mode 100644
index 8b6571ac..00000000
--- a/snippets/ruby/string-manipulation/truncate-string.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Truncate String
-description: Truncates a string to a specified length, optionally adding an ellipsis.
-author: ACR1209
-tags: string,truncate
----
-
-```rb
-def truncate_string(str, max_length)
-    return str if str.length <= max_length || max_length <= 3
-    str[0, max_length - 3] + '...'
-end
-
-# Usage:
-long_string = "Ruby is a dynamic, open source programming language."
-puts truncate_string(20, long_string) # Output: "Ruby is a dynamic..."
-puts truncate_string(54, long_string) # Output: "Ruby is a dynamic, open source programming language."
-```
diff --git a/snippets/rust/basics/hello-world.md b/snippets/rust/basics/hello-world.md
deleted file mode 100644
index 334e93b6..00000000
--- a/snippets/rust/basics/hello-world.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Hello, World!
-description: Prints Hello, World! to the terminal.
-author: James-Beans
-tags: printing,hello-world
----
-
-```rust
-fn main() { // Defines the main running function
-    println!("Hello, World!"); // Prints Hello, World! to the terminal.
-}
-```
diff --git a/snippets/rust/file-handling/find-files.md b/snippets/rust/file-handling/find-files.md
deleted file mode 100644
index 1504d402..00000000
--- a/snippets/rust/file-handling/find-files.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: Find Files
-description: Finds all files of the specified extension within a given directory.
-author: Mathys-Gasnier
-tags: file,search
----
-
-```rust
-fn find_files(directory: &str, file_type: &str) -> std::io::Result<Vec<std::path::PathBuf>> {
-    let mut result = vec![];
-
-    for entry in std::fs::read_dir(directory)? {
-        let dir = entry?;
-        let path = dir.path();
-        if dir.file_type().is_ok_and(|t| !t.is_file()) &&
-            path.extension().is_some_and(|ext| ext != file_type) {
-            continue;
-        }
-        result.push(path)
-    }
-
-    Ok(result)
-}
-
-// Usage:
-find_files("/path/to/your/directory", ".pdf"); // Returns: if Ok(), a vector of path to `.pdf` files in the directory
-```
diff --git a/snippets/rust/file-handling/read-file-lines.md b/snippets/rust/file-handling/read-file-lines.md
deleted file mode 100644
index 7a094e07..00000000
--- a/snippets/rust/file-handling/read-file-lines.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Read File Lines
-description: Reads all lines from a file and returns them as a vector of strings.
-author: Mathys-Gasnier
-tags: file,read
----
-
-```rust
-fn read_lines(file_name: &str) -> std::io::Result<Vec<String>>
-    Ok(
-        std::fs::read_to_string(file_name)?
-            .lines()
-            .map(String::from)
-            .collect()
-    )
-}
-
-// Usage:
-read_lines("path/to/file.txt"); // Returns: If Ok(), a Vec of the lines of the file
-```
diff --git a/snippets/rust/icon.svg b/snippets/rust/icon.svg
deleted file mode 100644
index 3f62b3c2..00000000
--- a/snippets/rust/icon.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="rust-logo-title rust-logo-description">
-<title id="rust-logo-title">Rust Logo</title>
-<desc id="rust-logo-description">A black gear with the letter R in the center</desc>
-<g id="surface1">
-<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 24.671875 8.222656 C 15.621094 8.222656 8.257812 15.589844 8.257812 24.636719 C 8.257812 33.679688 15.625 41.046875 24.671875 41.046875 C 33.714844 41.046875 41.082031 33.679688 41.082031 24.636719 C 41.082031 15.589844 33.714844 8.222656 24.671875 8.222656 Z M 24.644531 9.679688 C 25.230469 9.695312 25.695312 10.175781 25.695312 10.761719 C 25.695312 11.355469 25.210938 11.839844 24.613281 11.839844 C 24.019531 11.839844 23.535156 11.355469 23.535156 10.761719 C 23.535156 10.46875 23.652344 10.1875 23.863281 9.984375 C 24.070312 9.78125 24.355469 9.671875 24.644531 9.679688 Z M 27.117188 11.457031 C 30.953125 12.175781 34.28125 14.546875 36.214844 17.9375 L 34.941406 20.8125 C 34.722656 21.308594 34.949219 21.890625 35.441406 22.113281 L 37.890625 23.203125 C 37.96875 23.96875 37.976562 24.738281 37.921875 25.507812 L 36.554688 25.507812 C 36.421875 25.507812 36.363281 25.597656 36.363281 25.730469 L 36.363281 26.355469 C 36.363281 27.828125 35.535156 28.148438 34.804688 28.230469 C 34.109375 28.308594 33.34375 27.9375 33.246094 27.515625 C 32.835938 25.210938 32.15625 24.722656 31.078125 23.871094 C 32.417969 23.023438 33.804688 21.769531 33.804688 20.097656 C 33.804688 18.289062 32.566406 17.148438 31.722656 16.589844 C 30.535156 15.808594 29.222656 15.652344 28.867188 15.652344 L 14.769531 15.652344 C 16.71875 13.476562 19.332031 12 22.203125 11.457031 L 23.867188 13.203125 C 24.242188 13.59375 24.863281 13.609375 25.257812 13.234375 Z M 11.769531 19.453125 C 12.355469 19.46875 12.820312 19.945312 12.820312 20.53125 C 12.820312 21.128906 12.335938 21.609375 11.738281 21.609375 C 11.144531 21.609375 10.660156 21.128906 10.660156 20.53125 C 10.660156 20.238281 10.777344 19.960938 10.988281 19.757812 C 11.195312 19.554688 11.480469 19.441406 11.769531 19.453125 Z M 37.515625 19.5 C 38.101562 19.515625 38.566406 19.996094 38.566406 20.578125 C 38.566406 21.175781 38.082031 21.660156 37.484375 21.660156 C 36.890625 21.660156 36.40625 21.175781 36.40625 20.578125 C 36.40625 20.289062 36.523438 20.007812 36.734375 19.804688 C 36.941406 19.601562 37.226562 19.492188 37.515625 19.5 Z M 13.804688 19.671875 L 15.6875 19.671875 L 15.6875 28.160156 L 11.890625 28.160156 C 11.417969 26.511719 11.273438 24.789062 11.457031 23.085938 L 13.785156 22.050781 C 14.28125 21.828125 14.507812 21.25 14.285156 20.753906 Z M 21.660156 19.765625 L 26.140625 19.765625 C 26.375 19.765625 27.777344 20.03125 27.777344 21.082031 C 27.777344 21.953125 26.703125 22.265625 25.816406 22.265625 L 21.65625 22.265625 Z M 21.660156 25.859375 L 25.09375 25.859375 C 25.40625 25.859375 26.769531 25.953125 27.203125 27.695312 C 27.339844 28.230469 27.640625 29.972656 27.847656 30.53125 C 28.050781 31.15625 28.882812 32.40625 29.765625 32.40625 L 35.371094 32.40625 C 34.996094 32.910156 34.585938 33.386719 34.140625 33.828125 L 31.859375 33.339844 C 31.328125 33.226562 30.804688 33.566406 30.691406 34.097656 L 30.148438 36.625 C 26.625 38.222656 22.578125 38.203125 19.070312 36.574219 L 18.527344 34.046875 C 18.414062 33.515625 17.890625 33.171875 17.359375 33.289062 L 15.128906 33.765625 C 14.714844 33.339844 14.328125 32.886719 13.976562 32.40625 L 24.832031 32.40625 C 24.953125 32.40625 25.039062 32.386719 25.039062 32.269531 L 25.039062 28.429688 C 25.039062 28.320312 24.953125 28.296875 24.832031 28.296875 L 21.65625 28.296875 Z M 16.648438 34.65625 C 17.234375 34.671875 17.699219 35.152344 17.699219 35.734375 C 17.699219 36.332031 17.214844 36.816406 16.617188 36.816406 C 16.023438 36.816406 15.539062 36.332031 15.539062 35.734375 C 15.539062 35.445312 15.65625 35.164062 15.867188 34.960938 C 16.074219 34.757812 16.359375 34.648438 16.648438 34.65625 Z M 32.640625 34.703125 C 33.222656 34.722656 33.6875 35.199219 33.6875 35.785156 C 33.6875 36.382812 33.203125 36.863281 32.609375 36.863281 C 32.011719 36.863281 31.527344 36.382812 31.527344 35.785156 C 31.527344 35.492188 31.644531 35.214844 31.855469 35.011719 C 32.0625 34.804688 32.347656 34.695312 32.640625 34.703125 Z M 32.640625 34.703125 "/>
-<path style="fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:4;" d="M 115.68375 70.95375 C 115.68375 95.6025 95.70375 115.5825 71.055 115.5825 C 46.40625 115.5825 26.415 95.6025 26.415 70.95375 C 26.415 46.305 46.40625 26.325 71.055 26.325 C 95.70375 26.325 115.68375 46.305 115.68375 70.95375 Z M 114.84 66.645 L 121.80375 70.95375 L 114.84 75.2625 L 120.825 80.85375 L 113.16375 83.7225 L 117.945 90.37125 L 109.845 91.6875 L 113.25375 99.14625 L 105.06375 98.865 L 106.9425 106.84125 L 98.955 104.9625 L 99.2475 113.1525 L 91.78875 109.755 L 90.4725 117.84375 L 83.82375 113.0625 L 80.955 120.72375 L 75.36375 114.73875 L 71.055 121.7025 L 66.735 114.73875 L 61.155 120.72375 L 58.275 113.0625 L 51.62625 117.84375 L 50.31 109.755 L 42.85125 113.1525 L 43.14375 104.9625 L 35.15625 106.84125 L 37.035 98.865 L 28.845 99.14625 L 32.25375 91.6875 L 24.165 90.37125 L 28.935 83.7225 L 21.285 80.85375 L 27.25875 75.2625 L 20.295 70.95375 L 27.25875 66.645 L 21.285 61.05375 L 28.935 58.185 L 24.165 51.525 L 32.25375 50.20875 L 28.845 42.75 L 37.035 43.0425 L 35.15625 35.055 L 43.14375 36.945 L 42.85125 28.755 L 50.31 32.1525 L 51.62625 24.06375 L 58.275 28.845 L 61.155 21.18375 L 66.735 27.1575 L 71.055 20.205 L 75.36375 27.1575 L 80.955 21.18375 L 83.82375 28.845 L 90.4725 24.06375 L 91.78875 32.1525 L 99.2475 28.755 L 98.955 36.945 L 106.9425 35.055 L 105.06375 43.0425 L 113.25375 42.75 L 109.845 50.20875 L 117.945 51.525 L 113.16375 58.185 L 120.825 61.05375 Z M 114.84 66.645 " transform="matrix(0.347222,0,0,0.347222,0,0)"/>
-</g>
-</svg>
diff --git a/snippets/rust/linux/get-desktop-enviroment.md b/snippets/rust/linux/get-desktop-enviroment.md
deleted file mode 100644
index a728d249..00000000
--- a/snippets/rust/linux/get-desktop-enviroment.md
+++ /dev/null
@@ -1,44 +0,0 @@
----
-title: Get Desktop Enviroment
-description: Get the Desktop Enviroment that the user is currently using.
-author: sponkurtus2 
-tags: linux,file 
----
-
-```rust
-fn get_desktop_env() -> String {
-    // Return empty string if no X display is available
-    if env::var("DISPLAY").is_err() {
-        return String::new();
-    }
-
-    // Check common desktop environment variables.
-    for env_var in &[
-        "XDG_SESSION_DESKTOP",
-        "XDG_CURRENT_DESKTOP",
-        "DESKTOP_SESSION",
-    ] {
-        if let Ok(de) = env::var(env_var) {
-            return de;
-        }
-    }
-
-    // As fallback, try to get desktop name from last word of last line in .xinitrc
-    let path = format!("{}/.xinitrc", env::var("HOME").unwrap_or_default());
-    if let Ok(mut file) = File::open(&path) {
-        let mut buf = String::new();
-        if file.read_to_string(&mut buf).is_ok() {
-            if let Some(last_line) = buf.lines().last() {
-                let last_word = last_line.split(' ').last().unwrap_or("");
-                return last_word.to_string();
-            }
-        }
-    }
-
-    // Return "N/A" if no desktop environment could be detected
-    String::from("N/A")
-}
-
-// Usage:
-get_desktop_env(); // Returns: the desktop enviroment that the user actually has e.g. i3.
-```
\ No newline at end of file
diff --git a/snippets/rust/string-manipulation/capitalize-string.md b/snippets/rust/string-manipulation/capitalize-string.md
deleted file mode 100644
index d11431c4..00000000
--- a/snippets/rust/string-manipulation/capitalize-string.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: Capitalize String
-description: Makes the first letter of a string uppercase.
-author: Mathys-Gasnier
-tags: string,capitalize
----
-
-```rust
-fn capitalized(str: &str) -> String {
-    let mut chars = str.chars();
-    match chars.next() {
-        None => String::new(),
-        Some(f) => f.to_uppercase().chain(chars).collect(),
-    }
-}
-
-// Usage:
-capitalized("lower_case"); // Returns: Lower_case
-```
diff --git a/snippets/scss/animations/fade-in-animation.md b/snippets/scss/animations/fade-in-animation.md
deleted file mode 100644
index c1355bf7..00000000
--- a/snippets/scss/animations/fade-in-animation.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Fade In Animation
-description: Animates the fade-in effect.
-author: technoph1le
-tags: animation,fade,css
----
-
-```scss
-@keyframes fade-in {
-  from {
-    opacity: 0;
-  }
-  to {
-    opacity: 1;
-  }
-}
-
-@mixin fade-in($duration: 1s, $easing: ease-in-out) {
-  animation: fade-in $duration $easing;
-}
-```
diff --git a/snippets/scss/animations/slide-in-from-left.md b/snippets/scss/animations/slide-in-from-left.md
deleted file mode 100644
index 6f9b0853..00000000
--- a/snippets/scss/animations/slide-in-from-left.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Slide In From Left
-description: Animates content sliding in from the left.
-author: technoph1le
-tags: animation,slide,css
----
-
-```scss
-@keyframes slide-in-left {
-  from {
-    transform: translateX(-100%);
-  }
-  to {
-    transform: translateX(0);
-  }
-}
-
-@mixin slide-in-left($duration: 0.5s, $easing: ease-out) {
-  animation: slide-in-left $duration $easing;
-}
-```
diff --git a/snippets/scss/borders-shadows/border-radius-helper.md b/snippets/scss/borders-shadows/border-radius-helper.md
deleted file mode 100644
index 1e2c9497..00000000
--- a/snippets/scss/borders-shadows/border-radius-helper.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Border Radius Helper
-description: Applies a customizable border-radius.
-author: technoph1le
-tags: border,radius,css
----
-
-```scss
-@mixin border-radius($radius: 4px) {
-  border-radius: $radius;
-}
-```
diff --git a/snippets/scss/borders-shadows/box-shadow-helper.md b/snippets/scss/borders-shadows/box-shadow-helper.md
deleted file mode 100644
index a22e0b28..00000000
--- a/snippets/scss/borders-shadows/box-shadow-helper.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: Box Shadow Helper
-description: Generates a box shadow with customizable values.
-author: technoph1le
-tags: box-shadow,css,effects
----
-
-```scss
-@mixin box-shadow($x: 0px, $y: 4px, $blur: 10px, $spread: 0px, $color: rgba(0, 0, 0, 0.1)) {
-  box-shadow: $x $y $blur $spread $color;
-}
-```
diff --git a/snippets/scss/components/primary-button.md b/snippets/scss/components/primary-button.md
deleted file mode 100644
index 5ae41db9..00000000
--- a/snippets/scss/components/primary-button.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Primary Button
-description: Generates a styled primary button.
-author: technoph1le
-tags: button,primary,css
----
-
-```scss
-@mixin primary-button($bg: #007bff, $color: #fff) {
-  background-color: $bg;
-  color: $color;
-  padding: 0.5rem 1rem;
-  border: none;
-  border-radius: 4px;
-  cursor: pointer;
-
-  &:hover {
-    background-color: darken($bg, 10%);
-  }
-}
-```
diff --git a/snippets/scss/icon.svg b/snippets/scss/icon.svg
deleted file mode 100644
index e68fea23..00000000
--- a/snippets/scss/icon.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-labelledby="scss-logo-title scss-logo-description">
-<title id="scss-logo-title">Sass or SCSS Logo</title>
-<desc id="scss-logo-description">The word Sass in pink cursive font</desc>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M0.476196 21.9359C0.476196 22.2105 0.557056 22.3918 0.602368 22.568C0.897681 23.7137 1.53245 24.6969 2.28557 25.5937C3.35823 26.8719 4.6719 27.9008 6.0176 28.8684C7.18479 29.7074 8.37581 30.5277 9.54768 31.3605C9.74885 31.5035 9.93909 31.668 10.1574 31.8434C9.96956 31.9449 9.81331 32.0344 9.65081 32.1168C8.10432 32.9012 6.61643 33.7805 5.24495 34.8457C4.41838 35.4879 3.61917 36.1703 3.05471 37.0621C2.14651 38.4965 1.82502 40.0246 2.50198 41.6562C2.69963 42.1328 3.0012 42.5445 3.42659 42.8488C3.56448 42.9473 3.71917 43.0449 3.88049 43.0832C4.29377 43.1805 4.71487 43.2441 5.13323 43.3211L6.31799 43.3203C7.62815 43.2035 8.82073 42.7547 9.89846 42.0109C11.5828 40.8484 12.7176 39.2898 13.2055 37.2895C13.5602 35.8355 13.5746 34.3801 13.1567 32.9328C13.1165 32.7988 13.0704 32.6666 13.0184 32.5367C12.9676 32.4066 12.9078 32.2801 12.8375 32.118L15.5235 30.5734L15.5637 30.6078C15.5149 30.7676 15.4629 30.927 15.4188 31.0883C15.0996 32.2539 14.8875 33.4398 14.9637 34.6496C15.0449 35.9387 15.4047 37.1453 16.1594 38.2223C16.7696 39.0934 18.2235 39.1258 18.8719 38.2516C19.102 37.941 19.325 37.6164 19.4926 37.2699C19.9305 36.3656 20.336 35.4453 20.7543 34.5313L20.8274 34.3641C20.7973 34.7969 20.7621 35.177 20.7461 35.5574C20.7211 36.1516 20.7559 36.7422 20.959 37.3074C21.1328 37.791 21.4285 38.1523 21.9824 38.216C22.3614 38.2594 22.6633 38.0859 22.9418 37.866C23.3732 37.5249 23.7308 37.0998 23.993 36.6164C24.7356 35.2527 25.4981 33.8973 26.1711 32.4992C26.8992 30.9871 27.536 29.4309 28.2121 27.893L28.3239 27.6203C28.4836 28.248 28.5949 28.8629 28.8 29.4449C29.0383 30.1203 29.3332 30.7797 29.6543 31.4207C29.8063 31.7234 29.7887 31.9199 29.5781 32.1738C28.6969 33.2363 27.8309 34.3117 26.9641 35.3859C26.7723 35.623 26.5813 35.8645 26.4215 36.1234C26.3246 36.287 26.2609 36.468 26.234 36.6562C26.2071 36.8295 26.2484 37.0065 26.3491 37.15C26.4498 37.2935 26.6022 37.3925 26.7742 37.4262C27.1216 37.5008 27.4777 37.5261 27.8321 37.5016C29.0418 37.4125 30.1403 36.9879 31.1114 36.2684C32.3696 35.3363 32.7735 34.0645 32.4688 32.557C32.3864 32.148 32.2406 31.7504 32.0989 31.3563C32.0352 31.1785 32.0309 31.0539 32.1469 30.8883C33.1528 29.452 34.0121 27.9281 34.8114 26.3691C34.843 26.3078 34.8754 26.2465 34.9309 26.1809C35.1899 27.5285 35.5797 28.8273 36.2781 30.0059C35.9219 30.3492 35.5692 30.6605 35.25 31.0035C34.5473 31.759 33.9379 32.5793 33.6199 33.5797C33.4832 34.0109 33.3781 34.4492 33.4391 34.9098C33.5336 35.625 34.1196 36.0898 34.8231 35.927C36.3285 35.5785 37.6281 34.8691 38.5778 33.6125C39.2168 32.7664 39.275 31.8227 39.0074 30.834C38.934 30.5652 38.8469 30.3008 38.7531 29.9926C39.1246 29.8773 39.4867 29.7391 39.8614 29.6535C41.8063 29.2098 43.7301 29.2871 45.6043 29.9895C46.6985 30.3996 47.5824 31.0859 48.1067 32.1656C48.7469 33.4855 48.393 34.7379 47.1489 35.5723C47.0328 35.65 46.9 35.7113 46.8039 35.8086C46.7732 35.8443 46.7502 35.886 46.7364 35.931C46.7226 35.9761 46.7183 36.0235 46.7239 36.0703C46.7321 36.1184 46.859 36.1785 46.9321 36.1777C47.341 36.1746 47.6727 35.9602 47.991 35.7398C48.7887 35.1879 49.3707 34.4453 49.4961 33.4676L49.5207 33.3941L49.4906 32.7574C49.4785 32.7207 49.4996 32.6844 49.4969 32.6566C49.3274 31.2328 48.5668 30.1285 47.4606 29.2629C46.1793 28.2609 44.6664 27.8484 43.0664 27.7832C41.7688 27.7273 40.4728 27.9268 39.252 28.3703C38.9016 28.4973 38.5543 28.6477 38.202 28.7895C38.1547 28.7039 38.1039 28.6219 38.0621 28.5371C37.7004 27.7965 37.2621 27.0887 37.1653 26.2395C37.0965 25.6363 37.0121 25.034 37.1555 24.4375C37.2934 23.8637 37.4731 23.2996 37.6422 22.7336C37.7293 22.4422 37.668 22.2789 37.3899 22.1477C37.2927 22.1 37.1893 22.0661 37.0828 22.0469C36.3992 21.9477 35.725 22.0043 35.0629 22.1969C34.8285 22.2652 34.6582 22.3965 34.6063 22.6559C34.5766 22.8047 34.516 22.9473 34.4739 23.0941C34.3008 23.7047 34.1781 24.327 33.8985 24.9086C33.1977 26.3676 32.3977 27.7715 31.5789 29.1652C31.4903 29.3156 31.3969 29.4633 31.2852 29.6457C30.9977 29.0441 30.691 28.5043 30.5981 27.8715C30.493 27.1559 30.4102 26.4414 30.5883 25.7313C30.7207 25.2016 30.8938 24.6816 31.0531 24.159C31.1285 23.9105 31.0938 23.7801 30.8688 23.6492C30.7551 23.5832 30.6266 23.5246 30.4985 23.5055C29.7975 23.3987 29.0813 23.4572 28.4071 23.6766C28.1949 23.7453 28.0836 23.8824 28.0188 24.1012C27.8281 24.7465 27.6656 25.4074 27.3981 26.0211C26.3145 28.5055 25.1996 30.977 24.086 33.448C23.8535 33.9641 23.5813 34.4621 23.3192 34.9645C23.2528 35.0918 23.1559 35.2039 23.0731 35.3234C23.0067 35.2449 22.9809 35.191 22.9813 35.1371C22.9832 34.8195 22.9453 34.4926 23.0059 34.1855C23.1918 33.257 23.3973 32.3324 23.6223 31.4125C23.8059 30.6523 24.0196 29.8992 24.2231 29.1441C24.2914 28.8914 24.2926 28.6551 24.111 28.4426C23.8059 28.0867 23.1684 28.0086 22.7903 28.2828L22.6231 28.3773L22.6555 28.1078C22.7352 27.5301 22.7512 26.9543 22.5926 26.3852C22.3949 25.6758 21.8887 25.2676 21.1528 25.2902C20.8098 25.3008 20.4496 25.3594 20.1321 25.4844C18.7965 26.0078 17.7696 26.9348 16.8953 28.05C16.8142 28.1535 16.7138 28.2403 16.5996 28.3055C15.4696 28.932 14.336 29.5508 13.2028 30.1719L11.9414 30.8629C11.6031 30.5402 11.2957 30.2055 10.9469 29.9215C9.88167 29.0527 8.79924 28.2055 7.72659 27.3465C6.77581 26.5852 5.85471 25.7922 5.15002 24.784C4.62581 24.034 4.28792 23.2133 4.25549 22.2859C4.21448 21.1043 4.54963 20.0246 5.1512 19.0195C5.92073 17.7336 6.97034 16.7016 8.12424 15.7668C9.34495 14.7785 10.6653 13.9395 12.0336 13.1734C13.9481 12.102 15.9172 11.1535 18.0285 10.5273C20.1934 9.88516 22.3899 9.51758 24.6555 9.77383C25.5461 9.87461 26.411 10.0785 27.2051 10.5141C27.8133 10.8473 28.3121 11.2836 28.5442 11.9656C28.7731 12.6367 28.766 13.3168 28.6074 13.9984C28.2852 15.3789 27.5293 16.5168 26.5781 17.5336C25.018 19.2004 23.1149 20.3352 20.9723 21.0848C19.7403 21.5162 18.4586 21.7897 17.1578 21.8984C16.0918 21.9879 15.0481 21.8934 14.0387 21.5227C13.3703 21.277 12.7883 20.9012 12.3203 20.3559C12.2367 20.2582 12.1297 20.1523 11.9739 20.2438C11.8211 20.3336 11.7942 20.4789 11.8453 20.6262C11.9309 20.8707 12.0098 21.1254 12.143 21.3441C12.4778 21.893 12.966 22.291 13.5035 22.6324C14.536 23.2891 15.6899 23.5098 16.8864 23.5609C18.702 23.6395 20.4735 23.3684 22.2199 22.8813C24.7133 22.1859 26.8813 20.9578 28.6199 19.0203C30.0676 17.407 31.1016 15.5863 31.3231 13.3879C31.4313 12.3148 31.316 11.2637 30.8137 10.2848C30.2688 9.22422 29.4024 8.43555 28.3664 7.89219C26.8578 7.10117 25.2297 6.64062 23.5492 6.64062H21.8656C19.8305 6.64062 17.8629 7.22383 15.9504 7.91953C14.5028 8.44648 13.0832 9.06836 11.7051 9.75664C8.70393 11.2562 5.90901 13.0645 3.61331 15.5508C2.46956 16.7895 1.5012 18.1562 0.944165 19.7656C0.776331 20.2462 0.631505 20.7345 0.510181 21.2289M11.3848 35.2965C11.2547 37.0383 10.4653 38.4504 9.17502 39.5941C8.44924 40.2371 7.61682 40.6949 6.64729 40.8559C6.29573 40.9141 5.93596 40.9281 5.59495 40.7824C5.10862 40.5746 4.99963 40.143 4.99026 39.6832C4.97581 38.9504 5.23245 38.2879 5.5844 37.6574C6.04377 36.8355 6.71721 36.209 7.43635 35.6238C8.56917 34.7016 9.79807 33.9211 11.0567 33.1844L11.1516 33.1453C11.3461 33.8641 11.4387 34.5738 11.3848 35.2965ZM21.2121 27.7266C21.1203 28.2828 21.0055 28.8395 20.843 29.3785C20.2813 31.2445 19.5598 33.0527 18.7797 34.8367C18.6356 35.1668 18.4258 35.468 18.2434 35.7809C18.2123 35.8289 18.1752 35.8728 18.1328 35.9113C17.9071 36.1344 17.693 36.1227 17.5789 35.8309C17.4461 35.4918 17.3645 35.1289 17.2942 34.7699C17.2469 34.5289 17.2582 34.2758 17.2434 34.0289C17.2586 32.2734 17.7942 30.6781 18.7028 29.193C19.0774 28.5805 19.4852 27.9969 20.1082 27.6094C20.3021 27.489 20.5118 27.3962 20.7313 27.3336C21.0633 27.2402 21.2672 27.3938 21.2121 27.7266ZM27.9168 36.2687L30.3266 33.4551C30.427 34.5 28.6508 36.5859 27.9168 36.2687ZM35.6133 34.3754C35.443 34.473 35.2574 34.5434 35.0828 34.6336C34.9231 34.7164 34.8703 34.6328 34.8656 34.4953C34.8634 34.4001 34.8756 34.3052 34.902 34.2137C35.2274 33.066 35.8262 32.0863 36.7172 31.2895L36.7797 31.2574C37.2035 32.443 36.7137 33.7449 35.6133 34.3754Z" fill="#CB6699"/>
-</svg>
diff --git a/snippets/scss/layouts/aspect-ratio.md b/snippets/scss/layouts/aspect-ratio.md
deleted file mode 100644
index 7b70edd0..00000000
--- a/snippets/scss/layouts/aspect-ratio.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Aspect Ratio
-description: Ensures that elements maintain a specific aspect ratio.
-author: technoph1le
-tags: aspect-ratio,layout,css
----
-
-```scss
-@mixin aspect-ratio($width, $height) {
-  position: relative;
-  width: 100%;
-  padding-top: ($height / $width) * 100%;
-  > * {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-  }
-}
-```
diff --git a/snippets/scss/layouts/dark-theme.md b/snippets/scss/layouts/dark-theme.md
deleted file mode 100644
index ecda0619..00000000
--- a/snippets/scss/layouts/dark-theme.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Dark Theme
-description: SCSS mixin to change styles for dark themes.
-author: gihanrangana
-tags: css, mixin, snippet, dark-theme, layout
----
-
-```scss
-@mixin isDark($type: 'module') {
-  $root: &;
-
-  @if $type == 'module' {
-    :global {
-      @at-root body[theme='dark'] #{$root} {
-        @content;
-      }
-    }
-  } @else {
-    &[theme='dark'] {
-      @content;
-    }
-  }
-}
-
-// Usage:
-.container{
-	background: #f0f0f0;
-	@include isDark {
-		background: #222;
-	}
-}
-```
\ No newline at end of file
diff --git a/snippets/scss/layouts/flex-center.md b/snippets/scss/layouts/flex-center.md
deleted file mode 100644
index 2d5a8006..00000000
--- a/snippets/scss/layouts/flex-center.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Flex Center
-description: A mixin to center content using flexbox.
-author: technoph1le
-tags: flex,center,css
----
-
-```scss
-@mixin flex-center {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-```
diff --git a/snippets/scss/layouts/grid-container.md b/snippets/scss/layouts/grid-container.md
deleted file mode 100644
index 2fc9902d..00000000
--- a/snippets/scss/layouts/grid-container.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Grid Container
-description: Creates a responsive grid container with customizable column counts.
-author: technoph1le
-tags: grid,layout,css
----
-
-```scss
-@mixin grid-container($columns: 12, $gap: 1rem) {
-  display: grid;
-  grid-template-columns: repeat($columns, 1fr);
-  gap: $gap;
-}
-```
diff --git a/snippets/scss/typography/font-import-helper.md b/snippets/scss/typography/font-import-helper.md
deleted file mode 100644
index 21da8bdf..00000000
--- a/snippets/scss/typography/font-import-helper.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Font Import Helper
-description: Simplifies importing custom fonts in Sass.
-author: technoph1le
-tags: mixin,fonts,css
----
-
-```scss
-@mixin import-font($family, $weight: 400, $style: normal) {
-  @font-face {
-    font-family: #{$family};
-    font-weight: #{$weight};
-    font-style: #{$style};
-    src: url('/fonts/#{$family}-#{$weight}.woff2') format('woff2'),
-         url('/fonts/#{$family}-#{$weight}.woff') format('woff');
-  }
-}
-```
diff --git a/snippets/scss/typography/line-clamp-mixin.md b/snippets/scss/typography/line-clamp-mixin.md
deleted file mode 100644
index 9d2dd157..00000000
--- a/snippets/scss/typography/line-clamp-mixin.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-title: Line Clamp Mixin
-description: A Sass mixin to clamp text to a specific number of lines.
-author: technoph1le
-tags: mixin,typography,css
----
-
-```scss
-@mixin line-clamp($number) {
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: $number;
-  overflow: hidden;
-}
-```
diff --git a/snippets/scss/typography/px-to-rem-helper.md b/snippets/scss/typography/px-to-rem-helper.md
deleted file mode 100644
index 17e154d0..00000000
--- a/snippets/scss/typography/px-to-rem-helper.md
+++ /dev/null
@@ -1,19 +0,0 @@
----
-title: PX to REM Helper
-description: This function will convert px values to rem values.
-author: gihanrangana
-tags: function,pixel,rem,px-to-rem
----
-
-```scss
-@function px-to-rem($px, $base: 16px) {
-  @return ($px / $base) * 1rem;
-}
-
-// Usage:
-div {
-  font-size: px-to-rem(12px); // Output: 0.75rem
-  padding: px-to-rem(16px);   // Output: 1rem
-  margin: px-to-rem(32px) // Output 2rem
-}
-```
\ No newline at end of file
diff --git a/snippets/scss/typography/text-gradient.md b/snippets/scss/typography/text-gradient.md
deleted file mode 100644
index ba848217..00000000
--- a/snippets/scss/typography/text-gradient.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Text Gradient
-description: Adds a gradient color effect to text.
-author: technoph1le
-tags: mixin,gradient,text,css
----
-
-```scss
-@mixin text-gradient($from, $to) {
-  background: linear-gradient(to right, $from, $to);
-  -webkit-background-clip: text;
-  -webkit-text-fill-color: transparent;
-}
-```
diff --git a/snippets/scss/typography/text-overflow-ellipsis.md b/snippets/scss/typography/text-overflow-ellipsis.md
deleted file mode 100644
index 403a5aaf..00000000
--- a/snippets/scss/typography/text-overflow-ellipsis.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: Text Overflow Ellipsis
-description: Ensures long text is truncated with an ellipsis.
-author: technoph1le
-tags: mixin,text,css
----
-
-```scss
-@mixin text-ellipsis {
-  overflow: hidden;
-  white-space: nowrap;
-  text-overflow: ellipsis;
-}
-```
diff --git a/snippets/scss/utilities/clearfix.md b/snippets/scss/utilities/clearfix.md
deleted file mode 100644
index dce8a6ae..00000000
--- a/snippets/scss/utilities/clearfix.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Clearfix
-description: Provides a clearfix utility for floating elements.
-author: technoph1le
-tags: clearfix,utility,css
----
-
-```scss
-@mixin clearfix {
-  &::after {
-    content: '';
-    display: block;
-    clear: both;
-  }
-}
-```
diff --git a/snippets/scss/utilities/responsive-breakpoints.md b/snippets/scss/utilities/responsive-breakpoints.md
deleted file mode 100644
index 4707e9d1..00000000
--- a/snippets/scss/utilities/responsive-breakpoints.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Responsive Breakpoints
-description: Generates media queries for responsive design.
-author: technoph1le
-tags: responsive,media-queries,css
----
-
-```scss
-@mixin breakpoint($breakpoint) {
-  @if $breakpoint == sm {
-    @media (max-width: 576px) { @content; }
-  } @else if $breakpoint == md {
-    @media (max-width: 768px) { @content; }
-  } @else if $breakpoint == lg {
-    @media (max-width: 992px) { @content; }
-  } @else if $breakpoint == xl {
-    @media (max-width: 1200px) { @content; }
-  }
-}
-```
diff --git a/snippets/scss/utilities/spacing.md b/snippets/scss/utilities/spacing.md
deleted file mode 100644
index ff28bf82..00000000
--- a/snippets/scss/utilities/spacing.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-title: Spacing
-description: This SCSS snippet dynamically generates utility classes for managing spacing in a consistent and efficient manner. The classes are built using a loop, ensuring scalability and flexibility. use .mt-* for margin-top, and .pb-* for padding bottom
-author: dinesh-here
-tags: clearfix,utility,css, spacing
----
-
-```scss
-$step: 5;
-$start_limit: 0;
-$end_limit: 50;
-
-  @while $start_limit <= $end_limit {
-    .mt-#{$start_limit} {
-        margin-top: $start_limit + px;
-    }
-    .mb-#{$start_limit} {
-        margin-bottom: $start_limit + px;
-    }
-
-    .ml-#{$start_limit} {
-        margin-left: $start_limit + px;
-    }
-
-    .mr-#{$start_limit} {
-        margin-right: $start_limit + px;
-    }
-
-    .pt-#{$start_limit} {
-        padding-top: $start_limit + px;
-    }
-    .pb-#{$start_limit} {
-        padding-bottom: $start_limit + px;
-    }
-
-    .pl-#{$start_limit} {
-        padding-left: $start_limit + px;
-    }
-
-    .pr-#{$start_limit} {
-        padding-right: $start_limit + px;
-    }
-    .mx-#{$start_limit} {
-        margin-left: $start_limit + px;
-        margin-right: $start_limit + px;
-    }
-
-    .px-#{$start_limit} {
-        padding-left: $start_limit + px;
-        padding-right: $start_limit + px;
-    }
-
-    .my-#{$start_limit} {
-        margin-top: $start_limit + px;
-        margin-bottom: $start_limit + px;
-    }
-
-    .py-#{$start_limit} {
-        padding-top: $start_limit + px;
-        padding-bottom: $start_limit + px;
-    }
-
-
-    $start_limit: $start_limit + $step;
-}
-
-```
diff --git a/snippets/typescript/helper-types/at-least-one-key.md b/snippets/typescript/helper-types/at-least-one-key.md
deleted file mode 100644
index aadee83b..00000000
--- a/snippets/typescript/helper-types/at-least-one-key.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-title:  At Least One Key
-description: Ensures that at least one property of an object is required.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition
----
-
-```ts
-type AtLeastOne<T> = {
-    [K in keyof T]: Pick<T, K> & Partial<Omit<T, K>>;
-}[keyof T];
-
-
-// Usage:
-type A = {
-    id?: string;
-    name?: string;
-    isActive?: boolean;
-};
-
-type AtLeastOneA = AtLeastOne<A>;
-// Requires at least one of 'id', 'name', or 'isActive' to be defined
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/deep-partial-type.md b/snippets/typescript/helper-types/deep-partial-type.md
deleted file mode 100644
index e2f4b302..00000000
--- a/snippets/typescript/helper-types/deep-partial-type.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Deep Partial Type
-description: Converts all properties of a type, including nested objects, into optional.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,optional
----
-
-```ts
-type DeepPartial<T> = {
-    [K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
-};
-
-
-// Usage:
-type A = {
-    name: string;
-    details: {
-        age: number;
-        address: { city: string; zip: string };
-    };
-};
-
-type PartialA = DeepPartial<A>;
-/*
-Type PartialA:
-{
-  name?: string;
-  details?: {
-    age?: number;
-    address?: { city?: string; zip?: string };
-  };
-}
-*/
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/deep-readonly-type.md b/snippets/typescript/helper-types/deep-readonly-type.md
deleted file mode 100644
index f1b3e971..00000000
--- a/snippets/typescript/helper-types/deep-readonly-type.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Deep Readonly Type
-description: Converts all properties of a type, including nested objects, into readonly.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,readonly
----
-
-```ts
-type DeepReadonly<T> = {
-    readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];
-};
-
-
-// Usage:
-type A = {
-    name: string;
-    details: {
-        age: number;
-        address: { city: string; zip: string };
-    };
-};
-
-type ReadonlyA = DeepReadonly<A>;
-/*
-Type ReadonlyA:
-{
-  readonly name: string;
-  readonly details: {
-    readonly age: number;
-    readonly address: { readonly city: string; readonly zip: string };
-  };
-}
-*/
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/deep-required-type.md b/snippets/typescript/helper-types/deep-required-type.md
deleted file mode 100644
index 20836483..00000000
--- a/snippets/typescript/helper-types/deep-required-type.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Deep Required Type
-description: Converts all properties of a type, including nested objects, into required.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,required
----
-
-```ts
-type DeepRequired<T> = T extends object
-    ? { [K in keyof T]-?: DeepRequired<T[K]> }
-    : T;
-
-
-// Usage:
-type A = {
-    id?: string;
-    name?: string;
-    details?: {
-        age?: number;
-        address?: { city?: string; zip?: string };
-    };
-};
-
-type RequiredA = DeepRequired<A>;
-// Result: { id: string; name: string; details: { age: number; address: { city: string; zip: string }; }; }
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/exclusive-types.md b/snippets/typescript/helper-types/exclusive-types.md
deleted file mode 100644
index b9ba62ae..00000000
--- a/snippets/typescript/helper-types/exclusive-types.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-title: Exclusive Types
-description: Allows to have a type which conforms to either/or.
-author: px-d
-tags: typescript,helper-types,typedefinition
----
-
-```ts
-type Exclusive<T, U = T> = T | U extends Record<string, unknown>
-  ?
-      | ({ [P in Exclude<keyof T, keyof U>]?: never } & U)
-      | ({ [P in Exclude<keyof U, keyof T>]?: never } & T)
-  : T | U;
-
-
-// Usage:
-type A = { name: string; email?: string; provider?: string };
-type B = { name: string; phone?: string; country?: string };
-
-type EitherOr = Exclusive<A, B>;
-
-const w: EitherOr = { name: "John", email: "j@d.c" }; // ✅
-const x: EitherOr = { name: "John", phone: "+123 456" }; // ✅
-const y: EitherOr = { name: "John", email: "", phone: "" }; // ⛔️
-const z: EitherOr = { name: "John", phne: "", provider: "" }; // ⛔️
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/keys-of-type.md b/snippets/typescript/helper-types/keys-of-type.md
deleted file mode 100644
index ddc2a84b..00000000
--- a/snippets/typescript/helper-types/keys-of-type.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: Keys of Type
-description: Extracts keys from an object type that match a specified value type.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition
----
-
-```ts
-type KeysOfType<T, U> = { [K in keyof T]: T[K] extends U ? K : never }[keyof T];
-
-
-// Usage:
-type A = { name: string; age: number; isActive: boolean, isDeleted: boolean };
-type StringKeys = KeysOfType<A, string>; // "name"
-type BooleanKeys = KeysOfType<A, boolean>; // "isActive" | "isDeleted"
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/keys-to-optional.md b/snippets/typescript/helper-types/keys-to-optional.md
deleted file mode 100644
index 54c64fb7..00000000
--- a/snippets/typescript/helper-types/keys-to-optional.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title:  Keys to Optional
-description: Makes only the specified keys of an object type optional.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,optional
----
-
-```ts
-type OptionalKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
-
-
-// Usage:
-type A = {
-    id: string;
-    name: string;
-    age: number;
-};
-
-type WithOptionalName = OptionalKeys<A, "name">;
-// { id: string; age: number; name?: string }
-
-type WithOptionalNameAndAge = OptionalKeys<A, "name" | "age">;
-// Result: { id: string; name?: string; age?: number }
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/nullable-keys.md b/snippets/typescript/helper-types/nullable-keys.md
deleted file mode 100644
index ff8ed161..00000000
--- a/snippets/typescript/helper-types/nullable-keys.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Nullable Keys
-description: Extracts keys from an object type that allow null or undefined values.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,nullable
----
-
-```ts
-type NullableKeys<T> = {
-    [K in keyof T]: null extends T[K] ? K : undefined extends T[K] ? K : never;
-}[keyof T];
-
-
-// Usage:
-type A = {
-    id: string;
-    name?: string;
-    description: string | null;
-};
-
-type Nullable = NullableKeys<A>; // "name" | "description"
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/omit-keys-of-type.md b/snippets/typescript/helper-types/omit-keys-of-type.md
deleted file mode 100644
index 9e08afa7..00000000
--- a/snippets/typescript/helper-types/omit-keys-of-type.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Omit Keys of Type
-description: Removes keys of a specified type from an object type.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,omit,keys
----
-
-```ts
-type OmitKeysOfType<T, U> = {
-    [K in keyof T as T[K] extends U ? never : K]: T[K];
-};
-
-
-// Usage:
-type A = {
-    id: string;
-    isActive: boolean;
-    data: number[];
-};
-
-type WithoutBoolean = OmitKeysOfType<A, boolean>; // { id: string; data: number[] }
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/required-keys.md b/snippets/typescript/helper-types/required-keys.md
deleted file mode 100644
index fa96d1b2..00000000
--- a/snippets/typescript/helper-types/required-keys.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Required Keys
-description: Extracts required keys from an object.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,required
----
-
-```ts
-type RequiredKeys<T> = {
-    [K in keyof T]-?: {} extends Pick<T, K> ? never : K;
-}[keyof T];
-
-
-// Usage:
-type A = {
-    id: string;
-    name?: string;
-    isActive: boolean;
-};
-
-type ReqKeys = RequiredKeys<A>; // "id" | "isActive"
-```
\ No newline at end of file
diff --git a/snippets/typescript/helper-types/union-to-intersection.md b/snippets/typescript/helper-types/union-to-intersection.md
deleted file mode 100644
index 04cc24b5..00000000
--- a/snippets/typescript/helper-types/union-to-intersection.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-title: Union to Intersection
-description: Converts a union type into an intersection type.
-author: aelshinawy
-tags: typescript,helper-types,typedefinition,intersection,union
----
-
-```ts
-type UnionToIntersection<U> = (U extends any ? (arg: U) => void : never) extends (arg: infer I) => void
-    ? I
-    : never;
-
-
-// Usage:
-type A = { id: string };
-type B = { name: string };
-type C = { age: number };
-
-type Intersected = UnionToIntersection<A | B | C>;
-// { id: string } & { name: string } & { age: number }
-```
\ No newline at end of file
diff --git a/snippets/typescript/icon.svg b/snippets/typescript/icon.svg
deleted file mode 100644
index c1d6592b..00000000
--- a/snippets/typescript/icon.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<svg width="50px" height="50px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill="#000000">
-  <g id="SVGRepo_bgCarrier" stroke-width="0"/>
-  <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
-  <g id="SVGRepo_iconCarrier">
-    <rect x="2" y="2" width="28" height="28" rx="1.312" style="fill:#3178c6"/>
-    <path d="M18.245,23.759v3.068a6.492,6.492,0,0,0,1.764.575,11.56,11.56,0,0,0,2.146.192,9.968,9.968,0,0,0,2.088-.211,5.11,5.11,0,0,0,1.735-.7,3.542,3.542,0,0,0,1.181-1.266,4.469,4.469,0,0,0,.186-3.394,3.409,3.409,0,0,0-.717-1.117,5.236,5.236,0,0,0-1.123-.877,12.027,12.027,0,0,0-1.477-.734q-.6-.249-1.08-.484a5.5,5.5,0,0,1-.813-.479,2.089,2.089,0,0,1-.516-.518,1.091,1.091,0,0,1-.181-.618,1.039,1.039,0,0,1,.162-.571,1.4,1.4,0,0,1,.459-.436,2.439,2.439,0,0,1,.726-.283,4.211,4.211,0,0,1,.956-.1,5.942,5.942,0,0,1,.808.058,6.292,6.292,0,0,1,.856.177,5.994,5.994,0,0,1,.836.3,4.657,4.657,0,0,1,.751.422V13.9a7.509,7.509,0,0,0-1.525-.4,12.426,12.426,0,0,0-1.9-.129,8.767,8.767,0,0,0-2.064.235,5.239,5.239,0,0,0-1.716.733,3.655,3.655,0,0,0-1.171,1.271,3.731,3.731,0,0,0-.431,1.845,3.588,3.588,0,0,0,.789,2.34,6,6,0,0,0,2.395,1.639q.63.26,1.175.509a6.458,6.458,0,0,1,.942.517,2.463,2.463,0,0,1,.626.585,1.2,1.2,0,0,1,.23.719,1.1,1.1,0,0,1-.144.552,1.269,1.269,0,0,1-.435.441,2.381,2.381,0,0,1-.726.292,4.377,4.377,0,0,1-1.018.105,5.773,5.773,0,0,1-1.969-.35A5.874,5.874,0,0,1,18.245,23.759Zm-5.154-7.638h4V13.594H5.938v2.527H9.92V27.375h3.171Z" style="fill:#ffffff;fill-rule:evenodd"/>
-  </g>
-</svg>
diff --git a/src/app/api/snippets/route.ts b/src/app/api/snippets/route.ts
new file mode 100644
index 00000000..f6364fed
--- /dev/null
+++ b/src/app/api/snippets/route.ts
@@ -0,0 +1 @@
+// snippets route
diff --git a/src/app/contribute/page.tsx b/src/app/contribute/page.tsx
new file mode 100644
index 00000000..ccda4854
--- /dev/null
+++ b/src/app/contribute/page.tsx
@@ -0,0 +1,9 @@
+const ContributePage = () => {
+  return <h1>Hello</h1>;
+};
+
+export default ContributePage;
+
+/**
+ * Fetch `CONTRIBUTING.md`
+ */
diff --git a/src/app/extensions/page.tsx b/src/app/extensions/page.tsx
new file mode 100644
index 00000000..8eb124fc
--- /dev/null
+++ b/src/app/extensions/page.tsx
@@ -0,0 +1,31 @@
+const ExtensionsPage = () => {
+  return <h1>Hello</h1>;
+};
+
+export default ExtensionsPage;
+
+/**
+ * 📦 Official Extensions
+
+    VS Code Extension (coming soon)
+
+    QuickSnip CLI (optional later)
+
+🔌 Community Extensions
+
+    ✅ Raycast Extension
+
+    🔜 Vim Plugin
+
+    ⌨️ Obsidian Snippet Sync
+
+    💡 (Form to submit your own tool)
+
+📚 How to Build One
+
+    Short guide: “Build your own extension using QuickSnip API”
+
+    Link to API docs or SDK
+
+    Example template repo
+ */
diff --git a/src/app/favicon.ico b/src/app/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c
GIT binary patch
diff --git a/src/app/globals.css b/src/app/globals.css
new file mode 100644
index 00000000..dc98be74
--- /dev/null
+++ b/src/app/globals.css
@@ -0,0 +1,122 @@
+@import "tailwindcss";
+@import "tw-animate-css";
+
+@custom-variant dark (&:is(.dark *));
+
+@theme inline {
+  --color-background: var(--background);
+  --color-foreground: var(--foreground);
+  --font-sans: var(--font-geist-sans);
+  --font-mono: var(--font-geist-mono);
+  --color-sidebar-ring: var(--sidebar-ring);
+  --color-sidebar-border: var(--sidebar-border);
+  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
+  --color-sidebar-accent: var(--sidebar-accent);
+  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
+  --color-sidebar-primary: var(--sidebar-primary);
+  --color-sidebar-foreground: var(--sidebar-foreground);
+  --color-sidebar: var(--sidebar);
+  --color-chart-5: var(--chart-5);
+  --color-chart-4: var(--chart-4);
+  --color-chart-3: var(--chart-3);
+  --color-chart-2: var(--chart-2);
+  --color-chart-1: var(--chart-1);
+  --color-ring: var(--ring);
+  --color-input: var(--input);
+  --color-border: var(--border);
+  --color-destructive: var(--destructive);
+  --color-accent-foreground: var(--accent-foreground);
+  --color-accent: var(--accent);
+  --color-muted-foreground: var(--muted-foreground);
+  --color-muted: var(--muted);
+  --color-secondary-foreground: var(--secondary-foreground);
+  --color-secondary: var(--secondary);
+  --color-primary-foreground: var(--primary-foreground);
+  --color-primary: var(--primary);
+  --color-popover-foreground: var(--popover-foreground);
+  --color-popover: var(--popover);
+  --color-card-foreground: var(--card-foreground);
+  --color-card: var(--card);
+  --radius-sm: calc(var(--radius) - 4px);
+  --radius-md: calc(var(--radius) - 2px);
+  --radius-lg: var(--radius);
+  --radius-xl: calc(var(--radius) + 4px);
+}
+
+:root {
+  --radius: 0.625rem;
+  --background: oklch(1 0 0);
+  --foreground: oklch(0.145 0 0);
+  --card: oklch(1 0 0);
+  --card-foreground: oklch(0.145 0 0);
+  --popover: oklch(1 0 0);
+  --popover-foreground: oklch(0.145 0 0);
+  --primary: oklch(0.205 0 0);
+  --primary-foreground: oklch(0.985 0 0);
+  --secondary: oklch(0.97 0 0);
+  --secondary-foreground: oklch(0.205 0 0);
+  --muted: oklch(0.97 0 0);
+  --muted-foreground: oklch(0.556 0 0);
+  --accent: oklch(0.97 0 0);
+  --accent-foreground: oklch(0.205 0 0);
+  --destructive: oklch(0.577 0.245 27.325);
+  --border: oklch(0.922 0 0);
+  --input: oklch(0.922 0 0);
+  --ring: oklch(0.708 0 0);
+  --chart-1: oklch(0.646 0.222 41.116);
+  --chart-2: oklch(0.6 0.118 184.704);
+  --chart-3: oklch(0.398 0.07 227.392);
+  --chart-4: oklch(0.828 0.189 84.429);
+  --chart-5: oklch(0.769 0.188 70.08);
+  --sidebar: oklch(0.985 0 0);
+  --sidebar-foreground: oklch(0.145 0 0);
+  --sidebar-primary: oklch(0.205 0 0);
+  --sidebar-primary-foreground: oklch(0.985 0 0);
+  --sidebar-accent: oklch(0.97 0 0);
+  --sidebar-accent-foreground: oklch(0.205 0 0);
+  --sidebar-border: oklch(0.922 0 0);
+  --sidebar-ring: oklch(0.708 0 0);
+}
+
+.dark {
+  --background: oklch(0.145 0 0);
+  --foreground: oklch(0.985 0 0);
+  --card: oklch(0.205 0 0);
+  --card-foreground: oklch(0.985 0 0);
+  --popover: oklch(0.205 0 0);
+  --popover-foreground: oklch(0.985 0 0);
+  --primary: oklch(0.922 0 0);
+  --primary-foreground: oklch(0.205 0 0);
+  --secondary: oklch(0.269 0 0);
+  --secondary-foreground: oklch(0.985 0 0);
+  --muted: oklch(0.269 0 0);
+  --muted-foreground: oklch(0.708 0 0);
+  --accent: oklch(0.269 0 0);
+  --accent-foreground: oklch(0.985 0 0);
+  --destructive: oklch(0.704 0.191 22.216);
+  --border: oklch(1 0 0 / 10%);
+  --input: oklch(1 0 0 / 15%);
+  --ring: oklch(0.556 0 0);
+  --chart-1: oklch(0.488 0.243 264.376);
+  --chart-2: oklch(0.696 0.17 162.48);
+  --chart-3: oklch(0.769 0.188 70.08);
+  --chart-4: oklch(0.627 0.265 303.9);
+  --chart-5: oklch(0.645 0.246 16.439);
+  --sidebar: oklch(0.205 0 0);
+  --sidebar-foreground: oklch(0.985 0 0);
+  --sidebar-primary: oklch(0.488 0.243 264.376);
+  --sidebar-primary-foreground: oklch(0.985 0 0);
+  --sidebar-accent: oklch(0.269 0 0);
+  --sidebar-accent-foreground: oklch(0.985 0 0);
+  --sidebar-border: oklch(1 0 0 / 10%);
+  --sidebar-ring: oklch(0.556 0 0);
+}
+
+@layer base {
+  * {
+    @apply border-border outline-ring/50;
+  }
+  body {
+    @apply bg-background text-foreground;
+  }
+}
diff --git a/src/app/guide/page.tsx b/src/app/guide/page.tsx
new file mode 100644
index 00000000..00d2b6bb
--- /dev/null
+++ b/src/app/guide/page.tsx
@@ -0,0 +1,5 @@
+const GuidePage = () => {
+  return <h1>Hello</h1>;
+};
+
+export default GuidePage;
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
new file mode 100644
index 00000000..f7fa87eb
--- /dev/null
+++ b/src/app/layout.tsx
@@ -0,0 +1,34 @@
+import type { Metadata } from "next";
+import { Geist, Geist_Mono } from "next/font/google";
+import "./globals.css";
+
+const geistSans = Geist({
+  variable: "--font-geist-sans",
+  subsets: ["latin"],
+});
+
+const geistMono = Geist_Mono({
+  variable: "--font-geist-mono",
+  subsets: ["latin"],
+});
+
+export const metadata: Metadata = {
+  title: "Create Next App",
+  description: "Generated by create next app",
+};
+
+export default function RootLayout({
+  children,
+}: Readonly<{
+  children: React.ReactNode;
+}>) {
+  return (
+    <html lang="en">
+      <body
+        className={`${geistSans.variable} ${geistMono.variable} antialiased`}
+      >
+        {children}
+      </body>
+    </html>
+  );
+}
diff --git a/src/app/license/page.tsx b/src/app/license/page.tsx
new file mode 100644
index 00000000..76a23221
--- /dev/null
+++ b/src/app/license/page.tsx
@@ -0,0 +1,9 @@
+const LicensePage = () => {
+  return <h1>Hello</h1>;
+};
+
+export default LicensePage;
+
+/**
+ * Fetch `LICENSE` file
+ */
diff --git a/src/app/page.tsx b/src/app/page.tsx
new file mode 100644
index 00000000..a9328942
--- /dev/null
+++ b/src/app/page.tsx
@@ -0,0 +1,103 @@
+import Image from "next/image";
+
+export default function Home() {
+  return (
+    <div className="font-sans grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20">
+      <main className="flex flex-col gap-[32px] row-start-2 items-center sm:items-start">
+        <Image
+          className="dark:invert"
+          src="/next.svg"
+          alt="Next.js logo"
+          width={180}
+          height={38}
+          priority
+        />
+        <ol className="font-mono list-inside list-decimal text-sm/6 text-center sm:text-left">
+          <li className="mb-2 tracking-[-.01em]">
+            Get started by editing{" "}
+            <code className="bg-black/[.05] dark:bg-white/[.06] font-mono font-semibold px-1 py-0.5 rounded">
+              src/app/page.tsx
+            </code>
+            .
+          </li>
+          <li className="tracking-[-.01em]">
+            Save and see your changes instantly.
+          </li>
+        </ol>
+
+        <div className="flex gap-4 items-center flex-col sm:flex-row">
+          <a
+            className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:w-auto"
+            href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
+            target="_blank"
+            rel="noopener noreferrer"
+          >
+            <Image
+              className="dark:invert"
+              src="/vercel.svg"
+              alt="Vercel logomark"
+              width={20}
+              height={20}
+            />
+            Deploy now
+          </a>
+          <a
+            className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 w-full sm:w-auto md:w-[158px]"
+            href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
+            target="_blank"
+            rel="noopener noreferrer"
+          >
+            Read our docs
+          </a>
+        </div>
+      </main>
+      <footer className="row-start-3 flex gap-[24px] flex-wrap items-center justify-center">
+        <a
+          className="flex items-center gap-2 hover:underline hover:underline-offset-4"
+          href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
+          target="_blank"
+          rel="noopener noreferrer"
+        >
+          <Image
+            aria-hidden
+            src="/file.svg"
+            alt="File icon"
+            width={16}
+            height={16}
+          />
+          Learn
+        </a>
+        <a
+          className="flex items-center gap-2 hover:underline hover:underline-offset-4"
+          href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
+          target="_blank"
+          rel="noopener noreferrer"
+        >
+          <Image
+            aria-hidden
+            src="/window.svg"
+            alt="Window icon"
+            width={16}
+            height={16}
+          />
+          Examples
+        </a>
+        <a
+          className="flex items-center gap-2 hover:underline hover:underline-offset-4"
+          href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
+          target="_blank"
+          rel="noopener noreferrer"
+        >
+          <Image
+            aria-hidden
+            src="/globe.svg"
+            alt="Globe icon"
+            width={16}
+            height={16}
+          />
+          Go to nextjs.org →
+        </a>
+      </footer>
+    </div>
+  );
+}
diff --git a/src/app/snippets/page.tsx b/src/app/snippets/page.tsx
new file mode 100644
index 00000000..3d4f72b0
--- /dev/null
+++ b/src/app/snippets/page.tsx
@@ -0,0 +1,5 @@
+const SnippetsPage = () => {
+  return <h1>Hello</h1>;
+};
+
+export default SnippetsPage;
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
new file mode 100644
index 00000000..a2df8dce
--- /dev/null
+++ b/src/components/ui/button.tsx
@@ -0,0 +1,59 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const buttonVariants = cva(
+  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
+  {
+    variants: {
+      variant: {
+        default:
+          "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+        destructive:
+          "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
+        outline:
+          "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
+        secondary:
+          "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+        ghost:
+          "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
+        link: "text-primary underline-offset-4 hover:underline",
+      },
+      size: {
+        default: "h-9 px-4 py-2 has-[>svg]:px-3",
+        sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
+        lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+        icon: "size-9",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+function Button({
+  className,
+  variant,
+  size,
+  asChild = false,
+  ...props
+}: React.ComponentProps<"button"> &
+  VariantProps<typeof buttonVariants> & {
+    asChild?: boolean
+  }) {
+  const Comp = asChild ? Slot : "button"
+
+  return (
+    <Comp
+      data-slot="button"
+      className={cn(buttonVariants({ variant, size, className }))}
+      {...props}
+    />
+  )
+}
+
+export { Button, buttonVariants }
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
new file mode 100644
index 00000000..bd0c391d
--- /dev/null
+++ b/src/lib/utils.ts
@@ -0,0 +1,6 @@
+import { clsx, type ClassValue } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+  return twMerge(clsx(inputs))
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 00000000..c1334095
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,27 @@
+{
+  "compilerOptions": {
+    "target": "ES2017",
+    "lib": ["dom", "dom.iterable", "esnext"],
+    "allowJs": true,
+    "skipLibCheck": true,
+    "strict": true,
+    "noEmit": true,
+    "esModuleInterop": true,
+    "module": "esnext",
+    "moduleResolution": "bundler",
+    "resolveJsonModule": true,
+    "isolatedModules": true,
+    "jsx": "preserve",
+    "incremental": true,
+    "plugins": [
+      {
+        "name": "next"
+      }
+    ],
+    "paths": {
+      "@/*": ["./src/*"]
+    }
+  },
+  "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+  "exclude": ["node_modules"]
+}

From e01ba4b89b5f9b266306b0927f6762fb96355d4e Mon Sep 17 00:00:00 2001
From: Technophile <dostonnabotov@gmail.com>
Date: Sat, 2 Aug 2025 00:53:42 +0300
Subject: [PATCH 2/4] Add Hero, Features & update Header

---
 package-lock.json                     | 735 +++++++++++++++++++++++++-
 package.json                          |   8 +-
 src/app/globals.css                   |  62 ++-
 src/app/layout.tsx                    |   6 +-
 src/app/page.tsx                      | 106 +---
 src/components/DarkModeSwitch.tsx     |  13 +
 src/components/Logo.tsx               |  42 ++
 src/components/layouts/Features.tsx   |  60 +++
 src/components/layouts/Header.tsx     | 213 ++++++++
 src/components/layouts/Hero.tsx       |  52 ++
 src/components/ui/accordion.tsx       |  66 +++
 src/components/ui/button.tsx          |  26 +-
 src/components/ui/label.tsx           |  24 +
 src/components/ui/navigation-menu.tsx | 168 ++++++
 src/components/ui/sheet.tsx           | 139 +++++
 src/components/ui/switch.tsx          |  34 ++
 src/lib/utils.ts                      |   6 +-
 17 files changed, 1612 insertions(+), 148 deletions(-)
 create mode 100644 src/components/DarkModeSwitch.tsx
 create mode 100644 src/components/Logo.tsx
 create mode 100644 src/components/layouts/Features.tsx
 create mode 100644 src/components/layouts/Header.tsx
 create mode 100644 src/components/layouts/Hero.tsx
 create mode 100644 src/components/ui/accordion.tsx
 create mode 100644 src/components/ui/label.tsx
 create mode 100644 src/components/ui/navigation-menu.tsx
 create mode 100644 src/components/ui/sheet.tsx
 create mode 100644 src/components/ui/switch.tsx

diff --git a/package-lock.json b/package-lock.json
index 2ce0a42e..2542c982 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,12 +8,18 @@
       "name": "quicksnip",
       "version": "0.1.0",
       "dependencies": {
+        "@radix-ui/react-accordion": "^1.2.11",
+        "@radix-ui/react-dialog": "^1.1.14",
+        "@radix-ui/react-label": "^2.1.7",
+        "@radix-ui/react-navigation-menu": "^1.2.13",
         "@radix-ui/react-slot": "^1.2.3",
+        "@radix-ui/react-switch": "^1.2.5",
         "class-variance-authority": "^0.7.1",
         "clsx": "^2.1.1",
+        "framer-motion": "^12.23.12",
         "lucide-react": "^0.535.0",
         "next": "15.4.5",
-        "react": "19.1.0",
+        "react": "^19.1.0",
         "react-dom": "19.1.0",
         "tailwind-merge": "^3.3.1"
       },
@@ -972,6 +978,99 @@
         "node": ">=12.4.0"
       }
     },
+    "node_modules/@radix-ui/primitive": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz",
+      "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==",
+      "license": "MIT"
+    },
+    "node_modules/@radix-ui/react-accordion": {
+      "version": "1.2.11",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz",
+      "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-collapsible": "1.1.11",
+        "@radix-ui/react-collection": "1.1.7",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-collapsible": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz",
+      "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-collection": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
+      "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-slot": "1.2.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@radix-ui/react-compose-refs": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
@@ -987,6 +1086,287 @@
         }
       }
     },
+    "node_modules/@radix-ui/react-context": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
+      "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-dialog": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz",
+      "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-dismissable-layer": "1.1.10",
+        "@radix-ui/react-focus-guards": "1.1.2",
+        "@radix-ui/react-focus-scope": "1.1.7",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-portal": "1.1.9",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-slot": "1.2.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "aria-hidden": "^1.2.4",
+        "react-remove-scroll": "^2.6.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-direction": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
+      "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-dismissable-layer": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz",
+      "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-escape-keydown": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-focus-guards": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz",
+      "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-focus-scope": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
+      "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-id": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
+      "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-label": {
+      "version": "2.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
+      "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-navigation-menu": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz",
+      "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-collection": "1.1.7",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-dismissable-layer": "1.1.10",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1",
+        "@radix-ui/react-use-previous": "1.1.1",
+        "@radix-ui/react-visually-hidden": "1.2.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-portal": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
+      "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-presence": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz",
+      "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-primitive": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
+      "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-slot": "1.2.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@radix-ui/react-slot": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
@@ -1005,6 +1385,176 @@
         }
       }
     },
+    "node_modules/@radix-ui/react-switch": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz",
+      "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "@radix-ui/react-use-previous": "1.1.1",
+        "@radix-ui/react-use-size": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-callback-ref": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
+      "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-controllable-state": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz",
+      "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-effect-event": "0.0.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-effect-event": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz",
+      "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-escape-keydown": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
+      "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-callback-ref": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-layout-effect": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
+      "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-previous": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
+      "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-size": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
+      "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-visually-hidden": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz",
+      "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@rtsao/scc": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -1360,7 +1910,7 @@
       "version": "19.1.7",
       "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz",
       "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT",
       "peerDependencies": {
         "@types/react": "^19.0.0"
@@ -1986,6 +2536,18 @@
       "dev": true,
       "license": "Python-2.0"
     },
+    "node_modules/aria-hidden": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz",
+      "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/aria-query": {
       "version": "5.3.2",
       "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
@@ -2580,6 +3142,12 @@
         "node": ">=8"
       }
     },
+    "node_modules/detect-node-es": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+      "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+      "license": "MIT"
+    },
     "node_modules/doctrine": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
@@ -3386,6 +3954,33 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/framer-motion": {
+      "version": "12.23.12",
+      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz",
+      "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==",
+      "license": "MIT",
+      "dependencies": {
+        "motion-dom": "^12.23.12",
+        "motion-utils": "^12.23.6",
+        "tslib": "^2.4.0"
+      },
+      "peerDependencies": {
+        "@emotion/is-prop-valid": "*",
+        "react": "^18.0.0 || ^19.0.0",
+        "react-dom": "^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@emotion/is-prop-valid": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        },
+        "react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -3452,6 +4047,15 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-nonce": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+      "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/get-proto": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
@@ -4667,6 +5271,21 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/motion-dom": {
+      "version": "12.23.12",
+      "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.12.tgz",
+      "integrity": "sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==",
+      "license": "MIT",
+      "dependencies": {
+        "motion-utils": "^12.23.6"
+      }
+    },
+    "node_modules/motion-utils": {
+      "version": "12.23.6",
+      "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz",
+      "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==",
+      "license": "MIT"
+    },
     "node_modules/ms": {
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -5165,6 +5784,75 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/react-remove-scroll": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz",
+      "integrity": "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==",
+      "license": "MIT",
+      "dependencies": {
+        "react-remove-scroll-bar": "^2.3.7",
+        "react-style-singleton": "^2.2.3",
+        "tslib": "^2.1.0",
+        "use-callback-ref": "^1.3.3",
+        "use-sidecar": "^1.1.3"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-remove-scroll-bar": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+      "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
+      "license": "MIT",
+      "dependencies": {
+        "react-style-singleton": "^2.2.2",
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-style-singleton": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+      "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
+      "license": "MIT",
+      "dependencies": {
+        "get-nonce": "^1.0.0",
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/reflect.getprototypeof": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -6096,6 +6784,49 @@
         "punycode": "^2.1.0"
       }
     },
+    "node_modules/use-callback-ref": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+      "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
+      "license": "MIT",
+      "dependencies": {
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/use-sidecar": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz",
+      "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==",
+      "license": "MIT",
+      "dependencies": {
+        "detect-node-es": "^1.1.0",
+        "tslib": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index a8ad8857..f200406b 100644
--- a/package.json
+++ b/package.json
@@ -9,12 +9,18 @@
     "lint": "next lint"
   },
   "dependencies": {
+    "@radix-ui/react-accordion": "^1.2.11",
+    "@radix-ui/react-dialog": "^1.1.14",
+    "@radix-ui/react-label": "^2.1.7",
+    "@radix-ui/react-navigation-menu": "^1.2.13",
     "@radix-ui/react-slot": "^1.2.3",
+    "@radix-ui/react-switch": "^1.2.5",
     "class-variance-authority": "^0.7.1",
     "clsx": "^2.1.1",
+    "framer-motion": "^12.23.12",
     "lucide-react": "^0.535.0",
     "next": "15.4.5",
-    "react": "19.1.0",
+    "react": "^19.1.0",
     "react-dom": "19.1.0",
     "tailwind-merge": "^3.3.1"
   },
diff --git a/src/app/globals.css b/src/app/globals.css
index dc98be74..a42f3e3e 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -45,20 +45,20 @@
 
 :root {
   --radius: 0.625rem;
-  --background: oklch(1 0 0);
-  --foreground: oklch(0.145 0 0);
-  --card: oklch(1 0 0);
-  --card-foreground: oklch(0.145 0 0);
-  --popover: oklch(1 0 0);
-  --popover-foreground: oklch(0.145 0 0);
-  --primary: oklch(0.205 0 0);
-  --primary-foreground: oklch(0.985 0 0);
-  --secondary: oklch(0.97 0 0);
-  --secondary-foreground: oklch(0.205 0 0);
-  --muted: oklch(0.97 0 0);
-  --muted-foreground: oklch(0.556 0 0);
-  --accent: oklch(0.97 0 0);
-  --accent-foreground: oklch(0.205 0 0);
+  --background: hsl(0, 0%, 95%);
+  --foreground: hsl(0, 0%, 16%);
+  --card: hsl(0, 0%, 90%);
+  --card-foreground: hsl(0, 0%, 24%);
+  --popover: hsl(0, 0%, 90%);
+  --popover-foreground: hsl(0, 0%, 24%);
+  --primary: hsl(0, 0%, 95%);
+  --primary-foreground: hsl(0, 0%, 11%);
+  --secondary: hsl(0, 0%, 90%);
+  --secondary-foreground: hsl(0, 0%, 16%);
+  --muted: hsl(0, 0%, 80%);
+  --muted-foreground: hsl(0, 0%, 24%);
+  --accent: hsl(181, 100%, 22%);
+  --accent-foreground: hsl(0, 0%, 11%);
   --destructive: oklch(0.577 0.245 27.325);
   --border: oklch(0.922 0 0);
   --input: oklch(0.922 0 0);
@@ -79,20 +79,20 @@
 }
 
 .dark {
-  --background: oklch(0.145 0 0);
-  --foreground: oklch(0.985 0 0);
-  --card: oklch(0.205 0 0);
-  --card-foreground: oklch(0.985 0 0);
-  --popover: oklch(0.205 0 0);
-  --popover-foreground: oklch(0.985 0 0);
-  --primary: oklch(0.922 0 0);
-  --primary-foreground: oklch(0.205 0 0);
-  --secondary: oklch(0.269 0 0);
-  --secondary-foreground: oklch(0.985 0 0);
-  --muted: oklch(0.269 0 0);
-  --muted-foreground: oklch(0.708 0 0);
-  --accent: oklch(0.269 0 0);
-  --accent-foreground: oklch(0.985 0 0);
+  --background: hsl(0, 0%, 11%);
+  --foreground: hsl(0, 0%, 90%);
+  --card: hsl(0, 0%, 16%);
+  --card-foreground: hsl(0, 0%, 80%);
+  --popover: hsl(0, 0%, 16%);
+  --popover-foreground: hsl(0, 0%, 80%);
+  --primary: hsl(0, 0%, 11%);
+  --primary-foreground: hsl(0, 0%, 90%);
+  --secondary: hsl(0, 0%, 16%);
+  --secondary-foreground: hsl(0, 0%, 80%);
+  --muted: hsl(0, 0%, 24%);
+  --muted-foreground: hsl(0, 0%, 70%);
+  --accent: hsl(181, 100%, 36%);
+  --accent-foreground: hsl(0, 0%, 11%);
   --destructive: oklch(0.704 0.191 22.216);
   --border: oklch(1 0 0 / 10%);
   --input: oklch(1 0 0 / 15%);
@@ -120,3 +120,9 @@
     @apply bg-background text-foreground;
   }
 }
+
+@layer utilities {
+  .container {
+    @apply max-w-7xl mx-auto px-4;
+  }
+}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index f7fa87eb..17554fdb 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -13,8 +13,8 @@ const geistMono = Geist_Mono({
 });
 
 export const metadata: Metadata = {
-  title: "Create Next App",
-  description: "Generated by create next app",
+  title: "QuickSnip",
+  description: "Find code snippets in seconds.",
 };
 
 export default function RootLayout({
@@ -25,7 +25,7 @@ export default function RootLayout({
   return (
     <html lang="en">
       <body
-        className={`${geistSans.variable} ${geistMono.variable} antialiased`}
+        className={`${geistSans.variable} ${geistMono.variable} antialiased bg-background text-foreground dark`}
       >
         {children}
       </body>
diff --git a/src/app/page.tsx b/src/app/page.tsx
index a9328942..e1039a14 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,103 +1,13 @@
-import Image from "next/image";
+import Features from "@/components/layouts/Features";
+import Header from "@/components/layouts/Header";
+import Hero from "@/components/layouts/Hero";
 
 export default function Home() {
   return (
-    <div className="font-sans grid grid-rows-[20px_1fr_20px] items-center justify-items-center min-h-screen p-8 pb-20 gap-16 sm:p-20">
-      <main className="flex flex-col gap-[32px] row-start-2 items-center sm:items-start">
-        <Image
-          className="dark:invert"
-          src="/next.svg"
-          alt="Next.js logo"
-          width={180}
-          height={38}
-          priority
-        />
-        <ol className="font-mono list-inside list-decimal text-sm/6 text-center sm:text-left">
-          <li className="mb-2 tracking-[-.01em]">
-            Get started by editing{" "}
-            <code className="bg-black/[.05] dark:bg-white/[.06] font-mono font-semibold px-1 py-0.5 rounded">
-              src/app/page.tsx
-            </code>
-            .
-          </li>
-          <li className="tracking-[-.01em]">
-            Save and see your changes instantly.
-          </li>
-        </ol>
-
-        <div className="flex gap-4 items-center flex-col sm:flex-row">
-          <a
-            className="rounded-full border border-solid border-transparent transition-colors flex items-center justify-center bg-foreground text-background gap-2 hover:bg-[#383838] dark:hover:bg-[#ccc] font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 sm:w-auto"
-            href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
-            target="_blank"
-            rel="noopener noreferrer"
-          >
-            <Image
-              className="dark:invert"
-              src="/vercel.svg"
-              alt="Vercel logomark"
-              width={20}
-              height={20}
-            />
-            Deploy now
-          </a>
-          <a
-            className="rounded-full border border-solid border-black/[.08] dark:border-white/[.145] transition-colors flex items-center justify-center hover:bg-[#f2f2f2] dark:hover:bg-[#1a1a1a] hover:border-transparent font-medium text-sm sm:text-base h-10 sm:h-12 px-4 sm:px-5 w-full sm:w-auto md:w-[158px]"
-            href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
-            target="_blank"
-            rel="noopener noreferrer"
-          >
-            Read our docs
-          </a>
-        </div>
-      </main>
-      <footer className="row-start-3 flex gap-[24px] flex-wrap items-center justify-center">
-        <a
-          className="flex items-center gap-2 hover:underline hover:underline-offset-4"
-          href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          <Image
-            aria-hidden
-            src="/file.svg"
-            alt="File icon"
-            width={16}
-            height={16}
-          />
-          Learn
-        </a>
-        <a
-          className="flex items-center gap-2 hover:underline hover:underline-offset-4"
-          href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          <Image
-            aria-hidden
-            src="/window.svg"
-            alt="Window icon"
-            width={16}
-            height={16}
-          />
-          Examples
-        </a>
-        <a
-          className="flex items-center gap-2 hover:underline hover:underline-offset-4"
-          href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
-          target="_blank"
-          rel="noopener noreferrer"
-        >
-          <Image
-            aria-hidden
-            src="/globe.svg"
-            alt="Globe icon"
-            width={16}
-            height={16}
-          />
-          Go to nextjs.org →
-        </a>
-      </footer>
-    </div>
+    <>
+      <Header />
+      <Hero />
+      <Features />
+    </>
   );
 }
diff --git a/src/components/DarkModeSwitch.tsx b/src/components/DarkModeSwitch.tsx
new file mode 100644
index 00000000..81cb5657
--- /dev/null
+++ b/src/components/DarkModeSwitch.tsx
@@ -0,0 +1,13 @@
+import { Label } from "./ui/label";
+import { Switch } from "./ui/switch";
+
+const DarkModeSwitch = () => {
+  return (
+    <div className="flex items-center space-x-2">
+      <Switch id="dark-mode" />
+      {/* <Label htmlFor="dark-mode">"Blind me" mode</Label> */}
+    </div>
+  );
+};
+
+export default DarkModeSwitch;
diff --git a/src/components/Logo.tsx b/src/components/Logo.tsx
new file mode 100644
index 00000000..dbf596e9
--- /dev/null
+++ b/src/components/Logo.tsx
@@ -0,0 +1,42 @@
+import Link from "next/link";
+
+export const LogoIcon = () => (
+  <svg
+    width="43"
+    height="30"
+    viewBox="0 0 43 30"
+    fill="none"
+    xmlns="http://www.w3.org/2000/svg"
+    role="img"
+    aria-labelledby="qs-logo-title qs-logo-description"
+  >
+    <title id="qs-logo-title">QuickSnip Logo</title>
+    <desc id="qs-logo-description">
+      A light blue logo with a thunderbolt in brackets
+    </desc>
+    <path
+      d="M11.0123 3.81725C8.81785 3.81725 7.7866 4.47726 7.9186 5.79726L8.4136 10.871C8.4301 11.0195 8.43835 11.234 8.43835 11.5145C8.43835 12.3065 8.2486 12.917 7.8691 13.346C7.4896 13.7585 6.90385 14.039 6.11185 14.1875C6.92035 14.336 7.5061 14.6165 7.8691 15.029C8.2486 15.425 8.43835 16.0273 8.43835 16.8358C8.43835 17.1163 8.4301 17.339 8.4136 17.504L7.9186 22.5778C7.8526 23.3038 8.1001 23.8153 8.6611 24.1123C9.2221 24.4093 10.0058 24.5578 11.0123 24.5578V26.216C9.52735 26.216 8.3146 25.9603 7.3741 25.4488C6.4336 24.9373 5.96335 24.071 5.96335 22.85C5.96335 22.6355 5.9716 22.4705 5.9881 22.355L6.50785 17.6525C6.52435 17.537 6.5326 17.372 6.5326 17.1575C6.5326 16.4315 6.26035 15.8953 5.71585 15.5488C5.17135 15.2023 4.18135 15.029 2.74585 15.029V13.346C4.18135 13.346 5.17135 13.181 5.71585 12.851C6.26035 12.5045 6.5326 11.9683 6.5326 11.2423C6.5326 11.0443 6.52435 10.8875 6.50785 10.772L5.9881 6.02001C5.9716 5.90451 5.96335 5.73951 5.96335 5.525C5.96335 4.304 6.4336 3.43775 7.3741 2.92625C8.3146 2.41476 9.52735 2.15901 11.0123 2.15901V3.81725Z"
+      fill="#00b5b8"
+    />
+    <path
+      d="M30.6782 13.2235L18.41 25.8383C18.0691 26.1878 17.5037 25.7829 17.7253 25.3482L22.0922 16.7309C22.1252 16.6659 22.1411 16.5935 22.1381 16.5206C22.1352 16.4477 22.1136 16.3767 22.0754 16.3146C22.0372 16.2524 21.9836 16.2011 21.9199 16.1656C21.8562 16.13 21.7844 16.1114 21.7114 16.1116H12.5259C12.442 16.1115 12.36 16.0867 12.2902 16.0402C12.2203 15.9937 12.1658 15.9277 12.1333 15.8503C12.1008 15.7729 12.0919 15.6877 12.1077 15.6053C12.1235 15.5229 12.1632 15.447 12.2219 15.3871L23.6008 3.85901C23.9304 3.52517 24.4787 3.89169 24.2955 4.32496L21.0324 12.0174C21.0048 12.0827 20.9938 12.1537 21.0006 12.2242C21.0073 12.2947 21.0315 12.3625 21.071 12.4213C21.1105 12.4801 21.164 12.5281 21.2267 12.561C21.2894 12.5939 21.3593 12.6107 21.4302 12.6098L30.3671 12.499C30.4514 12.4977 30.5343 12.5214 30.6051 12.5671C30.676 12.6129 30.7317 12.6786 30.7651 12.7561C30.7986 12.8335 30.8083 12.9191 30.7931 13.0021C30.7779 13.085 30.7384 13.1616 30.6796 13.2221L30.6782 13.2235Z"
+      stroke="#00b5b8"
+      strokeWidth="1.65"
+    />
+    <path
+      d="M31.7378 2.15901C33.2228 2.15901 34.4355 2.41476 35.376 2.92625C36.3165 3.43775 36.7868 4.304 36.7868 5.525C36.7868 5.73951 36.7785 5.90451 36.762 6.02001L36.2423 10.772C36.2258 10.8545 36.2175 10.9783 36.2175 11.1433C36.2175 11.8858 36.5063 12.4385 37.0838 12.8015C37.6778 13.1645 38.6513 13.346 40.0043 13.346V15.029C38.6348 15.029 37.6613 15.2105 37.0838 15.5735C36.5063 15.9365 36.2175 16.4975 36.2175 17.2565C36.2175 17.4215 36.2258 17.5535 36.2423 17.6525L36.762 22.355C36.7785 22.4705 36.7868 22.6355 36.7868 22.85C36.7868 24.071 36.3165 24.9373 35.376 25.4488C34.4355 25.9603 33.2228 26.216 31.7378 26.216V24.5578C32.7443 24.5578 33.528 24.4093 34.089 24.1123C34.65 23.8153 34.8975 23.3038 34.8315 22.5778L34.3365 17.504C34.3035 17.174 34.287 16.9513 34.287 16.8358C34.287 16.0108 34.4933 15.4003 34.9058 15.0043C35.3183 14.6083 35.9865 14.3443 36.9105 14.2123C36.0195 14.0473 35.3595 13.7585 34.9305 13.346C34.518 12.917 34.3118 12.2983 34.3118 11.4898C34.3118 11.2258 34.32 11.0195 34.3365 10.871L34.8315 5.79726C34.9635 4.47726 33.9323 3.81725 31.7378 3.81725V2.15901Z"
+      fill="#00b5b8"
+    />
+  </svg>
+);
+
+const Logo = () => {
+  return (
+    <Link href="/" className="flex items-center gap-2">
+      <LogoIcon />
+      <span className="font-bold text-lg">QuickSnip</span>
+    </Link>
+  );
+};
+
+export default Logo;
diff --git a/src/components/layouts/Features.tsx b/src/components/layouts/Features.tsx
new file mode 100644
index 00000000..0d9d355b
--- /dev/null
+++ b/src/components/layouts/Features.tsx
@@ -0,0 +1,60 @@
+import {
+  Code,
+  Terminal,
+  Paintbrush,
+  Rocket,
+  Book,
+  PlusCircle,
+} from "lucide-react";
+
+const features = [
+  {
+    icon: <Code className="h-6 w-6" />,
+    title: "Developer-Friendly",
+    desc: "Tailored for developers to create and iterate fast, with minimal overhead and maximum flexibility.",
+  },
+  {
+    icon: <Terminal className="h-6 w-6" />,
+    title: "CLI Support",
+    desc: "Command-line interface support for seamless development and workflow integration.",
+  },
+  {
+    icon: <Paintbrush className="h-6 w-6" />,
+    title: "Easily Customizable",
+    desc: "Every block is built to be editable. From layout to logic, style to structure—make it your own.",
+  },
+  {
+    icon: <Rocket className="h-6 w-6" />,
+    title: "v0 Support",
+    desc: "Launch fast with confidence. Perfect for MVPs, prototypes, and weekend projects.",
+  },
+  {
+    icon: <Book className="h-6 w-6" />,
+    title: "Full Documentation",
+    desc: "Comprehensive documentation to understand every feature and maximize your development experience.",
+  },
+  {
+    icon: <PlusCircle className="h-6 w-6" />,
+    title: "Contribute Yours",
+    desc: "Add your own blocks to the library and become part of the MVPBlocks community.",
+  },
+];
+export default function Features() {
+  return (
+    <section className="relative py-4 my-6">
+      <div className="container">
+        <ul className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
+          {features.map((item, idx) => (
+            <li key={idx} className="space-y-3 rounded-xl bg-card p-6">
+              <div className="text-accent w-fit transform-gpu rounded-full bg-background p-4">
+                {item.icon}
+              </div>
+              <h4 className="text-lg font-bold">{item.title}</h4>
+              <p className="text-muted-foreground">{item.desc}</p>
+            </li>
+          ))}
+        </ul>
+      </div>
+    </section>
+  );
+}
diff --git a/src/components/layouts/Header.tsx b/src/components/layouts/Header.tsx
new file mode 100644
index 00000000..ea62620f
--- /dev/null
+++ b/src/components/layouts/Header.tsx
@@ -0,0 +1,213 @@
+"use client";
+
+import React, { useState, useEffect } from "react";
+import { motion, AnimatePresence, easeInOut } from "framer-motion";
+import { Menu, X, ArrowRight, Zap, Search, Gamepad, Cat } from "lucide-react";
+import Link from "next/link";
+import Logo from "../Logo";
+import { Switch } from "../ui/switch";
+import { Label } from "../ui/label";
+import DarkModeSwitch from "../DarkModeSwitch";
+
+const NAV_ITEMS = [
+  { name: "Snippets", url: "/snippets" },
+  { name: "Guide", url: "/guide" },
+  { name: "Extensions", url: "/extensions" },
+  { name: "Contribute", url: "/contribute" },
+  { name: "License", url: "/license" },
+];
+
+const SOCIAL_ITEMS = [
+  {
+    icon: <Cat className="h-6 w-6" />,
+    name: "GitHub",
+    url: "https://github.com/quicksnip-dev/quicksnip",
+  },
+  {
+    icon: <Gamepad className="h-6 w-6" />,
+    name: "Discord",
+    url: "https://discord.com",
+  },
+];
+
+export default function Header() {
+  const [isScrolled, setIsScrolled] = useState(false);
+  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
+
+  useEffect(() => {
+    const handleScroll = () => {
+      setIsScrolled(window.scrollY > 10);
+    };
+    window.addEventListener("scroll", handleScroll);
+    return () => window.removeEventListener("scroll", handleScroll);
+  }, []);
+
+  const containerVariants = {
+    hidden: { opacity: 0, y: -20 },
+    visible: {
+      opacity: 1,
+      y: 0,
+      transition: {
+        duration: 0.6,
+        staggerChildren: 0.1,
+      },
+    },
+  };
+
+  const itemVariants = {
+    hidden: { opacity: 0, y: -10 },
+    visible: { opacity: 1, y: 0 },
+  };
+
+  const mobileMenuVariants = {
+    closed: {
+      opacity: 0,
+      x: "100%",
+      transition: {
+        duration: 0.3,
+        ease: easeInOut,
+      },
+    },
+    open: {
+      opacity: 1,
+      x: 0,
+      transition: {
+        duration: 0.3,
+        ease: easeInOut,
+        staggerChildren: 0.1,
+      },
+    },
+  };
+
+  const mobileItemVariants = {
+    closed: { opacity: 0, x: 20 },
+    open: { opacity: 1, x: 0 },
+  };
+
+  return (
+    <>
+      <motion.header
+        className={`fixed top-0 right-0 left-0 z-50 transition-all duration-500 ${
+          isScrolled
+            ? "border-border/50 bg-background/80 border-b shadow-sm backdrop-blur-md"
+            : "bg-transparent"
+        }`}
+        variants={containerVariants}
+        initial="hidden"
+        animate="visible"
+      >
+        <div className="mx-auto px-4 max-w-[90rem]">
+          <div className="flex h-16 items-center justify-between">
+            <Logo />
+
+            <div className="flex gap-4 items-center justify-between">
+              <nav className="hidden items-center gap-8 space-x-1 lg:flex">
+                {NAV_ITEMS.map((item) => (
+                  <motion.div
+                    key={item.name}
+                    variants={itemVariants}
+                    className="relative"
+                  >
+                    <Link
+                      href={item.url}
+                      className="text-foreground/80 hover:text-accent font-medium transition-colors duration-200"
+                    >
+                      <span>{item.name}</span>
+                    </Link>
+                  </motion.div>
+                ))}
+              </nav>
+
+              <hr className="border-0 w-0.5 h-8 bg-secondary" />
+
+              <DarkModeSwitch />
+
+              <hr className="border-0 w-0.5 h-8 bg-secondary" />
+
+              <motion.div
+                className="hidden items-center space-x-3 lg:flex"
+                variants={itemVariants}
+              >
+                {SOCIAL_ITEMS.map((item) => (
+                  <Link href={item.url} title={item.name} className="">
+                    {item.icon}
+                  </Link>
+                ))}
+              </motion.div>
+
+              <motion.button
+                className="text-foreground hover:bg-muted rounded-lg p-2 transition-colors duration-200 lg:hidden"
+                onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}
+                variants={itemVariants}
+                whileTap={{ scale: 0.95 }}
+              >
+                {isMobileMenuOpen ? (
+                  <X className="h-6 w-6" />
+                ) : (
+                  <Menu className="h-6 w-6" />
+                )}
+              </motion.button>
+            </div>
+          </div>
+        </div>
+      </motion.header>
+
+      <AnimatePresence>
+        {isMobileMenuOpen && (
+          <>
+            <motion.div
+              className="fixed inset-0 z-40 bg-black/20 backdrop-blur-sm lg:hidden"
+              initial={{ opacity: 0 }}
+              animate={{ opacity: 1 }}
+              exit={{ opacity: 0 }}
+              onClick={() => setIsMobileMenuOpen(false)}
+            />
+            <motion.div
+              className="border-border bg-background fixed top-16 right-4 z-50 w-80 overflow-hidden rounded-2xl border shadow-2xl lg:hidden"
+              variants={mobileMenuVariants}
+              initial="closed"
+              animate="open"
+              exit="closed"
+            >
+              <div className="space-y-6 p-6">
+                <div className="space-y-1">
+                  {NAV_ITEMS.map((item) => (
+                    <motion.div key={item.name} variants={mobileItemVariants}>
+                      <Link
+                        href={item.url}
+                        className="text-foreground hover:bg-muted block rounded-lg px-4 py-3 font-medium transition-colors duration-200"
+                        onClick={() => setIsMobileMenuOpen(false)}
+                      >
+                        {item.name}
+                      </Link>
+                    </motion.div>
+                  ))}
+                </div>
+
+                <motion.div
+                  className="border-border space-y-3 border-t pt-6"
+                  variants={mobileItemVariants}
+                >
+                  <Link
+                    href="/login"
+                    className="text-foreground hover:bg-muted block w-full rounded-lg py-3 text-center font-medium transition-colors duration-200"
+                    onClick={() => setIsMobileMenuOpen(false)}
+                  >
+                    Sign In
+                  </Link>
+                  <Link
+                    href="/signup"
+                    className="bg-foreground text-background hover:bg-foreground/90 block w-full rounded-lg py-3 text-center font-medium transition-all duration-200"
+                    onClick={() => setIsMobileMenuOpen(false)}
+                  >
+                    Get Started
+                  </Link>
+                </motion.div>
+              </div>
+            </motion.div>
+          </>
+        )}
+      </AnimatePresence>
+    </>
+  );
+}
diff --git a/src/components/layouts/Hero.tsx b/src/components/layouts/Hero.tsx
new file mode 100644
index 00000000..9ecc8b3a
--- /dev/null
+++ b/src/components/layouts/Hero.tsx
@@ -0,0 +1,52 @@
+import Link from "next/link";
+import { Button } from "../ui/button";
+
+const Hero = () => {
+  return (
+    <section className="mt-20">
+      <div className="container grid md:grid-cols-2">
+        <article className="space-y-6 py-12">
+          <Link
+            className="block bg-secondary px-4 py-2 rounded-md w-fit text-lg font-semibold hover:bg-muted transition-colors duration-200 leading-none"
+            href="https://github.com/quicksnip-dev/quicksnip"
+          >
+            v2.3.1
+          </Link>
+          <h1 className="text-4xl lg:text-7xl font-bold">
+            A collection of <span className="text-accent">&lt;code&gt;</span>{" "}
+            snippets
+          </h1>
+          <p className="text-2xl font-semibold text-muted-foreground">
+            Made by the community.
+          </p>
+          <div className="flex flex-wrap gap-2">
+            <Button asChild size="lg" className=" rounded-full">
+              <Link href="/snippets">View all snippets</Link>
+            </Button>
+            <Button
+              asChild
+              size="lg"
+              variant="secondary"
+              className=" rounded-full"
+            >
+              <Link href="/snippets">Get Started</Link>
+            </Button>
+            <Button
+              asChild
+              size="lg"
+              variant="secondary"
+              className=" rounded-full"
+            >
+              <Link href="/snippets">GitHub</Link>
+            </Button>
+          </div>
+        </article>
+        <div className="p-8">
+          <div className="w-full h-full bg-secondary rounded-2xl border-2 border-muted shadow-xl shadow-neutral-900"></div>
+        </div>
+      </div>
+    </section>
+  );
+};
+
+export default Hero;
diff --git a/src/components/ui/accordion.tsx b/src/components/ui/accordion.tsx
new file mode 100644
index 00000000..4a8cca46
--- /dev/null
+++ b/src/components/ui/accordion.tsx
@@ -0,0 +1,66 @@
+"use client"
+
+import * as React from "react"
+import * as AccordionPrimitive from "@radix-ui/react-accordion"
+import { ChevronDownIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Accordion({
+  ...props
+}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
+  return <AccordionPrimitive.Root data-slot="accordion" {...props} />
+}
+
+function AccordionItem({
+  className,
+  ...props
+}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
+  return (
+    <AccordionPrimitive.Item
+      data-slot="accordion-item"
+      className={cn("border-b last:border-b-0", className)}
+      {...props}
+    />
+  )
+}
+
+function AccordionTrigger({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
+  return (
+    <AccordionPrimitive.Header className="flex">
+      <AccordionPrimitive.Trigger
+        data-slot="accordion-trigger"
+        className={cn(
+          "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180",
+          className
+        )}
+        {...props}
+      >
+        {children}
+        <ChevronDownIcon className="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200" />
+      </AccordionPrimitive.Trigger>
+    </AccordionPrimitive.Header>
+  )
+}
+
+function AccordionContent({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
+  return (
+    <AccordionPrimitive.Content
+      data-slot="accordion-content"
+      className="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
+      {...props}
+    >
+      <div className={cn("pt-0 pb-4", className)}>{children}</div>
+    </AccordionPrimitive.Content>
+  )
+}
+
+export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index a2df8dce..aceeecea 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -1,8 +1,8 @@
-import * as React from "react"
-import { Slot } from "@radix-ui/react-slot"
-import { cva, type VariantProps } from "class-variance-authority"
+import * as React from "react";
+import { Slot } from "@radix-ui/react-slot";
+import { cva, type VariantProps } from "class-variance-authority";
 
-import { cn } from "@/lib/utils"
+import { cn } from "@/lib/utils";
 
 const buttonVariants = cva(
   "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
@@ -10,16 +10,16 @@ const buttonVariants = cva(
     variants: {
       variant: {
         default:
-          "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
+          "bg-accent font-semibold text-accent-foreground shadow-xs hover:bg-accent/90",
         destructive:
           "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
         outline:
-          "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
+          "border font-semibold bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
         secondary:
-          "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
+          "bg-secondary font-semibold text-secondary-foreground shadow-xs hover:bg-secondary/80",
         ghost:
           "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
-        link: "text-primary underline-offset-4 hover:underline",
+        link: "text-primary font-semibold underline-offset-4 hover:underline",
       },
       size: {
         default: "h-9 px-4 py-2 has-[>svg]:px-3",
@@ -33,7 +33,7 @@ const buttonVariants = cva(
       size: "default",
     },
   }
-)
+);
 
 function Button({
   className,
@@ -43,9 +43,9 @@ function Button({
   ...props
 }: React.ComponentProps<"button"> &
   VariantProps<typeof buttonVariants> & {
-    asChild?: boolean
+    asChild?: boolean;
   }) {
-  const Comp = asChild ? Slot : "button"
+  const Comp = asChild ? Slot : "button";
 
   return (
     <Comp
@@ -53,7 +53,7 @@ function Button({
       className={cn(buttonVariants({ variant, size, className }))}
       {...props}
     />
-  )
+  );
 }
 
-export { Button, buttonVariants }
+export { Button, buttonVariants };
diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx
new file mode 100644
index 00000000..fb5fbc3e
--- /dev/null
+++ b/src/components/ui/label.tsx
@@ -0,0 +1,24 @@
+"use client"
+
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+
+import { cn } from "@/lib/utils"
+
+function Label({
+  className,
+  ...props
+}: React.ComponentProps<typeof LabelPrimitive.Root>) {
+  return (
+    <LabelPrimitive.Root
+      data-slot="label"
+      className={cn(
+        "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+export { Label }
diff --git a/src/components/ui/navigation-menu.tsx b/src/components/ui/navigation-menu.tsx
new file mode 100644
index 00000000..1199945c
--- /dev/null
+++ b/src/components/ui/navigation-menu.tsx
@@ -0,0 +1,168 @@
+import * as React from "react"
+import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
+import { cva } from "class-variance-authority"
+import { ChevronDownIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function NavigationMenu({
+  className,
+  children,
+  viewport = true,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
+  viewport?: boolean
+}) {
+  return (
+    <NavigationMenuPrimitive.Root
+      data-slot="navigation-menu"
+      data-viewport={viewport}
+      className={cn(
+        "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      {viewport && <NavigationMenuViewport />}
+    </NavigationMenuPrimitive.Root>
+  )
+}
+
+function NavigationMenuList({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.List>) {
+  return (
+    <NavigationMenuPrimitive.List
+      data-slot="navigation-menu-list"
+      className={cn(
+        "group flex flex-1 list-none items-center justify-center gap-1",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function NavigationMenuItem({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Item>) {
+  return (
+    <NavigationMenuPrimitive.Item
+      data-slot="navigation-menu-item"
+      className={cn("relative", className)}
+      {...props}
+    />
+  )
+}
+
+const navigationMenuTriggerStyle = cva(
+  "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1"
+)
+
+function NavigationMenuTrigger({
+  className,
+  children,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>) {
+  return (
+    <NavigationMenuPrimitive.Trigger
+      data-slot="navigation-menu-trigger"
+      className={cn(navigationMenuTriggerStyle(), "group", className)}
+      {...props}
+    >
+      {children}{" "}
+      <ChevronDownIcon
+        className="relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180"
+        aria-hidden="true"
+      />
+    </NavigationMenuPrimitive.Trigger>
+  )
+}
+
+function NavigationMenuContent({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Content>) {
+  return (
+    <NavigationMenuPrimitive.Content
+      data-slot="navigation-menu-content"
+      className={cn(
+        "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
+        "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function NavigationMenuViewport({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>) {
+  return (
+    <div
+      className={cn(
+        "absolute top-full left-0 isolate z-50 flex justify-center"
+      )}
+    >
+      <NavigationMenuPrimitive.Viewport
+        data-slot="navigation-menu-viewport"
+        className={cn(
+          "origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]",
+          className
+        )}
+        {...props}
+      />
+    </div>
+  )
+}
+
+function NavigationMenuLink({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Link>) {
+  return (
+    <NavigationMenuPrimitive.Link
+      data-slot="navigation-menu-link"
+      className={cn(
+        "data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function NavigationMenuIndicator({
+  className,
+  ...props
+}: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>) {
+  return (
+    <NavigationMenuPrimitive.Indicator
+      data-slot="navigation-menu-indicator"
+      className={cn(
+        "data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden",
+        className
+      )}
+      {...props}
+    >
+      <div className="bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" />
+    </NavigationMenuPrimitive.Indicator>
+  )
+}
+
+export {
+  NavigationMenu,
+  NavigationMenuList,
+  NavigationMenuItem,
+  NavigationMenuContent,
+  NavigationMenuTrigger,
+  NavigationMenuLink,
+  NavigationMenuIndicator,
+  NavigationMenuViewport,
+  navigationMenuTriggerStyle,
+}
diff --git a/src/components/ui/sheet.tsx b/src/components/ui/sheet.tsx
new file mode 100644
index 00000000..84649ad0
--- /dev/null
+++ b/src/components/ui/sheet.tsx
@@ -0,0 +1,139 @@
+"use client"
+
+import * as React from "react"
+import * as SheetPrimitive from "@radix-ui/react-dialog"
+import { XIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+function Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {
+  return <SheetPrimitive.Root data-slot="sheet" {...props} />
+}
+
+function SheetTrigger({
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {
+  return <SheetPrimitive.Trigger data-slot="sheet-trigger" {...props} />
+}
+
+function SheetClose({
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Close>) {
+  return <SheetPrimitive.Close data-slot="sheet-close" {...props} />
+}
+
+function SheetPortal({
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Portal>) {
+  return <SheetPrimitive.Portal data-slot="sheet-portal" {...props} />
+}
+
+function SheetOverlay({
+  className,
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {
+  return (
+    <SheetPrimitive.Overlay
+      data-slot="sheet-overlay"
+      className={cn(
+        "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+
+function SheetContent({
+  className,
+  children,
+  side = "right",
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Content> & {
+  side?: "top" | "right" | "bottom" | "left"
+}) {
+  return (
+    <SheetPortal>
+      <SheetOverlay />
+      <SheetPrimitive.Content
+        data-slot="sheet-content"
+        className={cn(
+          "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
+          side === "right" &&
+            "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm",
+          side === "left" &&
+            "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm",
+          side === "top" &&
+            "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b",
+          side === "bottom" &&
+            "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t",
+          className
+        )}
+        {...props}
+      >
+        {children}
+        <SheetPrimitive.Close className="ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none">
+          <XIcon className="size-4" />
+          <span className="sr-only">Close</span>
+        </SheetPrimitive.Close>
+      </SheetPrimitive.Content>
+    </SheetPortal>
+  )
+}
+
+function SheetHeader({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sheet-header"
+      className={cn("flex flex-col gap-1.5 p-4", className)}
+      {...props}
+    />
+  )
+}
+
+function SheetFooter({ className, ...props }: React.ComponentProps<"div">) {
+  return (
+    <div
+      data-slot="sheet-footer"
+      className={cn("mt-auto flex flex-col gap-2 p-4", className)}
+      {...props}
+    />
+  )
+}
+
+function SheetTitle({
+  className,
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Title>) {
+  return (
+    <SheetPrimitive.Title
+      data-slot="sheet-title"
+      className={cn("text-foreground font-semibold", className)}
+      {...props}
+    />
+  )
+}
+
+function SheetDescription({
+  className,
+  ...props
+}: React.ComponentProps<typeof SheetPrimitive.Description>) {
+  return (
+    <SheetPrimitive.Description
+      data-slot="sheet-description"
+      className={cn("text-muted-foreground text-sm", className)}
+      {...props}
+    />
+  )
+}
+
+export {
+  Sheet,
+  SheetTrigger,
+  SheetClose,
+  SheetContent,
+  SheetHeader,
+  SheetFooter,
+  SheetTitle,
+  SheetDescription,
+}
diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx
new file mode 100644
index 00000000..80c70e0c
--- /dev/null
+++ b/src/components/ui/switch.tsx
@@ -0,0 +1,34 @@
+"use client";
+
+import * as React from "react";
+import * as SwitchPrimitive from "@radix-ui/react-switch";
+
+import { cn } from "@/lib/utils";
+import { Moon } from "lucide-react";
+
+function Switch({
+  className,
+  ...props
+}: React.ComponentProps<typeof SwitchPrimitive.Root>) {
+  return (
+    <SwitchPrimitive.Root
+      data-slot="switch"
+      className={cn(
+        "peer data-[state=checked]:bg-secondary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
+        className
+      )}
+      {...props}
+    >
+      <SwitchPrimitive.Thumb
+        data-slot="switch-thumb"
+        className={cn(
+          "bg-secondary dark:data-[state=unchecked]:bg-secondary dark:data-[state=checked]:bg-primary-foreground pointer-events-none flex items-center justify-center size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
+        )}
+      >
+        <Moon color="black" size={12} />
+      </SwitchPrimitive.Thumb>
+    </SwitchPrimitive.Root>
+  );
+}
+
+export { Switch };
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index bd0c391d..9ad0df42 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -1,6 +1,6 @@
-import { clsx, type ClassValue } from "clsx"
-import { twMerge } from "tailwind-merge"
+import { type ClassValue, clsx } from 'clsx';
+import { twMerge } from 'tailwind-merge';
 
 export function cn(...inputs: ClassValue[]) {
-  return twMerge(clsx(inputs))
+  return twMerge(clsx(inputs));
 }

From 562c6c0a3f5668d0d1092e97a21609cbd0baecfe Mon Sep 17 00:00:00 2001
From: Technophile <dostonnabotov@gmail.com>
Date: Sun, 3 Aug 2025 05:14:40 +0300
Subject: [PATCH 3/4] Add Extensions & Community pages

---
 next.config.ts                        |   7 +-
 package-lock.json                     |  79 +++++++++++++++
 package.json                          |   2 +
 public/discord.svg                    |  16 ++++
 public/extensions/jetbrains.svg       |  33 +++++++
 public/extensions/neovim.svg          |  20 ++++
 public/extensions/raycast.svg         |  10 ++
 public/extensions/vim.svg             |  35 +++++++
 public/extensions/vscode.svg          |  44 +++++++++
 public/file.svg                       |   1 -
 public/github.svg                     |  11 +++
 public/globe.svg                      |   1 -
 public/window.svg                     |   1 -
 src/app/community/page.tsx            | 132 ++++++++++++++++++++++++++
 src/app/contribute/page.tsx           |   9 --
 src/app/contributing/page.tsx         |   8 ++
 src/app/extensions/page.tsx           |  41 +++++++-
 src/app/globals.css                   |   4 +
 src/app/layout.tsx                    |   9 +-
 src/app/license/page.tsx              |   9 --
 src/app/page.tsx                      |  16 +++-
 src/components/layouts/Extensions.tsx |  69 ++++++++++++++
 src/components/layouts/Footer.tsx     |  62 ++++++++++++
 src/components/layouts/Header.tsx     |  30 ++++--
 src/components/layouts/Hero.tsx       |   2 +-
 src/components/ui/aspect-ratio.tsx    |  11 +++
 src/components/ui/avatar.tsx          |  53 +++++++++++
 src/components/ui/button.tsx          |  12 +--
 src/data/extensions.ts                |  38 ++++++++
 src/types/index.ts                    |   8 ++
 30 files changed, 729 insertions(+), 44 deletions(-)
 create mode 100644 public/discord.svg
 create mode 100644 public/extensions/jetbrains.svg
 create mode 100644 public/extensions/neovim.svg
 create mode 100644 public/extensions/raycast.svg
 create mode 100644 public/extensions/vim.svg
 create mode 100644 public/extensions/vscode.svg
 delete mode 100644 public/file.svg
 create mode 100644 public/github.svg
 delete mode 100644 public/globe.svg
 delete mode 100644 public/window.svg
 create mode 100644 src/app/community/page.tsx
 delete mode 100644 src/app/contribute/page.tsx
 create mode 100644 src/app/contributing/page.tsx
 delete mode 100644 src/app/license/page.tsx
 create mode 100644 src/components/layouts/Extensions.tsx
 create mode 100644 src/components/layouts/Footer.tsx
 create mode 100644 src/components/ui/aspect-ratio.tsx
 create mode 100644 src/components/ui/avatar.tsx
 create mode 100644 src/data/extensions.ts
 create mode 100644 src/types/index.ts

diff --git a/next.config.ts b/next.config.ts
index e9ffa308..5aac8dbe 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,7 +1,12 @@
 import type { NextConfig } from "next";
 
 const nextConfig: NextConfig = {
-  /* config options here */
+  images: {
+    remotePatterns: [
+      new URL("https://img.youtube.com/vi/**"),
+      new URL("https://storage.ko-fi.com/cdn/**"),
+    ],
+  },
 };
 
 export default nextConfig;
diff --git a/package-lock.json b/package-lock.json
index 2542c982..58d1ae27 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,8 @@
       "version": "0.1.0",
       "dependencies": {
         "@radix-ui/react-accordion": "^1.2.11",
+        "@radix-ui/react-aspect-ratio": "^1.1.7",
+        "@radix-ui/react-avatar": "^1.1.10",
         "@radix-ui/react-dialog": "^1.1.14",
         "@radix-ui/react-label": "^2.1.7",
         "@radix-ui/react-navigation-menu": "^1.2.13",
@@ -1015,6 +1017,56 @@
         }
       }
     },
+    "node_modules/@radix-ui/react-aspect-ratio": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz",
+      "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-avatar": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz",
+      "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-is-hydrated": "0.1.0",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@radix-ui/react-collapsible": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz",
@@ -1484,6 +1536,24 @@
         }
       }
     },
+    "node_modules/@radix-ui/react-use-is-hydrated": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz",
+      "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
+      "license": "MIT",
+      "dependencies": {
+        "use-sync-external-store": "^1.5.0"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@radix-ui/react-use-layout-effect": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
@@ -6827,6 +6897,15 @@
         }
       }
     },
+    "node_modules/use-sync-external-store": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz",
+      "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index f200406b..d8216709 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,8 @@
   },
   "dependencies": {
     "@radix-ui/react-accordion": "^1.2.11",
+    "@radix-ui/react-aspect-ratio": "^1.1.7",
+    "@radix-ui/react-avatar": "^1.1.10",
     "@radix-ui/react-dialog": "^1.1.14",
     "@radix-ui/react-label": "^2.1.7",
     "@radix-ui/react-navigation-menu": "^1.2.13",
diff --git a/public/discord.svg b/public/discord.svg
new file mode 100644
index 00000000..ca215b83
--- /dev/null
+++ b/public/discord.svg
@@ -0,0 +1,16 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2420_185)">
+<path d="M38.2812 0H11.7188C5.24666 0 0 5.24666 0 11.7188V38.2812C0 44.7533 5.24666 50 11.7188 50H38.2812C44.7533 50 50 44.7533 50 38.2812V11.7188C50 5.24666 44.7533 0 38.2812 0Z" fill="#5865F2"/>
+<mask id="mask0_2420_185" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="5" y="9" width="40" height="32">
+<path d="M5.46875 9.96094H44.5312V40.2207H5.46875V9.96094Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_2420_185)">
+<path d="M38.5366 12.6557C36.004 11.4933 33.3314 10.6643 30.5856 10.1895C30.5607 10.1849 30.5349 10.1883 30.512 10.1992C30.4891 10.21 30.4702 10.2278 30.4579 10.25C30.1145 10.8606 29.7341 11.6574 29.4678 12.2836C26.4653 11.834 23.4784 11.834 20.5376 12.2836C20.2712 11.6434 19.877 10.8606 19.5321 10.25C19.5194 10.2282 19.5004 10.2107 19.4775 10.1999C19.4547 10.1891 19.4291 10.1854 19.4042 10.1895C16.6581 10.6633 13.9854 11.4923 11.4532 12.6557C11.4316 12.6651 11.4134 12.6807 11.4009 12.7006C6.3368 20.2662 4.94969 27.6459 5.63015 34.9342C5.6343 34.9702 5.65257 35.0031 5.68094 35.0256C9.02195 37.4793 12.2585 38.969 15.4348 39.9563C15.4596 39.9636 15.4859 39.9632 15.5104 39.9552C15.5349 39.9472 15.5564 39.9319 15.5719 39.9113C16.3233 38.8852 16.993 37.8033 17.5675 36.6656C17.5754 36.6501 17.5799 36.633 17.5807 36.6155C17.5815 36.5981 17.5787 36.5806 17.5722 36.5644C17.5658 36.5481 17.5561 36.5334 17.5436 36.5212C17.531 36.509 17.5161 36.4996 17.4997 36.4936C16.4372 36.0904 15.4257 35.5992 14.4526 35.0412C14.4349 35.0308 14.42 35.0161 14.4093 34.9986C14.3986 34.9811 14.3923 34.9611 14.3911 34.9406C14.3899 34.9201 14.3937 34.8995 14.4023 34.8809C14.4109 34.8622 14.4239 34.8459 14.4403 34.8334C14.6456 34.68 14.8473 34.5219 15.0454 34.3592C15.0627 34.3449 15.0837 34.3357 15.106 34.3327C15.1283 34.3296 15.151 34.3329 15.1716 34.342C21.5645 37.2608 28.4854 37.2608 34.8028 34.342C34.8234 34.3323 34.8464 34.3286 34.869 34.3314C34.8917 34.3342 34.913 34.3432 34.9307 34.3576C35.129 34.5212 35.3313 34.6798 35.5374 34.8334C35.5538 34.8458 35.567 34.8619 35.5757 34.8806C35.5844 34.8992 35.5884 34.9197 35.5873 34.9402C35.5863 34.9607 35.5802 34.9807 35.5696 34.9983C35.559 35.0159 35.5443 35.0307 35.5266 35.0412C34.553 35.6097 33.5332 36.095 32.478 36.492C32.4617 36.4983 32.4468 36.508 32.4345 36.5204C32.4221 36.5328 32.4125 36.5477 32.4062 36.5641C32.4 36.5805 32.3973 36.598 32.3982 36.6155C32.3992 36.6329 32.4038 36.65 32.4118 36.6656C32.9961 37.7943 33.6625 38.8786 34.4055 39.9098C34.4207 39.9308 34.4421 39.9466 34.4667 39.9549C34.4912 39.9632 34.5178 39.9637 34.5427 39.9563C37.7344 38.969 40.971 37.4793 44.3122 35.0256C44.3265 35.015 44.3384 35.0016 44.3471 34.9861C44.3559 34.9706 44.3613 34.9535 44.363 34.9358C45.1774 26.5098 42.9987 19.1904 38.5874 12.7022C38.5767 12.681 38.5586 12.6645 38.5366 12.6557ZM18.5221 30.4965C16.5973 30.4965 15.0114 28.7295 15.0114 26.5594C15.0114 24.3893 16.5667 22.6223 18.5221 22.6223C20.4928 22.6223 22.0634 24.4049 22.0325 26.5594C22.0325 28.7295 20.4774 30.4965 18.5221 30.4965ZM31.5018 30.4965C29.577 30.4965 27.9913 28.7295 27.9913 26.5594C27.9913 24.3893 29.5464 22.6223 31.5018 22.6223C33.4725 22.6223 35.043 24.4049 35.0124 26.5594C35.0124 28.7295 33.4725 30.4965 31.5018 30.4965Z" fill="white"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_2420_185">
+<rect width="50" height="50" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/public/extensions/jetbrains.svg b/public/extensions/jetbrains.svg
new file mode 100644
index 00000000..baa9769e
--- /dev/null
+++ b/public/extensions/jetbrains.svg
@@ -0,0 +1,33 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2414_137)">
+<path d="M22.0046 22.8354L8.21355 11.2077C7.65026 10.7382 6.99008 10.398 6.27991 10.2112C5.56973 10.0245 4.82699 9.99577 4.10443 10.1272C3.38187 10.2586 2.69722 10.5469 2.09912 10.9716C1.50102 11.3963 1.00414 11.9469 0.643766 12.5845C0.283394 13.222 0.0683751 13.9307 0.0139815 14.6604C-0.0404122 15.39 0.0671543 16.1226 0.32904 16.8062C0.590927 17.4897 1.00071 18.1075 1.52928 18.6155C2.05784 19.1235 2.69223 19.5094 3.38738 19.7457H3.43758L3.56765 19.7856L20.9639 25.0645C21.0901 25.1101 21.2233 25.1337 21.3575 25.1344C21.628 25.1329 21.8906 25.0437 22.1056 24.8803C22.3206 24.7168 22.4763 24.488 22.5491 24.2285C22.6218 23.969 22.6077 23.693 22.5089 23.4422C22.41 23.1914 22.2318 22.9795 22.0012 22.8387L22.0046 22.8354Z" fill="url(#paint0_linear_2414_137)"/>
+<path d="M24.7696 3.63969C24.7735 2.98568 24.5994 2.34282 24.2658 1.77951C23.9322 1.21619 23.4516 0.753489 22.875 0.440614C22.2984 0.127739 21.6475 -0.0236056 20.9914 0.00267963C20.3354 0.0289648 19.6987 0.231896 19.1493 0.589888L2.30687 10.7759C1.73412 11.1477 1.24394 11.6324 0.866587 12.2002C0.489234 12.7681 0.232719 13.4069 0.112874 14.0773C-0.00697079 14.7478 0.0123981 15.4355 0.169785 16.0982C0.327172 16.7609 0.619238 17.3844 1.02795 17.9303C1.43667 18.4761 1.95336 18.9327 2.54614 19.272C3.13891 19.6112 3.79519 19.8258 4.47447 19.9025C5.15374 19.9792 5.84159 19.9164 6.49557 19.7181C7.14954 19.5197 7.75576 19.1899 8.27679 18.749L23.3752 6.49339L23.4953 6.39359C23.8944 6.05306 24.2148 5.63066 24.4347 5.15531C24.6546 4.67996 24.7687 4.16289 24.7694 3.6395" fill="url(#paint1_linear_2414_137)"/>
+<path d="M49.2628 25.5894L23.7087 1.07505C23.3627 0.729033 22.9501 0.45623 22.4957 0.273021C22.0412 0.0898125 21.5543 -2.37714e-05 21.0641 0.00890693C20.5739 0.0178376 20.0906 0.125351 19.6431 0.324992C19.1957 0.524632 18.7934 0.812282 18.4603 1.17067C18.1273 1.52906 17.8704 1.95079 17.7051 2.41054C17.5397 2.8703 17.4694 3.35859 17.4982 3.84611C17.5271 4.33362 17.6546 4.8103 17.873 5.24752C18.0914 5.68475 18.3962 6.07349 18.7693 6.39042L18.8159 6.4303L45.9644 29.214C46.3226 29.5133 46.7592 29.7044 47.2227 29.765C47.6863 29.8256 48.1576 29.753 48.5812 29.5558C49.0047 29.3586 49.363 29.0451 49.6137 28.652C49.8645 28.2589 49.9973 27.8026 49.9966 27.3369C49.9965 27.0118 49.9317 26.6898 49.8057 26.3899C49.6797 26.0899 49.4952 25.8178 49.2628 25.5894Z" fill="url(#paint2_linear_2414_137)"/>
+<path d="M50.0001 27.3471C50.0034 26.8953 49.8807 26.4515 49.6458 26.065C49.4109 25.6784 49.073 25.3644 48.6696 25.1578C48.2662 24.9512 47.8132 24.8602 47.3609 24.8947C46.9087 24.9293 46.4749 25.0882 46.1079 25.3537L15.1874 40.4034C14.5706 40.7118 14.0246 41.144 13.5836 41.6729C13.1426 42.2017 12.8163 42.8157 12.6251 43.4763C12.4338 44.1368 12.3819 44.8297 12.4725 45.5112C12.5631 46.1927 12.7943 46.8482 13.1515 47.4364C13.5087 48.0247 13.9842 48.5329 14.5482 48.9292C15.1121 49.3255 15.7523 49.6013 16.4284 49.7392C17.1046 49.8771 17.802 49.8742 18.477 49.7306C19.1519 49.587 19.7897 49.3059 20.3503 48.9049L48.9429 29.357C49.2693 29.1323 49.536 28.8319 49.7201 28.4819C49.9043 28.1318 50.0004 27.7424 50.0001 27.3471Z" fill="url(#paint3_linear_2414_137)"/>
+<path d="M14.8137 14.9586H34.8249V34.8917H14.8137V14.9586Z" fill="black"/>
+<path d="M16.9917 31.1543H24.4958V32.4H16.9919L16.9917 31.1543ZM16.6782 20.0978L17.2353 19.5729C17.2882 19.6563 17.3603 19.7259 17.4455 19.7762C17.5307 19.8264 17.6267 19.8558 17.7255 19.862C17.939 19.862 18.079 19.7126 18.079 19.4235V17.4568H18.9396V19.4301C18.9525 19.589 18.9318 19.7489 18.879 19.8994C18.8261 20.0498 18.7423 20.1876 18.6327 20.3039C18.4225 20.5086 18.1428 20.6273 17.8489 20.6362H17.7755C17.5749 20.6442 17.3753 20.6051 17.1927 20.5222C17.0101 20.4393 16.8496 20.3148 16.7241 20.1587L16.6782 20.0978ZM19.3263 17.4568H21.8378V18.1844H20.1702V18.6595H21.6677V19.3239H20.1835V19.8189H21.8511V20.5498H19.3165L19.3263 17.4568ZM23.0618 18.2109H22.1278V17.4568H24.8661V18.2109H23.929V20.5663H23.0618V18.2109ZM17.0251 21.7957H18.4993C18.6523 21.7832 18.8063 21.8012 18.9523 21.8486C19.0983 21.8959 19.2334 21.9717 19.3497 22.0716C19.416 22.1378 19.4682 22.2166 19.5032 22.3033C19.5381 22.3901 19.5552 22.483 19.5532 22.5764C19.5558 22.7281 19.5106 22.8767 19.4238 23.0013C19.337 23.126 19.2131 23.2203 19.0696 23.271C19.2471 23.3034 19.407 23.3978 19.5208 23.5373C19.6345 23.6767 19.6945 23.8521 19.6899 24.0317C19.6899 24.593 19.253 24.9253 18.506 24.9253H17.0251V21.7957ZM18.6927 22.7558C18.6927 22.5831 18.5526 22.4901 18.2991 22.4901H17.8688V23.0348H18.2858C18.546 23.0348 18.6993 22.9453 18.6993 22.7659L18.6927 22.7558ZM18.3925 23.6397H17.869V24.2144H18.4093C18.6761 24.2144 18.8228 24.1113 18.8228 23.9286C18.8165 23.7644 18.7056 23.6548 18.455 23.641L18.3925 23.6397ZM21.7478 24.9253L21.1173 23.9817H20.8272V24.9253H19.9601L19.9667 21.7957H21.3509C21.5341 21.7809 21.7184 21.8026 21.8931 21.8597C22.0678 21.9167 22.2293 22.008 22.3681 22.128C22.5408 22.3041 22.6401 22.539 22.6458 22.7852L22.6448 22.8523C22.6509 23.0591 22.5922 23.2627 22.4769 23.4347C22.3616 23.6068 22.1954 23.7388 22.0013 23.8124L22.6106 24.7202L23.8489 21.7725H24.6827L26.0167 24.9087H25.0862L24.8628 24.3473H23.6521L23.4286 24.9253H21.7478ZM24.2591 22.7957L23.9056 23.676H24.6093L24.2591 22.7957ZM21.2974 22.5434H20.8339V23.2974L21.3007 23.2908C21.5909 23.2908 21.7677 23.1478 21.7677 22.9187C21.7677 22.6696 21.5843 22.5434 21.2974 22.5434ZM26.1534 21.7856H27.0206V24.8984H26.1534V21.7856ZM27.3409 21.7856H28.1546L29.2786 23.4467V21.7856H30.1356V24.8984H29.3786L28.2013 23.1908V24.8984H27.3407L27.3409 21.7856ZM30.2792 24.4367L30.7593 23.862C31.0406 24.0963 31.3933 24.2287 31.7599 24.2375C31.9968 24.2375 32.1202 24.1543 32.1202 24.0216C32.1202 23.9212 32.0657 23.8585 31.8651 23.7928L31.7698 23.7642L31.7151 23.7496L31.5897 23.719L31.5214 23.7033L31.3882 23.6702L31.2606 23.6356C30.762 23.4906 30.4126 23.2764 30.4126 22.7457C30.4126 22.1677 30.8728 21.749 31.6231 21.749C32.087 21.7317 32.542 21.8789 32.9071 22.1644L32.4903 22.7558C32.238 22.566 31.9326 22.4591 31.6165 22.45C31.4064 22.45 31.303 22.5331 31.303 22.6494C31.303 22.7546 31.361 22.8167 31.5663 22.8805L31.6636 22.9081C31.6813 22.9128 31.6999 22.9175 31.7194 22.9222L31.8466 22.9517C32.5638 23.1078 33.0073 23.3404 33.0073 23.9218C33.0073 24.5352 32.5366 24.8939 31.8214 24.9173L31.7466 24.9185C31.2491 24.9396 30.7592 24.791 30.3579 24.4973L30.2792 24.4367Z" fill="white"/>
+</g>
+<defs>
+<linearGradient id="paint0_linear_2414_137" x1="568.867" y1="663.503" x2="2062.45" y2="1392.73" gradientUnits="userSpaceOnUse">
+<stop offset="0.21" stop-color="#FE2857"/>
+<stop offset="1" stop-color="#293896"/>
+</linearGradient>
+<linearGradient id="paint1_linear_2414_137" x1="56.38" y1="1537.94" x2="1969.99" y2="113.158" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FE2857"/>
+<stop offset="0.01" stop-color="#FE2857"/>
+<stop offset="0.86" stop-color="#FF318C"/>
+</linearGradient>
+<linearGradient id="paint2_linear_2414_137" x1="222.239" y1="414.451" x2="2884.35" y2="2841.15" gradientUnits="userSpaceOnUse">
+<stop offset="0.02" stop-color="#FF318C"/>
+<stop offset="0.21" stop-color="#FE2857"/>
+<stop offset="0.86" stop-color="#FDB60D"/>
+</linearGradient>
+<linearGradient id="paint3_linear_2414_137" x1="3434.66" y1="716.608" x2="691.131" y2="2612.44" gradientUnits="userSpaceOnUse">
+<stop offset="0.01" stop-color="#FDB60D"/>
+<stop offset="0.86" stop-color="#FCF84A"/>
+</linearGradient>
+<clipPath id="clip0_2414_137">
+<rect width="50" height="50" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/public/extensions/neovim.svg b/public/extensions/neovim.svg
new file mode 100644
index 00000000..20e6e2c4
--- /dev/null
+++ b/public/extensions/neovim.svg
@@ -0,0 +1,20 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.41479 10.7389L15.0504 0V49.9305L4.41479 39.3165V10.7389Z" fill="url(#paint0_linear_2414_144)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M45.5111 10.8347L34.7432 0L34.9613 49.9305L45.5843 39.3152L45.5111 10.8347Z" fill="url(#paint1_linear_2414_144)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0492 0.0681152L42.7026 42.2626L34.964 49.9999L7.29639 7.89902L15.0492 0.0681152Z" fill="url(#paint2_linear_2414_144)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M15.0507 19.5352L15.0351 21.193L6.54175 8.62268L7.32847 7.81799L15.0507 19.5352Z" fill="black" fill-opacity="0.129"/>
+<defs>
+<linearGradient id="paint0_linear_2414_144" x1="9.73259" y1="0" x2="9.73259" y2="49.9307" gradientUnits="userSpaceOnUse">
+<stop stop-color="#16B0ED" stop-opacity="0.8"/>
+<stop offset="1" stop-color="#0F59B2" stop-opacity="0.835"/>
+</linearGradient>
+<linearGradient id="paint1_linear_2414_144" x1="40.1638" y1="0" x2="40.1638" y2="49.9307" gradientUnits="userSpaceOnUse">
+<stop stop-color="#7DB643"/>
+<stop offset="1" stop-color="#367533"/>
+</linearGradient>
+<linearGradient id="paint2_linear_2414_144" x1="24.9995" y1="0.0681152" x2="24.9995" y2="50.0001" gradientUnits="userSpaceOnUse">
+<stop stop-color="#88C649" stop-opacity="0.8"/>
+<stop offset="1" stop-color="#439240" stop-opacity="0.839"/>
+</linearGradient>
+</defs>
+</svg>
diff --git a/public/extensions/raycast.svg b/public/extensions/raycast.svg
new file mode 100644
index 00000000..e2b7e7a2
--- /dev/null
+++ b/public/extensions/raycast.svg
@@ -0,0 +1,10 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2409_135)">
+<path d="M12.5083 32.275V37.4917L0 24.9833L2.62083 22.3812L12.5083 32.275ZM17.725 37.4917H12.5083L25.0167 50L27.6271 47.3896L17.725 37.4917ZM47.3917 27.6021L50 24.9937L25.0062 0L22.3958 2.60625L32.2729 12.5H26.3042L19.4104 5.60833L16.8021 8.21667L21.0937 12.5083H18.1062V31.9042H37.5V28.9208L41.7917 33.2125L44.4 30.6042L37.5 23.6875V17.7208L47.3917 27.6021ZM13.8125 11.1917L11.2083 13.8021L14.0042 16.6L16.6104 13.9896L13.8125 11.1917ZM36.0104 33.3896L33.4125 35.9958L36.2083 38.7937L38.8187 36.1875L36.0104 33.3896ZM8.21667 16.7896L5.60833 19.3958L12.5083 26.3V21.0792L8.21667 16.7896ZM28.9167 37.4917H23.7L30.6042 44.3917L33.2083 41.7833L28.9167 37.4917Z" fill="#FF6364"/>
+</g>
+<defs>
+<clipPath id="clip0_2409_135">
+<rect width="50" height="50" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/public/extensions/vim.svg b/public/extensions/vim.svg
new file mode 100644
index 00000000..133e1ddc
--- /dev/null
+++ b/public/extensions/vim.svg
@@ -0,0 +1,35 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M25.18 2.78748L3.33154 24.6769L25.1202 46.5121L47.0284 24.6226L25.18 2.78748Z" fill="#019833"/>
+<path d="M25.1204 46.5668L3.27197 24.6774L3.33174 24.6231L25.2399 2.67896L47.0884 24.5684L47.0286 24.6227L25.1204 46.5668ZM3.3915 24.6774L25.1204 46.4583L46.9688 24.6231L25.2399 2.84224L3.3915 24.6774Z" fill="black"/>
+<path d="M25.1202 2.84177V0.935913L1.29639 24.7859H3.33154L25.1202 2.84177Z" fill="#66FE98"/>
+<path d="M3.33159 24.786H1.17651L1.23628 24.7317L25.1199 0.827393V2.84224L3.3312 24.7864L3.33159 24.786ZM1.41597 24.7317H3.27144L25.0601 2.84224V1.04536L1.41597 24.7317Z" fill="black"/>
+<path d="M25.0601 2.84177V0.935913L48.8839 24.7859H46.8487L25.0601 2.84177Z" fill="#45FE02"/>
+<path d="M48.9442 24.7859H46.7892L25.0005 2.89644V0.881592L25.0603 0.935889L48.9442 24.7859ZM46.8493 24.7316H48.7048L25.1204 1.04487V2.84175L46.8493 24.7316Z" fill="black"/>
+<path d="M25.1202 46.6211V48.527L1.29639 24.7317H3.33154L25.1202 46.6211Z" fill="#017D17"/>
+<path d="M25.1204 48.636L25.0606 48.5817L1.177 24.6774H3.33208L25.1208 46.6215V48.6364L25.1204 48.636ZM1.41606 24.7317L25.0602 48.4184V46.6215L3.27153 24.7321L1.41606 24.7317Z" fill="black"/>
+<path d="M13.0887 44.0075H8.47974L6.68403 42.9727V8.8313H5.24731L4.05005 7.63325V3.87622L5.30708 2.51489H21.409L22.8458 3.9852V7.52466L21.6485 8.99497H20.4512V20.3211L31.8844 8.99497H31.2258L29.909 7.57935V3.82231L31.2258 2.62427H47.4477L48.7047 3.9313V7.47075L13.0887 44.0075ZM8.95864 42.2649H12.3708L47.029 6.70786V4.58442L46.7895 4.31216H31.8848L31.6454 4.53013V6.81724L32.0043 7.19849H36.1344L18.7157 24.4051V7.19849H20.8708L21.17 6.87192V4.6938L20.7508 4.25825H6.08521L5.78599 4.58481V6.92622L5.96567 7.14419H8.47974V41.9387L8.95864 42.2649Z" fill="black"/>
+<path d="M25.0601 46.6211V48.527L48.8839 24.677H46.8487L25.0601 46.6211Z" fill="#005D04"/>
+<path d="M25.0005 48.636V46.6211L46.7892 24.677H48.9442L48.8845 24.7313L25.0005 48.636ZM25.12 46.6211V48.418L48.7642 24.7313H46.9087L25.12 46.6211Z" fill="black"/>
+<path d="M24.9406 48.8535L0.757812 24.6769L25.0008 0.391357L49.1836 24.5679L24.9406 48.8535ZM1.53594 24.6769L24.9406 48.1457L48.4652 24.6226L25.0605 1.15386L1.53594 24.6769Z" fill="black"/>
+<path d="M21.2293 4.80237L22.0672 4.36682L21.1691 3.49573H5.72539L4.94727 4.25823V7.25315L5.84531 8.12424L6.26445 7.25315L5.72578 6.70862V4.58518L6.14492 4.20393H20.9301L21.2293 4.80237Z" fill="#FEFEFE"/>
+<path d="M5.84575 8.17817L4.88794 7.25239V4.25747L5.72583 3.44067H21.2293L22.1872 4.36646L21.2293 4.85669L20.8704 4.25786H6.08521L5.72622 4.58442V6.65357L6.26489 7.1981L5.84575 8.17817ZM5.00786 7.1981L5.84575 8.01489L6.20474 7.25239L5.66606 6.70786V4.58442L6.08521 4.20317H20.8704L21.2293 4.802L22.0075 4.36646L21.1696 3.54966H5.72583L4.94771 4.31216V7.1981H5.00786Z" fill="black"/>
+<path d="M12.011 42.5371H9.07778L8.59888 42.0469V7.25234H6.08481L5.54614 6.76211V4.63867L6.02505 4.14844H20.6907L21.2293 4.58398V6.65313L20.6309 7.25195H17.8774V25.9832L34.518 9.10313V7.25195H32.004L31.5251 6.76172V4.69258L32.1235 4.09375H46.5497L47.1481 4.69258V6.32617L12.011 42.5367V42.5371ZM9.13794 42.4828H12.011L47.0286 6.27227V4.69297L46.4899 4.14844H32.1836L31.645 4.69297V6.65313L32.1239 7.08867H34.6977V9.10352L17.8774 26.2016V7.14336H20.6907L21.2293 6.59883V4.58398L20.7504 4.20273H6.08481L5.60591 4.63828V6.65313L6.08481 7.08867H8.65864V41.9379L9.13755 42.4824L9.13794 42.4828Z" fill="black"/>
+<path d="M8.59932 7.1438V41.993L9.07822 42.4833L8.71924 43.1368L7.70166 42.1567V8.06997L8.59932 7.1438Z" fill="#FEFEFE"/>
+<path d="M8.7187 43.2997L7.64136 42.2649V8.06919L8.65894 7.08911V42.0473L9.13784 42.5918L8.7187 43.2997ZM7.76089 42.2106L8.7187 43.1364L9.01792 42.5375L8.59878 42.0473V7.25278L7.76089 8.06958V42.2106Z" fill="black"/>
+<path d="M6.14497 7.1438L5.90552 7.9606H7.76099L8.77856 7.1438H6.14497Z" fill="#808080"/>
+<path d="M7.76084 8.06909H5.84521L6.14443 7.14331H8.95771L7.76084 8.06909ZM5.90537 7.96011H7.70107L8.59912 7.19761H6.08506L5.90537 7.96011Z" fill="black"/>
+<path d="M31.8243 8.12385L32.2435 7.25276L31.645 6.70823V4.85706L32.3036 4.14924H46.5501L47.0888 4.85706L47.8669 4.31252L47.0888 3.49573H31.7649L30.9868 4.25823V7.25315L31.8247 8.12424M19.3739 22.4449L17.8774 26.0387L34.6978 9.15862V7.14377L19.3739 22.4449Z" fill="#FEFEFE"/>
+<path d="M17.9372 26.1473L17.8774 26.093L19.3739 22.4446L34.7575 7.08911V9.21255L17.9372 26.1473ZM19.4337 22.4989L18.0571 25.9293L34.6978 9.21255V7.30669L19.4337 22.4989ZM31.8243 8.12349L31.7646 8.06919L30.9864 7.30669V4.25747L31.7646 3.44067H47.1481L47.986 4.36646L47.1481 4.96528L46.6095 4.20278H32.3032L31.6446 4.8563V6.70747L32.2431 7.252L31.8239 8.1231L31.8243 8.12349ZM31.0462 7.30669L31.8243 8.0145L32.1833 7.252L31.5849 6.70747V4.80161L32.3032 4.0938H46.6095L47.1481 4.80161L47.8665 4.31138L47.0884 3.54888H31.7646L31.0462 4.31138V7.30669Z" fill="black"/>
+<path d="M21.1696 4.69336L21.888 4.20312V7.14336L21.0501 8.01445H19.3739V22.4988L17.8774 26.0926V7.14336H20.631L21.1696 6.70781V4.69297V4.69336Z" fill="#808080"/>
+<path d="M17.9372 26.093H17.8774V7.14375H20.6907L21.1696 6.7625V4.74766L22.0075 4.20312V7.25234L21.1095 8.12344H19.4935V22.5531L17.9372 26.093ZM17.9372 7.19805V25.875L19.3739 22.4988V7.96016H21.0501L21.888 7.14336V4.31172L21.2294 4.74727V6.76211L20.6907 7.19766L17.9372 7.19805Z" fill="black"/>
+<path d="M32.1835 4.1488L31.6449 4.69333V6.70818L32.1238 7.19841H34.6378V9.15857L17.8773 26.0929V7.19802H20.6308L21.2292 6.65349V4.63865L20.6906 4.2574H6.08511L5.6062 4.74763V6.81677L6.08511 7.30701H8.65894V42.1015L9.13784 42.5918H12.0109L47.0882 6.38123V4.80193L46.5496 4.2574H32.1835V4.1488Z" fill="#CCCCCC"/>
+<path d="M12.011 42.5371H9.07778L8.59888 42.0469V7.25234H6.08481L5.54614 6.76211V4.63867L6.02505 4.14844H20.6907L21.2293 4.58398V6.65313L20.6309 7.25195H17.8774V25.9832L34.518 9.10313V7.25195H32.004L31.5251 6.76172V4.69258L32.1235 4.09375H46.5497L47.1481 4.69258V6.32617L12.011 42.5367V42.5371ZM9.13794 42.4828H12.011L47.0286 6.27227V4.69297L46.4899 4.14844H32.1836L31.645 4.69297V6.65313L32.1239 7.08867H34.6977V9.10352L17.8774 26.2016V7.14336H20.6907L21.2293 6.59883V4.58398L20.7504 4.20273H6.08481L5.60591 4.63828V6.65313L6.08481 7.08867H8.65864V41.9379L9.13755 42.4824L9.13794 42.4828Z" fill="black"/>
+<path d="M47.1484 4.74768L47.9265 4.31213V7.08909L12.6097 43.2449H8.83862L9.19761 42.5371H12.0707L47.0882 6.32659L47.148 4.74729L47.1484 4.74768Z" fill="#808080"/>
+<path d="M12.6097 43.2996H8.77881L9.19795 42.4828H12.071L47.0284 6.32698L47.0882 4.74768L47.9261 4.25745V7.19768L12.6097 43.2996ZM8.89834 43.1906H12.5499L47.8667 7.08909V4.36643L47.1483 4.74768L47.0886 6.32698L12.071 42.5918H9.19795L8.89834 43.1906Z" fill="black"/>
+<path d="M34.638 7.198L33.8599 8.01479H31.8247L32.3036 7.198H34.638Z" fill="#808080"/>
+<path d="M33.8597 8.06909H31.7046L32.2433 7.14331H34.7573L33.8597 8.06909ZM31.8843 8.01479H33.8597L34.578 7.25229H32.3632L31.8843 8.01479Z" fill="black"/>
+<path d="M26.2575 27.5629C26.2575 27.5629 26.1978 27.5629 26.1978 27.6172L25.5392 28.216L25.4794 28.2703L24.8208 30.1761C24.8208 30.2304 24.8208 30.2851 24.8806 30.3394L25.4192 30.884C25.479 30.9383 25.479 30.9383 25.5388 30.9383H27.6337C27.6935 30.9383 27.6935 30.9383 27.7532 30.884L28.2919 30.3394L28.3517 30.2851L28.9501 28.2703C28.9501 28.216 28.9501 28.1613 28.8903 28.107L28.4114 27.6715C28.3517 27.6172 28.3517 27.6172 28.2919 27.6172H26.2567V27.5629H26.2575ZM22.3665 32.9535C22.3067 32.9535 22.247 33.0078 22.247 33.0625L22.0075 34.0972C22.0075 34.2062 22.0673 34.2605 22.1271 34.3152H23.4438L20.3911 43.0273C20.3911 43.1363 20.3911 43.1906 20.5106 43.2453H25.0001C25.0599 43.2453 25.1196 43.191 25.1798 43.1363L25.479 42.2105C25.479 42.1015 25.479 42.0472 25.3595 41.9926H24.2821L27.3349 33.1715C27.3349 33.0625 27.3349 33.0082 27.2153 32.9535H22.3665ZM36.5532 33.0078C36.4935 33.0078 36.4935 33.0078 36.4935 33.0621L35.5954 34.0969H34.0989L33.1411 33.0621C33.1411 33.0078 33.0813 33.0078 33.0216 33.0078H29.4302C29.3704 33.0078 29.3106 33.0621 29.3106 33.1168L29.0114 34.0969C29.0114 34.2058 29.0114 34.2601 29.131 34.3148H30.1485L27.2153 42.9726C27.2153 43.0816 27.2153 43.1359 27.3349 43.1906H31.1657C31.2255 43.1906 31.2853 43.1363 31.2853 43.0816L31.5845 42.2648C31.5845 42.1558 31.5845 42.1015 31.4649 42.0469H30.7466L32.6021 36.166H35.954L33.7989 43.0269C33.7989 43.1359 33.7989 43.1902 33.9185 43.2449H37.5696C37.6294 43.2449 37.6892 43.1906 37.6892 43.1359L37.9884 42.3734C38.0481 42.3191 37.9884 42.2101 37.9286 42.1554H37.2103L39.1259 36.1656H42.3583L40.2032 43.0265C40.2032 43.1355 40.2032 43.1898 40.3228 43.2445H44.3333C44.3931 43.2445 44.4528 43.1902 44.4528 43.1355L44.7521 42.3187C44.7521 42.2097 44.7521 42.1554 44.6325 42.1008H43.7946L46.1892 34.314V34.1508L45.4708 33.1707C45.411 33.1164 45.411 33.1164 45.3513 33.1164H42.538C42.4782 33.1164 42.4782 33.1164 42.4185 33.1707L41.5204 34.1508H39.9642L39.0661 33.116C39.0063 33.0617 39.0063 33.0617 38.9466 33.0617H36.552V33.0074L36.5532 33.0078Z" fill="#CCCCCC"/>
+<path d="M24.9407 43.6262H20.511C20.4513 43.6262 20.3915 43.6262 20.3313 43.5719C20.0321 43.4629 19.9122 43.1906 19.9724 42.9184L22.8454 34.6961H22.0075C21.7083 34.6418 21.5286 34.3148 21.6485 34.0426L21.888 33.0078C21.9477 32.7898 22.0677 32.6813 22.3071 32.6266H27.0958C27.1556 32.6266 27.2153 32.6266 27.2755 32.6809C27.5747 32.7898 27.6946 33.0621 27.6345 33.3344L24.7614 41.6656H25.42C25.7192 41.7746 25.8391 42.0469 25.779 42.3191L25.4798 43.2449C25.3602 43.4629 25.1802 43.6262 24.9407 43.6262ZM23.3845 33.9336H23.9231L20.8106 42.8637H24.8212L25.0009 42.3734H23.7438L26.8563 33.3344H22.6661L22.4864 33.9332L23.3845 33.9336ZM44.2751 43.5172H40.1446C39.8454 43.4082 39.7255 43.1359 39.7856 42.8637L41.8208 36.493H39.3665L37.6903 41.7203H37.8098C37.8696 41.7203 37.9294 41.7203 37.9895 41.7746C38.2888 41.8836 38.4087 42.2102 38.2888 42.4824L37.9895 43.2449C37.9298 43.4629 37.6903 43.5715 37.5106 43.5715H33.7395C33.4403 43.4625 33.3204 43.1902 33.3806 42.918L35.4157 36.4926H32.7817L31.1657 41.6109H31.2852C31.345 41.6109 31.4048 41.6109 31.4649 41.6652C31.7641 41.7742 31.8841 42.0465 31.8239 42.3187L31.5247 43.1898C31.4649 43.4078 31.2255 43.5164 31.0458 43.5711H27.2747C27.2149 43.5711 27.1552 43.5711 27.095 43.5168C26.7958 43.4078 26.6759 43.1355 26.736 42.8633L29.4895 34.6953H29.0704C29.0106 34.6953 28.9509 34.6953 28.8907 34.641C28.5915 34.532 28.4716 34.2598 28.5317 33.9875L28.8309 33.0074C28.8907 32.7895 29.1302 32.6262 29.3098 32.6262H32.8415C32.961 32.6262 33.1407 32.6805 33.2005 32.7895L34.0985 33.7152H35.236L36.0739 32.7895C36.1337 32.6805 36.2536 32.6262 36.3731 32.6262H38.7673C38.8868 32.6262 39.0665 32.6805 39.1263 32.7895L39.9641 33.6605H41.2212L41.9993 32.7895C42.1191 32.6806 42.2388 32.6262 42.3583 32.6262H45.1716C45.3513 32.6262 45.4708 32.6805 45.5907 32.8441L46.3091 33.8242C46.4286 33.9332 46.4286 34.1508 46.3688 34.3145L44.154 41.6109H44.4532C44.513 41.6109 44.5727 41.6109 44.6329 41.6652C44.9321 41.7742 45.052 42.0465 44.9321 42.3187L44.6329 43.1898C44.6927 43.3531 44.5134 43.5164 44.2739 43.5164L44.2751 43.5172ZM30.0884 33.9336H30.627L27.6341 42.7547H30.9263L31.0458 42.3191H30.2079L32.3028 35.6762H36.4329L34.2181 42.7551H37.3907L37.5102 42.4285H36.6723L38.8274 35.7309H42.838L40.6231 42.8098H44.1548L44.3345 42.3742H43.3766L45.8907 34.2063L45.2923 33.3895H42.6583L41.7005 34.4242H39.7848L38.827 33.3352H36.7321L35.7743 34.4242H33.9786L32.961 33.3352H29.6688L29.4891 33.8797H30.0876L30.0884 33.9336ZM27.5145 31.2656H25.4196C25.3001 31.2656 25.1204 31.2113 25.0606 31.1023L24.522 30.5578C24.4024 30.3945 24.3423 30.1766 24.4024 30.0133L25.061 28.1074C25.061 27.9984 25.1208 27.9441 25.1806 27.8895L25.8391 27.2906C25.8989 27.2363 25.9587 27.1816 26.0786 27.1816H28.1138C28.2335 27.1816 28.3532 27.2361 28.4727 27.3449L28.9516 27.7805C29.0712 27.8895 29.1313 28.107 29.0712 28.325L28.4727 30.3398C28.4727 30.4488 28.413 30.5031 28.3532 30.5578L27.8145 31.1023C27.8145 31.2113 27.6349 31.2656 27.5153 31.2656H27.5145ZM25.1802 30.1766L25.5391 30.5578H27.4548L27.8739 30.1223L28.4126 28.2711L28.1134 27.9988H26.3177L25.7192 28.4891L25.1806 30.177L25.1802 30.1766Z" fill="black"/>
+<path d="M26.2573 27.7266L25.5987 28.3254L24.9401 30.2312L25.4788 30.7758H27.5737L28.1124 30.2312L28.7108 28.2164L28.2319 27.7809H26.2565L26.2573 27.7266ZM22.4265 33.1172L22.187 34.152H23.6237L20.5112 43.082H24.9409L25.2401 42.1562H24.0429L27.1554 33.1172H22.4265ZM36.553 33.1172L35.5952 34.2062H33.9792L32.9616 33.1172H29.43L29.1308 34.0973H30.2683L27.2753 42.9184H31.0464L31.3456 42.1016H30.4476L32.4229 35.9484H36.1343L33.9194 42.9727H37.5108L37.8101 42.2102H36.912L38.8874 35.8937H42.419L40.2042 42.9727H44.155L44.4542 42.1559H43.4366L45.8909 34.2059L45.1726 33.2258H42.3593L41.4015 34.2605H39.6655L38.7077 33.1715H36.5526L36.553 33.1172Z" fill="#CCCCCC"/>
+<path d="M25.0004 43.1363H20.4512L23.5637 34.2062H22.127L22.4262 33.0629H27.2148L24.0422 42.1019H25.2395L25 43.1367L25.0004 43.1363ZM20.5707 43.0273H24.9402L25.1797 42.1562H23.9824L27.0352 33.1718H22.4859L22.2465 34.0976H23.6832L20.5707 43.0273ZM44.3348 43.0273H40.2645L42.4793 35.9484H39.0074L37.032 42.1558H37.9301L37.5711 43.0269H33.8598L36.0746 36.0027H32.4832L30.5676 42.1011H31.4656L31.1664 43.0269H27.3355L30.3285 34.2058H29.191L29.55 33.1711H33.1414L34.159 34.2601H35.7152L36.673 33.1711H39.0074L39.9652 34.2601H41.6414L42.5992 33.2254H45.4723L46.2504 34.2601L43.7961 42.1558H44.8137L44.3348 43.0273ZM40.384 42.9183H44.275L44.5742 42.1558H43.5566L46.0109 34.1515L45.2926 33.1715H42.4793L41.5215 34.2062H39.7855L38.8277 33.1172H36.6129L35.6551 34.2062H33.9789L32.9613 33.1172H29.4895L29.1902 33.9883H30.3277L27.3348 42.8094H30.9863L31.2258 42.0468H30.3277L32.3031 35.7847H36.134L33.9191 42.809H37.4508L37.75 42.1011H36.9121L38.9473 35.7304H42.5988L40.384 42.9183ZM27.5145 30.7758H25.3594L24.8207 30.2312L25.5391 28.2711L26.2574 27.6722H28.2328L28.7117 28.1625L28.1133 30.1773L27.5148 30.7761L27.5145 30.7758ZM25.4195 30.7215H27.4547L27.9934 30.1769L28.5918 28.2168L28.1727 27.7812H26.257L25.5984 28.3258L24.9398 30.1769L25.4187 30.7215H25.4195Z" fill="black"/>
+</svg>
diff --git a/public/extensions/vscode.svg b/public/extensions/vscode.svg
new file mode 100644
index 00000000..c93507b7
--- /dev/null
+++ b/public/extensions/vscode.svg
@@ -0,0 +1,44 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2409_124)">
+<mask id="mask0_2409_124" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="-1" y="0" width="51" height="50">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M35.4558 49.6586C35.8536 49.8137 36.2792 49.8852 36.7059 49.8688C37.1326 49.8524 37.5514 49.7484 37.9362 49.5633L48.2304 44.6098C48.7605 44.3546 49.2078 43.9549 49.5209 43.4567C49.8339 42.9585 49.9999 42.3821 49.9999 41.7937V8.20664C50 7.61821 49.834 7.0417 49.521 6.54345C49.2079 6.0452 48.7606 5.64546 48.2304 5.39023L37.9362 0.437495C37.3545 0.157614 36.7002 0.0654642 36.0639 0.173798C35.4275 0.282133 34.8406 0.585593 34.3843 1.04218L14.6772 19.0211L6.09365 12.5051C5.70638 12.2112 5.2285 12.0621 4.74284 12.0837C4.25719 12.1052 3.79438 12.296 3.43466 12.623L0.681537 15.1273C0.466985 15.3225 0.295526 15.5603 0.178128 15.8254C0.0607297 16.0906 -2.29342e-05 16.3774 -0.000243538 16.6674C-0.000464141 16.9575 0.0598521 17.2443 0.176847 17.5097C0.293841 17.7751 0.464938 18.0131 0.679193 18.2086L8.12333 25L0.679583 31.7918C0.465446 31.9873 0.294451 32.2253 0.177529 32.4906C0.0606073 32.756 0.000330182 33.0428 0.000550762 33.3327C0.000771343 33.6227 0.0614847 33.9094 0.17881 34.1746C0.296136 34.4397 0.467492 34.6775 0.681927 34.8727L3.43505 37.3769C3.79473 37.704 4.25751 37.8949 4.74316 37.9165C5.22882 37.9381 5.70673 37.7891 6.09404 37.4953L14.6776 30.9797L34.3847 48.9582C34.6897 49.2631 35.0541 49.5016 35.4558 49.6586ZM37.5073 13.6496L22.5546 25L37.5077 36.3508L37.5073 13.6496Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_2409_124)">
+<path d="M48.2307 5.39845L37.9284 0.437514C37.3465 0.157275 36.6919 0.0649301 36.0552 0.173272C35.4185 0.281614 34.8313 0.58528 34.3749 1.0422L0.649084 31.7918C0.434786 31.9872 0.263647 32.2252 0.146621 32.4905C0.0295959 32.7559 -0.0307376 33.0428 -0.030517 33.3328C-0.0302964 33.6228 0.0304735 33.9095 0.147903 34.1747C0.265332 34.4399 0.436833 34.6776 0.651428 34.8727L3.40612 37.377C3.7659 37.7044 4.22899 37.8955 4.71499 37.9172C5.20099 37.9388 5.67922 37.7895 6.06666 37.4953L46.6803 6.68478C48.0428 5.65119 49.9999 6.62306 49.9999 8.33322V8.21369C49.9999 7.62543 49.8339 7.04912 49.5209 6.55102C49.2079 6.05293 48.7607 5.65368 48.2307 5.39845Z" fill="#0065A9"/>
+<g filter="url(#filter0_d_2409_124)">
+<path d="M48.2307 44.602L37.9284 49.5621C37.3466 49.8425 36.692 49.9349 36.0553 49.8267C35.4187 49.7185 34.8314 49.415 34.3749 48.9582L0.649084 18.2082C0.434786 18.0128 0.263647 17.7748 0.146621 17.5095C0.0295959 17.2441 -0.0307376 16.9573 -0.030517 16.6673C-0.0302964 16.3773 0.0304735 16.0905 0.147903 15.8253C0.265332 15.5602 0.436833 15.3224 0.651428 15.1274L3.40612 12.6231C3.7659 12.2956 4.22899 12.1045 4.71499 12.0829C5.20099 12.0612 5.67922 12.2105 6.06666 12.5047L46.6803 43.3149C48.0428 44.3488 49.9999 43.377 49.9999 41.6668V41.7863C49.9999 42.3746 49.8339 42.9509 49.5209 43.449C49.2079 43.9471 48.7607 44.3467 48.2307 44.602Z" fill="#007ACC"/>
+</g>
+<g filter="url(#filter1_d_2409_124)">
+<path d="M37.9289 49.5633C37.3468 49.843 36.6922 49.935 36.0556 49.8266C35.419 49.7182 34.8317 49.4148 34.375 48.9582C35.5281 50.1113 37.5 49.2945 37.5 47.6637V2.33592C37.5 0.705058 35.5281 -0.111738 34.375 1.04178C34.8317 0.58521 35.419 0.281765 36.0556 0.173374C36.6922 0.0649824 37.3468 0.156996 37.9289 0.436699L48.2293 5.39061C48.7597 5.64567 49.2073 6.04534 49.5206 6.5436C49.8338 7.04186 50 7.61846 50 8.20701V41.7937C50 42.3823 49.8338 42.9589 49.5206 43.4571C49.2073 43.9554 48.7597 44.3551 48.2293 44.6101L37.9289 49.5633Z" fill="#1F9CF0"/>
+</g>
+<path opacity="0.25" fill-rule="evenodd" clip-rule="evenodd" d="M35.4257 49.6586C35.8235 49.8136 36.249 49.8851 36.6756 49.8688C37.1023 49.8524 37.521 49.7484 37.9058 49.5633L48.1999 44.6098C48.7301 44.3545 49.1775 43.9548 49.4905 43.4565C49.8035 42.9583 49.9696 42.3818 49.9694 41.7934V8.20664C49.9696 7.61821 49.8035 7.0417 49.4905 6.54345C49.1775 6.0452 48.7301 5.64546 48.1999 5.39023L37.9058 0.437495C37.3241 0.157614 36.6698 0.0654642 36.0334 0.173798C35.3971 0.282133 34.8101 0.585593 34.3538 1.04218L14.6468 19.0211L6.06318 12.5055C5.67592 12.2116 5.19803 12.0625 4.71238 12.0841C4.22673 12.1056 3.76392 12.2964 3.4042 12.6234L0.651074 15.1277C0.436576 15.3229 0.265165 15.5607 0.147801 15.8259C0.0304374 16.0911 -0.0302964 16.3778 -0.030517 16.6678C-0.0307376 16.9578 0.0295599 17.2447 0.14652 17.5101C0.26348 17.7754 0.434529 18.0135 0.64873 18.209L8.09287 25L0.649121 31.7914C0.434866 31.9869 0.263769 32.2249 0.146775 32.4903C0.0297799 32.7556 -0.0305363 33.0425 -0.0303157 33.3325C-0.0300951 33.6226 0.0306575 33.9093 0.148056 34.1745C0.265454 34.4397 0.436913 34.6775 0.651464 34.8726L3.40459 37.3769C3.76426 37.704 4.22704 37.8949 4.7127 37.9165C5.19835 37.9381 5.67626 37.7891 6.06357 37.4953L14.6476 30.9793L34.3546 48.9582C34.6595 49.263 35.0242 49.5015 35.4257 49.6586ZM37.4772 13.6492L22.5241 25L37.4772 36.3504V13.6492Z" fill="url(#paint0_linear_2409_124)"/>
+</g>
+</g>
+<defs>
+<filter id="filter0_d_2409_124" x="-1.07227" y="11.0391" width="52.1138" height="39.8734" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset/>
+<feGaussianBlur stdDeviation="0.520875"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
+<feBlend mode="overlay" in2="BackgroundImageFix" result="effect1_dropShadow_2409_124"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2409_124" result="shape"/>
+</filter>
+<filter id="filter1_d_2409_124" x="33.3333" y="-0.9126" width="17.7085" height="51.8252" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset/>
+<feGaussianBlur stdDeviation="0.520875"/>
+<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
+<feBlend mode="overlay" in2="BackgroundImageFix" result="effect1_dropShadow_2409_124"/>
+<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2409_124" result="shape"/>
+</filter>
+<linearGradient id="paint0_linear_2409_124" x1="24.9694" y1="0.128901" x2="24.9694" y2="49.8711" gradientUnits="userSpaceOnUse">
+<stop stop-color="white"/>
+<stop offset="1" stop-color="white" stop-opacity="0"/>
+</linearGradient>
+<clipPath id="clip0_2409_124">
+<rect width="50" height="50" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/public/file.svg b/public/file.svg
deleted file mode 100644
index 004145cd..00000000
--- a/public/file.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
\ No newline at end of file
diff --git a/public/github.svg b/public/github.svg
new file mode 100644
index 00000000..309bdc97
--- /dev/null
+++ b/public/github.svg
@@ -0,0 +1,11 @@
+<svg width="50" height="50" viewBox="0 0 50 50" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_2424_193)">
+<path d="M38.2812 0H11.7188C5.24666 0 0 5.24666 0 11.7188V38.2812C0 44.7533 5.24666 50 11.7188 50H38.2812C44.7533 50 50 44.7533 50 38.2812V11.7188C50 5.24666 44.7533 0 38.2812 0Z" fill="#242938"/>
+<path d="M25.0002 5.85938C14.2146 5.85938 5.46875 14.6035 5.46875 25.3908C5.46875 34.0203 11.065 41.3414 18.8256 43.924C19.8016 44.1049 20.16 43.5004 20.16 42.9846C20.16 42.5187 20.1418 40.9803 20.1334 39.3482C14.6998 40.5297 13.5533 37.0438 13.5533 37.0438C12.6646 34.7861 11.3846 34.1859 11.3846 34.1859C9.6125 32.9736 11.5182 32.9986 11.5182 32.9986C13.4795 33.1363 14.5123 35.0113 14.5123 35.0113C16.2543 37.9973 19.0814 37.134 20.1959 36.635C20.3713 35.3725 20.8773 34.5109 21.4359 34.0232C17.0979 33.5293 12.5375 31.8545 12.5375 24.3707C12.5375 22.2383 13.3004 20.4959 14.5498 19.1281C14.3469 18.6361 13.6783 16.6496 14.7389 13.9594C14.7389 13.9594 16.3791 13.4346 20.1115 15.9613C21.6695 15.5287 23.3402 15.3117 25.0002 15.3043C26.66 15.3117 28.3322 15.5287 29.893 15.9615C33.6209 13.4344 35.2588 13.9596 35.2588 13.9596C36.3219 16.6496 35.6531 18.6363 35.4502 19.1281C36.7025 20.4959 37.4604 22.2383 37.4604 24.3707C37.4604 31.8725 32.8912 33.5242 28.542 34.0076C29.2426 34.6139 29.8668 35.8023 29.8668 37.6246C29.8668 40.2379 29.8441 42.3412 29.8441 42.9846C29.8441 43.5043 30.1957 44.1133 31.1857 43.9215C38.942 41.3359 44.5312 34.0174 44.5312 25.3908C44.5312 14.6037 35.7865 5.85938 25.0002 5.85938ZM12.784 33.6822C12.741 33.7793 12.5883 33.8084 12.4492 33.7418C12.3074 33.6781 12.2279 33.5457 12.2738 33.4484C12.3158 33.3484 12.4689 33.3207 12.6102 33.3877C12.7521 33.4514 12.833 33.585 12.784 33.6822ZM13.7447 34.5395C13.6516 34.626 13.4693 34.5857 13.3459 34.4492C13.2182 34.3131 13.1941 34.1311 13.2887 34.0434C13.3846 33.957 13.5613 33.9975 13.6893 34.1336C13.817 34.2715 13.842 34.4521 13.7447 34.5395ZM14.4037 35.6363C14.284 35.7195 14.0883 35.6416 13.9674 35.4678C13.8477 35.2941 13.8477 35.0859 13.9699 35.0023C14.0912 34.9189 14.284 34.9939 14.4066 35.1664C14.526 35.343 14.526 35.5514 14.4037 35.6363ZM15.5184 36.9066C15.4113 37.0246 15.1834 36.993 15.0164 36.8318C14.8457 36.6744 14.798 36.451 14.9055 36.3328C15.0139 36.2145 15.2432 36.2479 15.4113 36.4076C15.5809 36.5646 15.6326 36.7898 15.5184 36.9066ZM16.959 37.3354C16.9117 37.4885 16.6922 37.558 16.4709 37.493C16.2502 37.426 16.1055 37.2469 16.1502 37.0922C16.1961 36.9383 16.4166 36.8658 16.6395 36.9354C16.8602 37.002 17.0049 37.1799 16.959 37.3354ZM18.5984 37.5174C18.6039 37.6783 18.4164 37.8119 18.1842 37.8148C17.9506 37.8201 17.7617 37.6896 17.7592 37.5313C17.7592 37.3686 17.9426 37.2363 18.176 37.2324C18.4084 37.2279 18.5984 37.3572 18.5984 37.5174ZM20.209 37.4557C20.2369 37.6127 20.0756 37.7742 19.8449 37.8172C19.6182 37.8586 19.4082 37.7615 19.3795 37.6057C19.3514 37.4445 19.5156 37.2832 19.742 37.2414C19.973 37.2014 20.1797 37.2959 20.209 37.4557Z" fill="white"/>
+</g>
+<defs>
+<clipPath id="clip0_2424_193">
+<rect width="50" height="50" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/public/globe.svg b/public/globe.svg
deleted file mode 100644
index 567f17b0..00000000
--- a/public/globe.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
\ No newline at end of file
diff --git a/public/window.svg b/public/window.svg
deleted file mode 100644
index b2b2a44f..00000000
--- a/public/window.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>
\ No newline at end of file
diff --git a/src/app/community/page.tsx b/src/app/community/page.tsx
new file mode 100644
index 00000000..3e3392e8
--- /dev/null
+++ b/src/app/community/page.tsx
@@ -0,0 +1,132 @@
+"use client";
+
+import { AspectRatio } from "@/components/ui/aspect-ratio";
+import { Button } from "@/components/ui/button";
+import { ExternalLink } from "lucide-react";
+import Image from "next/image";
+import Link from "next/link";
+import { motion } from "framer-motion";
+
+const QUICKSNIP_YT_VIDEOS = [
+  {
+    id: "2_AfhnMVuSY",
+    title: "We made QuickSnip even better (v1)",
+  },
+  {
+    id: "BhRi7fJzPgk",
+    title: "I built a library of code snippets for developers",
+  },
+];
+
+const Communitypage = () => {
+  return (
+    <>
+      <section>
+        <div className="container grid py-20 gap-8 lg:grid-cols-2">
+          <div className="space-y-8 grid justify-items-center">
+            <motion.div
+              whileHover={{ rotate: "10deg", scale: 1.1 }}
+              whileTap={{ scale: 0.9 }}
+              transition={{ type: "spring" }}
+            >
+              <Image
+                src="/github.svg"
+                alt="Discord"
+                width={200}
+                height={200}
+                className="shadow-[0_0_5rem_1rem_hsl(225,22%,15%)] rounded-[3rem]"
+              />
+            </motion.div>
+            <h2 className="text-3xl font-bold text-center">
+              QuickSnip is Open-Source
+            </h2>
+            <Button size="lg" asChild>
+              <Link
+                href="https://github.com/quicksnip-dev/quicksnip"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                See the code <ExternalLink />
+              </Link>
+            </Button>
+          </div>
+          <div className="space-y-8 grid justify-items-center">
+            <motion.div
+              whileHover={{ rotate: "-10deg", scale: 1.1 }}
+              whileTap={{ scale: 0.9 }}
+              transition={{ type: "spring" }}
+            >
+              <Image
+                src="/discord.svg"
+                alt="Discord"
+                width={200}
+                height={200}
+                className="shadow-[0_0_5rem_1rem_hsl(235,86%,65%,0.5)] rounded-[3rem]"
+              />
+            </motion.div>
+            <h2 className="text-3xl font-bold text-center">
+              Join our Discord Community
+            </h2>
+            <Button size="lg" asChild>
+              <Link
+                href="https://discord.com/invite/Nm5K46yUy5"
+                target="_blank"
+                rel="noopener noreferrer"
+              >
+                Take me there <ExternalLink />
+              </Link>
+            </Button>
+          </div>
+        </div>
+      </section>
+
+      <section>
+        <div className="container pt-8 pb-16 space-y-8">
+          <h2 className="text-xl text-muted-foreground font-bold text-center">
+            Videos from Technophile
+          </h2>
+          <ul className="grid gap-4 sm:grid-cols-2 auto-rows-fr lg:grid-cols-3">
+            {QUICKSNIP_YT_VIDEOS.map((video) => (
+              <li key={video.id}>
+                <Link
+                  href={`https://www.youtube.com/watch?v=${video.id}`}
+                  className="block space-y-2"
+                >
+                  <AspectRatio ratio={16 / 9} className="bg-muted rounded-lg">
+                    <Image
+                      src={`https://img.youtube.com/vi/${video.id}/maxresdefault.jpg`}
+                      alt={video.title}
+                      fill
+                      className="h-full w-full rounded-lg object-cover"
+                    />
+                  </AspectRatio>
+                  <h3 className="text-lg font-semibold">{video.title}</h3>
+                </Link>
+              </li>
+            ))}
+          </ul>
+          <Button
+            size="lg"
+            variant="secondary"
+            className="flex w-fit mx-auto"
+            asChild
+          >
+            <Link
+              href="https://www.youtube.com/@technoph1le"
+              target="_blank"
+              rel="noopener noreferrer"
+            >
+              Let me subscribe <ExternalLink />
+            </Link>
+          </Button>
+        </div>
+      </section>
+    </>
+  );
+};
+
+export default Communitypage;
+
+/**
+ * Fetch `CONTRIBUTING.md`
+ */
diff --git a/src/app/contribute/page.tsx b/src/app/contribute/page.tsx
deleted file mode 100644
index ccda4854..00000000
--- a/src/app/contribute/page.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-const ContributePage = () => {
-  return <h1>Hello</h1>;
-};
-
-export default ContributePage;
-
-/**
- * Fetch `CONTRIBUTING.md`
- */
diff --git a/src/app/contributing/page.tsx b/src/app/contributing/page.tsx
new file mode 100644
index 00000000..f980d6f8
--- /dev/null
+++ b/src/app/contributing/page.tsx
@@ -0,0 +1,8 @@
+const Contributing = () => {
+  /**
+   * Fetch `CONTRIBUTING.md`
+   */
+  return <h1>Hello</h1>;
+};
+
+export default Contributing;
diff --git a/src/app/extensions/page.tsx b/src/app/extensions/page.tsx
index 8eb124fc..99078099 100644
--- a/src/app/extensions/page.tsx
+++ b/src/app/extensions/page.tsx
@@ -1,5 +1,44 @@
+import { ExtensionItem } from "@/components/layouts/Extensions";
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
+import { EXTENSIONS, FUTURE_EXTENSIONS } from "@/data/extensions";
+
+import Link from "next/link";
+
+export const ExtensionsAvatarGroup = () => {
+  return (
+    <div className="flex -space-x-4">
+      {FUTURE_EXTENSIONS.map((extension) => (
+        <Avatar key={extension.name} className="size-14 bg-secondary p-3">
+          <AvatarImage src={extension.icon} alt={extension.name} />
+          <AvatarFallback>{extension.shortcut_name}</AvatarFallback>
+        </Avatar>
+      ))}
+    </div>
+  );
+};
+
 const ExtensionsPage = () => {
-  return <h1>Hello</h1>;
+  return (
+    <section>
+      <div className="container py-8 space-y-8">
+        <h2 className="text-3xl font-bold text-center">Extensions</h2>
+        <ul className="grid gap-4 sm:grid-cols-2 auto-rows-fr lg:grid-cols-3">
+          {EXTENSIONS.map((extension) => (
+            <ExtensionItem key={extension.name} extension={extension} />
+          ))}
+          <Link
+            href="/guide/extensions"
+            className="bg-transparent h-full outline-2 outline-secondary transition-colors duration-200 hover:outline-muted space-y-4 p-6 rounded-lg grid gap-4 place-content-center justify-items-center text-secondary-foreground"
+          >
+            <ExtensionsAvatarGroup />
+            <span className="text-lg font-semibold">
+              Add your extension here...
+            </span>
+          </Link>
+        </ul>
+      </div>
+    </section>
+  );
 };
 
 export default ExtensionsPage;
diff --git a/src/app/globals.css b/src/app/globals.css
index a42f3e3e..56ff287d 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -125,4 +125,8 @@
   .container {
     @apply max-w-7xl mx-auto px-4;
   }
+
+  .container-lg {
+    @apply max-w-[90rem] mx-auto px-4;
+  }
 }
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 17554fdb..b95430d4 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,6 +1,8 @@
 import type { Metadata } from "next";
 import { Geist, Geist_Mono } from "next/font/google";
 import "./globals.css";
+import Header from "@/components/layouts/Header";
+import Footer from "@/components/layouts/Footer";
 
 const geistSans = Geist({
   variable: "--font-geist-sans",
@@ -25,9 +27,12 @@ export default function RootLayout({
   return (
     <html lang="en">
       <body
-        className={`${geistSans.variable} ${geistMono.variable} antialiased bg-background text-foreground dark`}
+        className={`${geistSans.variable} ${geistMono.variable} grid grid-rows-[auto_1fr_auto] min-h-screen antialiased bg-background text-foreground dark`}
       >
-        {children}
+        <Header />
+
+        <main>{children}</main>
+        <Footer />
       </body>
     </html>
   );
diff --git a/src/app/license/page.tsx b/src/app/license/page.tsx
deleted file mode 100644
index 76a23221..00000000
--- a/src/app/license/page.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-const LicensePage = () => {
-  return <h1>Hello</h1>;
-};
-
-export default LicensePage;
-
-/**
- * Fetch `LICENSE` file
- */
diff --git a/src/app/page.tsx b/src/app/page.tsx
index e1039a14..c8d8b6d5 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,13 +1,25 @@
+import { FeaturedExtensions } from "@/components/layouts/Extensions";
 import Features from "@/components/layouts/Features";
-import Header from "@/components/layouts/Header";
 import Hero from "@/components/layouts/Hero";
+// import Image from "next/image";
+// import Link from "next/link";
 
 export default function Home() {
   return (
     <>
-      <Header />
       <Hero />
       <Features />
+      <FeaturedExtensions />
+      {/* <div className="container">
+        <Link href="https://ko-fi.com/D1D217QALD" target="_blank">
+          <Image
+            width={100}
+            height={36}
+            src="https://storage.ko-fi.com/cdn/kofi3.png?v=6"
+            alt="Buy Me a Coffee at ko-fi.com"
+          />
+        </Link>
+      </div> */}
     </>
   );
 }
diff --git a/src/components/layouts/Extensions.tsx b/src/components/layouts/Extensions.tsx
new file mode 100644
index 00000000..d5c1e21a
--- /dev/null
+++ b/src/components/layouts/Extensions.tsx
@@ -0,0 +1,69 @@
+import { EXTENSIONS } from "@/data/extensions";
+import { Avatar, AvatarFallback, AvatarImage } from "../ui/avatar";
+import Image from "next/image";
+import { Button } from "../ui/button";
+import Link from "next/link";
+import type { ExtensionType } from "@/types";
+
+export const FeaturedExtensions = () => {
+  return (
+    <section>
+      <div className="container py-8 grid justify-items-center gap-6">
+        <h2 className="text-center text-2xl">Available for:</h2>
+        <div className="flex gap-4 flex-wrap">
+          {EXTENSIONS.map((extension) => (
+            <Link key={extension.name} href={extension.guide_url}>
+              <Avatar className="size-14 bg-secondary p-3 hover:bg-muted">
+                <AvatarImage src={extension.icon} alt={extension.name} />
+                <AvatarFallback>{extension.name.slice(0, 2)}</AvatarFallback>
+              </Avatar>
+            </Link>
+          ))}
+        </div>
+        <Button variant="secondary" size="lg" asChild>
+          <Link href="/extensions">View more</Link>
+        </Button>
+      </div>
+    </section>
+  );
+};
+
+export const ExtensionItem = ({ extension }: { extension: ExtensionType }) => {
+  return (
+    <li className="bg-secondary space-y-4 p-6 rounded-lg text-secondary-foreground h-full">
+      <div className="grid grid-cols-[auto_1fr] items-center gap-4">
+        <div className="bg-primary p-4 rounded-lg">
+          <Image
+            src={extension.icon}
+            alt=""
+            aria-hidden="true"
+            width={40}
+            height={40}
+          />
+        </div>
+        <div className="space-y-1">
+          <h3 className="text-2xl font-bold">{extension.name}</h3>
+          <p className="text-muted-foreground">
+            <strong>Downloads: </strong>
+            {new Intl.NumberFormat().format(extension.downloads)}
+          </p>
+        </div>
+      </div>
+      <p>{extension.description}</p>
+      <div className="flex flex-wrap gap-4">
+        <Button asChild>
+          <Link href={extension.guide_url}>Guide</Link>
+        </Button>
+        <Button asChild variant="outline">
+          <Link
+            href={extension.source_url}
+            target="_blank"
+            rel="noopener noreferrer"
+          >
+            Source
+          </Link>
+        </Button>
+      </div>
+    </li>
+  );
+};
diff --git a/src/components/layouts/Footer.tsx b/src/components/layouts/Footer.tsx
new file mode 100644
index 00000000..55892fbd
--- /dev/null
+++ b/src/components/layouts/Footer.tsx
@@ -0,0 +1,62 @@
+import { ExternalLink } from "lucide-react";
+import Link from "next/link";
+
+const NAV_ITEMS = [
+  { name: "Contribute", url: "/contributing", external: false },
+  {
+    name: "Changelog",
+    url: "https://github.com/quicksnip-dev/quicksnip/releases",
+    external: true,
+  },
+  {
+    name: "Sponsor",
+    url: "https://ko-fi.com/technoph1le",
+    external: true,
+  },
+  {
+    name: "GitHub",
+    url: "https://github.com/quicksnip-dev/quicksnip",
+    external: true,
+  },
+  {
+    name: "Discord",
+    url: "https://discord.com/invite/Nm5K46yUy5",
+    external: true,
+  },
+];
+
+const Footer = () => {
+  return (
+    <footer className="border-t border-secondary text-secondary-foreground">
+      <div className="container-lg py-8 grid gap-8 md:grid-cols-[1fr_auto]">
+        <p>
+          Released under the{" "}
+          <Link
+            href="https://github.com/quicksnip-dev/quicksnip/LICENSE"
+            className="text-primary-foreground font-semibold"
+          >
+            MIT License.
+          </Link>
+          <br />
+          Copyright © 2025
+        </p>
+        <ul className="flex items-center gap-4 md:gap-8 flex-col md:flex-row flex-wrap">
+          {NAV_ITEMS.map((item) => (
+            <li key={item.name}>
+              <Link
+                href={item.url}
+                target={item.external ? "_blank" : "_self"}
+                className="flex items-center gap-1 font-semibold"
+              >
+                {item.name}
+                {item.external ? <ExternalLink size={14} /> : null}
+              </Link>
+            </li>
+          ))}
+        </ul>
+      </div>
+    </footer>
+  );
+};
+
+export default Footer;
diff --git a/src/components/layouts/Header.tsx b/src/components/layouts/Header.tsx
index ea62620f..dc7b3b1f 100644
--- a/src/components/layouts/Header.tsx
+++ b/src/components/layouts/Header.tsx
@@ -2,29 +2,28 @@
 
 import React, { useState, useEffect } from "react";
 import { motion, AnimatePresence, easeInOut } from "framer-motion";
-import { Menu, X, ArrowRight, Zap, Search, Gamepad, Cat } from "lucide-react";
+import { Menu, X, Gamepad, Cat } from "lucide-react";
 import Link from "next/link";
 import Logo from "../Logo";
-import { Switch } from "../ui/switch";
-import { Label } from "../ui/label";
 import DarkModeSwitch from "../DarkModeSwitch";
+import Image from "next/image";
 
 const NAV_ITEMS = [
   { name: "Snippets", url: "/snippets" },
   { name: "Guide", url: "/guide" },
   { name: "Extensions", url: "/extensions" },
-  { name: "Contribute", url: "/contribute" },
-  { name: "License", url: "/license" },
+  { name: "Community", url: "/community" },
+  { name: "Contribute", url: "/contributing" },
 ];
 
 const SOCIAL_ITEMS = [
   {
-    icon: <Cat className="h-6 w-6" />,
+    icon: "/github.svg",
     name: "GitHub",
     url: "https://github.com/quicksnip-dev/quicksnip",
   },
   {
-    icon: <Gamepad className="h-6 w-6" />,
+    icon: "/discord.svg",
     name: "Discord",
     url: "https://discord.com",
   },
@@ -86,6 +85,7 @@ export default function Header() {
 
   return (
     <>
+      <div className="h-16 w-screen" />
       <motion.header
         className={`fixed top-0 right-0 left-0 z-50 transition-all duration-500 ${
           isScrolled
@@ -96,7 +96,7 @@ export default function Header() {
         initial="hidden"
         animate="visible"
       >
-        <div className="mx-auto px-4 max-w-[90rem]">
+        <div className="container-lg">
           <div className="flex h-16 items-center justify-between">
             <Logo />
 
@@ -129,8 +129,18 @@ export default function Header() {
                 variants={itemVariants}
               >
                 {SOCIAL_ITEMS.map((item) => (
-                  <Link href={item.url} title={item.name} className="">
-                    {item.icon}
+                  <Link
+                    key={item.name}
+                    href={item.url}
+                    title={item.name}
+                    className=""
+                  >
+                    <Image
+                      src={item.icon}
+                      alt={item.name}
+                      width={24}
+                      height={24}
+                    />
                   </Link>
                 ))}
               </motion.div>
diff --git a/src/components/layouts/Hero.tsx b/src/components/layouts/Hero.tsx
index 9ecc8b3a..85289f4d 100644
--- a/src/components/layouts/Hero.tsx
+++ b/src/components/layouts/Hero.tsx
@@ -3,7 +3,7 @@ import { Button } from "../ui/button";
 
 const Hero = () => {
   return (
-    <section className="mt-20">
+    <section>
       <div className="container grid md:grid-cols-2">
         <article className="space-y-6 py-12">
           <Link
diff --git a/src/components/ui/aspect-ratio.tsx b/src/components/ui/aspect-ratio.tsx
new file mode 100644
index 00000000..3df3fd02
--- /dev/null
+++ b/src/components/ui/aspect-ratio.tsx
@@ -0,0 +1,11 @@
+"use client"
+
+import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
+
+function AspectRatio({
+  ...props
+}: React.ComponentProps<typeof AspectRatioPrimitive.Root>) {
+  return <AspectRatioPrimitive.Root data-slot="aspect-ratio" {...props} />
+}
+
+export { AspectRatio }
diff --git a/src/components/ui/avatar.tsx b/src/components/ui/avatar.tsx
new file mode 100644
index 00000000..33ac310c
--- /dev/null
+++ b/src/components/ui/avatar.tsx
@@ -0,0 +1,53 @@
+"use client";
+
+import * as React from "react";
+import * as AvatarPrimitive from "@radix-ui/react-avatar";
+
+import { cn } from "@/lib/utils";
+
+function Avatar({
+  className,
+  ...props
+}: React.ComponentProps<typeof AvatarPrimitive.Root>) {
+  return (
+    <AvatarPrimitive.Root
+      data-slot="avatar"
+      className={cn(
+        "relative flex shrink-0 overflow-hidden rounded-full",
+        className
+      )}
+      {...props}
+    />
+  );
+}
+
+function AvatarImage({
+  className,
+  ...props
+}: React.ComponentProps<typeof AvatarPrimitive.Image>) {
+  return (
+    <AvatarPrimitive.Image
+      data-slot="avatar-image"
+      className={cn("aspect-square size-full", className)}
+      {...props}
+    />
+  );
+}
+
+function AvatarFallback({
+  className,
+  ...props
+}: React.ComponentProps<typeof AvatarPrimitive.Fallback>) {
+  return (
+    <AvatarPrimitive.Fallback
+      data-slot="avatar-fallback"
+      className={cn(
+        "bg-muted flex size-full items-center justify-center rounded-full",
+        className
+      )}
+      {...props}
+    />
+  );
+}
+
+export { Avatar, AvatarImage, AvatarFallback };
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index aceeecea..8a82d91f 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -10,21 +10,21 @@ const buttonVariants = cva(
     variants: {
       variant: {
         default:
-          "bg-accent font-semibold text-accent-foreground shadow-xs hover:bg-accent/90",
+          "bg-accent rounded-full font-semibold text-accent-foreground shadow-xs hover:bg-accent/70",
         destructive:
-          "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
+          "bg-destructive rounded-full text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
         outline:
-          "border font-semibold bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
+          "border font-semibold rounded-full bg-background shadow-xs hover:bg-accent dark:bg-input/30 dark:border-input dark:hover:bg-secondary/50",
         secondary:
-          "bg-secondary font-semibold text-secondary-foreground shadow-xs hover:bg-secondary/80",
+          "bg-secondary font-semibold rounded-full text-secondary-foreground shadow-xs hover:bg-secondary/80",
         ghost:
           "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
         link: "text-primary font-semibold underline-offset-4 hover:underline",
       },
       size: {
         default: "h-9 px-4 py-2 has-[>svg]:px-3",
-        sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
-        lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
+        sm: "h-8 rounded-full gap-1.5 px-3 has-[>svg]:px-2.5",
+        lg: "h-10 rounded-full px-6 has-[>svg]:px-4",
         icon: "size-9",
       },
     },
diff --git a/src/data/extensions.ts b/src/data/extensions.ts
new file mode 100644
index 00000000..430dc89a
--- /dev/null
+++ b/src/data/extensions.ts
@@ -0,0 +1,38 @@
+import type { ExtensionType } from "@/types";
+
+export const EXTENSIONS: ExtensionType[] = [
+  {
+    icon: "/extensions/raycast.svg",
+    name: "Raycast",
+    description: "Raycast extension for QuickSnip.",
+    guide_url: "/guide/extensions/raycast",
+    source_url: "https://github.com",
+    downloads: 3580,
+  },
+  {
+    icon: "/extensions/vscode.svg",
+    name: "VS Code",
+    description: "VS Code extension for QuickSnip.",
+    guide_url: "/guide/extensions/vs-code",
+    source_url: "https://github.com",
+    downloads: 8400,
+  },
+];
+
+export const FUTURE_EXTENSIONS = [
+  {
+    name: "JetBrains",
+    icon: "/extensions/jetbrains.svg",
+    shortcut_name: "JB",
+  },
+  {
+    name: "NeoVim",
+    icon: "/extensions/neovim.svg",
+    shortcut_name: "NV",
+  },
+  {
+    name: "Vim",
+    icon: "/extensions/vim.svg",
+    shortcut_name: "VM",
+  },
+];
diff --git a/src/types/index.ts b/src/types/index.ts
new file mode 100644
index 00000000..8aa557ce
--- /dev/null
+++ b/src/types/index.ts
@@ -0,0 +1,8 @@
+export type ExtensionType = {
+  icon: string;
+  name: string;
+  description: string;
+  guide_url: string;
+  source_url: string;
+  downloads: number;
+};

From 21848a49abf80c0d3b5a4a8adbb5e792fb9104dc Mon Sep 17 00:00:00 2001
From: Technophile <dostonnabotov@gmail.com>
Date: Tue, 5 Aug 2025 02:45:36 +0300
Subject: [PATCH 4/4] Setup docs with fumadocs

---
 .gitignore                                    |     2 +
 .source/index.ts                              |    14 +
 .source/source.config.mjs                     |    24 +
 content/docs/code-snippet.mdx                 |     8 +
 content/docs/contributing/adding-snippets.mdx |     8 +
 .../docs/contributing/how-to-contribute.mdx   |     8 +
 content/docs/contributing/meta.json           |     9 +
 .../docs/contributing/modifying-snippets.mdx  |     8 +
 .../docs/contributing/third-party-apps.mdx    |     8 +
 content/docs/extensions/meta.json             |     4 +
 content/docs/extensions/quicksnip-raycast.mdx |     8 +
 content/docs/extensions/quicksnip-vscode.mdx  |     8 +
 content/docs/extensions/quicksnip.mdx         |     8 +
 content/docs/index.mdx                        |     8 +
 content/docs/meta.json                        |    14 +
 content/docs/usage.mdx                        |     8 +
 mdx-components.tsx                            |     9 +
 next.config.ts                                |    10 +-
 package-lock.json                             | 10574 ++++++++++------
 package.json                                  |     8 +-
 source.config.ts                              |    23 +
 src/app/api/search/route.ts                   |     7 +
 src/app/globals.css                           |     6 +
 src/app/guide/[[...slug]]/page.tsx            |    62 +
 src/app/guide/layout.tsx                      |    16 +
 src/app/guide/page.tsx                        |     5 -
 src/app/layout.config.tsx                     |     9 +
 src/app/layout.tsx                            |     5 +-
 src/components/layouts/Header.tsx             |     2 +-
 src/lib/source.ts                             |     8 +
 30 files changed, 7233 insertions(+), 3658 deletions(-)
 create mode 100644 .source/index.ts
 create mode 100644 .source/source.config.mjs
 create mode 100644 content/docs/code-snippet.mdx
 create mode 100644 content/docs/contributing/adding-snippets.mdx
 create mode 100644 content/docs/contributing/how-to-contribute.mdx
 create mode 100644 content/docs/contributing/meta.json
 create mode 100644 content/docs/contributing/modifying-snippets.mdx
 create mode 100644 content/docs/contributing/third-party-apps.mdx
 create mode 100644 content/docs/extensions/meta.json
 create mode 100644 content/docs/extensions/quicksnip-raycast.mdx
 create mode 100644 content/docs/extensions/quicksnip-vscode.mdx
 create mode 100644 content/docs/extensions/quicksnip.mdx
 create mode 100644 content/docs/index.mdx
 create mode 100644 content/docs/meta.json
 create mode 100644 content/docs/usage.mdx
 create mode 100644 mdx-components.tsx
 create mode 100644 source.config.ts
 create mode 100644 src/app/api/search/route.ts
 create mode 100644 src/app/guide/[[...slug]]/page.tsx
 create mode 100644 src/app/guide/layout.tsx
 delete mode 100644 src/app/guide/page.tsx
 create mode 100644 src/app/layout.config.tsx
 create mode 100644 src/lib/source.ts

diff --git a/.gitignore b/.gitignore
index 5ef6a520..f25434ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,3 +39,5 @@ yarn-error.log*
 # typescript
 *.tsbuildinfo
 next-env.d.ts
+
+_pagefind/
\ No newline at end of file
diff --git a/.source/index.ts b/.source/index.ts
new file mode 100644
index 00000000..d3a4cdca
--- /dev/null
+++ b/.source/index.ts
@@ -0,0 +1,14 @@
+// @ts-nocheck -- skip type checking
+import * as docs_9 from "../content/docs/extensions/quicksnip.mdx?collection=docs&hash=1754350307419"
+import * as docs_8 from "../content/docs/extensions/quicksnip-vscode.mdx?collection=docs&hash=1754350307419"
+import * as docs_7 from "../content/docs/extensions/quicksnip-raycast.mdx?collection=docs&hash=1754350307419"
+import * as docs_6 from "../content/docs/contributing/third-party-apps.mdx?collection=docs&hash=1754350307419"
+import * as docs_5 from "../content/docs/contributing/modifying-snippets.mdx?collection=docs&hash=1754350307419"
+import * as docs_4 from "../content/docs/contributing/how-to-contribute.mdx?collection=docs&hash=1754350307419"
+import * as docs_3 from "../content/docs/contributing/adding-snippets.mdx?collection=docs&hash=1754350307419"
+import * as docs_2 from "../content/docs/usage.mdx?collection=docs&hash=1754350307419"
+import * as docs_1 from "../content/docs/index.mdx?collection=docs&hash=1754350307419"
+import * as docs_0 from "../content/docs/code-snippet.mdx?collection=docs&hash=1754350307419"
+import { _runtime } from "fumadocs-mdx"
+import * as _source from "../source.config"
+export const docs = _runtime.docs<typeof _source.docs>([{ info: {"path":"code-snippet.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/code-snippet.mdx"}, data: docs_0 }, { info: {"path":"index.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/index.mdx"}, data: docs_1 }, { info: {"path":"usage.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/usage.mdx"}, data: docs_2 }, { info: {"path":"contributing\\adding-snippets.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/contributing/adding-snippets.mdx"}, data: docs_3 }, { info: {"path":"contributing\\how-to-contribute.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/contributing/how-to-contribute.mdx"}, data: docs_4 }, { info: {"path":"contributing\\modifying-snippets.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/contributing/modifying-snippets.mdx"}, data: docs_5 }, { info: {"path":"contributing\\third-party-apps.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/contributing/third-party-apps.mdx"}, data: docs_6 }, { info: {"path":"extensions\\quicksnip-raycast.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/extensions/quicksnip-raycast.mdx"}, data: docs_7 }, { info: {"path":"extensions\\quicksnip-vscode.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/extensions/quicksnip-vscode.mdx"}, data: docs_8 }, { info: {"path":"extensions\\quicksnip.mdx","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/extensions/quicksnip.mdx"}, data: docs_9 }], [{"info":{"path":"meta.json","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/meta.json"},"data":{"title":"Docs","pages":["---Introduction---","index.mdx","usage.mdx","code-snippet.mdx","---Extensions---","...extensions","---Contributing---","...contributing"],"root":true}}, {"info":{"path":"contributing\\meta.json","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/contributing/meta.json"},"data":{"title":"Contributing","pages":["how-to-contribute","adding-snippets","modifying-snippets","third-party-apps"]}}, {"info":{"path":"extensions\\meta.json","absolutePath":"C:/Technophile/Code/projects/quicksnip/content/docs/extensions/meta.json"},"data":{"title":"Extensions","pages":["quicksnip","quicksnip-vscode","quicksnip-raycast"]}}])
\ No newline at end of file
diff --git a/.source/source.config.mjs b/.source/source.config.mjs
new file mode 100644
index 00000000..30ec6e06
--- /dev/null
+++ b/.source/source.config.mjs
@@ -0,0 +1,24 @@
+// source.config.ts
+import {
+  defineConfig,
+  defineDocs,
+  frontmatterSchema,
+  metaSchema
+} from "fumadocs-mdx/config";
+var docs = defineDocs({
+  docs: {
+    schema: frontmatterSchema
+  },
+  meta: {
+    schema: metaSchema
+  }
+});
+var source_config_default = defineConfig({
+  mdxOptions: {
+    // MDX options
+  }
+});
+export {
+  source_config_default as default,
+  docs
+};
diff --git a/content/docs/code-snippet.mdx b/content/docs/code-snippet.mdx
new file mode 100644
index 00000000..34497be3
--- /dev/null
+++ b/content/docs/code-snippet.mdx
@@ -0,0 +1,8 @@
+---
+title: Code snippet
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/contributing/adding-snippets.mdx b/content/docs/contributing/adding-snippets.mdx
new file mode 100644
index 00000000..fbaec3a5
--- /dev/null
+++ b/content/docs/contributing/adding-snippets.mdx
@@ -0,0 +1,8 @@
+---
+title: Adding snippets
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/contributing/how-to-contribute.mdx b/content/docs/contributing/how-to-contribute.mdx
new file mode 100644
index 00000000..96b98246
--- /dev/null
+++ b/content/docs/contributing/how-to-contribute.mdx
@@ -0,0 +1,8 @@
+---
+title: How to contribute
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/contributing/meta.json b/content/docs/contributing/meta.json
new file mode 100644
index 00000000..1e522bb3
--- /dev/null
+++ b/content/docs/contributing/meta.json
@@ -0,0 +1,9 @@
+{
+  "title": "Contributing",
+  "pages": [
+    "how-to-contribute",
+    "adding-snippets",
+    "modifying-snippets",
+    "third-party-apps"
+  ]
+}
diff --git a/content/docs/contributing/modifying-snippets.mdx b/content/docs/contributing/modifying-snippets.mdx
new file mode 100644
index 00000000..6e0d19b9
--- /dev/null
+++ b/content/docs/contributing/modifying-snippets.mdx
@@ -0,0 +1,8 @@
+---
+title: Modifying snippets
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/contributing/third-party-apps.mdx b/content/docs/contributing/third-party-apps.mdx
new file mode 100644
index 00000000..9f00056a
--- /dev/null
+++ b/content/docs/contributing/third-party-apps.mdx
@@ -0,0 +1,8 @@
+---
+title: Third-party apps
+description: Hello World
+---
+
+## How to add an extension
+
+This is description
diff --git a/content/docs/extensions/meta.json b/content/docs/extensions/meta.json
new file mode 100644
index 00000000..9256f34a
--- /dev/null
+++ b/content/docs/extensions/meta.json
@@ -0,0 +1,4 @@
+{
+  "title": "Extensions",
+  "pages": ["quicksnip", "quicksnip-vscode", "quicksnip-raycast"]
+}
diff --git a/content/docs/extensions/quicksnip-raycast.mdx b/content/docs/extensions/quicksnip-raycast.mdx
new file mode 100644
index 00000000..30cbf031
--- /dev/null
+++ b/content/docs/extensions/quicksnip-raycast.mdx
@@ -0,0 +1,8 @@
+---
+title: QuickSnip Raycast
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/extensions/quicksnip-vscode.mdx b/content/docs/extensions/quicksnip-vscode.mdx
new file mode 100644
index 00000000..2d0ebf02
--- /dev/null
+++ b/content/docs/extensions/quicksnip-vscode.mdx
@@ -0,0 +1,8 @@
+---
+title: QuickSnip VS Code
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/extensions/quicksnip.mdx b/content/docs/extensions/quicksnip.mdx
new file mode 100644
index 00000000..7a6acc82
--- /dev/null
+++ b/content/docs/extensions/quicksnip.mdx
@@ -0,0 +1,8 @@
+---
+title: QuickSnip
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/index.mdx b/content/docs/index.mdx
new file mode 100644
index 00000000..a11e335d
--- /dev/null
+++ b/content/docs/index.mdx
@@ -0,0 +1,8 @@
+---
+title: What is QuickSnip
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/content/docs/meta.json b/content/docs/meta.json
new file mode 100644
index 00000000..9eb2540f
--- /dev/null
+++ b/content/docs/meta.json
@@ -0,0 +1,14 @@
+{
+  "title": "Docs",
+  "root": true,
+  "pages": [
+    "---Introduction---",
+    "index.mdx",
+    "usage.mdx",
+    "code-snippet.mdx",
+    "---Extensions---",
+    "...extensions",
+    "---Contributing---",
+    "...contributing"
+  ]
+}
diff --git a/content/docs/usage.mdx b/content/docs/usage.mdx
new file mode 100644
index 00000000..b321819f
--- /dev/null
+++ b/content/docs/usage.mdx
@@ -0,0 +1,8 @@
+---
+title: Usage
+description: Hello World
+---
+
+## This is title
+
+This is description
diff --git a/mdx-components.tsx b/mdx-components.tsx
new file mode 100644
index 00000000..b21a1618
--- /dev/null
+++ b/mdx-components.tsx
@@ -0,0 +1,9 @@
+import defaultMdxComponents from "fumadocs-ui/mdx";
+import type { MDXComponents } from "mdx/types";
+
+export function getMDXComponents(components?: MDXComponents): MDXComponents {
+  return {
+    ...defaultMdxComponents,
+    ...components,
+  };
+}
diff --git a/next.config.ts b/next.config.ts
index 5aac8dbe..b922d264 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,6 +1,10 @@
-import type { NextConfig } from "next";
+import { createMDX } from "fumadocs-mdx/next";
 
-const nextConfig: NextConfig = {
+const withMDX = createMDX();
+
+/** @type {import('next').NextConfig} */
+const config = {
+  reactStrictMode: true,
   images: {
     remotePatterns: [
       new URL("https://img.youtube.com/vi/**"),
@@ -9,4 +13,4 @@ const nextConfig: NextConfig = {
   },
 };
 
-export default nextConfig;
+export default withMDX(config);
diff --git a/package-lock.json b/package-lock.json
index 58d1ae27..b1aa724c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,7 @@
     "": {
       "name": "quicksnip",
       "version": "0.1.0",
+      "hasInstallScript": true,
       "dependencies": {
         "@radix-ui/react-accordion": "^1.2.11",
         "@radix-ui/react-aspect-ratio": "^1.1.7",
@@ -16,9 +17,13 @@
         "@radix-ui/react-navigation-menu": "^1.2.13",
         "@radix-ui/react-slot": "^1.2.3",
         "@radix-ui/react-switch": "^1.2.5",
+        "@types/mdx": "^2.0.13",
         "class-variance-authority": "^0.7.1",
         "clsx": "^2.1.1",
         "framer-motion": "^12.23.12",
+        "fumadocs-core": "^15.6.9",
+        "fumadocs-mdx": "^11.7.3",
+        "fumadocs-ui": "^15.6.9",
         "lucide-react": "^0.535.0",
         "next": "15.4.5",
         "react": "^19.1.0",
@@ -33,6 +38,7 @@
         "@types/react-dom": "^19",
         "eslint": "^9",
         "eslint-config-next": "15.4.5",
+        "pagefind": "^1.3.0",
         "tailwindcss": "^4",
         "tw-animate-css": "^1.3.6",
         "typescript": "^5"
@@ -98,3005 +104,5207 @@
         "tslib": "^2.4.0"
       }
     },
-    "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
-      "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
-      "dev": true,
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz",
+      "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==",
+      "cpu": [
+        "ppc64"
+      ],
       "license": "MIT",
-      "dependencies": {
-        "eslint-visitor-keys": "^3.4.3"
-      },
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz",
+      "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint-community/regexpp": {
-      "version": "4.12.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
-      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
-      "dev": true,
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz",
+      "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==",
+      "cpu": [
+        "arm64"
+      ],
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/config-array": {
-      "version": "0.21.0",
-      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
-      "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@eslint/object-schema": "^2.1.6",
-        "debug": "^4.3.1",
-        "minimatch": "^3.1.2"
-      },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz",
+      "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/config-helpers": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
-      "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz",
+      "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/core": {
-      "version": "0.15.1",
-      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
-      "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@types/json-schema": "^7.0.15"
-      },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz",
+      "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/eslintrc": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
-      "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
-      "dev": true,
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz",
+      "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==",
+      "cpu": [
+        "arm64"
+      ],
       "license": "MIT",
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^10.0.1",
-        "globals": "^14.0.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/js": {
-      "version": "9.32.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz",
-      "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==",
-      "dev": true,
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz",
+      "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==",
+      "cpu": [
+        "x64"
+      ],
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://eslint.org/donate"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/object-schema": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
-      "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz",
+      "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@eslint/plugin-kit": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
-      "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@eslint/core": "^0.15.1",
-        "levn": "^0.4.1"
-      },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz",
+      "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@humanfs/core": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
-      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz",
+      "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=18.18.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@humanfs/node": {
-      "version": "0.16.6",
-      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
-      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@humanfs/core": "^0.19.1",
-        "@humanwhocodes/retry": "^0.3.0"
-      },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz",
+      "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=18.18.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
-      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
-      "dev": true,
-      "license": "Apache-2.0",
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz",
+      "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==",
+      "cpu": [
+        "mips64el"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=18.18"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
+        "node": ">=18"
       }
     },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=12.22"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@humanwhocodes/retry": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
-      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=18.18"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
-      }
-    },
-    "node_modules/@img/sharp-darwin-arm64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz",
-      "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==",
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz",
+      "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==",
       "cpu": [
-        "arm64"
+        "ppc64"
       ],
-      "license": "Apache-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "darwin"
+        "linux"
       ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-darwin-arm64": "1.2.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-darwin-x64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz",
-      "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==",
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz",
+      "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==",
       "cpu": [
-        "x64"
+        "riscv64"
       ],
-      "license": "Apache-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "darwin"
+        "linux"
       ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-darwin-x64": "1.2.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-darwin-arm64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz",
-      "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==",
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz",
+      "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==",
       "cpu": [
-        "arm64"
+        "s390x"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "darwin"
+        "linux"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-darwin-x64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz",
-      "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==",
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz",
+      "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==",
       "cpu": [
         "x64"
       ],
-      "license": "LGPL-3.0-or-later",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      }
-    },
-    "node_modules/@img/sharp-libvips-linux-arm": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz",
-      "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==",
-      "cpu": [
-        "arm"
-      ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
         "linux"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-linux-arm64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz",
-      "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==",
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz",
+      "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==",
       "cpu": [
         "arm64"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "netbsd"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-linux-ppc64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz",
-      "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==",
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz",
+      "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==",
       "cpu": [
-        "ppc64"
+        "x64"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "netbsd"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-linux-s390x": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz",
-      "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==",
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz",
+      "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==",
       "cpu": [
-        "s390x"
+        "arm64"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "openbsd"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-linux-x64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
-      "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz",
+      "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==",
       "cpu": [
         "x64"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "openbsd"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz",
-      "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==",
+    "node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz",
+      "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==",
       "cpu": [
         "arm64"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "openharmony"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-libvips-linuxmusl-x64": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz",
-      "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==",
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz",
+      "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==",
       "cpu": [
         "x64"
       ],
-      "license": "LGPL-3.0-or-later",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "sunos"
       ],
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-linux-arm": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz",
-      "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==",
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz",
+      "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==",
       "cpu": [
-        "arm"
+        "arm64"
       ],
-      "license": "Apache-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "win32"
       ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linux-arm": "1.2.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-linux-arm64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz",
-      "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==",
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz",
+      "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==",
       "cpu": [
-        "arm64"
+        "ia32"
       ],
-      "license": "Apache-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "win32"
       ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linux-arm64": "1.2.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@img/sharp-linux-ppc64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz",
-      "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==",
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz",
+      "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==",
       "cpu": [
-        "ppc64"
+        "x64"
       ],
-      "license": "Apache-2.0",
+      "license": "MIT",
       "optional": true,
       "os": [
-        "linux"
+        "win32"
       ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+        "node": ">=18"
+      }
+    },
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+      "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "funding": {
-        "url": "https://opencollective.com/libvips"
+        "url": "https://opencollective.com/eslint"
       },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linux-ppc64": "1.2.0"
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
     },
-    "node_modules/@img/sharp-linux-s390x": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz",
-      "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
       "license": "Apache-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linux-s390x": "1.2.0"
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@img/sharp-linux-x64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
-      "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "Apache-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+      "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linux-x64": "1.2.0"
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/@img/sharp-linuxmusl-arm64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz",
-      "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint/config-array": {
+      "version": "0.21.0",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
+      "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
+      "dev": true,
       "license": "Apache-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+      "dependencies": {
+        "@eslint/object-schema": "^2.1.6",
+        "debug": "^4.3.1",
+        "minimatch": "^3.1.2"
       },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linuxmusl-arm64": "1.2.0"
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@img/sharp-linuxmusl-x64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz",
-      "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@eslint/config-helpers": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz",
+      "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==",
+      "dev": true,
       "license": "Apache-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
-      },
-      "optionalDependencies": {
-        "@img/sharp-libvips-linuxmusl-x64": "1.2.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@img/sharp-wasm32": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz",
-      "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==",
-      "cpu": [
-        "wasm32"
-      ],
-      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
-      "optional": true,
+    "node_modules/@eslint/core": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
+      "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
+      "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "@emnapi/runtime": "^1.4.4"
+        "@types/json-schema": "^7.0.15"
       },
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@img/sharp-win32-arm64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz",
-      "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "Apache-2.0 AND LGPL-3.0-or-later",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+    "node_modules/@eslint/eslintrc": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+      "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://opencollective.com/libvips"
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@img/sharp-win32-ia32": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz",
-      "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==",
-      "cpu": [
-        "ia32"
-      ],
-      "license": "Apache-2.0 AND LGPL-3.0-or-later",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+    "node_modules/@eslint/js": {
+      "version": "9.32.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz",
+      "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==",
+      "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://opencollective.com/libvips"
+        "url": "https://eslint.org/donate"
       }
     },
-    "node_modules/@img/sharp-win32-x64": {
-      "version": "0.34.3",
-      "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz",
-      "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==",
-      "cpu": [
-        "x64"
-      ],
-      "license": "Apache-2.0 AND LGPL-3.0-or-later",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+      "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+      "dev": true,
+      "license": "Apache-2.0",
       "engines": {
-        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/libvips"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@isaacs/fs-minipass": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
-      "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+    "node_modules/@eslint/plugin-kit": {
+      "version": "0.3.4",
+      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
+      "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
       "dependencies": {
-        "minipass": "^7.0.4"
+        "@eslint/core": "^0.15.1",
+        "levn": "^0.4.1"
       },
       "engines": {
-        "node": ">=18.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.12",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
-      "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
-      "dev": true,
+    "node_modules/@floating-ui/core": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
+      "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
       "license": "MIT",
       "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      }
-    },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
+        "@floating-ui/utils": "^0.2.10"
       }
     },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
-      "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.29",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
-      "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
-      "dev": true,
+    "node_modules/@floating-ui/dom": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.3.tgz",
+      "integrity": "sha512-uZA413QEpNuhtb3/iIKoYMSK07keHPYeXF02Zhd6e213j+d1NamLix/mCLxBUDW/Gx52sPH2m+chlUsyaBs/Ag==",
       "license": "MIT",
       "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
+        "@floating-ui/core": "^1.7.3",
+        "@floating-ui/utils": "^0.2.10"
       }
     },
-    "node_modules/@napi-rs/wasm-runtime": {
-      "version": "0.2.12",
-      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
-      "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
-      "dev": true,
+    "node_modules/@floating-ui/react-dom": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.5.tgz",
+      "integrity": "sha512-HDO/1/1oH9fjj4eLgegrlH3dklZpHtUYYFiVwMUwfGvk9jWDRWqkklA2/NFScknrcNSspbV868WjXORvreDX+Q==",
       "license": "MIT",
-      "optional": true,
       "dependencies": {
-        "@emnapi/core": "^1.4.3",
-        "@emnapi/runtime": "^1.4.3",
-        "@tybys/wasm-util": "^0.10.0"
+        "@floating-ui/dom": "^1.7.3"
+      },
+      "peerDependencies": {
+        "react": ">=16.8.0",
+        "react-dom": ">=16.8.0"
       }
     },
-    "node_modules/@next/env": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.5.tgz",
-      "integrity": "sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==",
+    "node_modules/@floating-ui/utils": {
+      "version": "0.2.10",
+      "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
+      "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
       "license": "MIT"
     },
-    "node_modules/@next/eslint-plugin-next": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.5.tgz",
-      "integrity": "sha512-YhbrlbEt0m4jJnXHMY/cCUDBAWgd5SaTa5mJjzOt82QwflAFfW/h3+COp2TfVSzhmscIZ5sg2WXt3MLziqCSCw==",
-      "dev": true,
+    "node_modules/@formatjs/intl-localematcher": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz",
+      "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==",
       "license": "MIT",
       "dependencies": {
-        "fast-glob": "3.3.1"
+        "tslib": "^2.8.0"
       }
     },
-    "node_modules/@next/swc-darwin-arm64": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.5.tgz",
-      "integrity": "sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==",
-      "cpu": [
-        "arm64"
-      ],
-      "license": "MIT",
-      "optional": true,
+    "node_modules/@humanfs/core": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node": {
+      "version": "0.16.6",
+      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+      "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanfs/core": "^0.19.1",
+        "@humanwhocodes/retry": "^0.3.0"
+      },
+      "engines": {
+        "node": ">=18.18.0"
+      }
+    },
+    "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+      "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/retry": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=18.18"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@img/sharp-darwin-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz",
+      "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
       "os": [
         "darwin"
       ],
       "engines": {
-        "node": ">= 10"
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-arm64": "1.2.0"
       }
     },
-    "node_modules/@next/swc-darwin-x64": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.5.tgz",
-      "integrity": "sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==",
+    "node_modules/@img/sharp-darwin-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz",
+      "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==",
       "cpu": [
         "x64"
       ],
-      "license": "MIT",
+      "license": "Apache-2.0",
       "optional": true,
       "os": [
         "darwin"
       ],
       "engines": {
-        "node": ">= 10"
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-x64": "1.2.0"
       }
     },
-    "node_modules/@next/swc-linux-arm64-gnu": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.5.tgz",
-      "integrity": "sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==",
+    "node_modules/@img/sharp-libvips-darwin-arm64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz",
+      "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==",
       "cpu": [
         "arm64"
       ],
-      "license": "MIT",
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-x64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz",
+      "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz",
+      "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "LGPL-3.0-or-later",
       "optional": true,
       "os": [
         "linux"
       ],
-      "engines": {
-        "node": ">= 10"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@next/swc-linux-arm64-musl": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.5.tgz",
-      "integrity": "sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==",
+    "node_modules/@img/sharp-libvips-linux-arm64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz",
+      "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==",
       "cpu": [
         "arm64"
       ],
-      "license": "MIT",
+      "license": "LGPL-3.0-or-later",
       "optional": true,
       "os": [
         "linux"
       ],
-      "engines": {
-        "node": ">= 10"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@next/swc-linux-x64-gnu": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.5.tgz",
-      "integrity": "sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==",
+    "node_modules/@img/sharp-libvips-linux-ppc64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz",
+      "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==",
       "cpu": [
-        "x64"
+        "ppc64"
       ],
-      "license": "MIT",
+      "license": "LGPL-3.0-or-later",
       "optional": true,
       "os": [
         "linux"
       ],
-      "engines": {
-        "node": ">= 10"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@next/swc-linux-x64-musl": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.5.tgz",
-      "integrity": "sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==",
+    "node_modules/@img/sharp-libvips-linux-s390x": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz",
+      "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-x64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz",
+      "integrity": "sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==",
       "cpu": [
         "x64"
       ],
-      "license": "MIT",
+      "license": "LGPL-3.0-or-later",
       "optional": true,
       "os": [
         "linux"
       ],
-      "engines": {
-        "node": ">= 10"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@next/swc-win32-arm64-msvc": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.5.tgz",
-      "integrity": "sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==",
+    "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz",
+      "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==",
       "cpu": [
         "arm64"
       ],
-      "license": "MIT",
+      "license": "LGPL-3.0-or-later",
       "optional": true,
       "os": [
-        "win32"
+        "linux"
       ],
-      "engines": {
-        "node": ">= 10"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@next/swc-win32-x64-msvc": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.5.tgz",
-      "integrity": "sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==",
+    "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz",
+      "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==",
       "cpu": [
         "x64"
       ],
-      "license": "MIT",
+      "license": "LGPL-3.0-or-later",
       "optional": true,
       "os": [
-        "win32"
+        "linux"
       ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@img/sharp-linux-arm": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz",
+      "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "engines": {
-        "node": ">= 8"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm": "1.2.0"
       }
     },
-    "node_modules/@nolyfill/is-core-module": {
-      "version": "1.0.39",
-      "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
-      "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@img/sharp-linux-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz",
+      "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=12.4.0"
-      }
-    },
-    "node_modules/@radix-ui/primitive": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz",
-      "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==",
-      "license": "MIT"
-    },
-    "node_modules/@radix-ui/react-accordion": {
-      "version": "1.2.11",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz",
-      "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/primitive": "1.1.2",
-        "@radix-ui/react-collapsible": "1.1.11",
-        "@radix-ui/react-collection": "1.1.7",
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-direction": "1.1.1",
-        "@radix-ui/react-id": "1.1.1",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-controllable-state": "1.2.2"
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm64": "1.2.0"
       }
     },
-    "node_modules/@radix-ui/react-aspect-ratio": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz",
-      "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-primitive": "2.1.3"
+    "node_modules/@img/sharp-linux-ppc64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz",
+      "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-ppc64": "1.2.0"
       }
     },
-    "node_modules/@radix-ui/react-avatar": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz",
-      "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-callback-ref": "1.1.1",
-        "@radix-ui/react-use-is-hydrated": "0.1.0",
-        "@radix-ui/react-use-layout-effect": "1.1.1"
+    "node_modules/@img/sharp-linux-s390x": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz",
+      "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-s390x": "1.2.0"
       }
     },
-    "node_modules/@radix-ui/react-collapsible": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz",
-      "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/primitive": "1.1.2",
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-id": "1.1.1",
-        "@radix-ui/react-presence": "1.1.4",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-controllable-state": "1.2.2",
-        "@radix-ui/react-use-layout-effect": "1.1.1"
+    "node_modules/@img/sharp-linux-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz",
+      "integrity": "sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-x64": "1.2.0"
       }
     },
-    "node_modules/@radix-ui/react-collection": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
-      "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-slot": "1.2.3"
+    "node_modules/@img/sharp-linuxmusl-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz",
+      "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-arm64": "1.2.0"
       }
     },
-    "node_modules/@radix-ui/react-compose-refs": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
-      "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+    "node_modules/@img/sharp-linuxmusl-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz",
+      "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@radix-ui/react-context": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
-      "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-x64": "1.2.0"
       }
     },
-    "node_modules/@radix-ui/react-dialog": {
-      "version": "1.1.14",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz",
-      "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==",
-      "license": "MIT",
+    "node_modules/@img/sharp-wasm32": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz",
+      "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==",
+      "cpu": [
+        "wasm32"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+      "optional": true,
       "dependencies": {
-        "@radix-ui/primitive": "1.1.2",
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-dismissable-layer": "1.1.10",
-        "@radix-ui/react-focus-guards": "1.1.2",
-        "@radix-ui/react-focus-scope": "1.1.7",
-        "@radix-ui/react-id": "1.1.1",
-        "@radix-ui/react-portal": "1.1.9",
-        "@radix-ui/react-presence": "1.1.4",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-slot": "1.2.3",
-        "@radix-ui/react-use-controllable-state": "1.2.2",
-        "aria-hidden": "^1.2.4",
-        "react-remove-scroll": "^2.6.3"
+        "@emnapi/runtime": "^1.4.4"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@radix-ui/react-direction": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
-      "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+    "node_modules/@img/sharp-win32-arm64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz",
+      "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@radix-ui/react-dismissable-layer": {
-      "version": "1.1.10",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz",
-      "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==",
-      "license": "MIT",
-      "dependencies": {
-        "@radix-ui/primitive": "1.1.2",
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-callback-ref": "1.1.1",
-        "@radix-ui/react-use-escape-keydown": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+    "node_modules/@img/sharp-win32-ia32": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz",
+      "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@radix-ui/react-focus-guards": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz",
-      "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==",
-      "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+    "node_modules/@img/sharp-win32-x64": {
+      "version": "0.34.3",
+      "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz",
+      "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://opencollective.com/libvips"
       }
     },
-    "node_modules/@radix-ui/react-focus-scope": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
-      "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
-      "license": "MIT",
+    "node_modules/@isaacs/fs-minipass": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+      "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-callback-ref": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+        "minipass": "^7.0.4"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">=18.0.0"
       }
     },
-    "node_modules/@radix-ui/react-id": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
-      "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.12",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
+      "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/react-use-layout-effect": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
       }
     },
-    "node_modules/@radix-ui/react-label": {
-      "version": "2.1.7",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
-      "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-primitive": "2.1.3"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/@radix-ui/react-navigation-menu": {
-      "version": "1.2.13",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz",
-      "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==",
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
+      "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.29",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
+      "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/primitive": "1.1.2",
-        "@radix-ui/react-collection": "1.1.7",
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-direction": "1.1.1",
-        "@radix-ui/react-dismissable-layer": "1.1.10",
-        "@radix-ui/react-id": "1.1.1",
-        "@radix-ui/react-presence": "1.1.4",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-callback-ref": "1.1.1",
-        "@radix-ui/react-use-controllable-state": "1.2.2",
-        "@radix-ui/react-use-layout-effect": "1.1.1",
-        "@radix-ui/react-use-previous": "1.1.1",
-        "@radix-ui/react-visually-hidden": "1.2.3"
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@mdx-js/mdx": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
+      "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "@types/estree-jsx": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "@types/mdx": "^2.0.0",
+        "collapse-white-space": "^2.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-is-identifier-name": "^3.0.0",
+        "estree-util-scope": "^1.0.0",
+        "estree-walker": "^3.0.0",
+        "hast-util-to-jsx-runtime": "^2.0.0",
+        "markdown-extensions": "^2.0.0",
+        "recma-build-jsx": "^1.0.0",
+        "recma-jsx": "^1.0.0",
+        "recma-stringify": "^1.0.0",
+        "rehype-recma": "^1.0.0",
+        "remark-mdx": "^3.0.0",
+        "remark-parse": "^11.0.0",
+        "remark-rehype": "^11.0.0",
+        "source-map": "^0.7.0",
+        "unified": "^11.0.0",
+        "unist-util-position-from-estree": "^2.0.0",
+        "unist-util-stringify-position": "^4.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/@napi-rs/wasm-runtime": {
+      "version": "0.2.12",
+      "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
+      "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/core": "^1.4.3",
+        "@emnapi/runtime": "^1.4.3",
+        "@tybys/wasm-util": "^0.10.0"
+      }
+    },
+    "node_modules/@next/env": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/env/-/env-15.4.5.tgz",
+      "integrity": "sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==",
+      "license": "MIT"
+    },
+    "node_modules/@next/eslint-plugin-next": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.4.5.tgz",
+      "integrity": "sha512-YhbrlbEt0m4jJnXHMY/cCUDBAWgd5SaTa5mJjzOt82QwflAFfW/h3+COp2TfVSzhmscIZ5sg2WXt3MLziqCSCw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fast-glob": "3.3.1"
+      }
+    },
+    "node_modules/@next/swc-darwin-arm64": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.5.tgz",
+      "integrity": "sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-darwin-x64": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.5.tgz",
+      "integrity": "sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-arm64-gnu": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.5.tgz",
+      "integrity": "sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-arm64-musl": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.5.tgz",
+      "integrity": "sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-x64-gnu": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.5.tgz",
+      "integrity": "sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-linux-x64-musl": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.5.tgz",
+      "integrity": "sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-win32-arm64-msvc": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.5.tgz",
+      "integrity": "sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@next/swc-win32-x64-msvc": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.5.tgz",
+      "integrity": "sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/@radix-ui/react-portal": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
-      "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nolyfill/is-core-module": {
+      "version": "1.0.39",
+      "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
+      "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.4.0"
+      }
+    },
+    "node_modules/@orama/orama": {
+      "version": "3.1.11",
+      "resolved": "https://registry.npmjs.org/@orama/orama/-/orama-3.1.11.tgz",
+      "integrity": "sha512-Szki0cgFiXE5F9RLx2lUyEtJllnuCSQ4B8RLDwIjXkVit6qZjoDAxH+xhJs29MjKLDz0tbPLdKFa6QrQ/qoGGA==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 20.0.0"
+      }
+    },
+    "node_modules/@pagefind/darwin-arm64": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@pagefind/darwin-arm64/-/darwin-arm64-1.3.0.tgz",
+      "integrity": "sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@pagefind/darwin-x64": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@pagefind/darwin-x64/-/darwin-x64-1.3.0.tgz",
+      "integrity": "sha512-zlGHA23uuXmS8z3XxEGmbHpWDxXfPZ47QS06tGUq0HDcZjXjXHeLG+cboOy828QIV5FXsm9MjfkP5e4ZNbOkow==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@pagefind/linux-arm64": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@pagefind/linux-arm64/-/linux-arm64-1.3.0.tgz",
+      "integrity": "sha512-8lsxNAiBRUk72JvetSBXs4WRpYrQrVJXjlRRnOL6UCdBN9Nlsz0t7hWstRk36+JqHpGWOKYiuHLzGYqYAqoOnQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@pagefind/linux-x64": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@pagefind/linux-x64/-/linux-x64-1.3.0.tgz",
+      "integrity": "sha512-hAvqdPJv7A20Ucb6FQGE6jhjqy+vZ6pf+s2tFMNtMBG+fzcdc91uTw7aP/1Vo5plD0dAOHwdxfkyw0ugal4kcQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@pagefind/windows-x64": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@pagefind/windows-x64/-/windows-x64-1.3.0.tgz",
+      "integrity": "sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@radix-ui/number": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz",
+      "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==",
+      "license": "MIT"
+    },
+    "node_modules/@radix-ui/primitive": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz",
+      "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==",
+      "license": "MIT"
+    },
+    "node_modules/@radix-ui/react-accordion": {
+      "version": "1.2.11",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.11.tgz",
+      "integrity": "sha512-l3W5D54emV2ues7jjeG1xcyN7S3jnK3zE2zHqgn0CmMsy9lNJwmgcrmaxS+7ipw15FAivzKNzH3d5EcGoFKw0A==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-collapsible": "1.1.11",
+        "@radix-ui/react-collection": "1.1.7",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-arrow": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz",
+      "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-aspect-ratio": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz",
+      "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-avatar": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz",
+      "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-is-hydrated": "0.1.0",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-collapsible": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.11.tgz",
+      "integrity": "sha512-2qrRsVGSCYasSz1RFOorXwl0H7g7J1frQtgpQgYrt+MOidtPAINHn9CPovQXb83r8ahapdx3Tu0fa/pdFFSdPg==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-collection": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz",
+      "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-slot": "1.2.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-compose-refs": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz",
+      "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-context": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz",
+      "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-dialog": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.14.tgz",
+      "integrity": "sha512-+CpweKjqpzTmwRwcYECQcNYbI8V9VSQt0SNFKeEBLgfucbsLssU6Ppq7wUdNXEGb573bMjFhVjKVll8rmV6zMw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-dismissable-layer": "1.1.10",
+        "@radix-ui/react-focus-guards": "1.1.2",
+        "@radix-ui/react-focus-scope": "1.1.7",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-portal": "1.1.9",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-slot": "1.2.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "aria-hidden": "^1.2.4",
+        "react-remove-scroll": "^2.6.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-direction": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz",
+      "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-dismissable-layer": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.10.tgz",
+      "integrity": "sha512-IM1zzRV4W3HtVgftdQiiOmA0AdJlCtMLe00FXaHwgt3rAnNsIyDqshvkIW3hj/iu5hu8ERP7KIYki6NkqDxAwQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-escape-keydown": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-focus-guards": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.2.tgz",
+      "integrity": "sha512-fyjAACV62oPV925xFCrH8DR5xWhg9KYtJT4s3u54jxp+L/hbpTY2kIeEFFbFe+a/HCE94zGQMZLIpVTPVZDhaA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-focus-scope": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz",
+      "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-id": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz",
+      "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-label": {
+      "version": "2.1.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
+      "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-navigation-menu": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.13.tgz",
+      "integrity": "sha512-WG8wWfDiJlSF5hELjwfjSGOXcBR/ZMhBFCGYe8vERpC39CQYZeq1PQ2kaYHdye3V95d06H89KGMsVCIE4LWo3g==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-collection": "1.1.7",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-dismissable-layer": "1.1.10",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1",
+        "@radix-ui/react-use-previous": "1.1.1",
+        "@radix-ui/react-visually-hidden": "1.2.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-popover": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.14.tgz",
+      "integrity": "sha512-ODz16+1iIbGUfFEfKx2HTPKizg2MN39uIOV8MXeHnmdd3i/N9Wt7vU46wbHsqA0xoaQyXVcs0KIlBdOA2Y95bw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-dismissable-layer": "1.1.10",
+        "@radix-ui/react-focus-guards": "1.1.2",
+        "@radix-ui/react-focus-scope": "1.1.7",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-popper": "1.2.7",
+        "@radix-ui/react-portal": "1.1.9",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-slot": "1.2.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "aria-hidden": "^1.2.4",
+        "react-remove-scroll": "^2.6.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-popper": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.7.tgz",
+      "integrity": "sha512-IUFAccz1JyKcf/RjB552PlWwxjeCJB8/4KxT7EhBHOJM+mN7LdW+B3kacJXILm32xawcMMjb2i0cIZpo+f9kiQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@floating-ui/react-dom": "^2.0.0",
+        "@radix-ui/react-arrow": "1.1.7",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-layout-effect": "1.1.1",
+        "@radix-ui/react-use-rect": "1.1.1",
+        "@radix-ui/react-use-size": "1.1.1",
+        "@radix-ui/rect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-portal": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz",
+      "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-presence": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz",
+      "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-primitive": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
+      "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-slot": "1.2.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-roving-focus": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.10.tgz",
+      "integrity": "sha512-dT9aOXUen9JSsxnMPv/0VqySQf5eDQ6LCk5Sw28kamz8wSOW2bJdlX2Bg5VUIIcV+6XlHpWTIuTPCf/UNIyq8Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-collection": "1.1.7",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-controllable-state": "1.2.2"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-scroll-area": {
+      "version": "1.2.9",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.9.tgz",
+      "integrity": "sha512-YSjEfBXnhUELsO2VzjdtYYD4CfQjvao+lhhrX5XsHD7/cyUNzljF1FHEbgTPN7LH2MClfwRMIsYlqTYpKTTe2A==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/number": "1.1.1",
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-callback-ref": "1.1.1",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-slot": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
+      "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-compose-refs": "1.1.2"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-switch": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz",
+      "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-compose-refs": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-use-controllable-state": "1.2.2",
+        "@radix-ui/react-use-previous": "1.1.1",
+        "@radix-ui/react-use-size": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-tabs": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.12.tgz",
+      "integrity": "sha512-GTVAlRVrQrSw3cEARM0nAx73ixrWDPNZAruETn3oHCNP6SbZ/hNxdxp+u7VkIEv3/sFoLq1PfcHrl7Pnp0CDpw==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/primitive": "1.1.2",
+        "@radix-ui/react-context": "1.1.2",
+        "@radix-ui/react-direction": "1.1.1",
+        "@radix-ui/react-id": "1.1.1",
+        "@radix-ui/react-presence": "1.1.4",
+        "@radix-ui/react-primitive": "2.1.3",
+        "@radix-ui/react-roving-focus": "1.1.10",
+        "@radix-ui/react-use-controllable-state": "1.2.2"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-callback-ref": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
+      "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-controllable-state": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz",
+      "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-effect-event": "0.0.2",
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-effect-event": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz",
+      "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-escape-keydown": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
+      "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-callback-ref": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-is-hydrated": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz",
+      "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
+      "license": "MIT",
+      "dependencies": {
+        "use-sync-external-store": "^1.5.0"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-layout-effect": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
+      "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-previous": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
+      "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-rect": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz",
+      "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/rect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-use-size": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
+      "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-use-layout-effect": "1.1.1"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/react-visually-hidden": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz",
+      "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==",
+      "license": "MIT",
+      "dependencies": {
+        "@radix-ui/react-primitive": "2.1.3"
+      },
+      "peerDependencies": {
+        "@types/react": "*",
+        "@types/react-dom": "*",
+        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "@types/react-dom": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@radix-ui/rect": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz",
+      "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==",
+      "license": "MIT"
+    },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@rushstack/eslint-patch": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz",
+      "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@shikijs/core": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.9.2.tgz",
+      "integrity": "sha512-3q/mzmw09B2B6PgFNeiaN8pkNOixWS726IHmJEpjDAcneDPMQmUg2cweT9cWXY4XcyQS3i6mOOUgQz9RRUP6HA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.9.2",
+        "@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.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.9.2.tgz",
+      "integrity": "sha512-kUTRVKPsB/28H5Ko6qEsyudBiWEDLst+Sfi+hwr59E0GLHV0h8RfgbQU7fdN5Lt9A8R1ulRiZyTvAizkROjwDA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.9.2",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "oniguruma-to-es": "^4.3.3"
+      }
+    },
+    "node_modules/@shikijs/engine-oniguruma": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.9.2.tgz",
+      "integrity": "sha512-Vn/w5oyQ6TUgTVDIC/BrpXwIlfK6V6kGWDVVz2eRkF2v13YoENUvaNwxMsQU/t6oCuZKzqp9vqtEtEzKl9VegA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.9.2",
+        "@shikijs/vscode-textmate": "^10.0.2"
+      }
+    },
+    "node_modules/@shikijs/langs": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.9.2.tgz",
+      "integrity": "sha512-X1Q6wRRQXY7HqAuX3I8WjMscjeGjqXCg/Sve7J2GWFORXkSrXud23UECqTBIdCSNKJioFtmUGJQNKtlMMZMn0w==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.9.2"
+      }
+    },
+    "node_modules/@shikijs/rehype": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/rehype/-/rehype-3.9.2.tgz",
+      "integrity": "sha512-obHyTWAUp5cpgpr4v7T9sjEHkLUMvBHvcpYAtdB1yuWU4/IeJ8boDMpnGUvvnxVpDwARlkvBA4Hr+BISo3zwjg==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.9.2",
+        "@types/hast": "^3.0.4",
+        "hast-util-to-string": "^3.0.1",
+        "shiki": "3.9.2",
+        "unified": "^11.0.5",
+        "unist-util-visit": "^5.0.0"
+      }
+    },
+    "node_modules/@shikijs/themes": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.9.2.tgz",
+      "integrity": "sha512-6z5lBPBMRfLyyEsgf6uJDHPa6NAGVzFJqH4EAZ+03+7sedYir2yJBRu2uPZOKmj43GyhVHWHvyduLDAwJQfDjA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.9.2"
+      }
+    },
+    "node_modules/@shikijs/transformers": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.9.2.tgz",
+      "integrity": "sha512-MW5hT4TyUp6bNAgTExRYLk1NNasVQMTCw1kgbxHcEC0O5cbepPWaB+1k+JzW9r3SP2/R8kiens8/3E6hGKfgsA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/core": "3.9.2",
+        "@shikijs/types": "3.9.2"
+      }
+    },
+    "node_modules/@shikijs/types": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.9.2.tgz",
+      "integrity": "sha512-/M5L0Uc2ljyn2jKvj4Yiah7ow/W+DJSglVafvWAJ/b8AZDeeRAdMu3c2riDzB7N42VD+jSnWxeP9AKtd4TfYVw==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      }
+    },
+    "node_modules/@shikijs/vscode-textmate": {
+      "version": "10.0.2",
+      "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+      "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+      "license": "MIT"
+    },
+    "node_modules/@standard-schema/spec": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
+      "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
+      "license": "MIT"
+    },
+    "node_modules/@swc/helpers": {
+      "version": "0.5.15",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
+      "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "tslib": "^2.8.0"
+      }
+    },
+    "node_modules/@tailwindcss/node": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
+      "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@ampproject/remapping": "^2.3.0",
+        "enhanced-resolve": "^5.18.1",
+        "jiti": "^2.4.2",
+        "lightningcss": "1.30.1",
+        "magic-string": "^0.30.17",
+        "source-map-js": "^1.2.1",
+        "tailwindcss": "4.1.11"
+      }
+    },
+    "node_modules/@tailwindcss/oxide": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
+      "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "dependencies": {
+        "detect-libc": "^2.0.4",
+        "tar": "^7.4.3"
+      },
+      "engines": {
+        "node": ">= 10"
+      },
+      "optionalDependencies": {
+        "@tailwindcss/oxide-android-arm64": "4.1.11",
+        "@tailwindcss/oxide-darwin-arm64": "4.1.11",
+        "@tailwindcss/oxide-darwin-x64": "4.1.11",
+        "@tailwindcss/oxide-freebsd-x64": "4.1.11",
+        "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
+        "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
+        "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
+        "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
+        "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
+        "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
+        "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
+        "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-android-arm64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
+      "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-darwin-arm64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
+      "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-darwin-x64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
+      "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-freebsd-x64": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
+      "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
+      "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
+      "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
+      "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
+      "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-linux-x64-musl": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
+      "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-wasm32-wasi": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
+      "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
+      "bundleDependencies": [
+        "@napi-rs/wasm-runtime",
+        "@emnapi/core",
+        "@emnapi/runtime",
+        "@tybys/wasm-util",
+        "@emnapi/wasi-threads",
+        "tslib"
+      ],
+      "cpu": [
+        "wasm32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/core": "^1.4.3",
+        "@emnapi/runtime": "^1.4.3",
+        "@emnapi/wasi-threads": "^1.0.2",
+        "@napi-rs/wasm-runtime": "^0.2.11",
+        "@tybys/wasm-util": "^0.9.0",
+        "tslib": "^2.8.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
+      "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
+      "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@tailwindcss/postcss": {
+      "version": "4.1.11",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.11.tgz",
+      "integrity": "sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@alloc/quick-lru": "^5.2.0",
+        "@tailwindcss/node": "4.1.11",
+        "@tailwindcss/oxide": "4.1.11",
+        "postcss": "^8.4.41",
+        "tailwindcss": "4.1.11"
+      }
+    },
+    "node_modules/@tybys/wasm-util": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
+      "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@types/debug": {
+      "version": "4.1.12",
+      "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+      "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/ms": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "license": "MIT"
+    },
+    "node_modules/@types/estree-jsx": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
+      "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "*"
+      }
+    },
+    "node_modules/@types/hast": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+      "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/json-schema": {
+      "version": "7.0.15",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/json5": {
+      "version": "0.0.29",
+      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@types/mdast": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
+      "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/mdx": {
+      "version": "2.0.13",
+      "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz",
+      "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==",
+      "license": "MIT"
+    },
+    "node_modules/@types/ms": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+      "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/node": {
+      "version": "20.19.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz",
+      "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~6.21.0"
+      }
+    },
+    "node_modules/@types/react": {
+      "version": "19.1.9",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz",
+      "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==",
+      "devOptional": true,
+      "license": "MIT",
+      "dependencies": {
+        "csstype": "^3.0.2"
+      }
+    },
+    "node_modules/@types/react-dom": {
+      "version": "19.1.7",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz",
+      "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==",
+      "devOptional": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "@types/react": "^19.0.0"
+      }
+    },
+    "node_modules/@types/unist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
+      "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+      "license": "MIT"
+    },
+    "node_modules/@typescript-eslint/eslint-plugin": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz",
+      "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.10.0",
+        "@typescript-eslint/scope-manager": "8.39.0",
+        "@typescript-eslint/type-utils": "8.39.0",
+        "@typescript-eslint/utils": "8.39.0",
+        "@typescript-eslint/visitor-keys": "8.39.0",
+        "graphemer": "^1.4.0",
+        "ignore": "^7.0.0",
+        "natural-compare": "^1.4.0",
+        "ts-api-utils": "^2.1.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "@typescript-eslint/parser": "^8.39.0",
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/@typescript-eslint/parser": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz",
+      "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/scope-manager": "8.39.0",
+        "@typescript-eslint/types": "8.39.0",
+        "@typescript-eslint/typescript-estree": "8.39.0",
+        "@typescript-eslint/visitor-keys": "8.39.0",
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/project-service": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz",
+      "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/tsconfig-utils": "^8.39.0",
+        "@typescript-eslint/types": "^8.39.0",
+        "debug": "^4.3.4"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz",
+      "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.39.0",
+        "@typescript-eslint/visitor-keys": "8.39.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/tsconfig-utils": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz",
+      "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz",
+      "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.39.0",
+        "@typescript-eslint/typescript-estree": "8.39.0",
+        "@typescript-eslint/utils": "8.39.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^2.1.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/types": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz",
+      "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz",
+      "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/project-service": "8.39.0",
+        "@typescript-eslint/tsconfig-utils": "8.39.0",
+        "@typescript-eslint/types": "8.39.0",
+        "@typescript-eslint/visitor-keys": "8.39.0",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.3.2",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^2.1.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+      "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.8"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/@typescript-eslint/utils": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz",
+      "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.7.0",
+        "@typescript-eslint/scope-manager": "8.39.0",
+        "@typescript-eslint/types": "8.39.0",
+        "@typescript-eslint/typescript-estree": "8.39.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "typescript": ">=4.8.4 <6.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz",
+      "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.39.0",
+        "eslint-visitor-keys": "^4.2.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+      "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+      "license": "ISC"
+    },
+    "node_modules/@unrs/resolver-binding-android-arm-eabi": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
+      "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-android-arm64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
+      "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-darwin-arm64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
+      "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-darwin-x64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
+      "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-freebsd-x64": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
+      "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
+      "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
+      "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
+      "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
+      "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
+      "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
+      "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
+      "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
+      "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
+      "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-linux-x64-musl": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
+      "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@unrs/resolver-binding-wasm32-wasi": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
+      "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
+      "cpu": [
+        "wasm32"
+      ],
+      "dev": true,
       "license": "MIT",
+      "optional": true,
       "dependencies": {
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-layout-effect": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+        "@napi-rs/wasm-runtime": "^0.2.11"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">=14.0.0"
       }
     },
-    "node_modules/@radix-ui/react-presence": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz",
-      "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==",
+    "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
+      "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-use-layout-effect": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
-      }
+      "optional": true,
+      "os": [
+        "win32"
+      ]
     },
-    "node_modules/@radix-ui/react-primitive": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz",
-      "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==",
+    "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
+      "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-slot": "1.2.3"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
-      }
+      "optional": true,
+      "os": [
+        "win32"
+      ]
     },
-    "node_modules/@radix-ui/react-slot": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
-      "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
+    "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
+      "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@radix-ui/react-compose-refs": "1.1.2"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
-      }
+      "optional": true,
+      "os": [
+        "win32"
+      ]
     },
-    "node_modules/@radix-ui/react-switch": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.5.tgz",
-      "integrity": "sha512-5ijLkak6ZMylXsaImpZ8u4Rlf5grRmoc0p0QeX9VJtlrM4f5m3nCTX8tWga/zOA8PZYIR/t0p2Mnvd7InrJ6yQ==",
+    "node_modules/acorn": {
+      "version": "8.15.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
       "license": "MIT",
-      "dependencies": {
-        "@radix-ui/primitive": "1.1.2",
-        "@radix-ui/react-compose-refs": "1.1.2",
-        "@radix-ui/react-context": "1.1.2",
-        "@radix-ui/react-primitive": "2.1.3",
-        "@radix-ui/react-use-controllable-state": "1.2.2",
-        "@radix-ui/react-use-previous": "1.1.1",
-        "@radix-ui/react-use-size": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "bin": {
+        "acorn": "bin/acorn"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">=0.4.0"
       }
     },
-    "node_modules/@radix-ui/react-use-callback-ref": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz",
-      "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==",
+    "node_modules/acorn-jsx": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
       "license": "MIT",
       "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
       }
     },
-    "node_modules/@radix-ui/react-use-controllable-state": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz",
-      "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==",
+    "node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/react-use-effect-event": "0.0.2",
-        "@radix-ui/react-use-layout-effect": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/@radix-ui/react-use-effect-event": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz",
-      "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==",
+    "node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/react-use-layout-effect": "1.1.1"
+        "color-convert": "^2.0.1"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "engines": {
+        "node": ">=8"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/@radix-ui/react-use-escape-keydown": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz",
-      "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==",
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "license": "Python-2.0"
+    },
+    "node_modules/aria-hidden": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz",
+      "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/react-use-callback-ref": "1.1.1"
-      },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+        "tslib": "^2.0.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">=10"
       }
     },
-    "node_modules/@radix-ui/react-use-is-hydrated": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz",
-      "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
+    "node_modules/aria-query": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+      "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array-buffer-byte-length": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
+      "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "use-sync-external-store": "^1.5.0"
+        "call-bound": "^1.0.3",
+        "is-array-buffer": "^3.0.5"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@radix-ui/react-use-layout-effect": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz",
-      "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==",
+    "node_modules/array-includes": {
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
+      "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
+      "dev": true,
       "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.24.0",
+        "es-object-atoms": "^1.1.1",
+        "get-intrinsic": "^1.3.0",
+        "is-string": "^1.1.1",
+        "math-intrinsics": "^1.1.0"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@radix-ui/react-use-previous": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz",
-      "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==",
+    "node_modules/array.prototype.findlast": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+      "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+      "dev": true,
       "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "dependencies": {
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.2",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.0.0",
+        "es-shim-unscopables": "^1.0.2"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@radix-ui/react-use-size": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz",
-      "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==",
+    "node_modules/array.prototype.findlastindex": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
+      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/react-use-layout-effect": "1.1.1"
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.9",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "es-shim-unscopables": "^1.1.0"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@radix-ui/react-visually-hidden": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz",
-      "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==",
+    "node_modules/array.prototype.flat": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
+      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@radix-ui/react-primitive": "2.1.3"
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-shim-unscopables": "^1.0.2"
       },
-      "peerDependencies": {
-        "@types/react": "*",
-        "@types/react-dom": "*",
-        "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
-        "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@rtsao/scc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
-      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@rushstack/eslint-patch": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.12.0.tgz",
-      "integrity": "sha512-5EwMtOqvJMMa3HbmxLlF74e+3/HhwBTMcvt3nqVJgGCozO6hzIPOBlwm8mGVNR9SN2IJpxSnlxczyDjcn7qIyw==",
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
+      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@swc/helpers": {
-      "version": "0.5.15",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
-      "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
-      "license": "Apache-2.0",
+      "license": "MIT",
       "dependencies": {
-        "tslib": "^2.8.0"
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@tailwindcss/node": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
-      "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
+    "node_modules/array.prototype.tosorted": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+      "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@ampproject/remapping": "^2.3.0",
-        "enhanced-resolve": "^5.18.1",
-        "jiti": "^2.4.2",
-        "lightningcss": "1.30.1",
-        "magic-string": "^0.30.17",
-        "source-map-js": "^1.2.1",
-        "tailwindcss": "4.1.11"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.3",
+        "es-errors": "^1.3.0",
+        "es-shim-unscopables": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "node_modules/@tailwindcss/oxide": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
-      "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
+    "node_modules/arraybuffer.prototype.slice": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
+      "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
       "dev": true,
-      "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
-        "detect-libc": "^2.0.4",
-        "tar": "^7.4.3"
+        "array-buffer-byte-length": "^1.0.1",
+        "call-bind": "^1.0.8",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "is-array-buffer": "^3.0.4"
       },
       "engines": {
-        "node": ">= 10"
+        "node": ">= 0.4"
       },
-      "optionalDependencies": {
-        "@tailwindcss/oxide-android-arm64": "4.1.11",
-        "@tailwindcss/oxide-darwin-arm64": "4.1.11",
-        "@tailwindcss/oxide-darwin-x64": "4.1.11",
-        "@tailwindcss/oxide-freebsd-x64": "4.1.11",
-        "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
-        "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
-        "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
-        "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
-        "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
-        "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
-        "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
-        "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@tailwindcss/oxide-android-arm64": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
-      "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/ast-types-flow": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+      "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/astring": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz",
+      "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "bin": {
+        "astring": "bin/astring"
       }
-    },
-    "node_modules/@tailwindcss/oxide-darwin-arm64": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
-      "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
-      "cpu": [
-        "arm64"
-      ],
+    },
+    "node_modules/async-function": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
+      "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
       "engines": {
-        "node": ">= 10"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/@tailwindcss/oxide-darwin-x64": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
-      "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/available-typed-arrays": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
+      "dependencies": {
+        "possible-typed-array-names": "^1.0.0"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@tailwindcss/oxide-freebsd-x64": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
-      "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/axe-core": {
+      "version": "4.10.3",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
+      "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
+      "license": "MPL-2.0",
       "engines": {
-        "node": ">= 10"
+        "node": ">=4"
       }
     },
-    "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
-      "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/axobject-query": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+      "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">= 10"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
-      "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
+    "node_modules/bail": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
+      "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
-      "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/brace-expansion": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+      "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
-      "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "fill-range": "^7.1.1"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">=8"
       }
     },
-    "node_modules/@tailwindcss/oxide-linux-x64-musl": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
-      "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/call-bind": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
+      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.0",
+        "es-define-property": "^1.0.0",
+        "get-intrinsic": "^1.2.4",
+        "set-function-length": "^1.2.2"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@tailwindcss/oxide-wasm32-wasi": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
-      "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
-      "bundleDependencies": [
-        "@napi-rs/wasm-runtime",
-        "@emnapi/core",
-        "@emnapi/runtime",
-        "@tybys/wasm-util",
-        "@emnapi/wasi-threads",
-        "tslib"
-      ],
-      "cpu": [
-        "wasm32"
-      ],
+    "node_modules/call-bind-apply-helpers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
       "dependencies": {
-        "@emnapi/core": "^1.4.3",
-        "@emnapi/runtime": "^1.4.3",
-        "@emnapi/wasi-threads": "^1.0.2",
-        "@napi-rs/wasm-runtime": "^0.2.11",
-        "@tybys/wasm-util": "^0.9.0",
-        "tslib": "^2.8.0"
+        "es-errors": "^1.3.0",
+        "function-bind": "^1.1.2"
       },
       "engines": {
-        "node": ">=14.0.0"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
-      "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/call-bound": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.2",
+        "get-intrinsic": "^1.3.0"
+      },
       "engines": {
-        "node": ">= 10"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
-      "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/callsites": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
-        "node": ">= 10"
+        "node": ">=6"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001731",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz",
+      "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/ccount": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
+      "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@tailwindcss/postcss": {
-      "version": "4.1.11",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.11.tgz",
-      "integrity": "sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==",
+    "node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@alloc/quick-lru": "^5.2.0",
-        "@tailwindcss/node": "4.1.11",
-        "@tailwindcss/oxide": "4.1.11",
-        "postcss": "^8.4.41",
-        "tailwindcss": "4.1.11"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/@tybys/wasm-util": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.0.tgz",
-      "integrity": "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==",
-      "dev": true,
+    "node_modules/character-entities": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+      "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
       "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@types/estree": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
-      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/json-schema": {
-      "version": "7.0.15",
-      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
-      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@types/node": {
-      "version": "20.19.9",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.9.tgz",
-      "integrity": "sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==",
-      "dev": true,
+    "node_modules/character-entities-html4": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+      "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
       "license": "MIT",
-      "dependencies": {
-        "undici-types": "~6.21.0"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@types/react": {
-      "version": "19.1.9",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz",
-      "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==",
-      "devOptional": true,
+    "node_modules/character-entities-legacy": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
       "license": "MIT",
-      "dependencies": {
-        "csstype": "^3.0.2"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@types/react-dom": {
-      "version": "19.1.7",
-      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz",
-      "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==",
-      "devOptional": true,
+    "node_modules/character-reference-invalid": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
+      "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
       "license": "MIT",
-      "peerDependencies": {
-        "@types/react": "^19.0.0"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz",
-      "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==",
-      "dev": true,
+    "node_modules/chokidar": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
+      "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.38.0",
-        "@typescript-eslint/type-utils": "8.38.0",
-        "@typescript-eslint/utils": "8.38.0",
-        "@typescript-eslint/visitor-keys": "8.38.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^7.0.0",
-        "natural-compare": "^1.4.0",
-        "ts-api-utils": "^2.1.0"
+        "readdirp": "^4.0.1"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 14.16.0"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^8.38.0",
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
+        "url": "https://paulmillr.com/funding/"
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
-      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+    "node_modules/chownr": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
       "dev": true,
-      "license": "MIT",
+      "license": "BlueOak-1.0.0",
       "engines": {
-        "node": ">= 4"
+        "node": ">=18"
       }
     },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz",
-      "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/class-variance-authority": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
+      "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.38.0",
-        "@typescript-eslint/types": "8.38.0",
-        "@typescript-eslint/typescript-estree": "8.38.0",
-        "@typescript-eslint/visitor-keys": "8.38.0",
-        "debug": "^4.3.4"
+        "clsx": "^2.1.1"
       },
+      "funding": {
+        "url": "https://polar.sh/cva"
+      }
+    },
+    "node_modules/client-only": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+      "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+      "license": "MIT"
+    },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
+        "node": ">=6"
+      }
+    },
+    "node_modules/collapse-white-space": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz",
+      "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==",
+      "license": "MIT",
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@typescript-eslint/project-service": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz",
-      "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==",
-      "dev": true,
+    "node_modules/color": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+      "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
       "license": "MIT",
+      "optional": true,
       "dependencies": {
-        "@typescript-eslint/tsconfig-utils": "^8.38.0",
-        "@typescript-eslint/types": "^8.38.0",
-        "debug": "^4.3.4"
+        "color-convert": "^2.0.1",
+        "color-string": "^1.9.0"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
+        "node": ">=12.5.0"
       }
     },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz",
-      "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==",
-      "dev": true,
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "devOptional": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.38.0",
-        "@typescript-eslint/visitor-keys": "8.38.0"
+        "color-name": "~1.1.4"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "devOptional": true,
+      "license": "MIT"
+    },
+    "node_modules/color-string": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
+    "node_modules/comma-separated-tokens": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+      "license": "MIT",
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@typescript-eslint/tsconfig-utils": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz",
-      "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==",
+    "node_modules/compute-scroll-into-view": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.1.tgz",
+      "integrity": "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==",
+      "license": "MIT"
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "license": "MIT",
+      "bin": {
+        "cssesc": "bin/cssesc"
       },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
+      "engines": {
+        "node": ">=4"
       }
     },
-    "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz",
-      "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==",
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "devOptional": true,
+      "license": "MIT"
+    },
+    "node_modules/damerau-levenshtein": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+      "dev": true,
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/data-view-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
+      "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.38.0",
-        "@typescript-eslint/typescript-estree": "8.38.0",
-        "@typescript-eslint/utils": "8.38.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^2.1.0"
+        "call-bound": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.2"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@typescript-eslint/types": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz",
-      "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==",
+    "node_modules/data-view-byte-length": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
+      "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.2"
+      },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "url": "https://github.com/sponsors/inspect-js"
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz",
-      "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==",
+    "node_modules/data-view-byte-offset": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
+      "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/project-service": "8.38.0",
-        "@typescript-eslint/tsconfig-utils": "8.38.0",
-        "@typescript-eslint/types": "8.38.0",
-        "@typescript-eslint/visitor-keys": "8.38.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^2.1.0"
+        "call-bound": "^1.0.2",
+        "es-errors": "^1.3.0",
+        "is-data-view": "^1.0.1"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "typescript": ">=4.8.4 <5.9.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
-      "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
-      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
-      "dev": true,
+    "node_modules/debug": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
       "license": "MIT",
       "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.8"
+        "ms": "^2.1.3"
       },
       "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "is-glob": "^4.0.1"
+        "node": ">=6.0"
       },
-      "engines": {
-        "node": ">= 6"
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
+    "node_modules/decode-named-character-reference": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
+      "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "character-entities": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/@typescript-eslint/utils": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz",
-      "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==",
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.7.0",
-        "@typescript-eslint/scope-manager": "8.38.0",
-        "@typescript-eslint/types": "8.38.0",
-        "@typescript-eslint/typescript-estree": "8.38.0"
+        "es-define-property": "^1.0.0",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.0.1"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "typescript": ">=4.8.4 <5.9.0"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.38.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz",
-      "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==",
+    "node_modules/define-properties": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.38.0",
-        "eslint-visitor-keys": "^4.2.1"
+        "define-data-property": "^1.0.1",
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/@unrs/resolver-binding-android-arm-eabi": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
-      "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@unrs/resolver-binding-android-arm64": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
-      "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
+    "node_modules/dequal": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "node_modules/@unrs/resolver-binding-darwin-arm64": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz",
-      "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
+    "node_modules/detect-libc": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
+      "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
+      "devOptional": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "node_modules/@unrs/resolver-binding-darwin-x64": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
-      "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
+    "node_modules/detect-node-es": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+      "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+      "license": "MIT"
     },
-    "node_modules/@unrs/resolver-binding-freebsd-x64": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
-      "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "node_modules/devlop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
+      "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
+      "dependencies": {
+        "dequal": "^2.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
-      "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/doctrine": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "license": "Apache-2.0",
+      "dependencies": {
+        "esutils": "^2.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
-      "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/dunder-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "call-bind-apply-helpers": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "gopd": "^1.2.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
-      "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "license": "MIT"
     },
-    "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
-      "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/enhanced-resolve": {
+      "version": "5.18.2",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
+      "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "graceful-fs": "^4.2.4",
+        "tapable": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
-      "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
-      "cpu": [
-        "ppc64"
-      ],
+    "node_modules/es-abstract": {
+      "version": "1.24.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
+      "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.2",
+        "arraybuffer.prototype.slice": "^1.0.4",
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.4",
+        "data-view-buffer": "^1.0.2",
+        "data-view-byte-length": "^1.0.2",
+        "data-view-byte-offset": "^1.0.1",
+        "es-define-property": "^1.0.1",
+        "es-errors": "^1.3.0",
+        "es-object-atoms": "^1.1.1",
+        "es-set-tostringtag": "^2.1.0",
+        "es-to-primitive": "^1.3.0",
+        "function.prototype.name": "^1.1.8",
+        "get-intrinsic": "^1.3.0",
+        "get-proto": "^1.0.1",
+        "get-symbol-description": "^1.1.0",
+        "globalthis": "^1.0.4",
+        "gopd": "^1.2.0",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "hasown": "^2.0.2",
+        "internal-slot": "^1.1.0",
+        "is-array-buffer": "^3.0.5",
+        "is-callable": "^1.2.7",
+        "is-data-view": "^1.0.2",
+        "is-negative-zero": "^2.0.3",
+        "is-regex": "^1.2.1",
+        "is-set": "^2.0.3",
+        "is-shared-array-buffer": "^1.0.4",
+        "is-string": "^1.1.1",
+        "is-typed-array": "^1.1.15",
+        "is-weakref": "^1.1.1",
+        "math-intrinsics": "^1.1.0",
+        "object-inspect": "^1.13.4",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.7",
+        "own-keys": "^1.0.1",
+        "regexp.prototype.flags": "^1.5.4",
+        "safe-array-concat": "^1.1.3",
+        "safe-push-apply": "^1.0.0",
+        "safe-regex-test": "^1.1.0",
+        "set-proto": "^1.0.0",
+        "stop-iteration-iterator": "^1.1.0",
+        "string.prototype.trim": "^1.2.10",
+        "string.prototype.trimend": "^1.0.9",
+        "string.prototype.trimstart": "^1.0.8",
+        "typed-array-buffer": "^1.0.3",
+        "typed-array-byte-length": "^1.0.3",
+        "typed-array-byte-offset": "^1.0.4",
+        "typed-array-length": "^1.0.7",
+        "unbox-primitive": "^1.1.0",
+        "which-typed-array": "^1.1.19"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
-      "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
-      "cpu": [
-        "riscv64"
-      ],
+    "node_modules/es-define-property": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
-      "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
-      "cpu": [
-        "riscv64"
-      ],
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
-      "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/es-iterator-helpers": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
+      "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.6",
+        "es-errors": "^1.3.0",
+        "es-set-tostringtag": "^2.0.3",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.6",
+        "globalthis": "^1.0.4",
+        "gopd": "^1.2.0",
+        "has-property-descriptors": "^1.0.2",
+        "has-proto": "^1.2.0",
+        "has-symbols": "^1.1.0",
+        "internal-slot": "^1.1.0",
+        "iterator.prototype": "^1.1.4",
+        "safe-array-concat": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
-      "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/es-object-atoms": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "es-errors": "^1.3.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "node_modules/@unrs/resolver-binding-linux-x64-musl": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
-      "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
     },
-    "node_modules/@unrs/resolver-binding-wasm32-wasi": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
-      "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
-      "cpu": [
-        "wasm32"
-      ],
+    "node_modules/es-shim-unscopables": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
+      "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
       "dependencies": {
-        "@napi-rs/wasm-runtime": "^0.2.11"
+        "hasown": "^2.0.2"
       },
       "engines": {
-        "node": ">=14.0.0"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
-      "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/es-to-primitive": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
+      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
+      "dependencies": {
+        "is-callable": "^1.2.7",
+        "is-date-object": "^1.0.5",
+        "is-symbol": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
-    "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
-      "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
+    "node_modules/esast-util-from-estree": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz",
+      "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
+      "dependencies": {
+        "@types/estree-jsx": "^1.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-visit": "^2.0.0",
+        "unist-util-position-from-estree": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
     },
-    "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
-      "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "node_modules/esast-util-from-js": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz",
+      "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
+      "dependencies": {
+        "@types/estree-jsx": "^1.0.0",
+        "acorn": "^8.0.0",
+        "esast-util-from-estree": "^2.0.0",
+        "vfile-message": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
     },
-    "node_modules/acorn": {
-      "version": "8.15.0",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
-      "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
-      "dev": true,
+    "node_modules/esbuild": {
+      "version": "0.25.8",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz",
+      "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==",
+      "hasInstallScript": true,
       "license": "MIT",
       "bin": {
-        "acorn": "bin/acorn"
+        "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">=0.4.0"
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.8",
+        "@esbuild/android-arm": "0.25.8",
+        "@esbuild/android-arm64": "0.25.8",
+        "@esbuild/android-x64": "0.25.8",
+        "@esbuild/darwin-arm64": "0.25.8",
+        "@esbuild/darwin-x64": "0.25.8",
+        "@esbuild/freebsd-arm64": "0.25.8",
+        "@esbuild/freebsd-x64": "0.25.8",
+        "@esbuild/linux-arm": "0.25.8",
+        "@esbuild/linux-arm64": "0.25.8",
+        "@esbuild/linux-ia32": "0.25.8",
+        "@esbuild/linux-loong64": "0.25.8",
+        "@esbuild/linux-mips64el": "0.25.8",
+        "@esbuild/linux-ppc64": "0.25.8",
+        "@esbuild/linux-riscv64": "0.25.8",
+        "@esbuild/linux-s390x": "0.25.8",
+        "@esbuild/linux-x64": "0.25.8",
+        "@esbuild/netbsd-arm64": "0.25.8",
+        "@esbuild/netbsd-x64": "0.25.8",
+        "@esbuild/openbsd-arm64": "0.25.8",
+        "@esbuild/openbsd-x64": "0.25.8",
+        "@esbuild/openharmony-arm64": "0.25.8",
+        "@esbuild/sunos-x64": "0.25.8",
+        "@esbuild/win32-arm64": "0.25.8",
+        "@esbuild/win32-ia32": "0.25.8",
+        "@esbuild/win32-x64": "0.25.8"
       }
     },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
       "dev": true,
       "license": "MIT",
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+    "node_modules/eslint": {
+      "version": "9.32.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz",
+      "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
+        "@eslint-community/eslint-utils": "^4.2.0",
+        "@eslint-community/regexpp": "^4.12.1",
+        "@eslint/config-array": "^0.21.0",
+        "@eslint/config-helpers": "^0.3.0",
+        "@eslint/core": "^0.15.0",
+        "@eslint/eslintrc": "^3.3.1",
+        "@eslint/js": "9.32.0",
+        "@eslint/plugin-kit": "^0.3.4",
+        "@humanfs/node": "^0.16.6",
+        "@humanwhocodes/module-importer": "^1.0.1",
+        "@humanwhocodes/retry": "^0.4.2",
+        "@types/estree": "^1.0.6",
+        "@types/json-schema": "^7.0.15",
+        "ajv": "^6.12.4",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.6",
+        "debug": "^4.3.2",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^8.4.0",
+        "eslint-visitor-keys": "^4.2.1",
+        "espree": "^10.4.0",
+        "esquery": "^1.5.0",
+        "esutils": "^2.0.2",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^8.0.0",
+        "find-up": "^5.0.0",
+        "glob-parent": "^6.0.2",
+        "ignore": "^5.2.0",
+        "imurmurhash": "^0.1.4",
+        "is-glob": "^4.0.0",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.9.3"
+      },
+      "bin": {
+        "eslint": "bin/eslint.js"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
+        "url": "https://eslint.org/donate"
+      },
+      "peerDependencies": {
+        "jiti": "*"
+      },
+      "peerDependenciesMeta": {
+        "jiti": {
+          "optional": true
+        }
       }
     },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+    "node_modules/eslint-config-next": {
+      "version": "15.4.5",
+      "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.5.tgz",
+      "integrity": "sha512-IMijiXaZ43qFB+Gcpnb374ipTKD8JIyVNR+6VsifFQ/LHyx+A9wgcgSIhCX5PYSjwOoSYD5LtNHKlM5uc23eww==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "color-convert": "^2.0.1"
+        "@next/eslint-plugin-next": "15.4.5",
+        "@rushstack/eslint-patch": "^1.10.3",
+        "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+        "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+        "eslint-import-resolver-node": "^0.3.6",
+        "eslint-import-resolver-typescript": "^3.5.2",
+        "eslint-plugin-import": "^2.31.0",
+        "eslint-plugin-jsx-a11y": "^6.10.0",
+        "eslint-plugin-react": "^7.37.0",
+        "eslint-plugin-react-hooks": "^5.0.0"
       },
-      "engines": {
-        "node": ">=8"
+      "peerDependencies": {
+        "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
+        "typescript": ">=3.3.1"
       },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+    "node_modules/eslint-import-resolver-node": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
       "dev": true,
-      "license": "Python-2.0"
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^3.2.7",
+        "is-core-module": "^2.13.0",
+        "resolve": "^1.22.4"
+      }
     },
-    "node_modules/aria-hidden": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz",
-      "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==",
+    "node_modules/eslint-import-resolver-node/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "tslib": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=10"
+        "ms": "^2.1.1"
       }
     },
-    "node_modules/aria-query": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
-      "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+    "node_modules/eslint-import-resolver-typescript": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
+      "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "ISC",
+      "dependencies": {
+        "@nolyfill/is-core-module": "1.0.39",
+        "debug": "^4.4.0",
+        "get-tsconfig": "^4.10.0",
+        "is-bun-module": "^2.0.0",
+        "stable-hash": "^0.0.5",
+        "tinyglobby": "^0.2.13",
+        "unrs-resolver": "^1.6.2"
+      },
       "engines": {
-        "node": ">= 0.4"
+        "node": "^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint-import-resolver-typescript"
+      },
+      "peerDependencies": {
+        "eslint": "*",
+        "eslint-plugin-import": "*",
+        "eslint-plugin-import-x": "*"
+      },
+      "peerDependenciesMeta": {
+        "eslint-plugin-import": {
+          "optional": true
+        },
+        "eslint-plugin-import-x": {
+          "optional": true
+        }
       }
     },
-    "node_modules/array-buffer-byte-length": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
-      "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
+    "node_modules/eslint-module-utils": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
+      "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "is-array-buffer": "^3.0.5"
+        "debug": "^3.2.7"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
+        }
       }
     },
-    "node_modules/array-includes": {
-      "version": "3.1.9",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz",
-      "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==",
+    "node_modules/eslint-module-utils/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.24.0",
-        "es-object-atoms": "^1.1.1",
-        "get-intrinsic": "^1.3.0",
-        "is-string": "^1.1.1",
-        "math-intrinsics": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "ms": "^2.1.1"
       }
     },
-    "node_modules/array.prototype.findlast": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
-      "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+    "node_modules/eslint-plugin-import": {
+      "version": "2.32.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
+      "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-shim-unscopables": "^1.0.2"
+        "@rtsao/scc": "^1.1.0",
+        "array-includes": "^3.1.9",
+        "array.prototype.findlastindex": "^1.2.6",
+        "array.prototype.flat": "^1.3.3",
+        "array.prototype.flatmap": "^1.3.3",
+        "debug": "^3.2.7",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.9",
+        "eslint-module-utils": "^2.12.1",
+        "hasown": "^2.0.2",
+        "is-core-module": "^2.16.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.8",
+        "object.groupby": "^1.0.3",
+        "object.values": "^1.2.1",
+        "semver": "^6.3.1",
+        "string.prototype.trimend": "^1.0.9",
+        "tsconfig-paths": "^3.15.0"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "peerDependencies": {
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
       }
     },
-    "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz",
-      "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==",
+    "node_modules/eslint-plugin-import/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.9",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "es-shim-unscopables": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "ms": "^2.1.1"
       }
     },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz",
-      "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==",
+    "node_modules/eslint-plugin-import/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/eslint-plugin-jsx-a11y": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+      "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
+        "aria-query": "^5.3.2",
+        "array-includes": "^3.1.8",
+        "array.prototype.flatmap": "^1.3.2",
+        "ast-types-flow": "^0.0.8",
+        "axe-core": "^4.10.0",
+        "axobject-query": "^4.1.0",
+        "damerau-levenshtein": "^1.0.8",
+        "emoji-regex": "^9.2.2",
+        "hasown": "^2.0.2",
+        "jsx-ast-utils": "^3.3.5",
+        "language-tags": "^1.0.9",
+        "minimatch": "^3.1.2",
+        "object.fromentries": "^2.0.8",
+        "safe-regex-test": "^1.0.3",
+        "string.prototype.includes": "^2.0.1"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "peerDependencies": {
+        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
       }
     },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz",
-      "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==",
+    "node_modules/eslint-plugin-react": {
+      "version": "7.37.5",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
+      "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-shim-unscopables": "^1.0.2"
+        "array-includes": "^3.1.8",
+        "array.prototype.findlast": "^1.2.5",
+        "array.prototype.flatmap": "^1.3.3",
+        "array.prototype.tosorted": "^1.1.4",
+        "doctrine": "^2.1.0",
+        "es-iterator-helpers": "^1.2.1",
+        "estraverse": "^5.3.0",
+        "hasown": "^2.0.2",
+        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+        "minimatch": "^3.1.2",
+        "object.entries": "^1.1.9",
+        "object.fromentries": "^2.0.8",
+        "object.values": "^1.2.1",
+        "prop-types": "^15.8.1",
+        "resolve": "^2.0.0-next.5",
+        "semver": "^6.3.1",
+        "string.prototype.matchall": "^4.0.12",
+        "string.prototype.repeat": "^1.0.0"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "peerDependencies": {
+        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
       }
     },
-    "node_modules/array.prototype.tosorted": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
-      "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+    "node_modules/eslint-plugin-react-hooks": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
+      "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.3",
-        "es-errors": "^1.3.0",
-        "es-shim-unscopables": "^1.0.2"
-      },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
       }
     },
-    "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
-      "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
+    "node_modules/eslint-plugin-react/node_modules/resolve": {
+      "version": "2.0.0-next.5",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+      "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "call-bind": "^1.0.8",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "is-array-buffer": "^3.0.4"
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "bin": {
+        "resolve": "bin/resolve"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/ast-types-flow": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
-      "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+    "node_modules/eslint-plugin-react/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
-      "license": "MIT"
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/eslint-scope": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
+      "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
     },
-    "node_modules/async-function": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
-      "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
+    "node_modules/eslint-visitor-keys": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">= 0.4"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/available-typed-arrays": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
-      "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+    "node_modules/espree": {
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
+      "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "possible-typed-array-names": "^1.0.0"
+        "acorn": "^8.15.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.2.1"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/axe-core": {
-      "version": "4.10.3",
-      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz",
-      "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==",
+    "node_modules/esquery": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
       "dev": true,
-      "license": "MPL-2.0",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "estraverse": "^5.1.0"
+      },
       "engines": {
-        "node": ">=4"
+        "node": ">=0.10"
       }
     },
-    "node_modules/axobject-query": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
-      "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+    "node_modules/esrecurse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "estraverse": "^5.2.0"
+      },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=4.0"
       }
     },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+    "node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
       "dev": true,
-      "license": "MIT"
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
     },
-    "node_modules/brace-expansion": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
-      "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
-      "dev": true,
+    "node_modules/estree-util-attach-comments": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz",
+      "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==",
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "@types/estree": "^1.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/braces": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
-      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
-      "dev": true,
+    "node_modules/estree-util-build-jsx": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz",
+      "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==",
       "license": "MIT",
       "dependencies": {
-        "fill-range": "^7.1.1"
+        "@types/estree-jsx": "^1.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-is-identifier-name": "^3.0.0",
+        "estree-walker": "^3.0.0"
       },
-      "engines": {
-        "node": ">=8"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/call-bind": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
-      "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
-      "dev": true,
+    "node_modules/estree-util-is-identifier-name": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
+      "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
+      "license": "MIT",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/estree-util-scope": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz",
+      "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "set-function-length": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/estree": "^1.0.0",
+        "devlop": "^1.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/call-bind-apply-helpers": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
-      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
-      "dev": true,
+    "node_modules/estree-util-to-js": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz",
+      "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==",
       "license": "MIT",
       "dependencies": {
-        "es-errors": "^1.3.0",
-        "function-bind": "^1.1.2"
+        "@types/estree-jsx": "^1.0.0",
+        "astring": "^1.8.0",
+        "source-map": "^0.7.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/call-bound": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
-      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
-      "dev": true,
+    "node_modules/estree-util-value-to-estree": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.4.0.tgz",
+      "integrity": "sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "get-intrinsic": "^1.3.0"
+        "@types/estree": "^1.0.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "funding": {
+        "url": "https://github.com/sponsors/remcohaszing"
+      }
+    },
+    "node_modules/estree-util-visit": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz",
+      "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree-jsx": "^1.0.0",
+        "@types/unist": "^3.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
+    "node_modules/estree-walker": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
       "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0"
+      }
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true,
+      "license": "BSD-2-Clause",
       "engines": {
-        "node": ">=6"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001731",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz",
-      "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "CC-BY-4.0"
+    "node_modules/extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "license": "MIT"
     },
-    "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+    "node_modules/fast-deep-equal": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
+        "node": ">=8.6.0"
       }
     },
-    "node_modules/chownr": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
-      "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
-      "engines": {
-        "node": ">=18"
-      }
-    },
-    "node_modules/class-variance-authority": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz",
-      "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==",
-      "license": "Apache-2.0",
+      "license": "ISC",
       "dependencies": {
-        "clsx": "^2.1.1"
+        "is-glob": "^4.0.1"
       },
-      "funding": {
-        "url": "https://polar.sh/cva"
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "node_modules/client-only": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
-      "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+    "node_modules/fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+      "dev": true,
       "license": "MIT"
     },
-    "node_modules/clsx": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
-      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
+    "node_modules/fastq": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
       }
     },
-    "node_modules/color": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
-      "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+    "node_modules/file-entry-cache": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+      "dev": true,
       "license": "MIT",
-      "optional": true,
       "dependencies": {
-        "color-convert": "^2.0.1",
-        "color-string": "^1.9.0"
+        "flat-cache": "^4.0.0"
       },
       "engines": {
-        "node": ">=12.5.0"
+        "node": ">=16.0.0"
       }
     },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "devOptional": true,
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "color-name": "~1.1.4"
+        "to-regex-range": "^5.0.1"
       },
       "engines": {
-        "node": ">=7.0.0"
+        "node": ">=8"
       }
     },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "devOptional": true,
-      "license": "MIT"
-    },
-    "node_modules/color-string": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
-      "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dev": true,
       "license": "MIT",
-      "optional": true,
       "dependencies": {
-        "color-name": "^1.0.0",
-        "simple-swizzle": "^0.2.2"
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.6",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
-      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+    "node_modules/flat-cache": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
+        "flatted": "^3.2.9",
+        "keyv": "^4.5.4"
       },
       "engines": {
-        "node": ">= 8"
+        "node": ">=16"
       }
     },
-    "node_modules/csstype": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-      "devOptional": true,
-      "license": "MIT"
-    },
-    "node_modules/damerau-levenshtein": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+    "node_modules/flatted": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+      "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
       "dev": true,
-      "license": "BSD-2-Clause"
+      "license": "ISC"
     },
-    "node_modules/data-view-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
-      "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
+    "node_modules/for-each": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
+      "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.2"
+        "is-callable": "^1.2.7"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3105,95 +5313,205 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/data-view-byte-length": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
-      "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
-      "dev": true,
+    "node_modules/framer-motion": {
+      "version": "12.23.12",
+      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz",
+      "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.2"
+        "motion-dom": "^12.23.12",
+        "motion-utils": "^12.23.6",
+        "tslib": "^2.4.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "peerDependencies": {
+        "@emotion/is-prop-valid": "*",
+        "react": "^18.0.0 || ^19.0.0",
+        "react-dom": "^18.0.0 || ^19.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/inspect-js"
+      "peerDependenciesMeta": {
+        "@emotion/is-prop-valid": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        },
+        "react-dom": {
+          "optional": true
+        }
       }
     },
-    "node_modules/data-view-byte-offset": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
-      "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
+    "node_modules/fumadocs-core": {
+      "version": "15.6.9",
+      "resolved": "https://registry.npmjs.org/fumadocs-core/-/fumadocs-core-15.6.9.tgz",
+      "integrity": "sha512-GVrJ2C2fch3KfNz3utqvF2CeZ7Uc947lfo7Deq1mKhWlH+HY3RSUM9MMecRl+uTzu9TNWPCUwj9q0XSUBh5VbQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@formatjs/intl-localematcher": "^0.6.1",
+        "@orama/orama": "^3.1.11",
+        "@shikijs/rehype": "^3.9.2",
+        "@shikijs/transformers": "^3.9.2",
+        "github-slugger": "^2.0.0",
+        "hast-util-to-estree": "^3.1.3",
+        "hast-util-to-jsx-runtime": "^2.3.6",
+        "image-size": "^2.0.2",
+        "negotiator": "^1.0.0",
+        "npm-to-yarn": "^3.0.1",
+        "react-remove-scroll": "^2.7.1",
+        "remark": "^15.0.0",
+        "remark-gfm": "^4.0.1",
+        "remark-rehype": "^11.1.2",
+        "scroll-into-view-if-needed": "^3.1.0",
+        "shiki": "^3.9.2",
+        "unist-util-visit": "^5.0.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "peerDependencies": {
+        "@mixedbread/sdk": "^0.19.0",
+        "@oramacloud/client": "1.x.x || 2.x.x",
+        "@types/react": "*",
+        "algoliasearch": "5.x.x",
+        "next": "14.x.x || 15.x.x",
+        "react": "18.x.x || 19.x.x",
+        "react-dom": "18.x.x || 19.x.x",
+        "react-router": "7.x.x"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "peerDependenciesMeta": {
+        "@mixedbread/sdk": {
+          "optional": true
+        },
+        "@oramacloud/client": {
+          "optional": true
+        },
+        "@types/react": {
+          "optional": true
+        },
+        "algoliasearch": {
+          "optional": true
+        },
+        "next": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        },
+        "react-dom": {
+          "optional": true
+        },
+        "react-router": {
+          "optional": true
+        }
       }
     },
-    "node_modules/debug": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
-      "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
-      "dev": true,
+    "node_modules/fumadocs-mdx": {
+      "version": "11.7.3",
+      "resolved": "https://registry.npmjs.org/fumadocs-mdx/-/fumadocs-mdx-11.7.3.tgz",
+      "integrity": "sha512-EMuISWaUeImpd2KI9LdWfc1rMWv9qfIoJSAXsI3TDXph8v4FyQ7Nz+NRpeoNgv59gzwKbkMRcnZnrKXI/ybnoA==",
       "license": "MIT",
       "dependencies": {
-        "ms": "^2.1.3"
+        "@mdx-js/mdx": "^3.1.0",
+        "@standard-schema/spec": "^1.0.0",
+        "chokidar": "^4.0.3",
+        "esbuild": "^0.25.8",
+        "estree-util-value-to-estree": "^3.4.0",
+        "js-yaml": "^4.1.0",
+        "lru-cache": "^11.1.0",
+        "picocolors": "^1.1.1",
+        "tinyexec": "^1.0.1",
+        "tinyglobby": "^0.2.14",
+        "unist-util-visit": "^5.0.0",
+        "zod": "^4.0.14"
       },
-      "engines": {
-        "node": ">=6.0"
+      "bin": {
+        "fumadocs-mdx": "bin.js"
+      },
+      "peerDependencies": {
+        "@fumadocs/mdx-remote": "^1.4.0",
+        "fumadocs-core": "^14.0.0 || ^15.0.0",
+        "next": "^15.3.0",
+        "react": "*",
+        "vite": "6.x.x || 7.x.x"
       },
       "peerDependenciesMeta": {
-        "supports-color": {
+        "@fumadocs/mdx-remote": {
+          "optional": true
+        },
+        "next": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        },
+        "vite": {
           "optional": true
         }
       }
     },
-    "node_modules/deep-is": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
-      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/define-data-property": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
-      "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
-      "dev": true,
+    "node_modules/fumadocs-ui": {
+      "version": "15.6.9",
+      "resolved": "https://registry.npmjs.org/fumadocs-ui/-/fumadocs-ui-15.6.9.tgz",
+      "integrity": "sha512-4zQcWqBJx7DuJn3IWAVrRY7o7Xx6DsScq3U8R8Qu2EJOuioJHotyLoVldSaB3wLioxtR7ito6866LZDp3oci6A==",
       "license": "MIT",
       "dependencies": {
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.0.1"
+        "@radix-ui/react-accordion": "^1.2.11",
+        "@radix-ui/react-collapsible": "^1.1.11",
+        "@radix-ui/react-dialog": "^1.1.14",
+        "@radix-ui/react-direction": "^1.1.1",
+        "@radix-ui/react-navigation-menu": "^1.2.13",
+        "@radix-ui/react-popover": "^1.1.14",
+        "@radix-ui/react-presence": "^1.1.4",
+        "@radix-ui/react-scroll-area": "^1.2.9",
+        "@radix-ui/react-slot": "^1.2.3",
+        "@radix-ui/react-tabs": "^1.1.12",
+        "class-variance-authority": "^0.7.1",
+        "fumadocs-core": "15.6.9",
+        "lodash.merge": "^4.6.2",
+        "next-themes": "^0.4.6",
+        "postcss-selector-parser": "^7.1.0",
+        "react-medium-image-zoom": "^5.3.0",
+        "scroll-into-view-if-needed": "^3.1.0",
+        "tailwind-merge": "^3.3.1"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "peerDependencies": {
+        "@types/react": "*",
+        "next": "14.x.x || 15.x.x",
+        "react": "18.x.x || 19.x.x",
+        "react-dom": "18.x.x || 19.x.x",
+        "tailwindcss": "^3.4.14 || ^4.0.0"
       },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "next": {
+          "optional": true
+        },
+        "tailwindcss": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true,
+      "license": "MIT",
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/define-properties": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
-      "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+    "node_modules/function.prototype.name": {
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
+      "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "define-data-property": "^1.0.1",
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
+        "define-properties": "^1.2.1",
+        "functions-have-names": "^1.2.3",
+        "hasown": "^2.0.2",
+        "is-callable": "^1.2.7"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3202,132 +5520,33 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/detect-libc": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
-      "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
-      "devOptional": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/detect-node-es": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
-      "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
-      "license": "MIT"
-    },
-    "node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/dunder-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
-      "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind-apply-helpers": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "gopd": "^1.2.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/enhanced-resolve": {
-      "version": "5.18.2",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
-      "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
+    "node_modules/functions-have-names": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "graceful-fs": "^4.2.4",
-        "tapable": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=10.13.0"
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/es-abstract": {
-      "version": "1.24.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz",
-      "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==",
+    "node_modules/get-intrinsic": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "array-buffer-byte-length": "^1.0.2",
-        "arraybuffer.prototype.slice": "^1.0.4",
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.4",
-        "data-view-buffer": "^1.0.2",
-        "data-view-byte-length": "^1.0.2",
-        "data-view-byte-offset": "^1.0.1",
+        "call-bind-apply-helpers": "^1.0.2",
         "es-define-property": "^1.0.1",
         "es-errors": "^1.3.0",
         "es-object-atoms": "^1.1.1",
-        "es-set-tostringtag": "^2.1.0",
-        "es-to-primitive": "^1.3.0",
-        "function.prototype.name": "^1.1.8",
-        "get-intrinsic": "^1.3.0",
+        "function-bind": "^1.1.2",
         "get-proto": "^1.0.1",
-        "get-symbol-description": "^1.1.0",
-        "globalthis": "^1.0.4",
         "gopd": "^1.2.0",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.2.0",
         "has-symbols": "^1.1.0",
         "hasown": "^2.0.2",
-        "internal-slot": "^1.1.0",
-        "is-array-buffer": "^3.0.5",
-        "is-callable": "^1.2.7",
-        "is-data-view": "^1.0.2",
-        "is-negative-zero": "^2.0.3",
-        "is-regex": "^1.2.1",
-        "is-set": "^2.0.3",
-        "is-shared-array-buffer": "^1.0.4",
-        "is-string": "^1.1.1",
-        "is-typed-array": "^1.1.15",
-        "is-weakref": "^1.1.1",
-        "math-intrinsics": "^1.1.0",
-        "object-inspect": "^1.13.4",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.7",
-        "own-keys": "^1.0.1",
-        "regexp.prototype.flags": "^1.5.4",
-        "safe-array-concat": "^1.1.3",
-        "safe-push-apply": "^1.0.0",
-        "safe-regex-test": "^1.1.0",
-        "set-proto": "^1.0.0",
-        "stop-iteration-iterator": "^1.1.0",
-        "string.prototype.trim": "^1.2.10",
-        "string.prototype.trimend": "^1.0.9",
-        "string.prototype.trimstart": "^1.0.8",
-        "typed-array-buffer": "^1.0.3",
-        "typed-array-byte-length": "^1.0.3",
-        "typed-array-byte-offset": "^1.0.4",
-        "typed-array-length": "^1.0.7",
-        "unbox-primitive": "^1.1.0",
-        "which-typed-array": "^1.1.19"
+        "math-intrinsics": "^1.1.0"
       },
       "engines": {
         "node": ">= 0.4"
@@ -3336,107 +5555,142 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/es-define-property": {
+    "node_modules/get-nonce": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
-      "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
-      "dev": true,
+      "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+      "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
       "license": "MIT",
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=6"
       }
     },
-    "node_modules/es-errors": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
-      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+    "node_modules/get-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "dunder-proto": "^1.0.1",
+        "es-object-atoms": "^1.0.0"
+      },
       "engines": {
         "node": ">= 0.4"
       }
     },
-    "node_modules/es-iterator-helpers": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz",
-      "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==",
+    "node_modules/get-symbol-description": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
+      "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
         "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.6",
         "es-errors": "^1.3.0",
-        "es-set-tostringtag": "^2.0.3",
-        "function-bind": "^1.1.2",
-        "get-intrinsic": "^1.2.6",
-        "globalthis": "^1.0.4",
-        "gopd": "^1.2.0",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "internal-slot": "^1.1.0",
-        "iterator.prototype": "^1.1.4",
-        "safe-array-concat": "^1.1.3"
+        "get-intrinsic": "^1.2.6"
       },
       "engines": {
         "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/es-object-atoms": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
-      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+    "node_modules/get-tsconfig": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
+      "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "es-errors": "^1.3.0"
+        "resolve-pkg-maps": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+      }
+    },
+    "node_modules/github-slugger": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
+      "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+      "license": "ISC"
+    },
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.3"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=10.13.0"
       }
     },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
-      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+    "node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/globalthis": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
       },
       "engines": {
         "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz",
-      "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==",
+    "node_modules/gopd": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.2"
-      },
       "engines": {
         "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/es-to-primitive": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
-      "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
+    "node_modules/graceful-fs": {
+      "version": "4.2.11",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/graphemer": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/has-bigints": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
+      "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7",
-        "is-date-object": "^1.0.5",
-        "is-symbol": "^1.0.4"
-      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -3444,579 +5698,531 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/escape-string-regexp": {
+    "node_modules/has-flag": {
       "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
-    "node_modules/eslint": {
-      "version": "9.32.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz",
-      "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.2.0",
-        "@eslint-community/regexpp": "^4.12.1",
-        "@eslint/config-array": "^0.21.0",
-        "@eslint/config-helpers": "^0.3.0",
-        "@eslint/core": "^0.15.0",
-        "@eslint/eslintrc": "^3.3.1",
-        "@eslint/js": "9.32.0",
-        "@eslint/plugin-kit": "^0.3.4",
-        "@humanfs/node": "^0.16.6",
-        "@humanwhocodes/module-importer": "^1.0.1",
-        "@humanwhocodes/retry": "^0.4.2",
-        "@types/estree": "^1.0.6",
-        "@types/json-schema": "^7.0.15",
-        "ajv": "^6.12.4",
-        "chalk": "^4.0.0",
-        "cross-spawn": "^7.0.6",
-        "debug": "^4.3.2",
-        "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^8.4.0",
-        "eslint-visitor-keys": "^4.2.1",
-        "espree": "^10.4.0",
-        "esquery": "^1.5.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^8.0.0",
-        "find-up": "^5.0.0",
-        "glob-parent": "^6.0.2",
-        "ignore": "^5.2.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "json-stable-stringify-without-jsonify": "^1.0.1",
-        "lodash.merge": "^4.6.2",
-        "minimatch": "^3.1.2",
-        "natural-compare": "^1.4.0",
-        "optionator": "^0.9.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "es-define-property": "^1.0.0"
       },
       "funding": {
-        "url": "https://eslint.org/donate"
-      },
-      "peerDependencies": {
-        "jiti": "*"
-      },
-      "peerDependenciesMeta": {
-        "jiti": {
-          "optional": true
-        }
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/eslint-config-next": {
-      "version": "15.4.5",
-      "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.4.5.tgz",
-      "integrity": "sha512-IMijiXaZ43qFB+Gcpnb374ipTKD8JIyVNR+6VsifFQ/LHyx+A9wgcgSIhCX5PYSjwOoSYD5LtNHKlM5uc23eww==",
+    "node_modules/has-proto": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
+      "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@next/eslint-plugin-next": "15.4.5",
-        "@rushstack/eslint-patch": "^1.10.3",
-        "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
-        "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
-        "eslint-import-resolver-node": "^0.3.6",
-        "eslint-import-resolver-typescript": "^3.5.2",
-        "eslint-plugin-import": "^2.31.0",
-        "eslint-plugin-jsx-a11y": "^6.10.0",
-        "eslint-plugin-react": "^7.37.0",
-        "eslint-plugin-react-hooks": "^5.0.0"
+        "dunder-proto": "^1.0.0"
       },
-      "peerDependencies": {
-        "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
-        "typescript": ">=3.3.1"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+    "node_modules/has-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.13.0",
-        "resolve": "^1.22.4"
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+    "node_modules/has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-typescript": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz",
-      "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "@nolyfill/is-core-module": "1.0.39",
-        "debug": "^4.4.0",
-        "get-tsconfig": "^4.10.0",
-        "is-bun-module": "^2.0.0",
-        "stable-hash": "^0.0.5",
-        "tinyglobby": "^0.2.13",
-        "unrs-resolver": "^1.6.2"
+        "has-symbols": "^1.0.3"
       },
       "engines": {
-        "node": "^14.18.0 || >=16.0.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint-import-resolver-typescript"
-      },
-      "peerDependencies": {
-        "eslint": "*",
-        "eslint-plugin-import": "*",
-        "eslint-plugin-import-x": "*"
-      },
-      "peerDependenciesMeta": {
-        "eslint-plugin-import": {
-          "optional": true
-        },
-        "eslint-plugin-import-x": {
-          "optional": true
-        }
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/eslint-module-utils": {
-      "version": "2.12.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz",
-      "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==",
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "debug": "^3.2.7"
+        "function-bind": "^1.1.2"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/hast-util-to-estree": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz",
+      "integrity": "sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "@types/estree-jsx": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-attach-comments": "^3.0.0",
+        "estree-util-is-identifier-name": "^3.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "mdast-util-mdx-expression": "^2.0.0",
+        "mdast-util-mdx-jsx": "^3.0.0",
+        "mdast-util-mdxjs-esm": "^2.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "style-to-js": "^1.0.0",
+        "unist-util-position": "^5.0.0",
+        "zwitch": "^2.0.0"
       },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
+    "node_modules/hast-util-to-html": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+      "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
       "license": "MIT",
       "dependencies": {
-        "ms": "^2.1.1"
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "ccount": "^2.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "html-void-elements": "^3.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "stringify-entities": "^4.0.0",
+        "zwitch": "^2.0.4"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.32.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz",
-      "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
-      "dev": true,
+    "node_modules/hast-util-to-jsx-runtime": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
+      "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
       "license": "MIT",
       "dependencies": {
-        "@rtsao/scc": "^1.1.0",
-        "array-includes": "^3.1.9",
-        "array.prototype.findlastindex": "^1.2.6",
-        "array.prototype.flat": "^1.3.3",
-        "array.prototype.flatmap": "^1.3.3",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.12.1",
-        "hasown": "^2.0.2",
-        "is-core-module": "^2.16.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.8",
-        "object.groupby": "^1.0.3",
-        "object.values": "^1.2.1",
-        "semver": "^6.3.1",
-        "string.prototype.trimend": "^1.0.9",
-        "tsconfig-paths": "^3.15.0"
+        "@types/estree": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-is-identifier-name": "^3.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "mdast-util-mdx-expression": "^2.0.0",
+        "mdast-util-mdx-jsx": "^3.0.0",
+        "mdast-util-mdxjs-esm": "^2.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "style-to-js": "^1.0.0",
+        "unist-util-position": "^5.0.0",
+        "vfile-message": "^4.0.0"
       },
-      "engines": {
-        "node": ">=4"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-to-string": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz",
+      "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
       },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
+    "node_modules/hast-util-whitespace": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+      "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
       "license": "MIT",
       "dependencies": {
-        "ms": "^2.1.1"
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+    "node_modules/html-void-elements": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
+      "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/eslint-plugin-jsx-a11y": {
-      "version": "6.10.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
-      "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+    "node_modules/ignore": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "aria-query": "^5.3.2",
-        "array-includes": "^3.1.8",
-        "array.prototype.flatmap": "^1.3.2",
-        "ast-types-flow": "^0.0.8",
-        "axe-core": "^4.10.0",
-        "axobject-query": "^4.1.0",
-        "damerau-levenshtein": "^1.0.8",
-        "emoji-regex": "^9.2.2",
-        "hasown": "^2.0.2",
-        "jsx-ast-utils": "^3.3.5",
-        "language-tags": "^1.0.9",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.8",
-        "safe-regex-test": "^1.0.3",
-        "string.prototype.includes": "^2.0.1"
-      },
       "engines": {
-        "node": ">=4.0"
+        "node": ">= 4"
+      }
+    },
+    "node_modules/image-size": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz",
+      "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==",
+      "license": "MIT",
+      "bin": {
+        "image-size": "bin/image-size.js"
       },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+      "engines": {
+        "node": ">=16.x"
       }
     },
-    "node_modules/eslint-plugin-react": {
-      "version": "7.37.5",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz",
-      "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==",
+    "node_modules/import-fresh": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "array-includes": "^3.1.8",
-        "array.prototype.findlast": "^1.2.5",
-        "array.prototype.flatmap": "^1.3.3",
-        "array.prototype.tosorted": "^1.1.4",
-        "doctrine": "^2.1.0",
-        "es-iterator-helpers": "^1.2.1",
-        "estraverse": "^5.3.0",
-        "hasown": "^2.0.2",
-        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-        "minimatch": "^3.1.2",
-        "object.entries": "^1.1.9",
-        "object.fromentries": "^2.0.8",
-        "object.values": "^1.2.1",
-        "prop-types": "^15.8.1",
-        "resolve": "^2.0.0-next.5",
-        "semver": "^6.3.1",
-        "string.prototype.matchall": "^4.0.12",
-        "string.prototype.repeat": "^1.0.0"
+        "parent-module": "^1.0.0",
+        "resolve-from": "^4.0.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
       },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint-plugin-react-hooks": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz",
-      "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==",
+    "node_modules/imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+        "node": ">=0.8.19"
       }
     },
-    "node_modules/eslint-plugin-react/node_modules/resolve": {
-      "version": "2.0.0-next.5",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
-      "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+    "node_modules/inline-style-parser": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz",
+      "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==",
+      "license": "MIT"
+    },
+    "node_modules/internal-slot": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
+      "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
+        "es-errors": "^1.3.0",
+        "hasown": "^2.0.2",
+        "side-channel": "^1.1.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "node_modules/eslint-plugin-react/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
+    "node_modules/is-alphabetical": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+      "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/eslint-scope": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
-      "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
+    "node_modules/is-alphanumerical": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+      "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+      "license": "MIT",
       "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "is-alphabetical": "^2.0.0",
+        "is-decimal": "^2.0.0"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/eslint-visitor-keys": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
-      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+    "node_modules/is-array-buffer": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
+      "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
+      "dependencies": {
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.3",
+        "get-intrinsic": "^1.2.6"
+      },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/espree": {
-      "version": "10.4.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
-      "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
+    "node_modules/is-arrayish": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+      "license": "MIT",
+      "optional": true
+    },
+    "node_modules/is-async-function": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
+      "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "dependencies": {
-        "acorn": "^8.15.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.2.1"
+        "async-function": "^1.0.0",
+        "call-bound": "^1.0.3",
+        "get-proto": "^1.0.1",
+        "has-tostringtag": "^1.0.2",
+        "safe-regex-test": "^1.1.0"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/esquery": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
-      "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+    "node_modules/is-bigint": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
+      "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
       "dependencies": {
-        "estraverse": "^5.1.0"
+        "has-bigints": "^1.0.2"
       },
       "engines": {
-        "node": ">=0.10"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+    "node_modules/is-boolean-object": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
+      "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "dependencies": {
-        "estraverse": "^5.2.0"
+        "call-bound": "^1.0.3",
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
-        "node": ">=4.0"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+    "node_modules/is-bun-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
+      "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
       "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=4.0"
+      "license": "MIT",
+      "dependencies": {
+        "semver": "^7.7.1"
       }
     },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+    "node_modules/is-callable": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/fast-deep-equal": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-glob": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
-      "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+    "node_modules/is-core-module": {
+      "version": "2.16.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nodelib/fs.stat": "^2.0.2",
-        "@nodelib/fs.walk": "^1.2.3",
-        "glob-parent": "^5.1.2",
-        "merge2": "^1.3.0",
-        "micromatch": "^4.0.4"
+        "hasown": "^2.0.2"
       },
       "engines": {
-        "node": ">=8.6.0"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+    "node_modules/is-data-view": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
+      "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "is-glob": "^4.0.1"
+        "call-bound": "^1.0.2",
+        "get-intrinsic": "^1.2.6",
+        "is-typed-array": "^1.1.13"
       },
       "engines": {
-        "node": ">= 6"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fastq": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
-      "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+    "node_modules/is-date-object": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
+      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "reusify": "^1.0.4"
+        "call-bound": "^1.0.2",
+        "has-tostringtag": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/file-entry-cache": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
-      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+    "node_modules/is-decimal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+      "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "flat-cache": "^4.0.0"
-      },
       "engines": {
-        "node": ">=16.0.0"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/fill-range": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
-      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+    "node_modules/is-finalizationregistry": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
+      "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "to-regex-range": "^5.0.1"
+        "call-bound": "^1.0.3"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+    "node_modules/is-generator-function": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
+      "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "locate-path": "^6.0.0",
-        "path-exists": "^4.0.0"
+        "call-bound": "^1.0.3",
+        "get-proto": "^1.0.0",
+        "has-tostringtag": "^1.0.2",
+        "safe-regex-test": "^1.1.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/flat-cache": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
-      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "flatted": "^3.2.9",
-        "keyv": "^4.5.4"
+        "is-extglob": "^2.1.1"
       },
       "engines": {
-        "node": ">=16"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/flatted": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
-      "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
-      "dev": true,
-      "license": "ISC"
+    "node_modules/is-hexadecimal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
+      "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     },
-    "node_modules/for-each": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
-      "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
+    "node_modules/is-map": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+      "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.2.7"
-      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -4024,56 +6230,38 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/framer-motion": {
-      "version": "12.23.12",
-      "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.12.tgz",
-      "integrity": "sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==",
+    "node_modules/is-negative-zero": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "motion-dom": "^12.23.12",
-        "motion-utils": "^12.23.6",
-        "tslib": "^2.4.0"
-      },
-      "peerDependencies": {
-        "@emotion/is-prop-valid": "*",
-        "react": "^18.0.0 || ^19.0.0",
-        "react-dom": "^18.0.0 || ^19.0.0"
+      "engines": {
+        "node": ">= 0.4"
       },
-      "peerDependenciesMeta": {
-        "@emotion/is-prop-valid": {
-          "optional": true
-        },
-        "react": {
-          "optional": true
-        },
-        "react-dom": {
-          "optional": true
-        }
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/function-bind": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
       "dev": true,
       "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "engines": {
+        "node": ">=0.12.0"
       }
     },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.8",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
-      "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
+    "node_modules/is-number-object": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
+      "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind": "^1.0.8",
         "call-bound": "^1.0.3",
-        "define-properties": "^1.2.1",
-        "functions-have-names": "^1.2.3",
-        "hasown": "^2.0.2",
-        "is-callable": "^1.2.7"
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4082,33 +6270,29 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true,
+    "node_modules/is-plain-obj": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
       "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/get-intrinsic": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
-      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+    "node_modules/is-regex": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
+      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bind-apply-helpers": "^1.0.2",
-        "es-define-property": "^1.0.1",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.1.1",
-        "function-bind": "^1.1.2",
-        "get-proto": "^1.0.1",
+        "call-bound": "^1.0.2",
         "gopd": "^1.2.0",
-        "has-symbols": "^1.1.0",
-        "hasown": "^2.0.2",
-        "math-intrinsics": "^1.1.0"
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4117,39 +6301,44 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/get-nonce": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
-      "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+    "node_modules/is-set": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+      "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+      "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=6"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/get-proto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
-      "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+    "node_modules/is-shared-array-buffer": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
+      "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "dunder-proto": "^1.0.1",
-        "es-object-atoms": "^1.0.0"
+        "call-bound": "^1.0.3"
       },
       "engines": {
         "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/get-symbol-description": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
-      "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
+    "node_modules/is-string": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
+      "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.6"
+        "has-tostringtag": "^1.0.2"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4158,54 +6347,61 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/get-tsconfig": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
-      "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
+    "node_modules/is-symbol": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
+      "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "resolve-pkg-maps": "^1.0.0"
+        "call-bound": "^1.0.2",
+        "has-symbols": "^1.1.0",
+        "safe-regex-test": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+    "node_modules/is-typed-array": {
+      "version": "1.1.15",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
+      "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "is-glob": "^4.0.3"
+        "which-typed-array": "^1.1.16"
       },
       "engines": {
-        "node": ">=10.13.0"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/globals": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+    "node_modules/is-weakmap": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+      "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=18"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/globalthis": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+    "node_modules/is-weakref": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
+      "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "define-properties": "^1.2.1",
-        "gopd": "^1.0.1"
+        "call-bound": "^1.0.3"
       },
       "engines": {
         "node": ">= 0.4"
@@ -4214,12 +6410,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/gopd": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
-      "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+    "node_modules/is-weakset": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
+      "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.3",
+        "get-intrinsic": "^1.2.6"
+      },
       "engines": {
         "node": ">= 0.4"
       },
@@ -4227,1044 +6427,1531 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/graceful-fs": {
-      "version": "4.2.11",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
-      "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+    "node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
       "dev": true,
-      "license": "ISC"
+      "license": "MIT"
     },
-    "node_modules/graphemer": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
-      "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
       "dev": true,
-      "license": "MIT"
+      "license": "ISC"
     },
-    "node_modules/has-bigints": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
-      "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
+    "node_modules/iterator.prototype": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
+      "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "define-data-property": "^1.1.4",
+        "es-object-atoms": "^1.0.0",
+        "get-intrinsic": "^1.2.6",
+        "get-proto": "^1.0.0",
+        "has-symbols": "^1.1.0",
+        "set-function-name": "^2.0.2"
+      },
       "engines": {
         "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/has-flag": {
+    "node_modules/jiti": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz",
+      "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "jiti": "lib/jiti-cli.mjs"
+      }
+    },
+    "node_modules/js-tokens": {
       "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
       "license": "MIT",
-      "engines": {
-        "node": ">=8"
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "node_modules/has-property-descriptors": {
+    "node_modules/json-buffer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/json5": {
       "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
-      "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "es-define-property": "^1.0.0"
+        "minimist": "^1.2.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "bin": {
+        "json5": "lib/cli.js"
       }
     },
-    "node_modules/has-proto": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
-      "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
+    "node_modules/jsx-ast-utils": {
+      "version": "3.3.5",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+      "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-includes": "^3.1.6",
+        "array.prototype.flat": "^1.3.1",
+        "object.assign": "^4.1.4",
+        "object.values": "^1.1.6"
+      },
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
+    "node_modules/keyv": {
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "json-buffer": "3.0.1"
+      }
+    },
+    "node_modules/language-subtag-registry": {
+      "version": "0.3.23",
+      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+      "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
+    "node_modules/language-tags": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+      "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "dunder-proto": "^1.0.0"
+        "language-subtag-registry": "^0.3.20"
       },
       "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "node": ">=0.10"
       }
     },
-    "node_modules/has-symbols": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
-      "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+    "node_modules/levn": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "dependencies": {
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
-      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+    "node_modules/lightningcss": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
+      "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
       "dev": true,
-      "license": "MIT",
+      "license": "MPL-2.0",
       "dependencies": {
-        "has-symbols": "^1.0.3"
+        "detect-libc": "^2.0.3"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hasown": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
-      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "function-bind": "^1.1.2"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "optionalDependencies": {
+        "lightningcss-darwin-arm64": "1.30.1",
+        "lightningcss-darwin-x64": "1.30.1",
+        "lightningcss-freebsd-x64": "1.30.1",
+        "lightningcss-linux-arm-gnueabihf": "1.30.1",
+        "lightningcss-linux-arm64-gnu": "1.30.1",
+        "lightningcss-linux-arm64-musl": "1.30.1",
+        "lightningcss-linux-x64-gnu": "1.30.1",
+        "lightningcss-linux-x64-musl": "1.30.1",
+        "lightningcss-win32-arm64-msvc": "1.30.1",
+        "lightningcss-win32-x64-msvc": "1.30.1"
       }
     },
-    "node_modules/ignore": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
-      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+    "node_modules/lightningcss-darwin-arm64": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
+      "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "MIT",
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">= 4"
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/import-fresh": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
-      "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+    "node_modules/lightningcss-darwin-x64": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
+      "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">=6"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+    "node_modules/lightningcss-freebsd-x64": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
+      "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": ">=0.8.19"
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/internal-slot": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
-      "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
+    "node_modules/lightningcss-linux-arm-gnueabihf": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
+      "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0",
-        "hasown": "^2.0.2",
-        "side-channel": "^1.1.0"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-array-buffer": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
-      "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
+    "node_modules/lightningcss-linux-arm64-gnu": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
+      "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-arrayish": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
-      "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
-      "license": "MIT",
-      "optional": true
-    },
-    "node_modules/is-async-function": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
-      "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
+    "node_modules/lightningcss-linux-arm64-musl": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
+      "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "async-function": "^1.0.0",
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.1",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-bigint": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
-      "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
+    "node_modules/lightningcss-linux-x64-gnu": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
+      "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "has-bigints": "^1.0.2"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-boolean-object": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
-      "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
+    "node_modules/lightningcss-linux-x64-musl": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
+      "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-bun-module": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz",
-      "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==",
+    "node_modules/lightningcss-win32-arm64-msvc": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
+      "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "semver": "^7.7.1"
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">= 12.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-callable": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
-      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+    "node_modules/lightningcss-win32-x64-msvc": {
+      "version": "1.30.1",
+      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
+      "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "MIT",
+      "license": "MPL-2.0",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 12.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/parcel"
       }
     },
-    "node_modules/is-core-module": {
-      "version": "2.16.1",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
-      "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "hasown": "^2.0.2"
+        "p-locate": "^5.0.0"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=10"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-data-view": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
-      "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
-      "dev": true,
+    "node_modules/lodash.merge": {
+      "version": "4.6.2",
+      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "license": "MIT"
+    },
+    "node_modules/longest-streak": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+      "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
       "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.2",
-        "get-intrinsic": "^1.2.6",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/is-date-object": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
-      "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "js-tokens": "^3.0.0 || ^4.0.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "bin": {
+        "loose-envify": "cli.js"
       }
     },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/lru-cache": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz",
+      "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==",
+      "license": "ISC",
       "engines": {
-        "node": ">=0.10.0"
+        "node": "20 || >=22"
       }
     },
-    "node_modules/is-finalizationregistry": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
-      "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
+    "node_modules/lucide-react": {
+      "version": "0.535.0",
+      "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.535.0.tgz",
+      "integrity": "sha512-2E3+YWGLpjZ8ejIYrdqxVjWMSMiRQHmU6xZYE9xA2SC5j2m0NeB4/acjhRdhxbfniBKoNEukDDQnmShTxwOQ4g==",
+      "license": "ISC",
+      "peerDependencies": {
+        "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.17",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "@jridgewell/sourcemap-codec": "^1.5.0"
       }
     },
-    "node_modules/is-generator-function": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz",
-      "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==",
-      "dev": true,
+    "node_modules/markdown-extensions": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz",
+      "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==",
       "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-proto": "^1.0.0",
-        "has-tostringtag": "^1.0.2",
-        "safe-regex-test": "^1.1.0"
-      },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=16"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
+    "node_modules/markdown-table": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+      "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
       "license": "MIT",
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
       }
     },
-    "node_modules/is-map": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
-      "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+    "node_modules/math-intrinsics": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
       "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">= 0.4"
+      }
+    },
+    "node_modules/mdast-util-find-and-replace": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+      "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "escape-string-regexp": "^5.0.0",
+        "unist-util-is": "^6.0.0",
+        "unist-util-visit-parents": "^6.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
-      "dev": true,
+    "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
       "license": "MIT",
       "engines": {
-        "node": ">= 0.4"
+        "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
+    "node_modules/mdast-util-from-markdown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
+      "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
       "license": "MIT",
-      "engines": {
-        "node": ">=0.12.0"
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "@types/unist": "^3.0.0",
+        "decode-named-character-reference": "^1.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-to-string": "^4.0.0",
+        "micromark": "^4.0.0",
+        "micromark-util-decode-numeric-character-reference": "^2.0.0",
+        "micromark-util-decode-string": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "unist-util-stringify-position": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-number-object": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
-      "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
-      "dev": true,
+    "node_modules/mdast-util-gfm": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+      "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-gfm-autolink-literal": "^2.0.0",
+        "mdast-util-gfm-footnote": "^2.0.0",
+        "mdast-util-gfm-strikethrough": "^2.0.0",
+        "mdast-util-gfm-table": "^2.0.0",
+        "mdast-util-gfm-task-list-item": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-regex": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
-      "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
-      "dev": true,
+    "node_modules/mdast-util-gfm-autolink-literal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+      "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "gopd": "^1.2.0",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/mdast": "^4.0.0",
+        "ccount": "^2.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-find-and-replace": "^3.0.0",
+        "micromark-util-character": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-set": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
-      "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
-      "dev": true,
+    "node_modules/mdast-util-gfm-footnote": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+      "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.1.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
-      "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
-      "dev": true,
+    "node_modules/mdast-util-gfm-strikethrough": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+      "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/mdast": "^4.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-string": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
-      "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
-      "dev": true,
+    "node_modules/mdast-util-gfm-table": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+      "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-tostringtag": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.0.0",
+        "markdown-table": "^3.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-symbol": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
-      "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
-      "dev": true,
+    "node_modules/mdast-util-gfm-task-list-item": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+      "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "safe-regex-test": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-typed-array": {
-      "version": "1.1.15",
-      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
-      "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
-      "dev": true,
+    "node_modules/mdast-util-mdx": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz",
+      "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==",
       "license": "MIT",
       "dependencies": {
-        "which-typed-array": "^1.1.16"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-mdx-expression": "^2.0.0",
+        "mdast-util-mdx-jsx": "^3.0.0",
+        "mdast-util-mdxjs-esm": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-weakmap": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
-      "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
-      "dev": true,
+    "node_modules/mdast-util-mdx-expression": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
+      "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "dependencies": {
+        "@types/estree-jsx": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-weakref": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
-      "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
-      "dev": true,
+    "node_modules/mdast-util-mdx-jsx": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
+      "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/estree-jsx": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@types/unist": "^3.0.0",
+        "ccount": "^2.0.0",
+        "devlop": "^1.1.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0",
+        "parse-entities": "^4.0.0",
+        "stringify-entities": "^4.0.0",
+        "unist-util-stringify-position": "^4.0.0",
+        "vfile-message": "^4.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/is-weakset": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
-      "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
-      "dev": true,
+    "node_modules/mdast-util-mdxjs-esm": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
+      "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
       "license": "MIT",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "get-intrinsic": "^1.2.6"
-      },
-      "engines": {
-        "node": ">= 0.4"
+        "@types/estree-jsx": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/isarray": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true,
-      "license": "ISC"
+    "node_modules/mdast-util-phrasing": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+      "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
     },
-    "node_modules/iterator.prototype": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz",
-      "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==",
-      "dev": true,
+    "node_modules/mdast-util-to-hast": {
+      "version": "13.2.0",
+      "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz",
+      "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==",
       "license": "MIT",
       "dependencies": {
-        "define-data-property": "^1.1.4",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.6",
-        "get-proto": "^1.0.0",
-        "has-symbols": "^1.1.0",
-        "set-function-name": "^2.0.2"
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "trim-lines": "^3.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/jiti": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz",
-      "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==",
-      "dev": true,
+    "node_modules/mdast-util-to-markdown": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+      "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
       "license": "MIT",
-      "bin": {
-        "jiti": "lib/jiti-cli.mjs"
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "@types/unist": "^3.0.0",
+        "longest-streak": "^3.0.0",
+        "mdast-util-phrasing": "^4.0.0",
+        "mdast-util-to-string": "^4.0.0",
+        "micromark-util-classify-character": "^2.0.0",
+        "micromark-util-decode-string": "^2.0.0",
+        "unist-util-visit": "^5.0.0",
+        "zwitch": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/js-tokens": {
+    "node_modules/mdast-util-to-string": {
       "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
+      "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+      "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
       "license": "MIT",
       "dependencies": {
-        "argparse": "^2.0.1"
+        "@types/mdast": "^4.0.0"
       },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/json-buffer": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
-      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
     },
-    "node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/micromark": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+      "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "@types/debug": "^4.0.0",
+        "debug": "^4.0.0",
+        "decode-named-character-reference": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-core-commonmark": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-combine-extensions": "^2.0.0",
+        "micromark-util-decode-numeric-character-reference": "^2.0.0",
+        "micromark-util-encode": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-resolve-all": "^2.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "micromark-util-subtokenize": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
     },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/micromark-core-commonmark": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+      "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "decode-named-character-reference": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-factory-destination": "^2.0.0",
+        "micromark-factory-label": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-factory-title": "^2.0.0",
+        "micromark-factory-whitespace": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-classify-character": "^2.0.0",
+        "micromark-util-html-tag-name": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-resolve-all": "^2.0.0",
+        "micromark-util-subtokenize": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
     },
-    "node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
+    "node_modules/micromark-extension-gfm": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+      "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
       "license": "MIT",
       "dependencies": {
-        "minimist": "^1.2.0"
+        "micromark-extension-gfm-autolink-literal": "^2.0.0",
+        "micromark-extension-gfm-footnote": "^2.0.0",
+        "micromark-extension-gfm-strikethrough": "^2.0.0",
+        "micromark-extension-gfm-table": "^2.0.0",
+        "micromark-extension-gfm-tagfilter": "^2.0.0",
+        "micromark-extension-gfm-task-list-item": "^2.0.0",
+        "micromark-util-combine-extensions": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       },
-      "bin": {
-        "json5": "lib/cli.js"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/jsx-ast-utils": {
-      "version": "3.3.5",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
-      "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
-      "dev": true,
+    "node_modules/micromark-extension-gfm-autolink-literal": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+      "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
       "license": "MIT",
       "dependencies": {
-        "array-includes": "^3.1.6",
-        "array.prototype.flat": "^1.3.1",
-        "object.assign": "^4.1.4",
-        "object.values": "^1.1.6"
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       },
-      "engines": {
-        "node": ">=4.0"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/keyv": {
-      "version": "4.5.4",
-      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
-      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
-      "dev": true,
+    "node_modules/micromark-extension-gfm-footnote": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+      "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
       "license": "MIT",
       "dependencies": {
-        "json-buffer": "3.0.1"
+        "devlop": "^1.0.0",
+        "micromark-core-commonmark": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/language-subtag-registry": {
-      "version": "0.3.23",
-      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
-      "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
-      "dev": true,
-      "license": "CC0-1.0"
-    },
-    "node_modules/language-tags": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
-      "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
-      "dev": true,
+    "node_modules/micromark-extension-gfm-strikethrough": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+      "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
       "license": "MIT",
       "dependencies": {
-        "language-subtag-registry": "^0.3.20"
+        "devlop": "^1.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-classify-character": "^2.0.0",
+        "micromark-util-resolve-all": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       },
-      "engines": {
-        "node": ">=0.10"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
+    "node_modules/micromark-extension-gfm-table": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+      "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
       "license": "MIT",
       "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
+        "devlop": "^1.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       },
-      "engines": {
-        "node": ">= 0.8.0"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
-      "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
-      "dev": true,
-      "license": "MPL-2.0",
+    "node_modules/micromark-extension-gfm-tagfilter": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+      "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+      "license": "MIT",
       "dependencies": {
-        "detect-libc": "^2.0.3"
-      },
-      "engines": {
-        "node": ">= 12.0.0"
+        "micromark-util-types": "^2.0.0"
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
-      },
-      "optionalDependencies": {
-        "lightningcss-darwin-arm64": "1.30.1",
-        "lightningcss-darwin-x64": "1.30.1",
-        "lightningcss-freebsd-x64": "1.30.1",
-        "lightningcss-linux-arm-gnueabihf": "1.30.1",
-        "lightningcss-linux-arm64-gnu": "1.30.1",
-        "lightningcss-linux-arm64-musl": "1.30.1",
-        "lightningcss-linux-x64-gnu": "1.30.1",
-        "lightningcss-linux-x64-musl": "1.30.1",
-        "lightningcss-win32-arm64-msvc": "1.30.1",
-        "lightningcss-win32-x64-msvc": "1.30.1"
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss-darwin-arm64": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
-      "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
+    "node_modules/micromark-extension-gfm-task-list-item": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+      "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss-darwin-x64": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
-      "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "darwin"
+    "node_modules/micromark-extension-mdx-expression": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz",
+      "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "engines": {
-        "node": ">= 12.0.0"
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-factory-mdx-expression": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-events-to-acorn": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-extension-mdx-jsx": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz",
+      "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-is-identifier-name": "^3.0.0",
+        "micromark-factory-mdx-expression": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-events-to-acorn": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "vfile-message": "^4.0.0"
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss-freebsd-x64": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
-      "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
+    "node_modules/micromark-extension-mdx-md": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz",
+      "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-types": "^2.0.0"
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss-linux-arm-gnueabihf": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
-      "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
+    "node_modules/micromark-extension-mdxjs": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz",
+      "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn": "^8.0.0",
+        "acorn-jsx": "^5.0.0",
+        "micromark-extension-mdx-expression": "^3.0.0",
+        "micromark-extension-mdx-jsx": "^3.0.0",
+        "micromark-extension-mdx-md": "^2.0.0",
+        "micromark-extension-mdxjs-esm": "^3.0.0",
+        "micromark-util-combine-extensions": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss-linux-arm64-gnu": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
-      "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 12.0.0"
+    "node_modules/micromark-extension-mdxjs-esm": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz",
+      "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-core-commonmark": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-events-to-acorn": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "unist-util-position-from-estree": "^2.0.0",
+        "vfile-message": "^4.0.0"
       },
       "funding": {
         "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+        "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/lightningcss-linux-arm64-musl": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
-      "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
-      "cpu": [
-        "arm64"
+    "node_modules/micromark-factory-destination": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+      "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-factory-label": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+      "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       }
     },
-    "node_modules/lightningcss-linux-x64-gnu": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
-      "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
-      "cpu": [
-        "x64"
+    "node_modules/micromark-factory-mdx-expression": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz",
+      "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-events-to-acorn": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "unist-util-position-from-estree": "^2.0.0",
+        "vfile-message": "^4.0.0"
+      }
+    },
+    "node_modules/micromark-factory-space": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+      "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       }
     },
-    "node_modules/lightningcss-linux-x64-musl": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
-      "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
-      "cpu": [
-        "x64"
+    "node_modules/micromark-factory-title": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+      "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "linux"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-factory-whitespace": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+      "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-character": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+      "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       }
     },
-    "node_modules/lightningcss-win32-arm64-msvc": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
-      "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
-      "cpu": [
-        "arm64"
+    "node_modules/micromark-util-chunked": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+      "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "win32"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-classify-character": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+      "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       }
     },
-    "node_modules/lightningcss-win32-x64-msvc": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
-      "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
-      "cpu": [
-        "x64"
+    "node_modules/micromark-util-combine-extensions": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+      "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "dev": true,
-      "license": "MPL-2.0",
-      "optional": true,
-      "os": [
-        "win32"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-decode-numeric-character-reference": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+      "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
       ],
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/parcel"
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0"
       }
     },
-    "node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
-      "dev": true,
+    "node_modules/micromark-util-decode-string": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+      "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
       "license": "MIT",
       "dependencies": {
-        "p-locate": "^5.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "decode-named-character-reference": "^1.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-decode-numeric-character-reference": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0"
       }
     },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true,
+    "node_modules/micromark-util-encode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+      "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
       "license": "MIT"
     },
-    "node_modules/loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "dev": true,
+    "node_modules/micromark-util-events-to-acorn": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz",
+      "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
       "license": "MIT",
       "dependencies": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
+        "@types/estree": "^1.0.0",
+        "@types/unist": "^3.0.0",
+        "devlop": "^1.0.0",
+        "estree-util-visit": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "vfile-message": "^4.0.0"
       }
     },
-    "node_modules/lucide-react": {
-      "version": "0.535.0",
-      "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.535.0.tgz",
-      "integrity": "sha512-2E3+YWGLpjZ8ejIYrdqxVjWMSMiRQHmU6xZYE9xA2SC5j2m0NeB4/acjhRdhxbfniBKoNEukDDQnmShTxwOQ4g==",
-      "license": "ISC",
-      "peerDependencies": {
-        "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+    "node_modules/micromark-util-html-tag-name": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+      "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-normalize-identifier": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+      "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0"
       }
     },
-    "node_modules/magic-string": {
-      "version": "0.30.17",
-      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
-      "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-      "dev": true,
+    "node_modules/micromark-util-resolve-all": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+      "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
       "license": "MIT",
       "dependencies": {
-        "@jridgewell/sourcemap-codec": "^1.5.0"
+        "micromark-util-types": "^2.0.0"
       }
     },
-    "node_modules/math-intrinsics": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
-      "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
-      "dev": true,
+    "node_modules/micromark-util-sanitize-uri": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+      "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-encode": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0"
       }
     },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
+    "node_modules/micromark-util-subtokenize": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+      "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
       "license": "MIT",
-      "engines": {
-        "node": ">= 8"
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
       }
     },
+    "node_modules/micromark-util-symbol": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+      "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-types": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+      "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
     "node_modules/micromatch": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -5360,7 +8047,6 @@
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
       "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
       "license": "MIT"
     },
     "node_modules/nanoid": {
@@ -5404,6 +8090,15 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/negotiator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+      "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
     "node_modules/next": {
       "version": "15.4.5",
       "resolved": "https://registry.npmjs.org/next/-/next-15.4.5.tgz",
@@ -5456,6 +8151,16 @@
         }
       }
     },
+    "node_modules/next-themes": {
+      "version": "0.4.6",
+      "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
+      "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
+        "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
+      }
+    },
     "node_modules/next/node_modules/postcss": {
       "version": "8.4.31",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
@@ -5484,6 +8189,18 @@
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/npm-to-yarn": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/npm-to-yarn/-/npm-to-yarn-3.0.1.tgz",
+      "integrity": "sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/nebrelbug/npm-to-yarn?sponsor=1"
+      }
+    },
     "node_modules/object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -5607,6 +8324,23 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/oniguruma-parser": {
+      "version": "0.12.1",
+      "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
+      "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
+      "license": "MIT"
+    },
+    "node_modules/oniguruma-to-es": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
+      "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
+      "license": "MIT",
+      "dependencies": {
+        "oniguruma-parser": "^0.12.1",
+        "regex": "^6.0.1",
+        "regex-recursion": "^6.0.2"
+      }
+    },
     "node_modules/optionator": {
       "version": "0.9.4",
       "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -5675,6 +8409,23 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/pagefind": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/pagefind/-/pagefind-1.3.0.tgz",
+      "integrity": "sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "pagefind": "lib/runner/bin.cjs"
+      },
+      "optionalDependencies": {
+        "@pagefind/darwin-arm64": "1.3.0",
+        "@pagefind/darwin-x64": "1.3.0",
+        "@pagefind/linux-arm64": "1.3.0",
+        "@pagefind/linux-x64": "1.3.0",
+        "@pagefind/windows-x64": "1.3.0"
+      }
+    },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -5688,6 +8439,31 @@
         "node": ">=6"
       }
     },
+    "node_modules/parse-entities": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
+      "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^2.0.0",
+        "character-entities-legacy": "^3.0.0",
+        "character-reference-invalid": "^2.0.0",
+        "decode-named-character-reference": "^1.0.0",
+        "is-alphanumerical": "^2.0.0",
+        "is-decimal": "^2.0.0",
+        "is-hexadecimal": "^2.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/parse-entities/node_modules/@types/unist": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+      "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+      "license": "MIT"
+    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -5773,6 +8549,19 @@
         "node": "^10 || ^12 || >=14"
       }
     },
+    "node_modules/postcss-selector-parser": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
+      "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -5795,6 +8584,16 @@
         "react-is": "^16.13.1"
       }
     },
+    "node_modules/property-information": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
+      "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/punycode": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -5827,9 +8626,9 @@
       "license": "MIT"
     },
     "node_modules/react": {
-      "version": "19.1.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
-      "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
+      "version": "19.1.1",
+      "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
+      "integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
@@ -5854,6 +8653,22 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/react-medium-image-zoom": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/react-medium-image-zoom/-/react-medium-image-zoom-5.3.0.tgz",
+      "integrity": "sha512-RCIzVlsKqy3BYgGgYbolUfuvx0aSKC7YhX/IJGEp+WJxsqdIVYJHkBdj++FAj6VD7RiWj6VVmdCfa/9vJE9hZg==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/rpearce"
+        }
+      ],
+      "license": "BSD-3-Clause",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
+        "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/react-remove-scroll": {
       "version": "2.7.1",
       "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.1.tgz",
@@ -5923,6 +8738,86 @@
         }
       }
     },
+    "node_modules/readdirp": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
+      "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 14.18.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/recma-build-jsx": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
+      "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-util-build-jsx": "^3.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/recma-jsx": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz",
+      "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==",
+      "license": "MIT",
+      "dependencies": {
+        "acorn-jsx": "^5.0.0",
+        "estree-util-to-js": "^2.0.0",
+        "recma-parse": "^1.0.0",
+        "recma-stringify": "^1.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      },
+      "peerDependencies": {
+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+      }
+    },
+    "node_modules/recma-parse": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz",
+      "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "esast-util-from-js": "^2.0.0",
+        "unified": "^11.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/recma-stringify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz",
+      "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-util-to-js": "^2.0.0",
+        "unified": "^11.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/reflect.getprototypeof": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -5946,6 +8841,30 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz",
+      "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
+      "license": "MIT",
+      "dependencies": {
+        "regex-utilities": "^2.3.0"
+      }
+    },
+    "node_modules/regex-recursion": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
+      "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+      "license": "MIT",
+      "dependencies": {
+        "regex-utilities": "^2.3.0"
+      }
+    },
+    "node_modules/regex-utilities": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
+      "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+      "license": "MIT"
+    },
     "node_modules/regexp.prototype.flags": {
       "version": "1.5.4",
       "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
@@ -5967,6 +8886,117 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/rehype-recma": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz",
+      "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "@types/hast": "^3.0.0",
+        "hast-util-to-estree": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark": {
+      "version": "15.0.1",
+      "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz",
+      "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "remark-parse": "^11.0.0",
+        "remark-stringify": "^11.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-gfm": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+      "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "mdast-util-gfm": "^3.0.0",
+        "micromark-extension-gfm": "^3.0.0",
+        "remark-parse": "^11.0.0",
+        "remark-stringify": "^11.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-mdx": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz",
+      "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==",
+      "license": "MIT",
+      "dependencies": {
+        "mdast-util-mdx": "^3.0.0",
+        "micromark-extension-mdxjs": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-parse": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+      "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-rehype": {
+      "version": "11.1.2",
+      "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+      "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "unified": "^11.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-stringify": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+      "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "mdast-util-to-markdown": "^2.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/resolve": {
       "version": "1.22.10",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
@@ -6104,6 +9134,15 @@
       "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==",
       "license": "MIT"
     },
+    "node_modules/scroll-into-view-if-needed": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz",
+      "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==",
+      "license": "MIT",
+      "dependencies": {
+        "compute-scroll-into-view": "^3.0.2"
+      }
+    },
     "node_modules/semver": {
       "version": "7.7.2",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
@@ -6232,6 +9271,22 @@
         "node": ">=8"
       }
     },
+    "node_modules/shiki": {
+      "version": "3.9.2",
+      "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.9.2.tgz",
+      "integrity": "sha512-t6NKl5e/zGTvw/IyftLcumolgOczhuroqwXngDeMqJ3h3EQiTY/7wmfgPlsmloD8oYfqkEDqxiaH37Pjm1zUhQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/core": "3.9.2",
+        "@shikijs/engine-javascript": "3.9.2",
+        "@shikijs/engine-oniguruma": "3.9.2",
+        "@shikijs/langs": "3.9.2",
+        "@shikijs/themes": "3.9.2",
+        "@shikijs/types": "3.9.2",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      }
+    },
     "node_modules/side-channel": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
@@ -6318,6 +9373,15 @@
         "is-arrayish": "^0.3.1"
       }
     },
+    "node_modules/source-map": {
+      "version": "0.7.6",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+      "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
     "node_modules/source-map-js": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -6327,6 +9391,16 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/space-separated-tokens": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+      "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/stable-hash": {
       "version": "0.0.5",
       "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz",
@@ -6461,6 +9535,20 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/stringify-entities": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
+      "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+      "license": "MIT",
+      "dependencies": {
+        "character-entities-html4": "^2.0.0",
+        "character-entities-legacy": "^3.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/strip-bom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
@@ -6484,6 +9572,24 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/style-to-js": {
+      "version": "1.1.17",
+      "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz",
+      "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==",
+      "license": "MIT",
+      "dependencies": {
+        "style-to-object": "1.0.9"
+      }
+    },
+    "node_modules/style-to-object": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz",
+      "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==",
+      "license": "MIT",
+      "dependencies": {
+        "inline-style-parser": "0.2.4"
+      }
+    },
     "node_modules/styled-jsx": {
       "version": "5.1.6",
       "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
@@ -6547,7 +9653,7 @@
       "version": "4.1.11",
       "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
       "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
-      "dev": true,
+      "devOptional": true,
       "license": "MIT"
     },
     "node_modules/tapable": {
@@ -6578,11 +9684,16 @@
         "node": ">=18"
       }
     },
+    "node_modules/tinyexec": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
+      "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
+      "license": "MIT"
+    },
     "node_modules/tinyglobby": {
       "version": "0.2.14",
       "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
       "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "fdir": "^6.4.4",
@@ -6599,7 +9710,6 @@
       "version": "6.4.6",
       "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
       "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
-      "dev": true,
       "license": "MIT",
       "peerDependencies": {
         "picomatch": "^3 || ^4"
@@ -6614,7 +9724,6 @@
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
       "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=12"
@@ -6636,6 +9745,26 @@
         "node": ">=8.0"
       }
     },
+    "node_modules/trim-lines": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
+      "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/trough": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
+      "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
     "node_modules/ts-api-utils": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
@@ -6770,9 +9899,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "5.8.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
-      "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+      "version": "5.9.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz",
+      "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==",
       "dev": true,
       "license": "Apache-2.0",
       "bin": {
@@ -6809,6 +9938,106 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/unified": {
+      "version": "11.0.5",
+      "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
+      "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "bail": "^2.0.0",
+        "devlop": "^1.0.0",
+        "extend": "^3.0.0",
+        "is-plain-obj": "^4.0.0",
+        "trough": "^2.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-is": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
+      "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-position": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
+      "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-position-from-estree": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz",
+      "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-stringify-position": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+      "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
+      "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0",
+        "unist-util-visit-parents": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit-parents": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz",
+      "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/unrs-resolver": {
       "version": "1.11.1",
       "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz",
@@ -6906,6 +10135,40 @@
         "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
       }
     },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
+    "node_modules/vfile": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
+      "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "vfile-message": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile-message": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
+      "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-stringify-position": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
     "node_modules/which": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -7043,6 +10306,25 @@
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
+    },
+    "node_modules/zod": {
+      "version": "4.0.14",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.14.tgz",
+      "integrity": "sha512-nGFJTnJN6cM2v9kXL+SOBq3AtjQby3Mv5ySGFof5UGRHrRioSJ5iG680cYNjE/yWk671nROcpPj4hAS8nyLhSw==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/colinhacks"
+      }
+    },
+    "node_modules/zwitch": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
+      "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
     }
   }
 }
diff --git a/package.json b/package.json
index d8216709..f9d8d568 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,8 @@
     "dev": "next dev",
     "build": "next build",
     "start": "next start",
-    "lint": "next lint"
+    "lint": "next lint",
+    "postinstall": "fumadocs-mdx"
   },
   "dependencies": {
     "@radix-ui/react-accordion": "^1.2.11",
@@ -17,9 +18,13 @@
     "@radix-ui/react-navigation-menu": "^1.2.13",
     "@radix-ui/react-slot": "^1.2.3",
     "@radix-ui/react-switch": "^1.2.5",
+    "@types/mdx": "^2.0.13",
     "class-variance-authority": "^0.7.1",
     "clsx": "^2.1.1",
     "framer-motion": "^12.23.12",
+    "fumadocs-core": "^15.6.9",
+    "fumadocs-mdx": "^11.7.3",
+    "fumadocs-ui": "^15.6.9",
     "lucide-react": "^0.535.0",
     "next": "15.4.5",
     "react": "^19.1.0",
@@ -34,6 +39,7 @@
     "@types/react-dom": "^19",
     "eslint": "^9",
     "eslint-config-next": "15.4.5",
+    "pagefind": "^1.3.0",
     "tailwindcss": "^4",
     "tw-animate-css": "^1.3.6",
     "typescript": "^5"
diff --git a/source.config.ts b/source.config.ts
new file mode 100644
index 00000000..7f75bc1b
--- /dev/null
+++ b/source.config.ts
@@ -0,0 +1,23 @@
+import {
+  defineConfig,
+  defineDocs,
+  frontmatterSchema,
+  metaSchema,
+} from "fumadocs-mdx/config";
+
+// You can customise Zod schemas for frontmatter and `meta.json` here
+// see https://fumadocs.vercel.app/docs/mdx/collections#define-docs
+export const docs = defineDocs({
+  docs: {
+    schema: frontmatterSchema,
+  },
+  meta: {
+    schema: metaSchema,
+  },
+});
+
+export default defineConfig({
+  mdxOptions: {
+    // MDX options
+  },
+});
diff --git a/src/app/api/search/route.ts b/src/app/api/search/route.ts
new file mode 100644
index 00000000..6e2754a3
--- /dev/null
+++ b/src/app/api/search/route.ts
@@ -0,0 +1,7 @@
+import { source } from "@/lib/source";
+import { createFromSource } from "fumadocs-core/search/server";
+
+export const { GET } = createFromSource(source, {
+  // https://docs.orama.com/open-source/supported-languages
+  language: "english",
+});
diff --git a/src/app/globals.css b/src/app/globals.css
index 56ff287d..dd711ae1 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -1,5 +1,7 @@
 @import "tailwindcss";
 @import "tw-animate-css";
+@import "fumadocs-ui/css/neutral.css";
+@import "fumadocs-ui/css/preset.css";
 
 @custom-variant dark (&:is(.dark *));
 
@@ -76,6 +78,10 @@
   --sidebar-accent-foreground: oklch(0.205 0 0);
   --sidebar-border: oklch(0.922 0 0);
   --sidebar-ring: oklch(0.708 0 0);
+  --fd-layout-width: 90rem;
+  /* --fd-nav-height: 4rem; */
+  --fd-sidebar-margin: 0 2rem;
+  --fd-banner-height: 4rem;
 }
 
 .dark {
diff --git a/src/app/guide/[[...slug]]/page.tsx b/src/app/guide/[[...slug]]/page.tsx
new file mode 100644
index 00000000..9e82b1df
--- /dev/null
+++ b/src/app/guide/[[...slug]]/page.tsx
@@ -0,0 +1,62 @@
+import { source } from "@/lib/source";
+import {
+  DocsBody,
+  DocsDescription,
+  DocsPage,
+  DocsTitle,
+} from "fumadocs-ui/page";
+import { getGithubLastEdit } from "fumadocs-core/server";
+import { notFound } from "next/navigation";
+import { getMDXComponents } from "../../../../mdx-components";
+
+export default async function Page(props: {
+  params: Promise<{ slug?: string[] }>;
+}) {
+  const params = await props.params;
+
+  const page = source.getPage(params.slug);
+  if (!page) notFound();
+
+  const MDX = page.data.body;
+  const time = await getGithubLastEdit({
+    owner: "fuma-nama",
+    repo: "fumadocs",
+    path: `content/guide/${page.path}`,
+  });
+
+  return (
+    <DocsPage
+      editOnGithub={{
+        owner: "quicksnip-dev",
+        repo: "quicksnip",
+        path: `content/guide/${page.path}`,
+      }}
+      lastUpdate={time ? new Date(time) : undefined}
+      full={page.data.full}
+    >
+      <DocsTitle>{page.data.title}</DocsTitle>
+      <DocsDescription>{page.data.description}</DocsDescription>
+      <DocsBody>
+        <p>{page.data.content}</p>
+        <MDX components={getMDXComponents()} />
+      </DocsBody>
+    </DocsPage>
+  );
+}
+
+export async function generateStaticParams() {
+  return source.generateParams();
+}
+
+export async function generateMetadata(props: {
+  params: Promise<{ slug?: string[] }>;
+}) {
+  const params = await props.params;
+  const page = source.getPage(params.slug);
+  if (!page) notFound();
+
+  return {
+    title: page.data.title,
+    description: page.data.description,
+  };
+}
diff --git a/src/app/guide/layout.tsx b/src/app/guide/layout.tsx
new file mode 100644
index 00000000..0968578c
--- /dev/null
+++ b/src/app/guide/layout.tsx
@@ -0,0 +1,16 @@
+import { source } from "@/lib/source";
+import { DocsLayout } from "fumadocs-ui/layouts/docs";
+import type { ReactNode } from "react";
+import { baseOptions } from "@/app/layout.config";
+
+export default function Layout({ children }: { children: ReactNode }) {
+  return (
+    <DocsLayout
+      tree={source.pageTree}
+      {...baseOptions}
+      themeSwitch={{ enabled: false }}
+    >
+      {children}
+    </DocsLayout>
+  );
+}
diff --git a/src/app/guide/page.tsx b/src/app/guide/page.tsx
deleted file mode 100644
index 00d2b6bb..00000000
--- a/src/app/guide/page.tsx
+++ /dev/null
@@ -1,5 +0,0 @@
-const GuidePage = () => {
-  return <h1>Hello</h1>;
-};
-
-export default GuidePage;
diff --git a/src/app/layout.config.tsx b/src/app/layout.config.tsx
new file mode 100644
index 00000000..43404cdd
--- /dev/null
+++ b/src/app/layout.config.tsx
@@ -0,0 +1,9 @@
+import Logo from "@/components/Logo";
+import { BaseLayoutProps } from "fumadocs-ui/layouts/shared";
+
+export const baseOptions: BaseLayoutProps = {
+  githubUrl: "https://github.com/quicksnip-dev/quicksnip",
+  nav: {
+    enabled: false,
+  },
+};
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index b95430d4..1307e37f 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,5 +1,6 @@
 import type { Metadata } from "next";
 import { Geist, Geist_Mono } from "next/font/google";
+import { RootProvider } from "fumadocs-ui/provider";
 import "./globals.css";
 import Header from "@/components/layouts/Header";
 import Footer from "@/components/layouts/Footer";
@@ -25,13 +26,13 @@ export default function RootLayout({
   children: React.ReactNode;
 }>) {
   return (
-    <html lang="en">
+    <html lang="en" dir="ltr" suppressHydrationWarning>
       <body
         className={`${geistSans.variable} ${geistMono.variable} grid grid-rows-[auto_1fr_auto] min-h-screen antialiased bg-background text-foreground dark`}
       >
         <Header />
 
-        <main>{children}</main>
+        <RootProvider>{children}</RootProvider>
         <Footer />
       </body>
     </html>
diff --git a/src/components/layouts/Header.tsx b/src/components/layouts/Header.tsx
index dc7b3b1f..673291ac 100644
--- a/src/components/layouts/Header.tsx
+++ b/src/components/layouts/Header.tsx
@@ -2,7 +2,7 @@
 
 import React, { useState, useEffect } from "react";
 import { motion, AnimatePresence, easeInOut } from "framer-motion";
-import { Menu, X, Gamepad, Cat } from "lucide-react";
+import { Menu, X } from "lucide-react";
 import Link from "next/link";
 import Logo from "../Logo";
 import DarkModeSwitch from "../DarkModeSwitch";
diff --git a/src/lib/source.ts b/src/lib/source.ts
new file mode 100644
index 00000000..cc244c4a
--- /dev/null
+++ b/src/lib/source.ts
@@ -0,0 +1,8 @@
+// .source folder will be generated when you run `next dev`
+import { docs } from "../../.source";
+import { loader } from "fumadocs-core/source";
+
+export const source = loader({
+  baseUrl: "/guide",
+  source: docs.toFumadocsSource(),
+});
