This is an automated email from the ASF dual-hosted git repository.

jdaugherty pushed a commit to branch fixVulnerabilitiesAndModernize
in repository https://gitbox.apache.org/repos/asf/grails-forge-ui.git

commit 4956894278ba0b09cf69ec25f6b3dba979378785
Author: James Daugherty <[email protected]>
AuthorDate: Sun Mar 1 01:51:52 2026 -0500

    test updates & fixing various styling mismatches
---
 app/launch/package-lock.json                       | 940 ++++++++++++++++++++-
 app/launch/package.json                            |   7 +-
 .../__snapshots__/Application.test.jsx.snap        |  43 +-
 .../__snapshots__/useApplicationForm.test.jsx.snap |  38 +-
 .../FeatureSelector/feature-selector.css           |   8 +
 app/launch/src/components/Select/select.css        |   7 +-
 .../src/components/StarterForm/StarterForm.jsx     |  56 +-
 .../src/components/StarterForm/starter-form.css    |   9 +
 app/launch/src/style.css                           |   6 +
 app/launch/src/styles/font-overrides.css           |   3 +-
 app/launch/vite.config.js                          |   4 +
 11 files changed, 1064 insertions(+), 57 deletions(-)

diff --git a/app/launch/package-lock.json b/app/launch/package-lock.json
index 7a2b4f3..7c6974a 100644
--- a/app/launch/package-lock.json
+++ b/app/launch/package-lock.json
@@ -24,12 +24,79 @@
                 "eslint": "^8.57.1",
                 "eslint-plugin-import": "^2.32.0",
                 "eslint-plugin-react": "^7.37.5",
+                "jsdom": "^28.1.0",
                 "prettier": "^2.3.0",
                 "react-test-renderer": "^17.0.2",
                 "vite": "^6.4.1",
-                "vite-plugin-svgr": "^4.5.0"
+                "vite-plugin-svgr": "^4.5.0",
+                "vitest": "^4.0.18"
             }
         },
+        "node_modules/@acemir/cssom": {
+            "version": "0.9.31",
+            "resolved": 
"https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.31.tgz";,
+            "integrity": 
"sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/@asamuzakjp/css-color": {
+            "version": "5.0.1",
+            "resolved": 
"https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.0.1.tgz";,
+            "integrity": 
"sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@csstools/css-calc": "^3.1.1",
+                "@csstools/css-color-parser": "^4.0.2",
+                "@csstools/css-parser-algorithms": "^4.0.0",
+                "@csstools/css-tokenizer": "^4.0.0",
+                "lru-cache": "^11.2.6"
+            },
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+            }
+        },
+        "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": {
+            "version": "11.2.6",
+            "resolved": 
"https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz";,
+            "integrity": 
"sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+            "dev": true,
+            "license": "BlueOak-1.0.0",
+            "engines": {
+                "node": "20 || >=22"
+            }
+        },
+        "node_modules/@asamuzakjp/dom-selector": {
+            "version": "6.8.1",
+            "resolved": 
"https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-6.8.1.tgz";,
+            "integrity": 
"sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@asamuzakjp/nwsapi": "^2.3.9",
+                "bidi-js": "^1.0.3",
+                "css-tree": "^3.1.0",
+                "is-potential-custom-element-name": "^1.0.1",
+                "lru-cache": "^11.2.6"
+            }
+        },
+        "node_modules/@asamuzakjp/dom-selector/node_modules/lru-cache": {
+            "version": "11.2.6",
+            "resolved": 
"https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz";,
+            "integrity": 
"sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+            "dev": true,
+            "license": "BlueOak-1.0.0",
+            "engines": {
+                "node": "20 || >=22"
+            }
+        },
+        "node_modules/@asamuzakjp/nwsapi": {
+            "version": "2.3.9",
+            "resolved": 
"https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz";,
+            "integrity": 
"sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/@babel/code-frame": {
             "version": "7.29.0",
             "resolved": 
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz";,
@@ -321,6 +388,151 @@
                 "node": ">=6.9.0"
             }
         },
