diff --git a/package-lock.json b/package-lock.json
index b1c5cb6..ca977fa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "nintendo-switch-eshop": "^7.1.3",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
"sharp": "^0.33.2",
@@ -1090,6 +1091,29 @@
"win32"
]
},
+ "node_modules/@sapphire/fetch": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/@sapphire/fetch/-/fetch-2.4.2.tgz",
+ "integrity": "sha512-aLZJ+ij3vAkHH6JlCbkT7Nj0dNLFdOEv0m1apNPFtUzHpaFdFeayYjLVfsY1JFVssvzjVr4x+mQTQ+XQIqraSg==",
+ "dev": true,
+ "dependencies": {
+ "cross-fetch": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/@sapphire/result": {
+ "version": "2.6.6",
+ "resolved": "https://registry.npmjs.org/@sapphire/result/-/result-2.6.6.tgz",
+ "integrity": "sha512-QCjj7X/QlY0QUCeAaZQmnrsMH/b2BMQYee3F1Y5iF17JagUQqO3KZlG7vfXWQU3SRAJX5OgZZynBjixUH+nNGg==",
+ "dev": true,
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
"node_modules/@sveltejs/adapter-auto": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.1.1.tgz",
@@ -1202,6 +1226,12 @@
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA=="
},
+ "node_modules/@types/country-data": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@types/country-data/-/country-data-0.0.2.tgz",
+ "integrity": "sha512-9TtlOfoHEMWojmAV1IoisMlM9kXGw4QDAamkXUiCZBtU9sY3187naTc1OXwD3QVE1mMkPZbBVdyjVdBu7wJlNA==",
+ "dev": true
+ },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -1540,6 +1570,25 @@
"node": ">= 0.6"
}
},
+ "node_modules/country-data": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/country-data/-/country-data-0.0.31.tgz",
+ "integrity": "sha512-YqlY/i6ikZwoBFfdjK+hJTGaBdTgDpXLI15MCj2UsXZ2cPBb+Kx86AXmDH7PRGt0LUleck0cCgNdWeIhfbcxkQ==",
+ "dev": true,
+ "dependencies": {
+ "currency-symbol-map": "~2",
+ "underscore": ">1.4.4"
+ }
+ },
+ "node_modules/cross-fetch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+ "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+ "dev": true,
+ "dependencies": {
+ "node-fetch": "^2.6.12"
+ }
+ },
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -1613,6 +1662,12 @@
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
"dev": true
},
+ "node_modules/currency-symbol-map": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/currency-symbol-map/-/currency-symbol-map-2.2.0.tgz",
+ "integrity": "sha512-fPZJ3jqM68+AAgqQ7UaGbgHL/39rp6l7GyqS2k1HJPu/kpS8D07x/+Uup6a9tCUKIlOFcRrDCf1qxSt8jnI5BA==",
+ "dev": true
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -1849,6 +1904,28 @@
"node": ">=8.6.0"
}
},
+ "node_modules/fast-xml-parser": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz",
+ "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/naturalintelligence"
+ }
+ ],
+ "dependencies": {
+ "strnum": "^1.0.5"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
"node_modules/fastq": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -2243,6 +2320,23 @@
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
},
+ "node_modules/nintendo-switch-eshop": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/nintendo-switch-eshop/-/nintendo-switch-eshop-7.1.3.tgz",
+ "integrity": "sha512-qqAx8/tUJNCzVz0ej6wQ8JI5FtFeF21S7cPeSUrMysVQNbVrjkI/dZic2kR4EbIecjk2TD/DYtqKnMUDDqQvGQ==",
+ "dev": true,
+ "dependencies": {
+ "@sapphire/fetch": "^2.4.1",
+ "@sapphire/result": "^2.6.1",
+ "@types/country-data": "^0.0.2",
+ "country-data": "^0.0.31",
+ "fast-xml-parser": "^4.2.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
"node_modules/node-abi": {
"version": "3.56.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz",
@@ -2259,6 +2353,26 @@
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
"integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
},
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -2828,6 +2942,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/strnum": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+ "dev": true
+ },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -3047,6 +3167,12 @@
"node": ">=6"
}
},
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
"node_modules/tslib": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
@@ -3077,6 +3203,12 @@
"node": ">=14.17"
}
},
+ "node_modules/underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
+ "dev": true
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -3212,6 +3344,22 @@
}
}
},
+ "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==",
+ "dev": true
+ },
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/package.json b/package.json
index 32a22cd..f867f10 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "nintendo-switch-eshop": "^7.1.3",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
"sharp": "^0.33.2",
diff --git a/src/components/LogoWithTextHorizontal.svelte b/src/components/LogoWithTextHorizontal.svelte
new file mode 100644
index 0000000..1a070bd
--- /dev/null
+++ b/src/components/LogoWithTextHorizontal.svelte
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/ProgressBar.svelte b/src/components/ProgressBar.svelte
new file mode 100644
index 0000000..8b03c5c
--- /dev/null
+++ b/src/components/ProgressBar.svelte
@@ -0,0 +1,75 @@
+
+
+
+
+
diff --git a/src/components/Spinner.svelte b/src/components/Spinner.svelte
new file mode 100644
index 0000000..2bd064f
--- /dev/null
+++ b/src/components/Spinner.svelte
@@ -0,0 +1,74 @@
+
+ {#each Array(9) as _, i}
+
+ {/each}
+
+
+
diff --git a/src/components/Wordmark.svelte b/src/components/Wordmark.svelte
new file mode 100644
index 0000000..6e3fa51
--- /dev/null
+++ b/src/components/Wordmark.svelte
@@ -0,0 +1,28 @@
+
+
+
diff --git a/src/lib/css/index.css b/src/lib/css/index.css
index 9c48930..bbef2a0 100644
--- a/src/lib/css/index.css
+++ b/src/lib/css/index.css
@@ -50,3 +50,23 @@ body {
::-webkit-scrollbar-thumb:hover {
background: #526ca8;
}
+
+button {
+ appearance: none;
+ border: none;
+ padding: 8px 32px;
+ background-color: var(--color-primary);
+ border: var(--border-primary);
+ border-radius: 16px;
+ cursor: pointer;
+ transition: 0.2s ease-in-out filter;
+}
+
+button:hover {
+ filter: brightness(1.1);
+}
+
+button:active {
+ transition: 0.05s ease-in-out filter;
+ filter: brightness(0.9);
+}
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index c5a2a6f..85a0cdd 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -1,19 +1,42 @@
-
-
-
-
-
+{#if !isNavExcluded}
+
-
-
-
+{/if}
+
+{#if !isBgExcluded}
+
+
-
+{:else}
+
+{/if}
diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts
deleted file mode 100644
index 189f71e..0000000
--- a/src/routes/+layout.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const prerender = true;
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 11ecb3f..23acbe2 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -8,6 +8,7 @@
import totk from "$assets/cards/totk.webp";
import scarletviolet from "$assets/cards/scarlet-violet.webp";
import CardCarousel from "$components/CardCarousel.svelte";
+ import Wordmark from "$components/Wordmark.svelte";
let logoSizes = {
small: 256,
@@ -38,7 +39,9 @@
-
+
{strings.landingOne}
@@ -46,6 +49,7 @@
+
We care about preservation...
+
+
+ ...so we're setting out to continue the beloved Yuzu emulator, as a non-profit drive
+ for hardware preservation and research.
+
+
+
+
+
diff --git a/src/routes/mockup/boot/[game]/+page.server.ts b/src/routes/mockup/boot/[game]/+page.server.ts
new file mode 100644
index 0000000..52cd706
--- /dev/null
+++ b/src/routes/mockup/boot/[game]/+page.server.ts
@@ -0,0 +1,11 @@
+import type { PageServerLoad } from "./$types";
+import { getQueriedGamesAmerica, type GameUS } from "nintendo-switch-eshop";
+
+export const load: PageServerLoad = async ({ params }) => {
+ const games = await getQueriedGamesAmerica(params.game);
+ return {
+ props: {
+ games,
+ },
+ };
+};
diff --git a/src/routes/mockup/boot/[game]/+page.svelte b/src/routes/mockup/boot/[game]/+page.svelte
new file mode 100644
index 0000000..e5cab4a
--- /dev/null
+++ b/src/routes/mockup/boot/[game]/+page.svelte
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
Launching {game.title}
+
Shaders compiled: {shadersDone} / {shadersTotal}
+
+
+
+
+
+
+