diff --git a/index.html b/index.html
index e4b78ea..e377241 100644
--- a/index.html
+++ b/index.html
@@ -1,10 +1,46 @@
-
+
-
- Vite + React + TS
+
+
+
+
+
+
+
+
+
+
+
+ DEG Mods - Liberating Game Mods
diff --git a/package-lock.json b/package-lock.json
index 7ae6f7d..fab8113 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,7 @@
"eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
+ "ts-css-modules-vite-plugin": "1.0.20",
"typescript": "^5.2.2",
"vite": "^5.3.1"
}
@@ -387,6 +388,28 @@
"node": ">=6.9.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,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@cspotcode/source-map-support/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,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
@@ -1196,6 +1219,30 @@
"win32"
]
},
+ "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
+ },
+ "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
+ },
+ "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
+ },
+ "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
+ },
"node_modules/@types/babel__core": {
"version": "7.20.5",
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
@@ -1243,6 +1290,16 @@
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
+ "node_modules/@types/node": {
+ "version": "20.14.10",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
+ "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
"node_modules/@types/prop-types": {
"version": "15.7.12",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz",
@@ -1499,6 +1556,18 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/acorn-walk": {
+ "version": "8.3.3",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz",
+ "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==",
+ "dev": true,
+ "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",
@@ -1536,6 +1605,25 @@
"node": ">=4"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
+ "dev": true
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -1557,6 +1645,18 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -1619,6 +1719,15 @@
"node": ">=6"
}
},
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001641",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz",
@@ -1653,6 +1762,42 @@
"node": ">=4"
}
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/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,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -1680,6 +1825,12 @@
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
"dev": true
},
+ "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
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1723,6 +1874,15 @@
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
"dev": true
},
+ "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,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -2343,6 +2503,12 @@
"node": ">= 4"
}
},
+ "node_modules/immutable": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
+ "dev": true
+ },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -2385,6 +2551,18 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2552,6 +2730,12 @@
"yallist": "^3.0.2"
}
},
+ "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
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -2625,6 +2809,15 @@
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
+ "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==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -2775,6 +2968,25 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -2845,6 +3057,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -2938,6 +3162,23 @@
"queue-microtask": "^1.2.2"
}
},
+ "node_modules/sass": {
+ "version": "1.77.7",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.7.tgz",
+ "integrity": "sha512-9ywH75cO+rLjbrZ6en3Gp8qAMwPGBapFtlsMJoDTkcMU/bSe5a6cjKVUn5Jr4Gzg5GbP3HE8cm+02pLCgcoMow==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/scheduler": {
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
@@ -3072,6 +3313,60 @@
"typescript": ">=4.2.0"
}
},
+ "node_modules/ts-css-modules-vite-plugin": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/ts-css-modules-vite-plugin/-/ts-css-modules-vite-plugin-1.0.20.tgz",
+ "integrity": "sha512-FlD2dyFAhmfOcmaxWR5WQ7Eu0ypvBwqjxgY54kYpEgpCEBqLAdO/w40h5XZn5zlUKUVjc7f69AIsfuhlGVjBSw==",
+ "dev": true,
+ "dependencies": {
+ "postcss-js": "^4.0.0",
+ "sass": "^1.57.1",
+ "ts-node": "^10.9.1"
+ }
+ },
+ "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,
+ "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/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -3109,6 +3404,13 @@
"node": ">=14.17"
}
},
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/update-browserslist-db": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
@@ -3148,6 +3450,12 @@
"punycode": "^2.1.0"
}
},
+ "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
+ },
"node_modules/vite": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
@@ -3239,6 +3547,15 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
},
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
diff --git a/package.json b/package.json
index cdcafc2..7ee618e 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"eslint": "^8.57.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.7",
+ "ts-css-modules-vite-plugin": "1.0.20",
"typescript": "^5.2.2",
"vite": "^5.3.1"
}
diff --git a/public/assets/img/DEG Mods Backup Plan.png b/public/assets/img/DEG Mods Backup Plan.png
new file mode 100644
index 0000000..892f049
Binary files /dev/null and b/public/assets/img/DEG Mods Backup Plan.png differ
diff --git a/public/assets/img/DEG Mods Default PP.png b/public/assets/img/DEG Mods Default PP.png
new file mode 100644
index 0000000..78752b7
Binary files /dev/null and b/public/assets/img/DEG Mods Default PP.png differ
diff --git a/public/assets/img/DEG Mods Logo With Text.svg b/public/assets/img/DEG Mods Logo With Text.svg
new file mode 100644
index 0000000..3363a17
--- /dev/null
+++ b/public/assets/img/DEG Mods Logo With Text.svg
@@ -0,0 +1,32 @@
+
+
\ No newline at end of file
diff --git a/public/assets/img/DEG Mods Temp Mascot.png b/public/assets/img/DEG Mods Temp Mascot.png
new file mode 100644
index 0000000..b3a3481
Binary files /dev/null and b/public/assets/img/DEG Mods Temp Mascot.png differ
diff --git a/public/assets/img/DEGM Thumb.png b/public/assets/img/DEGM Thumb.png
new file mode 100644
index 0000000..763a04b
Binary files /dev/null and b/public/assets/img/DEGM Thumb.png differ
diff --git a/public/assets/img/DEGMods Placeholder Img.png b/public/assets/img/DEGMods Placeholder Img.png
new file mode 100644
index 0000000..32cf59f
Binary files /dev/null and b/public/assets/img/DEGMods Placeholder Img.png differ
diff --git a/public/assets/img/Logo with circle.png b/public/assets/img/Logo with circle.png
new file mode 100644
index 0000000..472717d
Binary files /dev/null and b/public/assets/img/Logo with circle.png differ
diff --git a/public/assets/img/ProfileLinkQR.png b/public/assets/img/ProfileLinkQR.png
new file mode 100644
index 0000000..d9e7cce
Binary files /dev/null and b/public/assets/img/ProfileLinkQR.png differ
diff --git a/public/assets/img/android-chrome-192x192.png b/public/assets/img/android-chrome-192x192.png
new file mode 100644
index 0000000..95780ad
Binary files /dev/null and b/public/assets/img/android-chrome-192x192.png differ
diff --git a/public/assets/img/android-chrome-512x512.png b/public/assets/img/android-chrome-512x512.png
new file mode 100644
index 0000000..9c44abc
Binary files /dev/null and b/public/assets/img/android-chrome-512x512.png differ
diff --git a/public/assets/img/favicon-16x16.png b/public/assets/img/favicon-16x16.png
new file mode 100644
index 0000000..814b363
Binary files /dev/null and b/public/assets/img/favicon-16x16.png differ
diff --git a/public/assets/img/favicon-32x32.png b/public/assets/img/favicon-32x32.png
new file mode 100644
index 0000000..89f241c
Binary files /dev/null and b/public/assets/img/favicon-32x32.png differ
diff --git a/public/assets/img/logo ver1.svg b/public/assets/img/logo ver1.svg
new file mode 100644
index 0000000..aa7dceb
--- /dev/null
+++ b/public/assets/img/logo ver1.svg
@@ -0,0 +1,25 @@
+
+
\ No newline at end of file
diff --git a/public/assets/img/logo ver2.svg b/public/assets/img/logo ver2.svg
new file mode 100644
index 0000000..db1269a
--- /dev/null
+++ b/public/assets/img/logo ver2.svg
@@ -0,0 +1,17 @@
+
+
\ No newline at end of file
diff --git a/public/assets/img/media-cache (1).jpg b/public/assets/img/media-cache (1).jpg
new file mode 100644
index 0000000..697e3f5
Binary files /dev/null and b/public/assets/img/media-cache (1).jpg differ
diff --git a/public/assets/img/media-cache (4).png b/public/assets/img/media-cache (4).png
new file mode 100644
index 0000000..51ce36c
Binary files /dev/null and b/public/assets/img/media-cache (4).png differ
diff --git a/public/assets/img/uBlog Logo.svg b/public/assets/img/uBlog Logo.svg
new file mode 100644
index 0000000..307a1e9
--- /dev/null
+++ b/public/assets/img/uBlog Logo.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/public/assets/img/vivian james.png b/public/assets/img/vivian james.png
new file mode 100644
index 0000000..1ef0b51
Binary files /dev/null and b/public/assets/img/vivian james.png differ
diff --git a/src/App.tsx b/src/App.tsx
index a73ccda..8084f2c 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,5 +1,7 @@
+import { Layout } from './layout'
+
function App() {
- return <>Hello Gamers>
+ return
}
export default App
diff --git a/src/components/Banner.tsx b/src/components/Banner.tsx
new file mode 100644
index 0000000..15400f0
--- /dev/null
+++ b/src/components/Banner.tsx
@@ -0,0 +1,16 @@
+import navStyles from '../styles/nav.module.scss'
+
+export const Banner = () => {
+ return (
+
+ )
+}
diff --git a/src/index.css b/src/index.css
index 6119ad9..0a84a20 100644
--- a/src/index.css
+++ b/src/index.css
@@ -24,8 +24,6 @@ a:hover {
body {
margin: 0;
- display: flex;
- place-items: center;
min-width: 320px;
min-height: 100vh;
}
diff --git a/src/layout/header.tsx b/src/layout/header.tsx
new file mode 100644
index 0000000..2efd5cb
--- /dev/null
+++ b/src/layout/header.tsx
@@ -0,0 +1,112 @@
+import navStyles from '../styles/nav.module.scss'
+import mainStyles from '../styles//main.module.scss'
+import { Banner } from '../components/Banner'
+
+export const Header = () => {
+ return (
+
+ )
+}
diff --git a/src/layout/index.tsx b/src/layout/index.tsx
new file mode 100644
index 0000000..6e38861
--- /dev/null
+++ b/src/layout/index.tsx
@@ -0,0 +1,10 @@
+import { Header } from './header'
+import mainStyles from '../styles/main.module.scss'
+
+export const Layout = () => {
+ return (
+
+
+
+ )
+}
diff --git a/src/styles/main.module.scss b/src/styles/main.module.scss
new file mode 100644
index 0000000..87685c7
--- /dev/null
+++ b/src/styles/main.module.scss
@@ -0,0 +1,25 @@
+.bodyMain {
+ background: unset;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ flex-grow: 1;
+ min-height: 100vh;
+ position: relative;
+ letter-spacing: 1px;
+ font-size: 16px;
+ line-height: 25px;
+ word-break: break-word;
+ color: #ffffff;
+}
+
+.ContainerMain {
+ max-width: 1400px;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: flex-start;
+ align-items: end;
+ padding: 0 10px 0 10px;
+ position: relative;
+}
diff --git a/src/styles/nav.module.scss b/src/styles/nav.module.scss
new file mode 100644
index 0000000..b6b6410
--- /dev/null
+++ b/src/styles/nav.module.scss
@@ -0,0 +1,269 @@
+.NavMain {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ grid-gap: 15px;
+ padding: 15px 0 0 0;
+
+ .NavMainTop,
+ .NavMainBottom {
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+
+ .NavMainTopInside {
+ width: 100%;
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 10px;
+
+ @media (max-width: 768px) {
+ grid-template-columns: 1fr;
+ }
+
+ .NMTI_Sec {
+ display: flex;
+ flex-direction: row;
+ justify-content: start;
+
+ @media (max-width: 768px) {
+ justify-content: center;
+ }
+
+ .NMTI_Sec_HomeLink {
+ transition: ease 0.4s;
+ display: flex;
+ flex-direction: row;
+ justify-content: start;
+ align-items: center;
+ grid-gap: 25px;
+ text-decoration: unset;
+ color: rgb(255, 255, 255);
+ font-weight: bold;
+ padding: 0;
+ opacity: 0.5;
+ min-width: 75px;
+
+ &:hover {
+ transition: ease 0.4s;
+ text-decoration: unset;
+ font-weight: bold;
+ opacity: 1;
+ color: unset;
+ }
+ }
+
+ .NMTI_Sec_HomeLink_Logo {
+ width: 100%;
+ max-width: 100px;
+
+ .NMTI_Sec_HomeLink_LogoImg {
+ width: 100%;
+ }
+ }
+
+ .NMTI_Sec_HomeLink_Name {
+ width: 100%;
+ height: 75px;
+ width: 75px;
+ }
+
+ .NMTI_SecInside {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: end;
+ align-items: center;
+ grid-gap: 15px;
+ padding: 5px 0;
+
+ @media (max-width: 768px) {
+ grid-gap: 10px;
+ white-space: nowrap;
+ max-width: 93vw;
+ justify-content: start;
+ overflow-x: auto;
+ }
+
+ .NMTI_SecInside_Link {
+ position: relative;
+ transition: ease 0.4s;
+ display: flex;
+ flex-direction: row;
+ grid-gap: 10px;
+ justify-content: start;
+ align-items: center;
+ height: auto;
+ width: auto;
+ padding: 10px 15px;
+ border-radius: 10px;
+ color: rgba(255, 255, 255, 0.25);
+ text-decoration: unset;
+ font-weight: bold;
+ transform: scale(1);
+ cursor: pointer;
+ white-space: nowrap;
+ line-height: 1;
+ max-width: 200px;
+
+ &:hover {
+ transition: ease 0.4s;
+ color: rgba(255, 255, 255, 0.75);
+ box-shadow: 0 0 8px 0 rgb(0, 0, 0, 0.1);
+ text-decoration: unset;
+
+ &::before {
+ transition: ease 0.4s;
+ opacity: 1;
+ }
+ }
+
+ &:active {
+ transition: ease 0.1s;
+ transform: scale(0.98);
+ }
+
+ &::before {
+ transition: ease 0.4s;
+ opacity: 0;
+ content: '';
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ background: linear-gradient(
+ to top right,
+ #262626,
+ #292929,
+ #262626
+ );
+ z-index: -1;
+ border-radius: 10px;
+ }
+
+ @media (max-width: 576px) {
+ flex-grow: 1;
+ padding: 10px 10px;
+ }
+
+ &.NMTI_SI_LinkTip {
+ position: relative;
+ transition: ease 0.4s;
+ display: flex;
+ flex-direction: row;
+ grid-gap: 10px;
+ justify-content: center;
+ align-items: center;
+ height: auto;
+ width: auto;
+ border-radius: 10px;
+ color: rgba(255, 255, 255, 0.25);
+ text-decoration: unset;
+ font-weight: bold;
+ transform: scale(1);
+ cursor: pointer;
+ overflow: initial;
+
+ &:hover {
+ transition: ease 0.4s;
+ color: #ffff5d;
+ }
+ }
+
+ &.NMTI_SI_LinkRelay:hover {
+ transition: ease 0.4s;
+ color: #a549ff;
+ }
+
+ &.NMTI_SecInside_LinkActive {
+ color: rgba(255, 255, 255, 0.75);
+ box-shadow: 0 0 8px 0 rgb(0, 0, 0, 0.1);
+ background: rgba(255, 255, 255, 0.05);
+ }
+
+ .NMTI_SecInside_LinkImg {
+ width: 25px;
+ height: 25px;
+ border-radius: 5px;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ .NavMainBottom {
+ border-top: solid 1px rgba(255, 255, 255, 0.05);
+ border-bottom: solid 1px rgba(255, 255, 255, 0.05);
+
+ .NavMainBottomInside {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ grid-gap: 10px;
+ justify-content: center;
+ align-items: center;
+ padding: 10px;
+ white-space: nowrap;
+ overflow-x: auto;
+
+ @media (max-width: 768px) {
+ justify-content: start;
+ }
+
+ .NavMainBottomInsideLink {
+ transition: ease 0.4s;
+ text-decoration: unset;
+ color: rgba(255, 255, 255, 0.25);
+ font-weight: bold;
+ padding: 5px 15px;
+
+ &:hover {
+ transition: ease 0.4s;
+ color: rgba(255, 255, 255, 0.75);
+ text-decoration: unset;
+ }
+
+ &.NMBILActive {
+ color: rgba(255, 255, 255, 0.65);
+ }
+ }
+ }
+ }
+
+ .FundingCampaign {
+ width: 100%;
+ background: rebeccapurple;
+ display: flex;
+ flex-direction: row;
+ justify-content: center;
+ align-items: center;
+ margin: -15px 0 0 0;
+
+ @media (max-width: 992px) {
+ flex-direction: column;
+ }
+
+ .FundingCampaignLink {
+ color: rgba(255, 255, 255, 0.75);
+ font-weight: bold;
+ text-decoration: unset;
+ padding: 10px;
+ flex-grow: 1;
+ text-align: center;
+
+ @media (max-width: 992px) {
+ width: 100%;
+ }
+
+ &:hover {
+ color: rgb(255, 255, 255);
+ }
+ }
+ }
+}
diff --git a/tsconfig.app.json b/tsconfig.app.json
index d739292..a3cb963 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -21,7 +21,9 @@
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
- "noFallthroughCasesInSwitch": true
+ "noFallthroughCasesInSwitch": true,
+
+ "plugins": [{ "name": "ts-css-modules-vite-plugin" }]
},
"include": ["src"]
}