+        "node_modules/@bramus/specificity": {
+            "version": "2.4.2",
+            "resolved": 
"https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz";,
+            "integrity": 
"sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "css-tree": "^3.0.0"
+            },
+            "bin": {
+                "specificity": "bin/cli.js"
+            }
+        },
+        "node_modules/@csstools/color-helpers": {
+            "version": "6.0.2",
+            "resolved": 
"https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.0.2.tgz";,
+            "integrity": 
"sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools";
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools";
+                }
+            ],
+            "license": "MIT-0",
+            "engines": {
+                "node": ">=20.19.0"
+            }
+        },
+        "node_modules/@csstools/css-calc": {
+            "version": "3.1.1",
+            "resolved": 
"https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz";,
+            "integrity": 
"sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools";
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools";
+                }
+            ],
+            "license": "MIT",
+            "engines": {
+                "node": ">=20.19.0"
+            },
+            "peerDependencies": {
+                "@csstools/css-parser-algorithms": "^4.0.0",
+                "@csstools/css-tokenizer": "^4.0.0"
+            }
+        },
+        "node_modules/@csstools/css-color-parser": {
+            "version": "4.0.2",
+            "resolved": 
"https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.0.2.tgz";,
+            "integrity": 
"sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools";
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools";
+                }
+            ],
+            "license": "MIT",
+            "dependencies": {
+                "@csstools/color-helpers": "^6.0.2",
+                "@csstools/css-calc": "^3.1.1"
+            },
+            "engines": {
+                "node": ">=20.19.0"
+            },
+            "peerDependencies": {
+                "@csstools/css-parser-algorithms": "^4.0.0",
+                "@csstools/css-tokenizer": "^4.0.0"
+            }
+        },
+        "node_modules/@csstools/css-parser-algorithms": {
+            "version": "4.0.0",
+            "resolved": 
"https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz";,
+            "integrity": 
"sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools";
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools";
+                }
+            ],
+            "license": "MIT",
+            "engines": {
+                "node": ">=20.19.0"
+            },
+            "peerDependencies": {
+                "@csstools/css-tokenizer": "^4.0.0"
+            }
+        },
+        "node_modules/@csstools/css-syntax-patches-for-csstree": {
+            "version": "1.0.28",
+            "resolved": 
"https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.28.tgz";,
+            "integrity": 
"sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools";
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools";
+                }
+            ],
+            "license": "MIT-0"
+        },
+        "node_modules/@csstools/css-tokenizer": {
+            "version": "4.0.0",
+            "resolved": 
"https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz";,
+            "integrity": 
"sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==",
+            "dev": true,
+            "funding": [
+                {
+                    "type": "github",
+                    "url": "https://github.com/sponsors/csstools";
+                },
+                {
+                    "type": "opencollective",
+                    "url": "https://opencollective.com/csstools";
+                }
+            ],
+            "license": "MIT",
+            "engines": {
+                "node": ">=20.19.0"
+            }
+        },
         "node_modules/@emotion/hash": {
             "version": "0.8.0",
             "resolved": 
"https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz";,
@@ -832,6 +1044,24 @@
                 "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
             }
         },
+        "node_modules/@exodus/bytes": {
+            "version": "1.14.1",
+            "resolved": 
"https://registry.npmjs.org/@exodus/bytes/-/bytes-1.14.1.tgz";,
+            "integrity": 
"sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+            },
+            "peerDependencies": {
+                "@noble/hashes": "^1.8.0 || ^2.0.0"
+            },
+            "peerDependenciesMeta": {
+                "@noble/hashes": {
+                    "optional": true
+                }
+            }
+        },
         "node_modules/@humanwhocodes/config-array": {
             "version": "0.13.0",
             "resolved": 
"https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz";,
@@ -1566,6 +1796,13 @@
             "dev": true,
             "license": "MIT"
         },
+        "node_modules/@standard-schema/spec": {
+            "version": "1.1.0",
+            "resolved": 
"https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz";,
+            "integrity": 
"sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
             "version": "8.0.0",
             "resolved": 
"https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz";,
@@ -1836,6 +2073,24 @@
                 "@babel/types": "^7.28.2"
             }
         },
+        "node_modules/@types/chai": {
+            "version": "5.2.3",
+            "resolved": 
"https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz";,
+            "integrity": 
"sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@types/deep-eql": "*",
+                "assertion-error": "^2.0.1"
+            }
+        },
+        "node_modules/@types/deep-eql": {
+            "version": "4.0.2",
+            "resolved": 
"https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz";,
+            "integrity": 
"sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/@types/estree": {
             "version": "1.0.8",
             "resolved": 
"https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz";,
@@ -1953,6 +2208,127 @@
                 "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
             }
         },
+        "node_modules/@vitest/expect": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz";,
+            "integrity": 
"sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@standard-schema/spec": "^1.0.0",
+                "@types/chai": "^5.2.2",
+                "@vitest/spy": "4.0.18",
+                "@vitest/utils": "4.0.18",
+                "chai": "^6.2.1",
+                "tinyrainbow": "^3.0.3"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            }
+        },
+        "node_modules/@vitest/mocker": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz";,
+            "integrity": 
"sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@vitest/spy": "4.0.18",
+                "estree-walker": "^3.0.3",
+                "magic-string": "^0.30.21"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            },
+            "peerDependencies": {
+                "msw": "^2.4.9",
+                "vite": "^6.0.0 || ^7.0.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": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz";,
+            "integrity": 
"sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "tinyrainbow": "^3.0.3"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            }
+        },
+        "node_modules/@vitest/runner": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz";,
+            "integrity": 
"sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@vitest/utils": "4.0.18",
+                "pathe": "^2.0.3"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            }
+        },
+        "node_modules/@vitest/snapshot": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz";,
+            "integrity": 
"sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@vitest/pretty-format": "4.0.18",
+                "magic-string": "^0.30.21",
+                "pathe": "^2.0.3"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            }
+        },
+        "node_modules/@vitest/spy": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz";,
+            "integrity": 
"sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==",
+            "dev": true,
+            "license": "MIT",
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            }
+        },
+        "node_modules/@vitest/utils": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz";,
+            "integrity": 
"sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@vitest/pretty-format": "4.0.18",
+                "tinyrainbow": "^3.0.3"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            }
+        },
         "node_modules/acorn": {
             "version": "8.16.0",
             "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz";,
@@ -1976,6 +2352,16 @@
                 "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
             }
         },
+        "node_modules/agent-base": {
+            "version": "7.1.4",
+            "resolved": 
"https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz";,
+            "integrity": 
"sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">= 14"
+            }
+        },
         "node_modules/ajv": {
             "version": "6.14.0",
             "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz";,
@@ -2186,6 +2572,16 @@
                 "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/async-function": {
             "version": "1.0.0",
             "resolved": 
"https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz";,
@@ -2232,6 +2628,16 @@
                 "node": ">=6.0.0"
             }
         },
