diff --git a/.gitignore b/.gitignore
index 1c9da28..da95c27 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,7 @@
LICENSE
.astro
node_modules
-dist
\ No newline at end of file
+dist
+
+# graft's local graph cache — regenerable, not committed (run `graft build`).
+/graft/
diff --git a/.ignore b/.ignore
new file mode 100644
index 0000000..615e581
--- /dev/null
+++ b/.ignore
@@ -0,0 +1,5 @@
+# graft's cards are gitignored but should stay greppable: ripgrep reads
+# .ignore before .gitignore, so this re-admits the tree to search only.
+!graft/
+graft/.cache/
+graft/.graph/
diff --git a/package-lock.json b/package-lock.json
index 2963cf6..94ba37b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,9 +13,10 @@
"@astrojs/sitemap": "^3.6.0",
"@docsearch/js": "^3.6.0",
"@docsearch/react": "^3.6.0",
+ "@fontsource-variable/hanken-grotesk": "^5.3.0",
+ "@fontsource-variable/inter": "^5.3.0",
"@fontsource-variable/lexend": "^5.0.20",
- "@fontsource-variable/outfit": "^5.0.13",
- "@fontsource/press-start-2p": "^5.2.6",
+ "@fontsource-variable/space-grotesk": "^5.3.0",
"@heroicons/react": "^2.2.0",
"@tailwindcss/vite": "^4.0.9",
"@types/react": "^18.3.3",
@@ -165,7 +166,6 @@
"resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.27.0.tgz",
"integrity": "sha512-EJJ7WmvmUXZdchueKFCK8UZFyLqy4Hz64snNp0cTc7c0MKaSeDGYEDxVsIJKp15r7ORaoGxSyS4y6BGZMXYuCg==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@algolia/client-common": "5.27.0",
"@algolia/requester-browser-xhr": "5.27.0",
@@ -494,7 +494,6 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
"integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1",
@@ -1262,28 +1261,37 @@
"node": ">=18"
}
},
- "node_modules/@fontsource-variable/lexend": {
- "version": "5.2.9",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/lexend/-/lexend-5.2.9.tgz",
- "integrity": "sha512-m0AmQ/DC7g0VU4PCnh6O+T1aqAHt8QxUBb2h5FtuFHNJlH9U4UT2NZNiy2vYijFQ6c1xKl/yHUyKaHwPJVc3Gw==",
+ "node_modules/@fontsource-variable/hanken-grotesk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/hanken-grotesk/-/hanken-grotesk-5.3.0.tgz",
+ "integrity": "sha512-DOd0FqL+3cH2dfNy0JtSq9tUfxBz5mLmHMjTU0DOr3E9Zo6wxuatCl53DIPNrSPgCsnuKyM739BTIG5glCLirw==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
- "node_modules/@fontsource-variable/outfit": {
- "version": "5.2.6",
- "resolved": "https://registry.npmjs.org/@fontsource-variable/outfit/-/outfit-5.2.6.tgz",
- "integrity": "sha512-0wNlmsinE4taUgmRySxld13//NtnGwN58mBegexyhYuFqiQG/4Ho+5CCkiFxXijnojmCiaBaKkYt72LDwZHiKg==",
+ "node_modules/@fontsource-variable/inter": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/inter/-/inter-5.3.0.tgz",
+ "integrity": "sha512-OupL48va4JNofb97w6NYeF9S7W/kHNKM0Er8Dem5nqi4jeOLrVJDoE8tZEpnMJmtkvNbB1EIPPwHcdkF6b1oUA==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
}
},
- "node_modules/@fontsource/press-start-2p": {
- "version": "5.2.6",
- "resolved": "https://registry.npmjs.org/@fontsource/press-start-2p/-/press-start-2p-5.2.6.tgz",
- "integrity": "sha512-qzNBsl4yQaLpQLftsj9kfrNvOrhftj5MUoNk3vQf3tQwZ4mhpDD6XucBWySlA1kG2q054pVqRt73UZSP0AldYA==",
+ "node_modules/@fontsource-variable/lexend": {
+ "version": "5.2.9",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/lexend/-/lexend-5.2.9.tgz",
+ "integrity": "sha512-m0AmQ/DC7g0VU4PCnh6O+T1aqAHt8QxUBb2h5FtuFHNJlH9U4UT2NZNiy2vYijFQ6c1xKl/yHUyKaHwPJVc3Gw==",
+ "license": "OFL-1.1",
+ "funding": {
+ "url": "https://github.com/sponsors/ayuhito"
+ }
+ },
+ "node_modules/@fontsource-variable/space-grotesk": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/@fontsource-variable/space-grotesk/-/space-grotesk-5.3.0.tgz",
+ "integrity": "sha512-2IxmvfB08i9vnGB3Ym/AXvhRE+8XOjWMXIyDum03c+tPwH0FUoMNQfGpU8NXPxjbws0Vvss3AH0Zqt4oJBBAdw==",
"license": "OFL-1.1",
"funding": {
"url": "https://github.com/sponsors/ayuhito"
@@ -2694,7 +2702,6 @@
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz",
"integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
@@ -2705,7 +2712,6 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
"license": "MIT",
- "peer": true,
"peerDependencies": {
"@types/react": "^18.0.0"
}
@@ -2845,7 +2851,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"license": "MIT",
- "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2867,7 +2872,6 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
"integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"license": "MIT",
- "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -2898,7 +2902,6 @@
"resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.27.0.tgz",
"integrity": "sha512-2PvAgvxxJzA3+dB+ERfS2JPdvUsxNf89Cc2GF5iCcFupTULOwmbfinvqrC4Qj9nHJJDNf494NqEN/1f9177ZTQ==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@algolia/client-abtesting": "5.27.0",
"@algolia/client-analytics": "5.27.0",
@@ -3061,7 +3064,6 @@
"resolved": "https://registry.npmjs.org/astro/-/astro-5.18.1.tgz",
"integrity": "sha512-m4VWilWZ+Xt6NPoYzC4CgGZim/zQUO7WFL0RHCH0AiEavF1153iC3+me2atDvXpf/yX4PyGUeD8wZLq1cirT3g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@astrojs/compiler": "^2.13.0",
"@astrojs/internal-helpers": "0.7.6",
@@ -3836,7 +3838,6 @@
}
],
"license": "MIT",
- "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001718",
"electron-to-chromium": "^1.5.160",
@@ -7023,7 +7024,6 @@
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
"license": "MIT",
- "peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},
@@ -7086,7 +7086,6 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz",
"integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==",
"license": "MIT",
- "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -7096,7 +7095,6 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.0.tgz",
"integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"scheduler": "^0.26.0"
},
@@ -7475,7 +7473,6 @@
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz",
"integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==",
"license": "MIT",
- "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -7787,8 +7784,7 @@
"version": "4.1.10",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.10.tgz",
"integrity": "sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==",
- "license": "MIT",
- "peer": true
+ "license": "MIT"
},
"node_modules/tapable": {
"version": "2.2.2",
@@ -7925,7 +7921,6 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -8229,7 +8224,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"license": "MIT",
- "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@@ -8805,7 +8799,6 @@
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
diff --git a/package.json b/package.json
index d45fcdd..459227f 100644
--- a/package.json
+++ b/package.json
@@ -15,9 +15,10 @@
"@astrojs/sitemap": "^3.6.0",
"@docsearch/js": "^3.6.0",
"@docsearch/react": "^3.6.0",
+ "@fontsource-variable/hanken-grotesk": "^5.3.0",
+ "@fontsource-variable/inter": "^5.3.0",
"@fontsource-variable/lexend": "^5.0.20",
- "@fontsource-variable/outfit": "^5.0.13",
- "@fontsource/press-start-2p": "^5.2.6",
+ "@fontsource-variable/space-grotesk": "^5.3.0",
"@heroicons/react": "^2.2.0",
"@tailwindcss/vite": "^4.0.9",
"@types/react": "^18.3.3",
diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png
new file mode 100644
index 0000000..3cea70a
Binary files /dev/null and b/public/apple-touch-icon.png differ
diff --git a/public/favicon-192.png b/public/favicon-192.png
new file mode 100644
index 0000000..6503550
Binary files /dev/null and b/public/favicon-192.png differ
diff --git a/public/favicon-32.png b/public/favicon-32.png
new file mode 100644
index 0000000..8f20195
Binary files /dev/null and b/public/favicon-32.png differ
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index 2b1f62f..0000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/images/Icon_A.svg b/public/images/Icon_A.svg
new file mode 100644
index 0000000..2750a70
--- /dev/null
+++ b/public/images/Icon_A.svg
@@ -0,0 +1,8 @@
+
diff --git a/public/images/logo.webp b/public/images/logo.webp
deleted file mode 100644
index 2bcf563..0000000
Binary files a/public/images/logo.webp and /dev/null differ
diff --git a/src/components/common/Footer.astro b/src/components/common/Footer.astro
index 590a3d9..1743526 100644
--- a/src/components/common/Footer.astro
+++ b/src/components/common/Footer.astro
@@ -1,15 +1,25 @@