+        "node_modules/bidi-js": {
+            "version": "1.0.3",
+            "resolved": 
"https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz";,
+            "integrity": 
"sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "require-from-string": "^2.0.2"
+            }
+        },
         "node_modules/brace-expansion": {
             "version": "1.1.12",
             "resolved": 
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz";,
@@ -2380,6 +2786,16 @@
             ],
             "license": "CC-BY-4.0"
         },
+        "node_modules/chai": {
+            "version": "6.2.2",
+            "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz";,
+            "integrity": 
"sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            }
+        },
         "node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz";,
@@ -2522,6 +2938,20 @@
                 "node": ">= 8"
             }
         },
+        "node_modules/css-tree": {
+            "version": "3.1.0",
+            "resolved": 
"https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz";,
+            "integrity": 
"sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "mdn-data": "2.12.2",
+                "source-map-js": "^1.0.1"
+            },
+            "engines": {
+                "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+            }
+        },
         "node_modules/css-vendor": {
             "version": "2.0.8",
             "resolved": 
"https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz";,
@@ -2532,12 +2962,52 @@
                 "is-in-browser": "^1.0.2"
             }
         },
+        "node_modules/cssstyle": {
+            "version": "6.1.0",
+            "resolved": 
"https://registry.npmjs.org/cssstyle/-/cssstyle-6.1.0.tgz";,
+            "integrity": 
"sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@asamuzakjp/css-color": "^5.0.0",
+                "@csstools/css-syntax-patches-for-csstree": "^1.0.28",
+                "css-tree": "^3.1.0",
+                "lru-cache": "^11.2.6"
+            },
+            "engines": {
+                "node": ">=20"
+            }
+        },
+        "node_modules/cssstyle/node_modules/lru-cache": {
+            "version": "11.2.6",
+            "resolved": 
"https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz";,
+            "integrity": 
"sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
+            "dev": true,
+            "license": "BlueOak-1.0.0",
+            "engines": {
+                "node": "20 || >=22"
+            }
+        },
         "node_modules/csstype": {
             "version": "2.6.21",
             "resolved": 
"https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz";,
             "integrity": 
"sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==",
             "license": "MIT"
         },
+        "node_modules/data-urls": {
+            "version": "7.0.0",
+            "resolved": 
"https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz";,
+            "integrity": 
"sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "whatwg-mimetype": "^5.0.0",
+                "whatwg-url": "^16.0.0"
+            },
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+            }
+        },
         "node_modules/data-view-buffer": {
             "version": "1.0.2",
             "resolved": 
"https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz";,
@@ -2610,6 +3080,13 @@
                 }
             }
         },
+        "node_modules/decimal.js": {
+            "version": "10.6.0",
+            "resolved": 
"https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz";,
+            "integrity": 
"sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/decode-named-character-reference": {
             "version": "1.3.0",
             "resolved": 
"https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz";,
@@ -2868,6 +3345,13 @@
                 "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==",
+            "dev": true,
+            "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";,
@@ -3315,6 +3799,16 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/expect-type": {
+            "version": "1.3.0",
+            "resolved": 
"https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz";,
+            "integrity": 
"sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=12.0.0"
+            }
+        },
         "node_modules/fast-deep-equal": {
             "version": "3.1.3",
             "resolved": 
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";,
@@ -3841,6 +4335,47 @@
             "integrity": 
"sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
             "license": "MIT"
         },
+        "node_modules/html-encoding-sniffer": {
+            "version": "6.0.0",
+            "resolved": 
"https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz";,
+            "integrity": 
"sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@exodus/bytes": "^1.6.0"
+            },
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+            }
+        },
+        "node_modules/http-proxy-agent": {
+            "version": "7.0.2",
+            "resolved": 
"https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz";,
+            "integrity": 
"sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "agent-base": "^7.1.0",
+                "debug": "^4.3.4"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
+        "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==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "agent-base": "^7.1.2",
+                "debug": "4"
+            },
+            "engines": {
+                "node": ">= 14"
+            }
+        },
         "node_modules/hyphenate-style-name": {
             "version": "1.1.0",
             "resolved": 
"https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz";,
@@ -4222,6 +4757,13 @@
                 "node": ">=8"
             }
         },
+        "node_modules/is-potential-custom-element-name": {
+            "version": "1.0.1",
+            "resolved": 
"https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz";,
+            "integrity": 
"sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/is-regex": {
             "version": "1.2.1",
             "resolved": 
"https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz";,
@@ -4418,6 +4960,47 @@
                 "js-yaml": "bin/js-yaml.js"
             }
         },
+        "node_modules/jsdom": {
+            "version": "28.1.0",
+            "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-28.1.0.tgz";,
+            "integrity": 
"sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@acemir/cssom": "^0.9.31",
+                "@asamuzakjp/dom-selector": "^6.8.1",
+                "@bramus/specificity": "^2.4.2",
+                "@exodus/bytes": "^1.11.0",
+                "cssstyle": "^6.0.1",
+                "data-urls": "^7.0.0",
+                "decimal.js": "^10.6.0",
+                "html-encoding-sniffer": "^6.0.0",
+                "http-proxy-agent": "^7.0.2",
+                "https-proxy-agent": "^7.0.6",
+                "is-potential-custom-element-name": "^1.0.1",
+                "parse5": "^8.0.0",
+                "saxes": "^6.0.0",
+                "symbol-tree": "^3.2.4",
+                "tough-cookie": "^6.0.0",
+                "undici": "^7.21.0",
+                "w3c-xmlserializer": "^5.0.0",
+                "webidl-conversions": "^8.0.1",
+                "whatwg-mimetype": "^5.0.0",
+                "whatwg-url": "^16.0.0",
+                "xml-name-validator": "^5.0.0"
+            },
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+            },
+            "peerDependencies": {
+                "canvas": "^3.0.0"
+            },
+            "peerDependenciesMeta": {
+                "canvas": {
+                    "optional": true
+                }
+            }
+        },
         "node_modules/jsesc": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz";,
@@ -4690,6 +5273,16 @@
                 "yallist": "^3.0.2"
             }
         },
+        "node_modules/magic-string": {
+            "version": "0.30.21",
+            "resolved": 
"https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz";,
+            "integrity": 
"sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@jridgewell/sourcemap-codec": "^1.5.5"
+            }
+        },
         "node_modules/math-intrinsics": {
             "version": "1.1.0",
             "resolved": 
"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz";,
@@ -4700,6 +5293,13 @@
                 "node": ">= 0.4"
             }
         },
+        "node_modules/mdn-data": {
+            "version": "2.12.2",
+            "resolved": 
"https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz";,
+            "integrity": 
"sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+            "dev": true,
+            "license": "CC0-1.0"
+        },
         "node_modules/minimatch": {
             "version": "3.1.5",
             "resolved": 
"https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz";,
@@ -4915,6 +5515,17 @@
                 "url": "https://github.com/sponsors/ljharb";
             }
         },
+        "node_modules/obug": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz";,
+            "integrity": 
"sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==",
+            "dev": true,
+            "funding": [
+                "https://github.com/sponsors/sxzz";,
+                "https://opencollective.com/debug";
+            ],
+            "license": "MIT"
+        },
         "node_modules/once": {
             "version": "1.4.0",
             "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz";,
@@ -5050,6 +5661,32 @@
                 "url": "https://github.com/sponsors/sindresorhus";
             }
         },
+        "node_modules/parse5": {
+            "version": "8.0.0",
+            "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz";,
+            "integrity": 
"sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "entities": "^6.0.0"
+            },
+            "funding": {
+                "url": "https://github.com/inikulin/parse5?sponsor=1";
+            }
+        },
+        "node_modules/parse5/node_modules/entities": {
+            "version": "6.0.1",
+            "resolved": 
"https://registry.npmjs.org/entities/-/entities-6.0.1.tgz";,
+            "integrity": 
"sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": ">=0.12"
+            },
+            "funding": {
+                "url": "https://github.com/fb55/entities?sponsor=1";
+            }
+        },
         "node_modules/path-exists": {
             "version": "4.0.0",
             "resolved": 
"https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz";,
@@ -5097,6 +5734,13 @@
                 "node": ">=8"
             }
         },
+        "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";,
@@ -5444,6 +6088,16 @@
                 "url": "https://github.com/sponsors/ljharb";
             }
         },
+        "node_modules/require-from-string": {
+            "version": "2.0.2",
+            "resolved": 
"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz";,
+            "integrity": 
"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=0.10.0"
+            }
+        },
         "node_modules/resolve": {
             "version": "1.22.11",
             "resolved": 
"https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz";,
@@ -5582,6 +6236,19 @@
                 "url": "https://github.com/sponsors/ljharb";
             }
         },
+        "node_modules/saxes": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz";,
+            "integrity": 
"sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "xmlchars": "^2.2.0"
+            },
+            "engines": {
+                "node": ">=v12.22.7"
+            }
+        },
         "node_modules/scheduler": {
             "version": "0.20.2",
             "resolved": 
"https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz";,
@@ -5750,6 +6417,13 @@
                 "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/snake-case": {
             "version": "3.0.4",
             "resolved": 
"https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz";,
@@ -5806,6 +6480,20 @@
                 "url": "https://github.com/sponsors/wooorm";
             }
         },
+        "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.10.0",
+            "resolved": 
"https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz";,
+            "integrity": 
"sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
+            "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";,
@@ -5987,6 +6675,13 @@
             "dev": true,
             "license": "MIT"
         },
+        "node_modules/symbol-tree": {
+            "version": "3.2.4",
+            "resolved": 
"https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz";,
+            "integrity": 
"sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/terser": {
             "version": "5.44.1",
             "resolved": 
"https://registry.npmjs.org/terser/-/terser-5.44.1.tgz";,
@@ -6030,6 +6725,23 @@
             "integrity": 
"sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
             "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": "1.0.2",
+            "resolved": 
"https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz";,
+            "integrity": 
"sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
+            }
+        },
         "node_modules/tinyglobby": {
             "version": "0.2.15",
             "resolved": 
"https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz";,
@@ -6047,6 +6759,62 @@
                 "url": "https://github.com/sponsors/SuperchupuDev";
             }
         },
+        "node_modules/tinyrainbow": {
+            "version": "3.0.3",
+            "resolved": 
"https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz";,
+            "integrity": 
"sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=14.0.0"
+            }
+        },
+        "node_modules/tldts": {
+            "version": "7.0.23",
+            "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.23.tgz";,
+            "integrity": 
"sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "tldts-core": "^7.0.23"
+            },
+            "bin": {
+                "tldts": "bin/cli.js"
+            }
+        },
+        "node_modules/tldts-core": {
+            "version": "7.0.23",
+            "resolved": 
"https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz";,
+            "integrity": 
"sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==",
+            "dev": true,
+            "license": "MIT"
+        },
+        "node_modules/tough-cookie": {
+            "version": "6.0.0",
+            "resolved": 
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz";,
+            "integrity": 
"sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==",
+            "dev": true,
+            "license": "BSD-3-Clause",
+            "dependencies": {
+                "tldts": "^7.0.5"
+            },
+            "engines": {
+                "node": ">=16"
+            }
+        },
+        "node_modules/tr46": {
+            "version": "6.0.0",
+            "resolved": "https://registry.npmjs.org/tr46/-/tr46-6.0.0.tgz";,
+            "integrity": 
"sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "punycode": "^2.3.1"
+            },
+            "engines": {
+                "node": ">=20"
+            }
+        },
         "node_modules/tsconfig-paths": {
             "version": "3.15.0",
             "resolved": 
"https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz";,
@@ -6203,6 +6971,16 @@
                 "url": "https://github.com/sponsors/ljharb";
             }
         },
+        "node_modules/undici": {
+            "version": "7.22.0",
+            "resolved": 
"https://registry.npmjs.org/undici/-/undici-7.22.0.tgz";,
+            "integrity": 
"sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=20.18.1"
+            }
+        },
         "node_modules/undici-types": {
             "version": "7.16.0",
             "resolved": 
"https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz";,
@@ -6388,6 +7166,132 @@
                 "fsevents": "~2.3.2"
             }
         },
+        "node_modules/vitest": {
+            "version": "4.0.18",
+            "resolved": 
"https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz";,
+            "integrity": 
"sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@vitest/expect": "4.0.18",
+                "@vitest/mocker": "4.0.18",
+                "@vitest/pretty-format": "4.0.18",
+                "@vitest/runner": "4.0.18",
+                "@vitest/snapshot": "4.0.18",
+                "@vitest/spy": "4.0.18",
+                "@vitest/utils": "4.0.18",
+                "es-module-lexer": "^1.7.0",
+                "expect-type": "^1.2.2",
+                "magic-string": "^0.30.21",
+                "obug": "^2.1.1",
+                "pathe": "^2.0.3",
+                "picomatch": "^4.0.3",
+                "std-env": "^3.10.0",
+                "tinybench": "^2.9.0",
+                "tinyexec": "^1.0.2",
+                "tinyglobby": "^0.2.15",
+                "tinyrainbow": "^3.0.3",
+                "vite": "^6.0.0 || ^7.0.0",
+                "why-is-node-running": "^2.3.0"
+            },
+            "bin": {
+                "vitest": "vitest.mjs"
+            },
+            "engines": {
+                "node": "^20.0.0 || ^22.0.0 || >=24.0.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/vitest";
+            },
+            "peerDependencies": {
+                "@edge-runtime/vm": "*",
+                "@opentelemetry/api": "^1.9.0",
+                "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0",
+                "@vitest/browser-playwright": "4.0.18",
+                "@vitest/browser-preview": "4.0.18",
+                "@vitest/browser-webdriverio": "4.0.18",
+                "@vitest/ui": "4.0.18",
+                "happy-dom": "*",
+                "jsdom": "*"
+            },
+            "peerDependenciesMeta": {
+                "@edge-runtime/vm": {
+                    "optional": true
+                },
+                "@opentelemetry/api": {
+                    "optional": true
+                },
+                "@types/node": {
+                    "optional": true
+                },
+                "@vitest/browser-playwright": {
+                    "optional": true
+                },
+                "@vitest/browser-preview": {
+                    "optional": true
+                },
+                "@vitest/browser-webdriverio": {
+                    "optional": true
+                },
+                "@vitest/ui": {
+                    "optional": true
+                },
+                "happy-dom": {
+                    "optional": true
+                },
+                "jsdom": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/w3c-xmlserializer": {
+            "version": "5.0.0",
+            "resolved": 
"https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz";,
+            "integrity": 
"sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "xml-name-validator": "^5.0.0"
+            },
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/webidl-conversions": {
+            "version": "8.0.1",
+            "resolved": 
"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz";,
+            "integrity": 
"sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "engines": {
+                "node": ">=20"
+            }
+        },
+        "node_modules/whatwg-mimetype": {
+            "version": "5.0.0",
+            "resolved": 
"https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-5.0.0.tgz";,
+            "integrity": 
"sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=20"
+            }
+        },
+        "node_modules/whatwg-url": {
+            "version": "16.0.1",
+            "resolved": 
"https://registry.npmjs.org/whatwg-url/-/whatwg-url-16.0.1.tgz";,
+            "integrity": 
"sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "@exodus/bytes": "^1.11.0",
+                "tr46": "^6.0.0",
+                "webidl-conversions": "^8.0.1"
+            },
+            "engines": {
+                "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
+            }
+        },
         "node_modules/which": {
             "version": "2.0.2",
             "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz";,
@@ -6493,6 +7397,23 @@
                 "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/word-wrap": {
             "version": "1.2.5",
             "resolved": 
"https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz";,
@@ -6510,6 +7431,23 @@
             "dev": true,
             "license": "ISC"
         },
+        "node_modules/xml-name-validator": {
+            "version": "5.0.0",
+            "resolved": 
"https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz";,
+            "integrity": 
"sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=18"
+            }
+        },
+        "node_modules/xmlchars": {
+            "version": "2.2.0",
+            "resolved": 
"https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz";,
+            "integrity": 
"sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/yallist": {
             "version": "3.1.1",
             "resolved": 
"https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz";,
diff --git a/app/launch/package.json b/app/launch/package.json
index 2a4bee1..d34915c 100755
--- a/app/launch/package.json
+++ b/app/launch/package.json
@@ -20,10 +20,12 @@
         "eslint": "^8.57.1",
         "eslint-plugin-import": "^2.32.0",
         "eslint-plugin-react": "^7.37.5",
+        "jsdom": "^28.1.0",
         "prettier": "^2.3.0",
         "react-test-renderer": "^17.0.2",
         "vite": "^6.4.1",
-        "vite-plugin-svgr": "^4.5.0"
+        "vite-plugin-svgr": "^4.5.0",
+        "vitest": "^4.0.18"
     },
     "scripts": {
         "start": "vite",
@@ -32,7 +34,8 @@
         "preview": "vite preview",
         "format": "prettier --write \"**/*.+(js|jsx|json|css|md)\"",
         "lint": "eslint './src/**/*.js'",
-        "lint:fix": "eslint './src/**/*.js' --fix"
+        "lint:fix": "eslint './src/**/*.js' --fix",
+        "test": "vitest run"
     },
     "browserslist": {
         "production": [
diff --git 
a/app/launch/src/components/Application/__tests__/__snapshots__/Application.test.jsx.snap
 
b/app/launch/src/components/Application/__tests__/__snapshots__/Application.test.jsx.snap
index d734f62..618824f 100644
--- 
a/app/launch/src/components/Application/__tests__/__snapshots__/Application.test.jsx.snap
+++ 
b/app/launch/src/components/Application/__tests__/__snapshots__/Application.test.jsx.snap
@@ -1,9 +1,9 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
 
 exports[`Application Launches 1`] = `
 <div
   style={
-    Object {
+    {
       "alignItems": "center",
       "bottom": 0,
       "display": "flex",
@@ -18,15 +18,50 @@ exports[`Application Launches 1`] = `
 >
   <svg
     className="inverse-theme"
+    id="Layer_1"
     style={
-      Object {
+      {
         "opacity": 0.1,
         "position": "absolute",
         "width": "90%",
       }
     }
+    viewBox="0 0 601.2 411.39"
+    x="0px"
+    xmlSpace="preserve"
+    xmlns="http://www.w3.org/2000/svg";
+    xmlnsXlink="http://www.w3.org/1999/xlink";
+    y="0px"
   >
-    grails-forge-logo.svg
+    <style
+      type="text/css"
+    >
+      
+       .st0{fill:#FBB572;}
+
+    </style>
+    <g>
+      <g>
+        <path
+          className="st0"
+          
d="M1.72,85.03c4.29,0,21.47-0.86,80.73-0.86c0.86,0,2.58,0.86,2.58,1.72c16.32,43.8,60.12,80.73,116.8,100.49
 
c2.58,0.86,2.58,4.29,0,5.15c-5.15,2.58-12.88,5.15-15.46,6.87c-5.15,2.58-12.88,8.59-17.18,15.46
 
c-3.44,5.15-6.01,12.02-7.73,16.32c-0.86,2.58-0.86,6.87-0.86,12.02c0,11.17,1.72,26.62,6.01,36.93
 
c4.29,12.02,6.87,15.46,12.02,27.48c2.58,5.15,4.29,10.31,5.15,12.02c0,0.86,0,1.72,0,2.58c-1.72,1.72-4.29,6.01-9.45,8.59
 c-8.59,5.15-27.48,6.87-36.93,6.87l0,0c-9.45,0-28.34-1.72-36.93-6. [...]
+        />
+        <path
+          className="st0"
+          
d="M520.47,0.86C511.02,0.86,469.79,0,299.74,0S88.46,0.86,79.01,0.86c-1.72,0-3.44,1.72-2.58,3.44
 
c0.86,8.59,0.86,20.61,8.59,48.1c6.01,22.33,19.75,42.94,33.5,60.98c7.73,9.45,26.62,27.48,36.07,35.21
 
c8.59,6.87,21.47,15.46,31.78,20.61c7.73,4.29,27.48,12.02,33.5,15.46c8.59,4.29,21.47,13.74,28.34,24.91
 
c5.15,8.59,10.31,19.75,12.02,26.62c0.86,4.29,1.72,11.17,1.72,19.75c0,18.89-3.44,42.94-9.45,60.12
 
c-6.87,18.89-11.17,25.77-19.75,45.52c-3.44,8.59-6.87,16.32-8.59,19.75c-0.86,1.72-0.86,3
 [...]
+        />
+        <path
+          className="st0"
+          
d="M599.48,85.03c-4.29,0-21.47-0.86-80.73-0.86c-0.86,0-2.58,0.86-2.58,1.72 
c-16.32,43.8-60.12,80.73-116.8,100.49c-2.58,0.86-2.58,4.29,0,5.15c5.15,2.58,12.88,5.15,15.46,6.87
 
c5.15,2.58,12.88,8.59,17.18,15.46c3.44,5.15,6.01,12.02,7.73,16.32c0.86,2.58,0.86,6.87,0.86,12.02
 
c0,11.17-1.72,26.62-6.01,36.93c-4.29,12.02-6.87,15.46-12.02,27.48c-2.58,5.15-4.29,10.31-5.15,12.02c0,0.86,0,1.72,0,2.58
 
c1.72,1.72,4.29,6.01,9.45,8.59c8.59,5.15,27.48,6.87,36.93,6.87l0,0c9.45,0,28.34-1.72,36.93-6
 [...]
+        />
+      </g>
+      <g>
+        <path
+          className="st0"
+          
d="M564.95,332.87c0,6.25-5.15,11.16-11.86,11.16c-6.64,0-11.93-4.91-11.93-11.16c0-6.12,5.3-11.03,11.93-11.03
 C559.8,321.85,564.95,326.75,564.95,332.87z 
M544.12,332.87c0,4.91,3.81,8.81,9.04,8.81c5.08,0,8.83-3.9,8.83-8.74 
c0-4.91-3.74-8.87-8.9-8.87C547.93,324.07,544.12,328.03,544.12,332.87z 
M551.25,338.65h-2.68v-11.03 
c1.06-0.2,2.54-0.34,4.45-0.34c2.19,0,3.18,0.34,4.02,0.81c0.64,0.47,1.13,1.34,1.13,2.42c0,1.21-0.99,2.15-2.4,2.55v0.14
 c1.13,0.4,1.77,1.21,2.12,2.69c0.35,1.68,0.56,2. [...]
+        />
+      </g>
+    </g>
   </svg>
 </div>
 `;
diff --git 
a/app/launch/src/components/Application/__tests__/__snapshots__/useApplicationForm.test.jsx.snap
 
b/app/launch/src/components/Application/__tests__/__snapshots__/useApplicationForm.test.jsx.snap
index 9599636..44a1eaf 100644
--- 
a/app/launch/src/components/Application/__tests__/__snapshots__/useApplicationForm.test.jsx.snap
+++ 
b/app/launch/src/components/Application/__tests__/__snapshots__/useApplicationForm.test.jsx.snap
@@ -1,7 +1,7 @@
 // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
 
 exports[`Initial Form Data with "" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -41,7 +41,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "gorm" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -81,7 +81,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "javaVersion" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -121,7 +121,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "name" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -161,7 +161,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "package" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -201,7 +201,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "reloading" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -215,17 +215,17 @@ Array [
   <div
     className="servlet"
   >
-
+    
   </div>,
   <div
     className="gorm"
   >
-
+    
   </div>,
   <div
     className="javaVersion"
   >
-
+    
   </div>,
   <div
     className="name"
@@ -241,7 +241,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "reloading" 2`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -255,17 +255,17 @@ Array [
   <div
     className="servlet"
   >
-
+    
   </div>,
   <div
     className="gorm"
   >
-
+    
   </div>,
   <div
     className="javaVersion"
   >
-
+    
   </div>,
   <div
     className="name"
@@ -281,7 +281,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "servlet" 1`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -290,7 +290,7 @@ Array [
   <div
     className="reloading"
   >
-
+    
   </div>,
   <div
     className="servlet"
@@ -300,12 +300,12 @@ Array [
   <div
     className="gorm"
   >
-
+    
   </div>,
   <div
     className="javaVersion"
   >
-
+    
   </div>,
   <div
     className="name"
@@ -321,7 +321,7 @@ Array [
 `;
 
 exports[`Initial Form Data with "servlet" 2`] = `
-Array [
+[
   <div
     className="type"
   >
@@ -330,7 +330,7 @@ Array [
   <div
     className="reloading"
   >
-
+    
   </div>,
   <div
     className="servlet"
diff --git a/app/launch/src/components/FeatureSelector/feature-selector.css 
b/app/launch/src/components/FeatureSelector/feature-selector.css
index 1db196f..5e94281 100644
--- a/app/launch/src/components/FeatureSelector/feature-selector.css
+++ b/app/launch/src/components/FeatureSelector/feature-selector.css
@@ -1,4 +1,8 @@
 /* Modal */
+.mn-feature-modal {
+  font-family: 'Fira Sans', sans-serif;
+}
+
 .mn-feature-modal .MuiDialogContent-root h4 {
   position: sticky;
   top: 0;
@@ -47,6 +51,10 @@
   color: #fff;
 }
 
+.mn-feature-selection .MuiTypography-body2 {
+  font-size: 16px !important;
+}
+
 .mn-feature-container .MuiCard-root .MuiCardContent-root p,
 .mn-feature-container .card .card-content p {
   word-break: break-word;
diff --git a/app/launch/src/components/Select/select.css 
b/app/launch/src/components/Select/select.css
index ce9c5e0..6d88c94 100644
--- a/app/launch/src/components/Select/select.css
+++ b/app/launch/src/components/Select/select.css
@@ -1,14 +1,14 @@
 .select-wrapper {
   width: 100%;
-  margin-top: 3px;
+  margin-top: 0;
 }
 
 
.MuiSelect-root.MuiSelect-select.MuiSelect-selectMenu.MuiInputBase-input.MuiInput-input
 {
-  padding-bottom: 12px !important;
+  padding-bottom: 7px !important;
 }
 
 .select-wrapper label + .MuiInput-formControl {
-  margin-top: 19px;
+  margin-top: 16px;
 }
 
 .MuiFormControl-root {
@@ -17,7 +17,6 @@
 
 .MuiFormLabel-root.MuiInputLabel-root {
   left: 0 !important;
-  font-size: 1rem;
 }
 
 .MuiSelect-select:focus {
diff --git a/app/launch/src/components/StarterForm/StarterForm.jsx 
b/app/launch/src/components/StarterForm/StarterForm.jsx
index 8121059..ec8af13 100644
--- a/app/launch/src/components/StarterForm/StarterForm.jsx
+++ b/app/launch/src/components/StarterForm/StarterForm.jsx
@@ -13,32 +13,36 @@ import StarterFormServlet from './StarterFormServlet'
 
 const StarterForm = ({ onError }) => {
   return (
-    <Grid container spacing={1} className="mn-starter-form-main" 
alignItems="flex-end">
-      <Grid item xs={12} sm={6} md={3}>
-        <StarterFormApplicationType />
-      </Grid>
-      <Grid item xs={12} sm={6} md={3}>
-        <StarterFormJavaVersion />
-      </Grid>
-      <Grid item xs={12} sm={6} md={3}>
-        <StarterFormName />
-      </Grid>
-      <Grid item xs={12} sm={6} md={3}>
-        <StarterFormPackage />
-      </Grid>
-      <Grid item sm={3} xs={12} className="mn-radio">
-        <StarterFormMicronautVersion />
-      </Grid>
-      <Grid item sm={3} xs={12} className="mn-radio">
-        <StarterFormGorm />
-      </Grid>
-      <Grid item sm={3} xs={12} className="mn-radio">
-        <StarterFormServlet />
-      </Grid>
-      <Grid item sm={3} xs={12} className="mn-radio">
-        <StarterFormReloadingFramework />
-      </Grid>
-    </Grid>
+    <div className="mn-starter-form-main">
+      <Grid container spacing={1} alignItems="flex-end">
+        <Grid item xs={12} sm={6} md={3}>
+          <StarterFormApplicationType />
+        </Grid>
+        <Grid item xs={12} sm={6} md={3}>
+          <StarterFormJavaVersion />
+        </Grid>
+        <Grid item xs={12} sm={6} md={3}>
+          <StarterFormName />
+        </Grid>
+        <Grid item xs={12} sm={6} md={3}>
+          <StarterFormPackage />
+        </Grid>
+      </Grid>
+      <Grid container spacing={1} alignItems="flex-start" 
className="mn-radio-row">
+        <Grid item sm={3} xs={12} className="mn-radio">
+          <StarterFormMicronautVersion />
+        </Grid>
+        <Grid item sm={3} xs={12} className="mn-radio">
+          <StarterFormGorm />
+        </Grid>
+        <Grid item sm={3} xs={12} className="mn-radio">
+          <StarterFormServlet />
+        </Grid>
+        <Grid item sm={3} xs={12} className="mn-radio">
+          <StarterFormReloadingFramework />
+        </Grid>
+      </Grid>
+    </div>
   )
 }
 
diff --git a/app/launch/src/components/StarterForm/starter-form.css 
b/app/launch/src/components/StarterForm/starter-form.css
index 56496bf..4835910 100644
--- a/app/launch/src/components/StarterForm/starter-form.css
+++ b/app/launch/src/components/StarterForm/starter-form.css
@@ -27,6 +27,10 @@
   margin-bottom: 5px;
 }
 
+.mn-starter-form-main .mn-radio-row {
+  margin-top: 20px;
+}
+
 .mn-starter-form-main .mn-radio .radio-row {
   position: relative;
 }
@@ -36,6 +40,11 @@
   margin-bottom: 5px;
 }
 
+.mn-starter-form-main .mn-radio .radio-group {
+  margin-left: 8px;
+  margin-right: 8px;
+}
+
 /* Theme */
 body.light .mn-starter-form-main .mn-radio .radio-label {
   color: black;
diff --git a/app/launch/src/style.css b/app/launch/src/style.css
index 8c7b263..b1bbd2d 100644
--- a/app/launch/src/style.css
+++ b/app/launch/src/style.css
@@ -44,6 +44,7 @@ body {
 
 .mn-feature-container {
   flex: 0;
+  margin-top: 20px;
   padding-bottom: 50px;
   padding-left: 10px;
   padding-right: 10px;
@@ -309,6 +310,11 @@ body.dark svg.micronaut-foundation polygon {
   color: var(--theme-light) !important;
 }
 
+.container {
+  padding-left: 16px;
+  padding-right: 16px;
+}
+
 /* Media */
 
 @media only screen and (min-width: 601px) {
diff --git a/app/launch/src/styles/font-overrides.css 
b/app/launch/src/styles/font-overrides.css
index 0776ce0..c101956 100644
--- a/app/launch/src/styles/font-overrides.css
+++ b/app/launch/src/styles/font-overrides.css
@@ -29,7 +29,8 @@
 }
 
 .radio-group label,
-.input-field label {
+.input-field label,
+.MuiFormLabel-root.MuiInputLabel-root {
   font-family: 'Roboto', sans-serif !important;
   font-size: 0.75rem !important;
   font-weight: 400 !important;
diff --git a/app/launch/vite.config.js b/app/launch/vite.config.js
index a6f058e..224cc02 100644
--- a/app/launch/vite.config.js
+++ b/app/launch/vite.config.js
@@ -27,4 +27,8 @@ export default defineConfig({
     // Support CRA-style env variable access
     'process.env': {},
   },
+  test: {
+    globals: true,
+    environment: 'jsdom',
+  },
 })

Reply via email to