new file: src/components/EasterEggsReact.jsx
This commit is contained in:
parent
fdfd70e55c
commit
d7fc469a3d
41 changed files with 2662 additions and 61 deletions
|
|
@ -1,5 +1,9 @@
|
|||
// @ts-check
|
||||
import { defineConfig } from 'astro/config';
|
||||
|
||||
import react from '@astrojs/react';
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({});
|
||||
export default defineConfig({
|
||||
integrations: [react()]
|
||||
});
|
||||
BIN
contribute.zip
Normal file
BIN
contribute.zip
Normal file
Binary file not shown.
BIN
events.zip
Normal file
BIN
events.zip
Normal file
Binary file not shown.
BIN
gameforge.zip
Normal file
BIN
gameforge.zip
Normal file
Binary file not shown.
607
package-lock.json
generated
607
package-lock.json
generated
|
|
@ -8,7 +8,12 @@
|
|||
"name": "aethex.us",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"astro": "^5.16.11"
|
||||
"@astrojs/react": "^4.4.2",
|
||||
"@types/react": "^19.2.9",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"astro": "^5.16.11",
|
||||
"react": "^19.2.3",
|
||||
"react-dom": "^19.2.3"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/compiler": {
|
||||
|
|
@ -64,6 +69,26 @@
|
|||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/react": {
|
||||
"version": "4.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.4.2.tgz",
|
||||
"integrity": "sha512-1tl95bpGfuaDMDn8O3x/5Dxii1HPvzjvpL2YTuqOOrQehs60I2DKiDgh1jrKc7G8lv+LQT5H15V6QONQ+9waeQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@vitejs/plugin-react": "^4.7.0",
|
||||
"ultrahtml": "^1.6.0",
|
||||
"vite": "^6.4.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0",
|
||||
"@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0",
|
||||
"react": "^17.0.2 || ^18.0.0 || ^19.0.0",
|
||||
"react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/telemetry": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
|
||||
|
|
@ -82,6 +107,167 @@
|
|||
"node": "18.20.8 || ^20.3.0 || >=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz",
|
||||
"integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.28.5",
|
||||
"js-tokens": "^4.0.0",
|
||||
"picocolors": "^1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz",
|
||||
"integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
|
||||
"integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.28.6",
|
||||
"@babel/generator": "^7.28.6",
|
||||
"@babel/helper-compilation-targets": "^7.28.6",
|
||||
"@babel/helper-module-transforms": "^7.28.6",
|
||||
"@babel/helpers": "^7.28.6",
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/template": "^7.28.6",
|
||||
"@babel/traverse": "^7.28.6",
|
||||
"@babel/types": "^7.28.6",
|
||||
"@jridgewell/remapping": "^2.3.5",
|
||||
"convert-source-map": "^2.0.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
"json5": "^2.2.3",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/babel"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz",
|
||||
"integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/types": "^7.28.6",
|
||||
"@jridgewell/gen-mapping": "^0.3.12",
|
||||
"@jridgewell/trace-mapping": "^0.3.28",
|
||||
"jsesc": "^3.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
|
||||
"integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/compat-data": "^7.28.6",
|
||||
"@babel/helper-validator-option": "^7.27.1",
|
||||
"browserslist": "^4.24.0",
|
||||
"lru-cache": "^5.1.1",
|
||||
"semver": "^6.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-globals": {
|
||||
"version": "7.28.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
|
||||
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-imports": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
|
||||
"integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/traverse": "^7.28.6",
|
||||
"@babel/types": "^7.28.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-module-transforms": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
|
||||
"integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-module-imports": "^7.28.6",
|
||||
"@babel/helper-validator-identifier": "^7.28.5",
|
||||
"@babel/traverse": "^7.28.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-plugin-utils": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
|
||||
"integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||
|
|
@ -100,6 +286,28 @@
|
|||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-option": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
|
||||
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz",
|
||||
"integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.28.6",
|
||||
"@babel/types": "^7.28.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz",
|
||||
|
|
@ -115,6 +323,68 @@
|
|||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-react-jsx-self": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
|
||||
"integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0-0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-react-jsx-source": {
|
||||
"version": "7.27.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
|
||||
"integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.27.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@babel/core": "^7.0.0-0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
|
||||
"integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.28.6",
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/types": "^7.28.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz",
|
||||
"integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.28.6",
|
||||
"@babel/generator": "^7.28.6",
|
||||
"@babel/helper-globals": "^7.28.0",
|
||||
"@babel/parser": "^7.28.6",
|
||||
"@babel/template": "^7.28.6",
|
||||
"@babel/types": "^7.28.6",
|
||||
"debug": "^4.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.28.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz",
|
||||
|
|
@ -1032,18 +1302,63 @@
|
|||
"url": "https://opencollective.com/libvips"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
"version": "0.3.13",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
|
||||
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/remapping": {
|
||||
"version": "2.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
|
||||
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/gen-mapping": "^0.3.5",
|
||||
"@jridgewell/trace-mapping": "^0.3.24"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/resolve-uri": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
|
||||
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@jridgewell/sourcemap-codec": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
|
||||
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@jridgewell/trace-mapping": {
|
||||
"version": "0.3.31",
|
||||
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
|
||||
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@jridgewell/resolve-uri": "^3.1.0",
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@oslojs/encoding": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
|
||||
"integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@rolldown/pluginutils": {
|
||||
"version": "1.0.0-beta.27",
|
||||
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
|
||||
"integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@rollup/pluginutils": {
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
|
||||
|
|
@ -1464,6 +1779,47 @@
|
|||
"integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/babel__core": {
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
|
||||
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7",
|
||||
"@types/babel__generator": "*",
|
||||
"@types/babel__template": "*",
|
||||
"@types/babel__traverse": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__generator": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
|
||||
"integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__template": {
|
||||
"version": "7.4.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
|
||||
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.1.0",
|
||||
"@babel/types": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/babel__traverse": {
|
||||
"version": "7.28.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
|
||||
"integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.28.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/debug": {
|
||||
"version": "4.1.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
|
||||
|
|
@ -1512,6 +1868,26 @@
|
|||
"@types/unist": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "19.2.9",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.9.tgz",
|
||||
"integrity": "sha512-Lpo8kgb/igvMIPeNV2rsYKTgaORYdO1XGVZ4Qz3akwOj0ySGYMPlQWa8BaLn0G63D1aSaAQ5ldR06wCpChQCjA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"csstype": "^3.2.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/react-dom": {
|
||||
"version": "19.2.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
|
||||
"integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"peerDependencies": {
|
||||
"@types/react": "^19.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/unist": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
|
||||
|
|
@ -1524,6 +1900,26 @@
|
|||
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/@vitejs/plugin-react": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
|
||||
"integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.28.0",
|
||||
"@babel/plugin-transform-react-jsx-self": "^7.27.1",
|
||||
"@babel/plugin-transform-react-jsx-source": "^7.27.1",
|
||||
"@rolldown/pluginutils": "1.0.0-beta.27",
|
||||
"@types/babel__core": "^7.20.5",
|
||||
"react-refresh": "^0.17.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.18.0 || >=16.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
|
|
@ -1771,6 +2167,15 @@
|
|||
"integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/baseline-browser-mapping": {
|
||||
"version": "2.9.17",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz",
|
||||
"integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"baseline-browser-mapping": "dist/cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/boolbase": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
|
||||
|
|
@ -1799,6 +2204,40 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/browserslist": {
|
||||
"version": "4.28.1",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz",
|
||||
"integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.9.0",
|
||||
"caniuse-lite": "^1.0.30001759",
|
||||
"electron-to-chromium": "^1.5.263",
|
||||
"node-releases": "^2.0.27",
|
||||
"update-browserslist-db": "^1.2.0"
|
||||
},
|
||||
"bin": {
|
||||
"browserslist": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
|
||||
}
|
||||
},
|
||||
"node_modules/camelcase": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz",
|
||||
|
|
@ -1811,6 +2250,26 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001766",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz",
|
||||
"integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "CC-BY-4.0"
|
||||
},
|
||||
"node_modules/ccount": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
|
||||
|
|
@ -1939,6 +2398,12 @@
|
|||
"integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/convert-source-map": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
|
||||
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cookie": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
|
||||
|
|
@ -2053,6 +2518,12 @@
|
|||
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
|
||||
"license": "CC0-1.0"
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "3.2.3",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
|
||||
"integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.4.3",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||
|
|
@ -2236,6 +2707,12 @@
|
|||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.5.278",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz",
|
||||
"integrity": "sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "10.6.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
|
||||
|
|
@ -2301,6 +2778,15 @@
|
|||
"@esbuild/win32-x64": "0.25.12"
|
||||
}
|
||||
},
|
||||
"node_modules/escalade": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/escape-string-regexp": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
|
||||
|
|
@ -2395,6 +2881,15 @@
|
|||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/gensync": {
|
||||
"version": "1.0.0-beta.2",
|
||||
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
|
||||
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/get-east-asian-width": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz",
|
||||
|
|
@ -2717,6 +3212,12 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/js-yaml": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
|
||||
|
|
@ -2729,6 +3230,30 @@
|
|||
"js-yaml": "bin/js-yaml.js"
|
||||
}
|
||||
},
|
||||
"node_modules/jsesc": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
||||
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jsesc": "bin/jsesc"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/json5": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
||||
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"json5": "lib/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/kleur": {
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
|
||||
|
|
@ -3648,6 +4173,12 @@
|
|||
"integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/node-releases": {
|
||||
"version": "2.0.27",
|
||||
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
|
||||
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/normalize-path": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
|
|
@ -3872,6 +4403,38 @@
|
|||
"integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "19.2.3",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz",
|
||||
"integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-dom": {
|
||||
"version": "19.2.3",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz",
|
||||
"integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"scheduler": "^0.27.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^19.2.3"
|
||||
}
|
||||
},
|
||||
"node_modules/react-refresh": {
|
||||
"version": "0.17.0",
|
||||
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
|
||||
"integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/readdirp": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
|
||||
|
|
@ -4166,6 +4729,12 @@
|
|||
"node": ">=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/scheduler": {
|
||||
"version": "0.27.0",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
|
||||
"integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.7.3",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
|
||||
|
|
@ -4718,6 +5287,36 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
|
||||
"integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "tidelift",
|
||||
"url": "https://tidelift.com/funding/github/npm/browserslist"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"escalade": "^3.2.0",
|
||||
"picocolors": "^1.1.1"
|
||||
},
|
||||
"bin": {
|
||||
"update-browserslist-db": "cli.js"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"browserslist": ">= 4.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vfile": {
|
||||
"version": "6.0.3",
|
||||
"resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
|
||||
|
|
@ -4911,6 +5510,12 @@
|
|||
"integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/yargs-parser": {
|
||||
"version": "21.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
|
||||
|
|
|
|||
|
|
@ -9,6 +9,11 @@
|
|||
"astro": "astro"
|
||||
},
|
||||
"dependencies": {
|
||||
"astro": "^5.16.11"
|
||||
"@astrojs/react": "^4.4.2",
|
||||
"@types/react": "^19.2.9",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"astro": "^5.16.11",
|
||||
"react": "^19.2.3",
|
||||
"react-dom": "^19.2.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,102 @@
|
|||
/* === Utility/Demo Page Hero Styles === */
|
||||
.tool-hero {
|
||||
position: relative;
|
||||
text-align: center;
|
||||
padding: 64px 0 36px 0;
|
||||
margin-bottom: 0.5em;
|
||||
z-index: 1;
|
||||
}
|
||||
.tool-hero-bg {
|
||||
position: absolute;
|
||||
top: 0; left: 0; width: 100%; height: 100%;
|
||||
z-index: 0;
|
||||
opacity: 0.9;
|
||||
background: linear-gradient(120deg, #181818 60%, #222 100%);
|
||||
}
|
||||
.tool-hero-bg-random { background: linear-gradient(120deg, #0066ff 0%, #ff4d4d 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-live { background: linear-gradient(120deg, #ff4d4d 0%, #ffa500 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-search { background: linear-gradient(120deg, #6cf 0%, #222 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-sso { background: linear-gradient(120deg, #0066ff 0%, #ffc700 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-fame { background: linear-gradient(120deg, #ffc700 0%, #ff4d4d 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-timeline { background: linear-gradient(120deg, #6cf 0%, #ffa500 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-egg { background: linear-gradient(120deg, #ff4d4d 0%, #fff 100%); opacity: 0.18; }
|
||||
.tool-hero-bg-theme { background: linear-gradient(120deg, #6cf 0%, #ffc700 100%); opacity: 0.18; }
|
||||
.tool-hero-title {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
font-size: 2.5em;
|
||||
font-weight: 900;
|
||||
letter-spacing: 4px;
|
||||
margin-bottom: 0.2em;
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
.tool-hero-desc {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
font-size: 1.15em;
|
||||
color: #bbb;
|
||||
max-width: 600px;
|
||||
margin: 0 auto 0.5em auto;
|
||||
font-weight: 400;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.tool-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
min-height: 220px;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
/* === Theme Switcher Styles === */
|
||||
.theme-switcher {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1.2em;
|
||||
background: rgba(20, 20, 30, 0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 2em;
|
||||
margin: 2em auto 1em auto;
|
||||
max-width: 420px;
|
||||
color: #fff;
|
||||
font-size: 1.1em;
|
||||
border: 1.5px solid #333;
|
||||
}
|
||||
.theme-switcher span {
|
||||
font-weight: 700;
|
||||
letter-spacing: 1px;
|
||||
margin-right: 0.7em;
|
||||
}
|
||||
.theme-btn {
|
||||
background: linear-gradient(135deg, #222 60%, #333 100%);
|
||||
color: #6cf;
|
||||
border: 1.5px solid #6cf;
|
||||
border-radius: 12px;
|
||||
padding: 0.5em 1.3em;
|
||||
font-size: 1em;
|
||||
font-family: inherit;
|
||||
font-weight: 700;
|
||||
margin-right: 0.5em;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, color 0.2s, box-shadow 0.2s, border 0.2s;
|
||||
box-shadow: 0 2px 8px #0066ff22;
|
||||
}
|
||||
.theme-btn:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
.theme-btn:hover, .theme-btn:focus {
|
||||
background: linear-gradient(135deg, #0066ff 60%, #003380 100%);
|
||||
color: #fff;
|
||||
border-color: #ffc700;
|
||||
box-shadow: 0 4px 16px #0066ff44;
|
||||
outline: none;
|
||||
}
|
||||
.theme-btn:active {
|
||||
background: #222;
|
||||
color: #ffc700;
|
||||
border-color: #ff4d4d;
|
||||
}
|
||||
@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@300;400;700;900&display=swap');
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
|
|
|
|||
45
src/components/EasterEggs.astro
Normal file
45
src/components/EasterEggs.astro
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
// Easter eggs and badge system for AeThex (mockup)
|
||||
let found = false;
|
||||
function revealEgg() {
|
||||
found = true;
|
||||
alert('🥚 You found an AeThex Easter Egg! Badge unlocked!');
|
||||
}
|
||||
---
|
||||
<div class="easter-eggs">
|
||||
<button class="egg-btn" client:click={revealEgg}>🔍 Find the Secret Egg</button>
|
||||
{found && <div class="egg-badge">🥚 AeThex Egg Hunter Badge!</div>}
|
||||
</div>
|
||||
<style>
|
||||
.easter-eggs {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin: 2em 0 1em 0;
|
||||
}
|
||||
.egg-btn {
|
||||
background: #ffd580;
|
||||
color: #222;
|
||||
border: none;
|
||||
border-radius: 16px;
|
||||
padding: 1em 2em;
|
||||
font-size: 1.1em;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
transition: background 0.2s, color 0.2s;
|
||||
}
|
||||
.egg-btn:hover {
|
||||
background: #ff1a1a;
|
||||
color: #fff;
|
||||
}
|
||||
.egg-badge {
|
||||
margin-top: 1.2em;
|
||||
font-size: 1.2em;
|
||||
color: #ff1a1a;
|
||||
font-weight: 700;
|
||||
background: #fff3;
|
||||
border-radius: 12px;
|
||||
padding: 0.5em 1.2em;
|
||||
}
|
||||
</style>
|
||||
19
src/components/EasterEggsReact.jsx
Normal file
19
src/components/EasterEggsReact.jsx
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import React, { useState } from 'react';
|
||||
|
||||
export default function EasterEggsReact() {
|
||||
const [found, setFound] = useState(false);
|
||||
|
||||
function revealEgg() {
|
||||
setFound(true);
|
||||
alert('🥚 You found an AeThex Easter Egg! Badge unlocked!');
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="easter-eggs">
|
||||
<button className="egg-btn" onClick={revealEgg}>
|
||||
🔍 Find the Secret Egg
|
||||
</button>
|
||||
{found && <div className="egg-badge">🥚 AeThex Egg Hunter Badge!</div>}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
53
src/components/EcosystemTimeline.astro
Normal file
53
src/components/EcosystemTimeline.astro
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
---
|
||||
// Interactive ecosystem timeline for AeThex (mockup)
|
||||
const events = [
|
||||
{ date: '2022', event: 'AeThex Foundation launched' },
|
||||
{ date: '2023', event: 'AeThex Corporation formed' },
|
||||
{ date: '2024', event: 'Labs released Nexus Engine v2.0' },
|
||||
{ date: '2025', event: 'Gameforge beta launched' },
|
||||
{ date: '2026', event: 'Educate platform live' }
|
||||
];
|
||||
---
|
||||
<div class="ecosystem-timeline">
|
||||
<h3>AeThex Ecosystem Timeline</h3>
|
||||
<ul>
|
||||
{events.map(e => (
|
||||
<li><span class="timeline-date">{e.date}</span> — {e.event}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<style>
|
||||
.ecosystem-timeline {
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em;
|
||||
margin: 2em auto 1em auto;
|
||||
max-width: 420px;
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
border: 1.5px solid #333;
|
||||
}
|
||||
.ecosystem-timeline h3 {
|
||||
margin-top: 0;
|
||||
font-size: 1.15em;
|
||||
letter-spacing: 0.02em;
|
||||
color: #ffd580;
|
||||
}
|
||||
.ecosystem-timeline ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0.5em 0 0 0;
|
||||
}
|
||||
.ecosystem-timeline li {
|
||||
margin-bottom: 0.7em;
|
||||
font-size: 0.98em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.timeline-date {
|
||||
color: #ff1a1a;
|
||||
font-size: 0.92em;
|
||||
margin-right: 0.5em;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
51
src/components/HallOfFameShame.astro
Normal file
51
src/components/HallOfFameShame.astro
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
---
|
||||
// Hall of Fame/Shame mockup for AeThex
|
||||
const fame = [
|
||||
{ name: 'Alice', reason: 'Top contributor' },
|
||||
{ name: 'Bob', reason: 'Most helpful bug report' }
|
||||
];
|
||||
const shame = [
|
||||
{ name: 'ScammerMcScamface', reason: 'Tried to phish the AI' },
|
||||
{ name: 'SneakyPete', reason: 'Fake giveaway spam' }
|
||||
];
|
||||
---
|
||||
<div class="hall-of-fame-shame">
|
||||
<h3>Hall of Fame</h3>
|
||||
<ul class="fame-list">
|
||||
{fame.map(item => (
|
||||
<li><span class="fame-name">{item.name}</span> — {item.reason}</li>
|
||||
))}
|
||||
</ul>
|
||||
<h3>Hall of Shame</h3>
|
||||
<ul class="shame-list">
|
||||
{shame.map(item => (
|
||||
<li><span class="shame-name">{item.name}</span> — {item.reason}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<style>
|
||||
.hall-of-fame-shame {
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em;
|
||||
margin: 2em auto 1em auto;
|
||||
max-width: 420px;
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
border: 1.5px solid #333;
|
||||
}
|
||||
.fame-list, .shame-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0.5em 0 1em 0;
|
||||
}
|
||||
.fame-name {
|
||||
color: #ffd580;
|
||||
font-weight: 700;
|
||||
}
|
||||
.shame-name {
|
||||
color: #ff1a1a;
|
||||
font-weight: 700;
|
||||
}
|
||||
</style>
|
||||
52
src/components/LiveActivityFeed.astro
Normal file
52
src/components/LiveActivityFeed.astro
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
---
|
||||
// Live activity/news feed mockup for AeThex ecosystem
|
||||
const feed = [
|
||||
{ time: 'Just now', message: 'New user registered on Gameforge.' },
|
||||
{ time: '2 min ago', message: 'Labs released a new AI Copilot update.' },
|
||||
{ time: '10 min ago', message: 'Foundation approved a new open-source proposal.' },
|
||||
{ time: '30 min ago', message: 'Educate published a new tutorial.' },
|
||||
{ time: '1 hr ago', message: 'Corporation deployed a major infrastructure upgrade.' }
|
||||
];
|
||||
---
|
||||
<div class="live-activity-feed">
|
||||
<h3>Live Activity Feed</h3>
|
||||
<ul>
|
||||
{feed.map(item => (
|
||||
<li><span class="feed-time">[{item.time}]</span> {item.message}</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
<style>
|
||||
.live-activity-feed {
|
||||
background: rgba(20,20,30,0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em;
|
||||
margin: 2em auto 1em auto;
|
||||
max-width: 420px;
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
border: 1.5px solid #333;
|
||||
}
|
||||
.live-activity-feed h3 {
|
||||
margin-top: 0;
|
||||
font-size: 1.15em;
|
||||
letter-spacing: 0.02em;
|
||||
color: #ff1a1a;
|
||||
}
|
||||
.live-activity-feed ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0.5em 0 0 0;
|
||||
}
|
||||
.live-activity-feed li {
|
||||
margin-bottom: 0.7em;
|
||||
font-size: 0.98em;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.feed-time {
|
||||
color: #ffd580;
|
||||
font-size: 0.92em;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
</style>
|
||||
70
src/components/PassportSSODemo.astro
Normal file
70
src/components/PassportSSODemo.astro
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
---
|
||||
// One-click Passport/SSO demo for AeThex ecosystem (mockup)
|
||||
let loggedIn = false;
|
||||
let username = '';
|
||||
function handleLogin(e) {
|
||||
e.preventDefault();
|
||||
loggedIn = true;
|
||||
username = 'demo_user';
|
||||
}
|
||||
function handleLogout(e) {
|
||||
e.preventDefault();
|
||||
loggedIn = false;
|
||||
username = '';
|
||||
}
|
||||
---
|
||||
<div class="passport-sso-demo">
|
||||
<h3>One-Click Passport (SSO Demo)</h3>
|
||||
{loggedIn ? (
|
||||
<div class="sso-status">
|
||||
<span class="sso-user">Welcome, {username}!</span>
|
||||
<button class="sso-btn logout" onclick={handleLogout}>Log out</button>
|
||||
</div>
|
||||
) : (
|
||||
<form onsubmit={handleLogin} class="sso-form">
|
||||
<button class="sso-btn login" type="submit">Sign in with AeThex Passport</button>
|
||||
</form>
|
||||
)}
|
||||
</div>
|
||||
<style>
|
||||
.passport-sso-demo {
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em;
|
||||
margin: 2em auto 1em auto;
|
||||
max-width: 420px;
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
border: 1.5px solid #333;
|
||||
text-align: center;
|
||||
}
|
||||
.sso-btn {
|
||||
background: #ff1a1a;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
padding: 0.7em 1.5em;
|
||||
font-size: 1.1em;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
margin-top: 1em;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.sso-btn.login:hover {
|
||||
background: #d10000;
|
||||
}
|
||||
.sso-btn.logout {
|
||||
background: #ffd580;
|
||||
color: #222;
|
||||
}
|
||||
.sso-btn.logout:hover {
|
||||
background: #ff1a1a;
|
||||
color: #fff;
|
||||
}
|
||||
.sso-user {
|
||||
font-size: 1.08em;
|
||||
font-weight: 600;
|
||||
margin-right: 1em;
|
||||
}
|
||||
</style>
|
||||
40
src/components/PassportSSODemoReact.jsx
Normal file
40
src/components/PassportSSODemoReact.jsx
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import React, { useState } from 'react';
|
||||
|
||||
export default function PassportSSODemoReact() {
|
||||
const [loggedIn, setLoggedIn] = useState(false);
|
||||
const [username, setUsername] = useState('');
|
||||
|
||||
function handleLogin(e) {
|
||||
e.preventDefault();
|
||||
if (username.trim()) {
|
||||
setLoggedIn(true);
|
||||
}
|
||||
}
|
||||
|
||||
function handleLogout() {
|
||||
setLoggedIn(false);
|
||||
setUsername('');
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="sso-demo">
|
||||
{loggedIn ? (
|
||||
<div>
|
||||
<p>Welcome, {username}!</p>
|
||||
<button className="sso-btn logout" onClick={handleLogout}>Log out</button>
|
||||
</div>
|
||||
) : (
|
||||
<form className="sso-form" onSubmit={handleLogin}>
|
||||
<input
|
||||
type="text"
|
||||
placeholder="Username"
|
||||
value={username}
|
||||
onChange={e => setUsername(e.target.value)}
|
||||
className="sso-input"
|
||||
/>
|
||||
<button className="sso-btn login" type="submit">Log in</button>
|
||||
</form>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
286
src/components/PortalFooterBar.astro
Normal file
286
src/components/PortalFooterBar.astro
Normal file
|
|
@ -0,0 +1,286 @@
|
|||
---
|
||||
// Modular persistent portal/footer bar for AeThex ecosystem
|
||||
const { entityFooter } = Astro.props;
|
||||
const divisionLinks = [
|
||||
{ name: 'Home', url: '/', icon: 'home' },
|
||||
{ name: 'Foundation', url: '/foundation', icon: 'foundation' },
|
||||
{ name: 'Corporation', url: '/corporation', icon: 'corporation' },
|
||||
{ name: 'Labs', url: '/labs', icon: 'labs' },
|
||||
];
|
||||
const toolLinks = [
|
||||
{ name: 'Live Feed', url: '/live-activity', icon: 'live' },
|
||||
{ name: 'Universal Search', url: '/universal-search', icon: 'search' },
|
||||
{ name: 'SSO Demo', url: '/sso-demo', icon: 'sso' },
|
||||
{ name: 'Hall of Fame', url: '/hall-of-fame', icon: 'fame' },
|
||||
{ name: 'Timeline', url: '/timeline', icon: 'timeline' },
|
||||
{ name: 'Random Site', url: '/random-site', icon: 'random' },
|
||||
{ name: 'Theme Switcher', url: '/theme-switcher', icon: 'theme' },
|
||||
{ name: 'Easter Eggs', url: '/easter-eggs', icon: 'egg' }
|
||||
];
|
||||
---
|
||||
<footer class="portal-footer-bar cozy-footer">
|
||||
<div class="footer-group">
|
||||
<div class="footer-group-label">AeThex Divisions</div>
|
||||
<div class="footer-links-row">
|
||||
{divisionLinks.map(link => (
|
||||
<a href={link.url} class="footer-link" title={link.name} target="_self">
|
||||
<span class="footer-icon-wrap">
|
||||
{/* ...SVG ICONS, unchanged... */}
|
||||
{link.icon === 'home' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M3 9.5L10 4L17 9.5" stroke="#6cf" stroke-width="2"/><rect x="6.5" y="11" width="7" height="5" rx="1.5" stroke="#6cf" stroke-width="2"/></svg>
|
||||
)}
|
||||
{link.icon === 'foundation' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><polygon points="10,3 17,8 17,17 3,17 3,8" stroke="#ff4d4d" stroke-width="2" fill="none"/><circle cx="10" cy="12" r="2" fill="#ff4d4d"/></svg>
|
||||
)}
|
||||
{link.icon === 'corporation' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><rect x="4" y="6" width="12" height="8" rx="2" stroke="#6cf" stroke-width="2" fill="none"/><rect x="8" y="10" width="4" height="4" rx="1" fill="#6cf"/></svg>
|
||||
)}
|
||||
{link.icon === 'labs' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><ellipse cx="10" cy="14" rx="6" ry="3" stroke="#ffc700" stroke-width="2" fill="none"/><rect x="7" y="3" width="6" height="8" rx="2" stroke="#ffc700" stroke-width="2" fill="none"/></svg>
|
||||
)}
|
||||
</span>
|
||||
<span class="footer-label">{link.name}</span>
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-group">
|
||||
<div class="footer-group-label">Tools & Community</div>
|
||||
<div class="footer-links-row">
|
||||
{toolLinks.map(link => (
|
||||
<a href={link.url} class="footer-link" title={link.name} target="_self">
|
||||
<span class="footer-icon-wrap">
|
||||
{/* ...SVG ICONS, unchanged... */}
|
||||
{link.icon === 'live' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="6" fill="#ff4d4d"/><circle cx="10" cy="10" r="9" stroke="#ff4d4d" stroke-width="2" fill="none"/></svg>
|
||||
)}
|
||||
{link.icon === 'search' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><circle cx="9" cy="9" r="6" stroke="#6cf" stroke-width="2" fill="none"/><line x1="14" y1="14" x2="18" y2="18" stroke="#6cf" stroke-width="2"/></svg>
|
||||
)}
|
||||
{link.icon === 'sso' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><rect x="3" y="5" width="14" height="10" rx="2" stroke="#6cf" stroke-width="2" fill="none"/><circle cx="7" cy="10" r="2" fill="#6cf"/></svg>
|
||||
)}
|
||||
{link.icon === 'fame' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><polygon points="10,3 12,9 18,9 13,13 15,19 10,15 5,19 7,13 2,9 8,9" stroke="#ffc700" stroke-width="2" fill="none"/></svg>
|
||||
)}
|
||||
{link.icon === 'timeline' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><rect x="4" y="4" width="12" height="12" rx="3" stroke="#6cf" stroke-width="2" fill="none"/><line x1="10" y1="7" x2="10" y2="10" stroke="#6cf" stroke-width="2"/><circle cx="10" cy="13" r="1.5" fill="#6cf"/></svg>
|
||||
)}
|
||||
{link.icon === 'random' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><rect x="3" y="3" width="14" height="14" rx="4" stroke="#ff4d4d" stroke-width="2" fill="none"/><circle cx="10" cy="10" r="2" fill="#6cf"/></svg>
|
||||
)}
|
||||
{link.icon === 'theme' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="7" stroke="#ffc700" stroke-width="2" fill="none"/><path d="M10 3v14M3 10h14" stroke="#ffc700" stroke-width="2"/></svg>
|
||||
)}
|
||||
{link.icon === 'egg' && (
|
||||
<svg class="footer-icon-svg" width="20" height="20" viewBox="0 0 20 20" fill="none"><ellipse cx="10" cy="12" rx="5" ry="7" stroke="#fff" stroke-width="2" fill="none"/></svg>
|
||||
)}
|
||||
</span>
|
||||
<span class="footer-label">{link.name}</span>
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
{entityFooter && (
|
||||
<div class="entity-footer-content cozy-entity-footer" set:html={entityFooter}></div>
|
||||
)}
|
||||
</footer>
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Electrolize&family=Source+Code+Pro:wght@400;600;700&display=swap');
|
||||
/* Cozy entity footer content */
|
||||
.cozy-entity-footer {
|
||||
margin-top: 2em;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 2em;
|
||||
background: rgba(30, 30, 40, 0.85);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #2228;
|
||||
padding: 1.1em 2.2em;
|
||||
font-size: 1.08em;
|
||||
color: #fff;
|
||||
margin-bottom: 0.5em;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
<style>
|
||||
/* Cozy persistent footer bar */
|
||||
.portal-footer-bar.cozy-footer {
|
||||
position: fixed;
|
||||
left: 0; right: 0; bottom: 0;
|
||||
background: linear-gradient(90deg, rgba(20,20,32,0.98) 60%, rgba(40,40,60,0.98) 100%);
|
||||
border-top: 2.5px solid #222;
|
||||
box-shadow: 0 -4px 32px #000a;
|
||||
z-index: 1000;
|
||||
padding: 1.2em 0 1.1em 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 18px 18px 0 0;
|
||||
min-height: 84px;
|
||||
transition: background 0.3s, box-shadow 0.3s;
|
||||
font-family: 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
left: 0; right: 0;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
@media (max-width: 1100px) {
|
||||
.portal-footer-bar.cozy-footer {
|
||||
max-width: 98vw;
|
||||
padding-left: 1.5vw;
|
||||
padding-right: 1.5vw;
|
||||
}
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
.portal-footer-bar.cozy-footer {
|
||||
max-width: 100vw;
|
||||
border-radius: 12px 12px 0 0;
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
}
|
||||
.footer-group {
|
||||
margin-bottom: 0.5em;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.footer-group-label {
|
||||
font-size: 0.98em;
|
||||
color: #7a8599;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
margin-bottom: 0.2em;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.12em;
|
||||
}
|
||||
.footer-links-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1.5em;
|
||||
align-items: flex-end;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
padding: 0.3em 0.5em 0.1em 0.5em;
|
||||
margin-bottom: 0.1em;
|
||||
}
|
||||
/* Cozy footer link */
|
||||
.footer-link {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
font-size: 1.04em;
|
||||
opacity: 0.92;
|
||||
transition: opacity 0.2s, color 0.2s, background 0.2s, box-shadow 0.2s, text-shadow 0.2s;
|
||||
border-radius: 10px;
|
||||
padding: 0.3em 0.6em 0.3em 0.6em;
|
||||
margin: 0 0.1em;
|
||||
font-family: 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
min-width: 0;
|
||||
white-space: normal;
|
||||
overflow: visible;
|
||||
text-overflow: unset;
|
||||
outline: none;
|
||||
}
|
||||
.footer-link:hover, .footer-link:focus {
|
||||
color: #6cf;
|
||||
background: rgba(0,102,255,0.10);
|
||||
box-shadow: 0 2px 12px #0066ff33, 0 0 0 2px #6cf44;
|
||||
text-shadow: 0 0 8px #6cf, 0 0 2px #fff;
|
||||
opacity: 1;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.footer-link:focus {
|
||||
outline: 2px solid #6cf;
|
||||
outline-offset: 2px;
|
||||
}
|
||||
.footer-link:hover {
|
||||
opacity: 1;
|
||||
color: #fff;
|
||||
background: rgba(0,102,255,0.13);
|
||||
box-shadow: 0 2px 12px #0066ff33;
|
||||
}
|
||||
/* Footer icon and label cozy tweaks */
|
||||
.footer-icon-wrap {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
.footer-icon-svg {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
display: block;
|
||||
margin: 0;
|
||||
vertical-align: middle;
|
||||
transition: transform 0.22s cubic-bezier(.77,0,.175,1), filter 0.22s;
|
||||
filter: drop-shadow(0 0 0 #6cf);
|
||||
}
|
||||
.footer-link:hover .footer-icon-svg,
|
||||
.footer-link:focus .footer-icon-svg {
|
||||
transform: scale(1.18) rotate(-8deg);
|
||||
filter: drop-shadow(0 0 8px #6cf88);
|
||||
}
|
||||
.footer-emoji {
|
||||
font-size: 1.5em;
|
||||
margin-bottom: 0;
|
||||
display: block;
|
||||
}
|
||||
.footer-label {
|
||||
font-size: 1em;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.01em;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
margin-left: 0.1em;
|
||||
white-space: normal;
|
||||
overflow: visible;
|
||||
text-overflow: unset;
|
||||
word-break: break-word;
|
||||
}
|
||||
@media (max-width: 900px) {
|
||||
.footer-links-row {
|
||||
gap: 0.7em;
|
||||
padding-left: 0.2em;
|
||||
padding-right: 0.2em;
|
||||
}
|
||||
.footer-link {
|
||||
font-size: 0.98em;
|
||||
/* Remove max-width for wrapping */
|
||||
}
|
||||
.footer-label {
|
||||
white-space: normal;
|
||||
word-break: break-word;
|
||||
}
|
||||
.footer-icon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 700px) {
|
||||
.footer-links-row {
|
||||
flex-wrap: wrap;
|
||||
gap: 0.7em;
|
||||
padding-left: 0.1em;
|
||||
padding-right: 0.1em;
|
||||
}
|
||||
.footer-link {
|
||||
font-size: 0.93em;
|
||||
max-width: 90px;
|
||||
padding: 0.2em 0.3em;
|
||||
}
|
||||
.footer-label {
|
||||
display: none;
|
||||
}
|
||||
.portal-footer-bar.cozy-footer { min-height: 64px; padding: 0.7em 0 0.7em 0; }
|
||||
.cozy-entity-footer { flex-direction: column; gap: 1em; padding: 0.7em 1em; font-size: 0.98em; }
|
||||
}
|
||||
</style>
|
||||
43
src/components/RandomSiteButton.astro
Normal file
43
src/components/RandomSiteButton.astro
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
// Random site teleport button for AeThex
|
||||
const sites = [
|
||||
'/foundation',
|
||||
'/corporation',
|
||||
'/labs',
|
||||
'/educate',
|
||||
'/gameforge',
|
||||
'/docs',
|
||||
'/community'
|
||||
];
|
||||
function teleport() {
|
||||
const idx = Math.floor(Math.random() * sites.length);
|
||||
window.location.href = sites[idx];
|
||||
}
|
||||
---
|
||||
<div class="random-site-btn-wrap">
|
||||
<button class="random-site-btn" client:click={teleport}>🎲 Teleport to a Random AeThex Site</button>
|
||||
</div>
|
||||
<style>
|
||||
.random-site-btn-wrap {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin: 2em 0 1em 0;
|
||||
}
|
||||
.random-site-btn {
|
||||
background: linear-gradient(90deg, #ff1a1a 60%, #ffd580 100%);
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 16px;
|
||||
padding: 1em 2.2em;
|
||||
font-size: 1.15em;
|
||||
font-weight: 700;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
transition: background 0.2s, transform 0.2s;
|
||||
}
|
||||
.random-site-btn:hover {
|
||||
background: linear-gradient(90deg, #ffd580 60%, #ff1a1a 100%);
|
||||
color: #222;
|
||||
transform: scale(1.06);
|
||||
}
|
||||
</style>
|
||||
44
src/components/RandomSiteButtonReact.jsx
Normal file
44
src/components/RandomSiteButtonReact.jsx
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
import React from 'react';
|
||||
|
||||
const sites = [
|
||||
'https://aethex.dev',
|
||||
'https://aethex.inc',
|
||||
'https://aethex.co',
|
||||
'https://aethex.us',
|
||||
'https://aethex.net',
|
||||
'https://aethex.org',
|
||||
'https://aethex.app',
|
||||
'https://aethex.site',
|
||||
'https://aethex.locker',
|
||||
'https://aethex.bio',
|
||||
'https://aethex.bot',
|
||||
'https://aethex.live',
|
||||
'https://aethex.me',
|
||||
'https://aethex.space',
|
||||
'https://aethex.shop',
|
||||
'https://aethex.cloud',
|
||||
'https://aethex.tech',
|
||||
'https://aethex.studio',
|
||||
'https://aethex.support',
|
||||
'https://aethex.network',
|
||||
'https://aethex.foundation',
|
||||
'https://aethex.fun',
|
||||
'https://aethex.sbs',
|
||||
'https://aethex.blog',
|
||||
'https://aethex.info'
|
||||
];
|
||||
|
||||
function teleport() {
|
||||
const idx = Math.floor(Math.random() * sites.length);
|
||||
window.location.href = sites[idx];
|
||||
}
|
||||
|
||||
export default function RandomSiteButtonReact() {
|
||||
return (
|
||||
<div className="random-site-btn-wrap">
|
||||
<button className="random-site-btn" onClick={teleport}>
|
||||
🎲 Teleport to a Random AeThex Site
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
60
src/components/ThemeSwitcher.astro
Normal file
60
src/components/ThemeSwitcher.astro
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
---
|
||||
// Theme switcher for AeThex (mockup, extendable)
|
||||
let theme = 'default';
|
||||
function setTheme(t: string) {
|
||||
theme = t;
|
||||
document.body.setAttribute('data-theme', t);
|
||||
}
|
||||
const themes = [
|
||||
{ name: 'Default', value: 'default' },
|
||||
{ name: 'Retro', value: 'retro' },
|
||||
{ name: 'Neon', value: 'neon' },
|
||||
{ name: 'Hacker', value: 'hacker' }
|
||||
];
|
||||
---
|
||||
<div class="theme-switcher">
|
||||
<span>Theme:</span>
|
||||
{themes.map(t => (
|
||||
<button class="theme-btn" client:click={() => setTheme(t.value)}>{t.name}</button>
|
||||
))}
|
||||
</div>
|
||||
<style>
|
||||
.theme-switcher {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 0.7em;
|
||||
margin: 2em 0 1em 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
.theme-btn {
|
||||
background: #222;
|
||||
color: #ffd580;
|
||||
border: 1.5px solid #ffd580;
|
||||
border-radius: 8px;
|
||||
padding: 0.5em 1.2em;
|
||||
font-size: 1em;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, color 0.2s;
|
||||
}
|
||||
.theme-btn:hover {
|
||||
background: #ffd580;
|
||||
color: #222;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
// Simple theme switcher logic
|
||||
const themeStyles = {
|
||||
retro: 'body[data-theme=retro] { background: #f4ecd8; color: #222; }',
|
||||
neon: 'body[data-theme=neon] { background: #0f0020; color: #39ff14; }',
|
||||
hacker: 'body[data-theme=hacker] { background: #101c10; color: #00ff00; }',
|
||||
default: 'body[data-theme=default] { background: #0a0a0a; color: #fff; }'
|
||||
};
|
||||
const styleTag = document.createElement('style');
|
||||
document.head.appendChild(styleTag);
|
||||
function setThemeScript(t) {
|
||||
document.body.setAttribute('data-theme', t);
|
||||
styleTag.innerHTML = themeStyles[t] || '';
|
||||
}
|
||||
window.setTheme = setThemeScript;
|
||||
</script>
|
||||
46
src/components/ThemeSwitcherReact.jsx
Normal file
46
src/components/ThemeSwitcherReact.jsx
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
import React, { useState } from 'react';
|
||||
|
||||
const themes = [
|
||||
{ name: 'Default', value: 'default' },
|
||||
{ name: 'Retro', value: 'retro' },
|
||||
{ name: 'Neon', value: 'neon' },
|
||||
{ name: 'Hacker', value: 'hacker' }
|
||||
];
|
||||
|
||||
const themeStyles = {
|
||||
retro: 'body[data-theme=retro] { background: #f4ecd8; color: #222; }',
|
||||
neon: 'body[data-theme=neon] { background: #0f0020; color: #39ff14; }',
|
||||
hacker: 'body[data-theme=hacker] { background: #101c10; color: #00ff00; }',
|
||||
default: 'body[data-theme=default] { background: #0a0a0a; color: #fff; }'
|
||||
};
|
||||
|
||||
export default function ThemeSwitcherReact() {
|
||||
const [theme, setTheme] = useState('default');
|
||||
|
||||
function handleThemeChange(t) {
|
||||
setTheme(t);
|
||||
document.body.setAttribute('data-theme', t);
|
||||
let styleTag = document.getElementById('theme-style');
|
||||
if (!styleTag) {
|
||||
styleTag = document.createElement('style');
|
||||
styleTag.id = 'theme-style';
|
||||
document.head.appendChild(styleTag);
|
||||
}
|
||||
styleTag.innerHTML = themeStyles[t] || '';
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="theme-switcher">
|
||||
<span>Theme:</span>
|
||||
{themes.map(t => (
|
||||
<button
|
||||
key={t.value}
|
||||
className="theme-btn"
|
||||
onClick={() => handleThemeChange(t.value)}
|
||||
>
|
||||
{t.name}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -153,5 +153,49 @@
|
|||
from { transform: translateY(-40px); opacity: 0; }
|
||||
to { transform: translateY(0); opacity: 1; }
|
||||
}
|
||||
.trinity-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(320px, 1fr));
|
||||
gap: 48px;
|
||||
margin: 56px 0 40px 0;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
}
|
||||
.trinity-card {
|
||||
background: rgba(30,30,30,0.92);
|
||||
border-radius: 28px;
|
||||
box-shadow: 0 4px 32px #0006;
|
||||
padding: 48px 36px 36px 36px;
|
||||
color: #fff;
|
||||
transition: transform 0.18s, box-shadow 0.18s;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
border: 2px solid transparent;
|
||||
min-width: 0;
|
||||
min-height: 440px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
justify-content: flex-start;
|
||||
}
|
||||
@media (max-width: 1100px) {
|
||||
.trinity-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 32px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
.trinity-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 28px;
|
||||
}
|
||||
.trinity-section {
|
||||
padding: 32px 0 12px 0;
|
||||
}
|
||||
.trinity-card {
|
||||
padding: 28px 14px 18px 14px;
|
||||
min-height: 320px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</section>
|
||||
|
|
|
|||
90
src/components/UniversalSearch.astro
Normal file
90
src/components/UniversalSearch.astro
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
---
|
||||
// Universal search bar for AeThex ecosystem (mockup, extendable)
|
||||
const sites = [
|
||||
{ name: 'Foundation', url: '/foundation' },
|
||||
{ name: 'Corporation', url: '/corporation' },
|
||||
{ name: 'Labs', url: '/labs' },
|
||||
{ name: 'Educate', url: '/educate' },
|
||||
{ name: 'Gameforge', url: '/gameforge' },
|
||||
{ name: 'Docs', url: '/docs' },
|
||||
{ name: 'Community', url: '/community' }
|
||||
];
|
||||
let query = '';
|
||||
let results = sites;
|
||||
function handleInput(e: Event) {
|
||||
query = (e.target as HTMLInputElement).value;
|
||||
results = sites.filter(site => site.name.toLowerCase().includes(query.toLowerCase()));
|
||||
}
|
||||
---
|
||||
<div class="universal-search">
|
||||
<form method="get" action="" class="search-form">
|
||||
<input type="text" name="q" placeholder="Search AeThex..." value={query} class="search-input" client:input={handleInput} />
|
||||
<button type="submit" class="search-btn">🔍</button>
|
||||
</form>
|
||||
<ul class="search-results">
|
||||
{results.length === 0 ? (
|
||||
<li class="no-results">No results found.</li>
|
||||
) : (
|
||||
results.map(site => (
|
||||
<li><a href={site.url}>{site.name}</a></li>
|
||||
))
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
<style>
|
||||
.universal-search {
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em;
|
||||
margin: 2em auto 1em auto;
|
||||
max-width: 420px;
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
border: 1.5px solid #333;
|
||||
}
|
||||
.search-form {
|
||||
display: flex;
|
||||
gap: 0.5em;
|
||||
margin-bottom: 0.7em;
|
||||
}
|
||||
.search-input {
|
||||
flex: 1;
|
||||
padding: 0.6em 1em;
|
||||
border-radius: 8px;
|
||||
border: 1.5px solid #444;
|
||||
background: #181820;
|
||||
color: #fff;
|
||||
font-size: 1em;
|
||||
}
|
||||
.search-btn {
|
||||
background: #ff1a1a;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
padding: 0.6em 1.2em;
|
||||
font-size: 1.1em;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.search-btn:hover {
|
||||
background: #d10000;
|
||||
}
|
||||
.search-results {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.search-results li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.search-results a {
|
||||
color: #ffd580;
|
||||
text-decoration: underline;
|
||||
font-weight: 600;
|
||||
}
|
||||
.no-results {
|
||||
color: #ff1a1a;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
38
src/components/UniversalSearchReact.jsx
Normal file
38
src/components/UniversalSearchReact.jsx
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
import React, { useState } from 'react';
|
||||
|
||||
const sites = [
|
||||
{ name: 'Foundation', url: '/foundation' },
|
||||
{ name: 'Corporation', url: '/corporation' },
|
||||
{ name: 'Labs', url: '/labs' },
|
||||
{ name: 'Docs', url: '/docs' }
|
||||
];
|
||||
|
||||
export default function UniversalSearchReact() {
|
||||
const [query, setQuery] = useState('');
|
||||
const results = sites.filter(site => site.name.toLowerCase().includes(query.toLowerCase()));
|
||||
|
||||
return (
|
||||
<div className="universal-search">
|
||||
<form className="search-form" onSubmit={e => e.preventDefault()}>
|
||||
<input
|
||||
type="text"
|
||||
name="q"
|
||||
placeholder="Search AeThex..."
|
||||
value={query}
|
||||
className="search-input"
|
||||
onChange={e => setQuery(e.target.value)}
|
||||
/>
|
||||
<button type="submit" className="search-btn">🔍</button>
|
||||
</form>
|
||||
<ul className="search-results">
|
||||
{results.length === 0 ? (
|
||||
<li className="no-results">No results found.</li>
|
||||
) : (
|
||||
results.map(site => (
|
||||
<li key={site.url}><a href={site.url}>{site.name}</a></li>
|
||||
))
|
||||
)}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
---
|
||||
// Astro layout for AeThex site
|
||||
import PortalFooterBar from '../components/PortalFooterBar.astro';
|
||||
---
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
|
@ -29,5 +30,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<slot />
|
||||
{Astro.url.pathname !== '/' && <PortalFooterBar entityFooter={Astro.props.entityFooter} />}
|
||||
</body>
|
||||
---
|
||||
</html>
|
||||
|
|
|
|||
10
src/pages/about.astro
Normal file
10
src/pages/about.astro
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import TestimonialsSection from '../components/TestimonialsSection.astro';
|
||||
import SocialProofSection from '../components/SocialProofSection.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<h1>About AeThex</h1>
|
||||
<TestimonialsSection />
|
||||
<SocialProofSection />
|
||||
</MainLayout>
|
||||
10
src/pages/community.astro
Normal file
10
src/pages/community.astro
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import CommunityWall from '../components/CommunityWall.astro';
|
||||
import EventsWebinarsSection from '../components/EventsWebinarsSection.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<h1>Community & Events</h1>
|
||||
<CommunityWall />
|
||||
<EventsWebinarsSection />
|
||||
</MainLayout>
|
||||
|
|
@ -1,9 +1,23 @@
|
|||
---
|
||||
// Corporation Division Page
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
const entityFooter = `
|
||||
<span>© AeThex Corporation 2026</span>
|
||||
<a href="/">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><polygon points="12,3 22,21 2,21" fill="none" stroke="#0066ff" stroke-width="2"/><circle cx="12" cy="15" r="2" fill="#0066ff"/></svg>
|
||||
Home
|
||||
</a>
|
||||
<a href="/corporation">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><polygon points="12,2 21,7 21,17 12,22 3,17 3,7" fill="none" stroke="#0066ff" stroke-width="2"/><circle cx="12" cy="12" r="2" fill="#0066ff"/></svg>
|
||||
Corporation
|
||||
</a>
|
||||
<a href="https://aethex.biz">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="4" fill="none" stroke="#0066ff" stroke-width="2"/><path d="M8 8h8v8H8z" fill="#0066ff"/><circle cx="12" cy="12" r="1.5" fill="#fff"/></svg>
|
||||
Products
|
||||
</a>
|
||||
`;
|
||||
---
|
||||
|
||||
<MainLayout>
|
||||
<MainLayout entityFooter={entityFooter}>
|
||||
<nav class="container">
|
||||
<div class="logo">AETHEX</div>
|
||||
<div class="nav-links">
|
||||
|
|
@ -38,10 +52,7 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
<footer class="entity-footer">
|
||||
<span>© AeThex Corporation 2026</span>
|
||||
<a href="/">Home</a>
|
||||
</footer>
|
||||
<!-- Footer content is now passed to MainLayout as a prop -->
|
||||
<style>
|
||||
.fade-in-section { opacity: 0; transform: translateY(32px); animation: fadeInSection 1.2s 0.5s cubic-bezier(.77,0,.175,1) forwards; }
|
||||
@keyframes fadeInSection { to { opacity: 1; transform: none; } }
|
||||
|
|
@ -64,8 +75,38 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||
ul { color: #fff; margin-top: 24px; padding-left: 24px; }
|
||||
ul li { margin-bottom: 14px; transition: color 0.2s, transform 0.2s; cursor: pointer; font-size: 1.08em; }
|
||||
ul li:hover { color: #0066ff; transform: scale(1.05); }
|
||||
.entity-footer { text-align: center; margin-top: 48px; color: #fff; font-size: 1em; opacity: 0.7; }
|
||||
.entity-footer a { color: #0066ff; margin-left: 16px; text-decoration: underline; }
|
||||
.glass-footer {
|
||||
background: rgba(30,30,40,0.55);
|
||||
backdrop-filter: blur(8px);
|
||||
border-top: 3px solid #0066ff;
|
||||
border-radius: 18px 18px 0 0;
|
||||
box-shadow: 0 -2px 24px #0066ff40;
|
||||
margin: 56px auto 0 auto;
|
||||
max-width: 650px;
|
||||
padding: 24px 32px 18px 32px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 1.08em;
|
||||
opacity: 0.95;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 18px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.glass-footer a {
|
||||
color: #0066ff;
|
||||
margin: 0 8px;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
transition: color 0.2s, text-shadow 0.2s;
|
||||
}
|
||||
.glass-footer a:hover {
|
||||
color: #fff;
|
||||
text-shadow: 0 0 8px #0066ff;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.hero-banner { height: auto; min-height: 280px; padding: 40px 20px; }
|
||||
|
|
|
|||
8
src/pages/docs.astro
Normal file
8
src/pages/docs.astro
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import QuickstartGuideSection from '../components/QuickstartGuideSection.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<h1>Quickstart Guide</h1>
|
||||
<QuickstartGuideSection />
|
||||
</MainLayout>
|
||||
14
src/pages/easter-eggs.astro
Normal file
14
src/pages/easter-eggs.astro
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
|
||||
---
|
||||
import EasterEggsComponent from '../components/EasterEggs.astro';
|
||||
export const layout = '../layouts/MainLayout.astro';
|
||||
---
|
||||
|
||||
<section class="tool-hero">
|
||||
<div class="tool-hero-bg tool-hero-bg-egg"></div>
|
||||
<h1 class="tool-hero-title gradient-text">Easter Eggs</h1>
|
||||
<p class="tool-hero-desc">Can you find the hidden AeThex Easter Eggs? Unlock badges and discover secrets across the ecosystem.</p>
|
||||
</section>
|
||||
<section class="tool-content">
|
||||
<EasterEggsComponent />
|
||||
</section>
|
||||
10
src/pages/ecosystem.astro
Normal file
10
src/pages/ecosystem.astro
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import MetaverseMap from '../components/MetaverseMap.astro';
|
||||
import EcosystemTimeline from '../components/EcosystemTimeline.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<h1>Our Ecosystem</h1>
|
||||
<MetaverseMap />
|
||||
<EcosystemTimeline />
|
||||
</MainLayout>
|
||||
|
|
@ -1,9 +1,23 @@
|
|||
---
|
||||
// Foundation Division Page
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
const entityFooter = `
|
||||
<span>© AeThex Foundation 2026</span>
|
||||
<a href="/">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><polygon points="12,3 22,21 2,21" fill="none" stroke="#ff0000" stroke-width="2"/><circle cx="12" cy="15" r="2" fill="#ff0000"/></svg>
|
||||
Home
|
||||
</a>
|
||||
<a href="/foundation">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><polygon points="12,2 21,7 21,17 12,22 3,17 3,7" fill="none" stroke="#ff0000" stroke-width="2"/><circle cx="12" cy="12" r="2" fill="#ff0000"/></svg>
|
||||
Foundation
|
||||
</a>
|
||||
<a href="https://aethex.network">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="4" fill="none" stroke="#ff0000" stroke-width="2"/><path d="M8 8h8v8H8z" fill="#ff0000"/><circle cx="12" cy="12" r="1.5" fill="#fff"/></svg>
|
||||
Community
|
||||
</a>
|
||||
`;
|
||||
---
|
||||
|
||||
<MainLayout>
|
||||
<MainLayout entityFooter={entityFooter}>
|
||||
<nav class="container">
|
||||
<div class="logo">AETHEX</div>
|
||||
<div class="nav-links">
|
||||
|
|
@ -38,10 +52,7 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
<footer class="entity-footer">
|
||||
<span>© AeThex Foundation 2026</span>
|
||||
<a href="/">Home</a>
|
||||
</footer>
|
||||
<!-- Footer content is now passed to MainLayout as a prop -->
|
||||
<style>
|
||||
.fade-in-section { opacity: 0; transform: translateY(32px); animation: fadeInSection 1.2s 0.5s cubic-bezier(.77,0,.175,1) forwards; }
|
||||
@keyframes fadeInSection { to { opacity: 1; transform: none; } }
|
||||
|
|
@ -64,8 +75,38 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||
ul { color: #fff; margin-top: 24px; padding-left: 24px; }
|
||||
ul li { margin-bottom: 14px; transition: color 0.2s, transform 0.2s; cursor: pointer; font-size: 1.08em; }
|
||||
ul li:hover { color: #ff0000; transform: scale(1.05); }
|
||||
.entity-footer { text-align: center; margin-top: 48px; color: #fff; font-size: 1em; opacity: 0.7; }
|
||||
.entity-footer a { color: #ff0000; margin-left: 16px; text-decoration: underline; }
|
||||
.glass-footer {
|
||||
background: rgba(30,30,30,0.55);
|
||||
backdrop-filter: blur(8px);
|
||||
border-top: 3px solid #ff0000;
|
||||
border-radius: 18px 18px 0 0;
|
||||
box-shadow: 0 -2px 24px #ff000040;
|
||||
margin: 56px auto 0 auto;
|
||||
max-width: 650px;
|
||||
padding: 24px 32px 18px 32px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 1.08em;
|
||||
opacity: 0.95;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 18px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.glass-footer a {
|
||||
color: #ff0000;
|
||||
margin: 0 8px;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
transition: color 0.2s, text-shadow 0.2s;
|
||||
}
|
||||
.glass-footer a:hover {
|
||||
color: #fff;
|
||||
text-shadow: 0 0 8px #ff0000;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.hero-banner { height: auto; min-height: 280px; padding: 40px 20px; }
|
||||
|
|
|
|||
14
src/pages/hall-of-fame.astro
Normal file
14
src/pages/hall-of-fame.astro
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import HallOfFameShame from '../components/HallOfFameShame.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<section class="tool-hero">
|
||||
<div class="tool-hero-bg tool-hero-bg-fame"></div>
|
||||
<h1 class="tool-hero-title gradient-text">Hall of Fame / Shame</h1>
|
||||
<p class="tool-hero-desc">Celebrating AeThex’s top contributors—and calling out the most notorious troublemakers. Community legend lives here.</p>
|
||||
</section>
|
||||
<section class="tool-content">
|
||||
<HallOfFameShame />
|
||||
</section>
|
||||
</MainLayout>
|
||||
|
|
@ -1,36 +1,279 @@
|
|||
|
||||
|
||||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import HeroSection from '../components/HeroSection.astro';
|
||||
import TrinitySection from '../components/TrinitySection.astro';
|
||||
import ProductsSection from '../components/ProductsSection.astro';
|
||||
import MetaverseMap from '../components/MetaverseMap.astro';
|
||||
import RealTimeStats from '../components/RealTimeStats.astro';
|
||||
import TestimonialsSection from '../components/TestimonialsSection.astro';
|
||||
import WhyAeThexSection from '../components/WhyAeThexSection.astro';
|
||||
import SocialProofSection from '../components/SocialProofSection.astro';
|
||||
import QuickstartGuideSection from '../components/QuickstartGuideSection.astro';
|
||||
import FooterSection from '../components/FooterSection.astro';
|
||||
import CommunityWall from '../components/CommunityWall.astro';
|
||||
import EventsWebinarsSection from '../components/EventsWebinarsSection.astro';
|
||||
import LanguageSwitcher from '../components/LanguageSwitcher.astro';
|
||||
import PortalFooterBar from '../components/PortalFooterBar.astro';
|
||||
---
|
||||
|
||||
|
||||
<MainLayout>
|
||||
<!-- Navigation -->
|
||||
<nav class="container">
|
||||
<div class="logo">AETHEX</div>
|
||||
<div class="nav-links">
|
||||
<a href="#trinity" class="nav-link">Trinity</a>
|
||||
<a href="#products" class="nav-link">Products</a>
|
||||
<a href="#docs" class="nav-link">Docs</a>
|
||||
<a href="#community" class="nav-link">Community</a>
|
||||
<section class="hero">
|
||||
<div class="hero-bg-anim"></div>
|
||||
<h1 class="hero-title gradient-text animate-fadein">METAVERSE<br />INFRASTRUCTURE</h1>
|
||||
<h2 class="hero-subtitle animate-slideup">Building the Foundation of Digital Reality</h2>
|
||||
<p class="hero-desc animate-fadein-delay">AeThex provides the core infrastructure for persistent, cross-platform digital experiences.<br />Our Trinity architecture ensures security, innovation, and commercial viability for the next generation of the metaverse.</p>
|
||||
<a href="#trinity" class="cta-button animate-bounce">Access AeThex Studio</a>
|
||||
</section>
|
||||
|
||||
<section id="trinity" class="trinity-section">
|
||||
<h2 class="section-title">THE TRINITY</h2>
|
||||
<h3 class="section-subtitle">Three Divisions, One Infrastructure</h3>
|
||||
<div class="trinity-grid">
|
||||
<div class="trinity-card foundation">
|
||||
<div class="card-icon">🔴</div>
|
||||
<div class="card-title">Foundation</div>
|
||||
<div class="card-label">Critical Infrastructure • Nonprofit</div>
|
||||
<div class="card-description">The nonprofit backbone maintaining authentication, security, and core APIs. Open-source infrastructure that the entire AeThex ecosystem depends on.</div>
|
||||
<ul class="card-features">
|
||||
<li>Passport Identity System</li>
|
||||
<li>Authentication Protocols</li>
|
||||
<li>Security Infrastructure</li>
|
||||
<li>Core Open-Source APIs</li>
|
||||
<li>Community Governance</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="trinity-card corporation">
|
||||
<div class="card-icon">🔵</div>
|
||||
<div class="card-title">Corporation</div>
|
||||
<div class="card-label">Commercial Services • Production</div>
|
||||
<div class="card-description">Professional commercial division delivering polished products and enterprise-grade infrastructure to developers and players worldwide.</div>
|
||||
<ul class="card-features">
|
||||
<li>AeThex Studio IDE</li>
|
||||
<li>Production Deployment</li>
|
||||
<li>Premium Services</li>
|
||||
<li>Enterprise Support</li>
|
||||
<li>Analytics & Insights</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="trinity-card labs">
|
||||
<div class="card-icon">🟡</div>
|
||||
<div class="card-title">Labs</div>
|
||||
<div class="card-label">Research & Development • Experimental</div>
|
||||
<div class="card-description">Innovation division pushing boundaries with experimental features, beta technologies, and next-generation metaverse infrastructure.</div>
|
||||
<ul class="card-features">
|
||||
<li>Nexus Engine v2.0</li>
|
||||
<li>AI Copilot Assistant</li>
|
||||
<li>Experimental Features</li>
|
||||
<li>Beta Testing Programs</li>
|
||||
<li>Future R&D Projects</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<HeroSection />
|
||||
<TrinitySection />
|
||||
<ProductsSection />
|
||||
<FooterSection />
|
||||
</section>
|
||||
|
||||
<!-- Placeholder for infrastructure flow, navigation/footer, and CTA sections -->
|
||||
|
||||
<style>
|
||||
@import url('https://fonts.googleapis.com/css2?family=Electrolize&family=Source+Code+Pro:wght@400;600;700&display=swap');
|
||||
html, body {
|
||||
font-family: 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
font-size: 18px;
|
||||
color: #e0e6f6;
|
||||
background: #10131a;
|
||||
line-height: 1.7;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
.hero-bg-anim {
|
||||
position: absolute;
|
||||
top: 0; left: 0; width: 100vw; height: 100%;
|
||||
z-index: 0;
|
||||
background: radial-gradient(ellipse at 60% 40%, #00338055 0%, #0000 70%),
|
||||
radial-gradient(ellipse at 30% 70%, #ff1a1a33 0%, #0000 80%);
|
||||
pointer-events: none;
|
||||
animation: hero-bg-float 8s ease-in-out infinite alternate;
|
||||
}
|
||||
@keyframes hero-bg-float {
|
||||
0% { background-position: 60% 40%, 30% 70%; }
|
||||
100% { background-position: 65% 45%, 35% 75%; }
|
||||
}
|
||||
.hero { position: relative; overflow: hidden; }
|
||||
.gradient-text {
|
||||
background: linear-gradient(90deg, #0066ff 30%, #ff1a1a 70%);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
text-fill-color: transparent;
|
||||
}
|
||||
.animate-fadein {
|
||||
opacity: 0;
|
||||
animation: fadein 1.2s 0.1s forwards;
|
||||
}
|
||||
.animate-fadein-delay {
|
||||
opacity: 0;
|
||||
animation: fadein 1.2s 0.7s forwards;
|
||||
}
|
||||
.animate-slideup {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
animation: slideup 1.1s 0.4s forwards;
|
||||
}
|
||||
.animate-bounce {
|
||||
animation: bounce 1.2s 1.2s infinite alternate;
|
||||
}
|
||||
@keyframes fadein {
|
||||
to { opacity: 1; }
|
||||
}
|
||||
@keyframes slideup {
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
@keyframes bounce {
|
||||
0% { transform: translateY(0); }
|
||||
100% { transform: translateY(-8px); }
|
||||
}
|
||||
.hero { text-align: center; padding: 80px 0 40px 0; }
|
||||
.hero-title {
|
||||
font-size: 3.2em;
|
||||
font-weight: 900;
|
||||
letter-spacing: 0.04em;
|
||||
margin-bottom: 0.3em;
|
||||
font-family: 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.hero-subtitle {
|
||||
font-size: 1.6em;
|
||||
color: #7a8599;
|
||||
letter-spacing: 0.03em;
|
||||
margin-bottom: 1.2em;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.hero-desc {
|
||||
font-size: 1.15em;
|
||||
color: #bfc8e6;
|
||||
margin-bottom: 2.2em;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.cta-button { display: inline-block; padding: 18px 48px; background: linear-gradient(135deg, #0066ff, #003380); color: #fff; text-decoration: none; text-transform: uppercase; letter-spacing: 3px; font-weight: 700; font-size: 1em; border: none; border-radius: 8px; transition: transform 0.3s, box-shadow 0.3s; cursor: pointer; }
|
||||
.cta-button:hover { transform: translateY(-2px); box-shadow: 0 10px 40px rgba(0, 102, 255, 0.4); }
|
||||
.trinity-section {
|
||||
padding: 100px 0 80px 0;
|
||||
text-align: center;
|
||||
background: linear-gradient(120deg, #10131a 60%, #181c24 100%);
|
||||
}
|
||||
.section-title {
|
||||
font-size: 2.2em;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.03em;
|
||||
margin-bottom: 0.4em;
|
||||
font-family: 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.section-subtitle {
|
||||
font-size: 1.15em;
|
||||
color: #7a8599;
|
||||
letter-spacing: 0.02em;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 2.2em;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.trinity-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 56px;
|
||||
margin-bottom: 60px;
|
||||
justify-content: center;
|
||||
align-items: stretch;
|
||||
max-width: 1200px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
.trinity-card {
|
||||
background: rgba(30,34,44,0.98);
|
||||
padding: 56px 40px 44px 40px;
|
||||
border-radius: 32px;
|
||||
box-shadow: 0 8px 48px #0008, 0 2px 24px #0004;
|
||||
transition: transform 0.22s, box-shadow 0.22s, background 0.5s cubic-bezier(.77,0,.175,1);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
min-width: 0;
|
||||
min-height: 440px;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
overflow: hidden;
|
||||
}
|
||||
.trinity-card::before {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0;
|
||||
height: 7px;
|
||||
border-top-left-radius: 32px;
|
||||
border-top-right-radius: 32px;
|
||||
z-index: 2;
|
||||
}
|
||||
.trinity-card.foundation::before {
|
||||
background: linear-gradient(90deg, #ff0000 60%, #ff4d4d 100%);
|
||||
}
|
||||
.trinity-card.corporation::before {
|
||||
background: linear-gradient(90deg, #0066ff 60%, #33bbff 100%);
|
||||
}
|
||||
.trinity-card.labs::before {
|
||||
background: linear-gradient(90deg, #ffc700 60%, #ffe066 100%);
|
||||
}
|
||||
.trinity-card:hover {
|
||||
background: linear-gradient(120deg, #23273a 60%, #2a2e3c 100%);
|
||||
transform: translateY(-10px) scale(1.025);
|
||||
box-shadow: 0 16px 64px #0066ff33, 0 8px 32px #0006;
|
||||
}
|
||||
/* Remove colored borders from cards */
|
||||
.trinity-card.foundation,
|
||||
.trinity-card.corporation,
|
||||
.trinity-card.labs {
|
||||
border: none;
|
||||
}
|
||||
.card-icon {
|
||||
font-size: 3.2em;
|
||||
margin-bottom: 28px;
|
||||
text-shadow: 0 2px 16px #0006;
|
||||
}
|
||||
.card-title {
|
||||
font-size: 1.3em;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.02em;
|
||||
margin-bottom: 0.3em;
|
||||
color: #fff;
|
||||
font-family: 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.card-label {
|
||||
font-size: 1em;
|
||||
color: #7a8599;
|
||||
margin-bottom: 1.1em;
|
||||
letter-spacing: 0.02em;
|
||||
text-transform: uppercase;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.card-description {
|
||||
font-size: 1em;
|
||||
color: #bfc8e6;
|
||||
margin-bottom: 1.2em;
|
||||
line-height: 1.7;
|
||||
font-family: 'Source Code Pro', 'Electrolize', 'Segoe UI', Arial, sans-serif;
|
||||
}
|
||||
.card-features {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin-bottom: 0;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
}
|
||||
.card-features li {
|
||||
padding: 12px 0;
|
||||
border-bottom: 1.5px solid #23273a;
|
||||
color: #e0e6f6;
|
||||
font-size: 1em;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
.card-features li:last-child { border-bottom: none; }
|
||||
.foundation .card-features li::before { content: '▸ '; color: #ff0000; font-weight: 700; }
|
||||
.corporation .card-features li::before { content: '▸ '; color: #0066ff; font-weight: 700; }
|
||||
.labs .card-features li::before { content: '▸ '; color: #ffc700; font-weight: 700; }
|
||||
@media (max-width: 1200px) {
|
||||
.trinity-grid { grid-template-columns: 1fr 1fr; gap: 36px; }
|
||||
}
|
||||
@media (max-width: 900px) {
|
||||
.trinity-grid { grid-template-columns: 1fr; gap: 28px; max-width: 600px; }
|
||||
.trinity-section { padding: 60px 0 32px 0; }
|
||||
.trinity-card { padding: 36px 18px 24px 18px; min-height: 320px; }
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.trinity-section { padding: 32px 0 12px 0; }
|
||||
.trinity-card { padding: 18px 8px 14px 8px; border-radius: 18px; }
|
||||
.section-title { font-size: 1.5em; }
|
||||
}
|
||||
</style>
|
||||
<PortalFooterBar />
|
||||
</MainLayout>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,23 @@
|
|||
---
|
||||
// Labs Division Page
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
const entityFooter = `
|
||||
<span>© AeThex Labs 2026</span>
|
||||
<a href="/">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><polygon points="12,3 22,21 2,21" fill="none" stroke="#ffa500" stroke-width="2"/><circle cx="12" cy="15" r="2" fill="#ffa500"/></svg>
|
||||
Home
|
||||
</a>
|
||||
<a href="/labs">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><polygon points="12,2 21,7 21,17 12,22 3,17 3,7" fill="none" stroke="#ffa500" stroke-width="2"/><circle cx="12" cy="12" r="2" fill="#ffa500"/></svg>
|
||||
Labs
|
||||
</a>
|
||||
<a href="/labs#projects">
|
||||
<svg width="18" height="18" style="vertical-align:middle;margin-right:4px;" viewBox="0 0 24 24"><rect x="4" y="4" width="16" height="16" rx="4" fill="none" stroke="#ffa500" stroke-width="2"/><path d="M8 8h8v8H8z" fill="#ffa500"/><circle cx="12" cy="12" r="1.5" fill="#fff"/></svg>
|
||||
R&D Projects
|
||||
</a>
|
||||
`;
|
||||
---
|
||||
|
||||
<MainLayout>
|
||||
<MainLayout entityFooter={entityFooter}>
|
||||
<nav class="container">
|
||||
<div class="logo">AETHEX</div>
|
||||
<div class="nav-links">
|
||||
|
|
@ -38,10 +52,7 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
<footer class="entity-footer">
|
||||
<span>© AeThex Labs 2026</span>
|
||||
<a href="/">Home</a>
|
||||
</footer>
|
||||
<!-- Footer content is now passed to MainLayout as a prop -->
|
||||
<style>
|
||||
.fade-in-section { opacity: 0; transform: translateY(32px); animation: fadeInSection 1.2s 0.5s cubic-bezier(.77,0,.175,1) forwards; }
|
||||
@keyframes fadeInSection { to { opacity: 1; transform: none; } }
|
||||
|
|
@ -64,8 +75,38 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||
ul { color: #fff; margin-top: 24px; padding-left: 24px; }
|
||||
ul li { margin-bottom: 14px; transition: color 0.2s, transform 0.2s; cursor: pointer; font-size: 1.08em; }
|
||||
ul li:hover { color: #ffa500; transform: scale(1.05); }
|
||||
.entity-footer { text-align: center; margin-top: 48px; color: #fff; font-size: 1em; opacity: 0.7; }
|
||||
.entity-footer a { color: #ffa500; margin-left: 16px; text-decoration: underline; }
|
||||
.glass-footer {
|
||||
background: rgba(30,30,20,0.55);
|
||||
backdrop-filter: blur(8px);
|
||||
border-top: 3px solid #ffa500;
|
||||
border-radius: 18px 18px 0 0;
|
||||
box-shadow: 0 -2px 24px #ffa50040;
|
||||
margin: 56px auto 0 auto;
|
||||
max-width: 650px;
|
||||
padding: 24px 32px 18px 32px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-size: 1.08em;
|
||||
opacity: 0.95;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 18px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.glass-footer a {
|
||||
color: #ffa500;
|
||||
margin: 0 8px;
|
||||
text-decoration: none;
|
||||
font-weight: 600;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
transition: color 0.2s, text-shadow 0.2s;
|
||||
}
|
||||
.glass-footer a:hover {
|
||||
color: #fff;
|
||||
text-shadow: 0 0 8px #ffa500;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.hero-banner { height: auto; min-height: 280px; padding: 40px 20px; }
|
||||
|
|
|
|||
14
src/pages/live-activity.astro
Normal file
14
src/pages/live-activity.astro
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import LiveActivityFeed from '../components/LiveActivityFeed.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<section class="tool-hero">
|
||||
<div class="tool-hero-bg tool-hero-bg-live"></div>
|
||||
<h1 class="tool-hero-title gradient-text">Live Activity Feed</h1>
|
||||
<p class="tool-hero-desc">See the latest events, launches, and updates across the AeThex ecosystem in real time.</p>
|
||||
</section>
|
||||
<section class="tool-content">
|
||||
<LiveActivityFeed />
|
||||
</section>
|
||||
</MainLayout>
|
||||
8
src/pages/products.astro
Normal file
8
src/pages/products.astro
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import ProductsSection from '../components/ProductsSection.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<h1>Our Products</h1>
|
||||
<ProductsSection />
|
||||
</MainLayout>
|
||||
120
src/pages/random-site.astro
Normal file
120
src/pages/random-site.astro
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import RandomSiteButtonReact from '../components/RandomSiteButtonReact.jsx';
|
||||
---
|
||||
<MainLayout>
|
||||
|
||||
<section class="tool-hero tool-hero-random">
|
||||
<div class="tool-hero-bg tool-hero-bg-random"></div>
|
||||
<h1 class="tool-hero-title gradient-text">Random Site Teleport</h1>
|
||||
<p class="tool-hero-desc">Feeling adventurous? Instantly teleport to a random AeThex division or product. Discover something new every time you click!</p>
|
||||
</section>
|
||||
|
||||
<section class="tool-content tool-content-random">
|
||||
<div class="random-site-ecosystem">
|
||||
<div class="random-site-card">
|
||||
<div class="random-site-icon">🌐</div>
|
||||
<div class="random-site-label">Foundation</div>
|
||||
</div>
|
||||
<div class="random-site-card">
|
||||
<div class="random-site-icon">🏢</div>
|
||||
<div class="random-site-label">Corporation</div>
|
||||
</div>
|
||||
<div class="random-site-card">
|
||||
<div class="random-site-icon">🧪</div>
|
||||
<div class="random-site-label">Labs</div>
|
||||
</div>
|
||||
<div class="random-site-card">
|
||||
<div class="random-site-icon">📚</div>
|
||||
<div class="random-site-label">Docs</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="random-site-live">
|
||||
<h2>Teleport Now</h2>
|
||||
<RandomSiteButtonReact client:load />
|
||||
<div class="random-site-tip">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="10" fill="#ffd580"/><text x="10" y="15" text-anchor="middle" font-size="14" fill="#222" font-family="monospace">?</text></svg>
|
||||
<span>Each click takes you somewhere new in the AeThex universe.</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.tool-hero-random {
|
||||
background: linear-gradient(120deg, #0a0a0a 60%, #ff1a1a 100%);
|
||||
}
|
||||
.tool-content-random {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 2.5em;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
margin-top: 2em;
|
||||
}
|
||||
.random-site-ecosystem {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1.5em;
|
||||
}
|
||||
@media (min-width: 700px) {
|
||||
.random-site-ecosystem {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
.random-site-card {
|
||||
background: #23232b;
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em;
|
||||
min-width: 120px;
|
||||
max-width: 140px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
border: 1.5px solid #333;
|
||||
}
|
||||
.random-site-icon {
|
||||
font-size: 2.2em;
|
||||
margin-bottom: 0.4em;
|
||||
}
|
||||
.random-site-label {
|
||||
font-size: 1.05em;
|
||||
color: #ffd580;
|
||||
font-weight: 700;
|
||||
}
|
||||
.random-site-live {
|
||||
flex: 1 1 320px;
|
||||
min-width: 320px;
|
||||
max-width: 420px;
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 18px;
|
||||
box-shadow: 0 2px 16px #0006;
|
||||
padding: 1.2em 1.5em 2em 1.5em;
|
||||
color: #fff;
|
||||
border: 1.5px solid #333;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.random-site-live h2 {
|
||||
margin-top: 0;
|
||||
font-size: 1.15em;
|
||||
letter-spacing: 0.02em;
|
||||
color: #ff1a1a;
|
||||
}
|
||||
.random-site-tip {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.6em;
|
||||
margin-top: 1.2em;
|
||||
font-size: 1em;
|
||||
color: #ffd580;
|
||||
background: #23232b;
|
||||
border-radius: 8px;
|
||||
padding: 0.5em 1em;
|
||||
}
|
||||
.random-site-tip svg {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
</style>
|
||||
</MainLayout>
|
||||
14
src/pages/sso-demo.astro
Normal file
14
src/pages/sso-demo.astro
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import PassportSSODemoReact from '../components/PassportSSODemoReact.jsx';
|
||||
---
|
||||
<MainLayout>
|
||||
<section class="tool-hero">
|
||||
<div class="tool-hero-bg tool-hero-bg-sso"></div>
|
||||
<h1 class="tool-hero-title gradient-text">Passport SSO Demo</h1>
|
||||
<p class="tool-hero-desc">Try out AeThex Passport single sign-on. Log in once, access all AeThex services securely.</p>
|
||||
</section>
|
||||
<section class="tool-content">
|
||||
<PassportSSODemoReact client:load />
|
||||
</section>
|
||||
</MainLayout>
|
||||
170
src/pages/theme-switcher.astro
Normal file
170
src/pages/theme-switcher.astro
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
|
||||
---
|
||||
import ThemeSwitcherReact from '../components/ThemeSwitcherReact.jsx';
|
||||
export const layout = '../layouts/MainLayout.astro';
|
||||
---
|
||||
|
||||
|
||||
|
||||
<section class="theme-hero">
|
||||
<div class="theme-hero-bg"></div>
|
||||
<div class="theme-hero-content">
|
||||
<h1 class="theme-hero-title gradient-text">Theme Switcher</h1>
|
||||
<p class="theme-hero-desc">Switch between all official AeThex color themes. Instantly preview Default, Retro, Neon, and Hacker—your style, your vibe.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="theme-main">
|
||||
<div class="theme-container">
|
||||
<div class="theme-live-header">
|
||||
<span class="theme-live-icon">🎨</span>
|
||||
<span class="theme-live-title">Live Theme Switcher</span>
|
||||
</div>
|
||||
<ThemeSwitcherReact client:load />
|
||||
<div class="theme-tip">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="10" fill="#ffd580"/><text x="10" y="15" text-anchor="middle" font-size="14" fill="#222" font-family="monospace">i</text></svg>
|
||||
<span>Theme preference is saved for your session. Try all four!</span>
|
||||
</div>
|
||||
<div class="theme-previews">
|
||||
<div class="theme-preview theme-preview-default">
|
||||
<div class="theme-preview-label">Default</div>
|
||||
<div class="theme-preview-box" style="background:#0a0a0a;color:#fff;">Aa</div>
|
||||
</div>
|
||||
<div class="theme-preview theme-preview-retro">
|
||||
<div class="theme-preview-label">Retro</div>
|
||||
<div class="theme-preview-box" style="background:#f4ecd8;color:#222;">Aa</div>
|
||||
</div>
|
||||
<div class="theme-preview theme-preview-neon">
|
||||
<div class="theme-preview-label">Neon</div>
|
||||
<div class="theme-preview-box" style="background:#0f0020;color:#39ff14;">Aa</div>
|
||||
</div>
|
||||
<div class="theme-preview theme-preview-hacker">
|
||||
<div class="theme-preview-label">Hacker</div>
|
||||
<div class="theme-preview-box" style="background:#101c10;color:#00ff00;">Aa</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.theme-hero {
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
left: 50%;
|
||||
right: 50%;
|
||||
margin-left: -50vw;
|
||||
margin-right: -50vw;
|
||||
background: linear-gradient(120deg, #0a0a0a 60%, #ffd580 100%);
|
||||
padding: 4.5em 0 2.5em 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 260px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.theme-hero-bg {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: url('/brand/brand-bg.svg'), linear-gradient(120deg, #0a0a0a 60%, #ffd580 100%);
|
||||
opacity: 0.13;
|
||||
z-index: 1;
|
||||
}
|
||||
.theme-hero-content {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
text-align: center;
|
||||
}
|
||||
.theme-hero-title {
|
||||
font-size: 2.5em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
.theme-hero-desc {
|
||||
font-size: 1.2em;
|
||||
color: #ffd580;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.theme-main {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: -2.5em;
|
||||
margin-bottom: 3em;
|
||||
}
|
||||
.theme-container {
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 22px;
|
||||
box-shadow: 0 2px 24px #0008;
|
||||
padding: 2.2em 2em 2.5em 2em;
|
||||
max-width: 480px;
|
||||
width: 100%;
|
||||
border: 1.5px solid #333;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.theme-live-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.7em;
|
||||
margin-bottom: 1.2em;
|
||||
}
|
||||
.theme-live-icon {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.theme-live-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: 700;
|
||||
color: #ffd580;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
.theme-tip {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.6em;
|
||||
margin-top: 1.5em;
|
||||
font-size: 1em;
|
||||
color: #ffd580;
|
||||
background: #23232b;
|
||||
border-radius: 8px;
|
||||
padding: 0.5em 1em;
|
||||
}
|
||||
.theme-tip svg {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.theme-previews {
|
||||
display: flex;
|
||||
gap: 1.2em;
|
||||
margin-top: 2em;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
.theme-preview {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
min-width: 80px;
|
||||
}
|
||||
.theme-preview-label {
|
||||
font-size: 0.98em;
|
||||
color: #ffd580;
|
||||
margin-bottom: 0.3em;
|
||||
font-weight: 700;
|
||||
}
|
||||
.theme-preview-box {
|
||||
font-size: 2em;
|
||||
font-family: monospace;
|
||||
border-radius: 8px;
|
||||
padding: 0.3em 0.7em;
|
||||
box-shadow: 0 1px 6px #0003;
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.theme-hero-title {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.theme-container {
|
||||
padding: 1.2em 0.5em 1.5em 0.5em;
|
||||
}
|
||||
.theme-previews {
|
||||
gap: 0.5em;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
14
src/pages/timeline.astro
Normal file
14
src/pages/timeline.astro
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
import MainLayout from '../layouts/MainLayout.astro';
|
||||
import EcosystemTimeline from '../components/EcosystemTimeline.astro';
|
||||
---
|
||||
<MainLayout>
|
||||
<section class="tool-hero">
|
||||
<div class="tool-hero-bg tool-hero-bg-timeline"></div>
|
||||
<h1 class="tool-hero-title gradient-text">Ecosystem Timeline</h1>
|
||||
<p class="tool-hero-desc">Explore the major milestones and launches in AeThex history. See how the ecosystem has evolved.</p>
|
||||
</section>
|
||||
<section class="tool-content">
|
||||
<EcosystemTimeline />
|
||||
</section>
|
||||
</MainLayout>
|
||||
123
src/pages/universal-search.astro
Normal file
123
src/pages/universal-search.astro
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
|
||||
---
|
||||
import UniversalSearchReact from '../components/UniversalSearchReact.jsx';
|
||||
export const layout = '../layouts/MainLayout.astro';
|
||||
---
|
||||
|
||||
|
||||
|
||||
<section class="search-hero">
|
||||
<div class="search-hero-bg"></div>
|
||||
<div class="search-hero-content">
|
||||
<h1 class="search-hero-title gradient-text">Universal Search</h1>
|
||||
<p class="search-hero-desc">Search the entire AeThex ecosystem. Instantly find divisions, products, docs, and more—all from one place.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="search-main">
|
||||
<div class="search-container">
|
||||
<div class="search-live-header">
|
||||
<span class="search-live-icon">🔎</span>
|
||||
<span class="search-live-title">Live Universal Search</span>
|
||||
</div>
|
||||
<UniversalSearchReact client:load />
|
||||
<div class="search-tip">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="10" cy="10" r="10" fill="#ffd580"/><text x="10" y="15" text-anchor="middle" font-size="14" fill="#222" font-family="monospace">i</text></svg>
|
||||
<span>Try searching for <b>Labs</b>, <b>Docs</b>, or <b>Foundation</b>.</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<style>
|
||||
.search-hero {
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
left: 50%;
|
||||
right: 50%;
|
||||
margin-left: -50vw;
|
||||
margin-right: -50vw;
|
||||
background: linear-gradient(120deg, #0a0a0a 60%, #39ff14 100%);
|
||||
padding: 4.5em 0 2.5em 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 260px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.search-hero-bg {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: url('/brand/brand-bg.svg'), linear-gradient(120deg, #0a0a0a 60%, #39ff14 100%);
|
||||
opacity: 0.13;
|
||||
z-index: 1;
|
||||
}
|
||||
.search-hero-content {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
text-align: center;
|
||||
}
|
||||
.search-hero-title {
|
||||
font-size: 2.5em;
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
.search-hero-desc {
|
||||
font-size: 1.2em;
|
||||
color: #baffc9;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.search-main {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: -2.5em;
|
||||
margin-bottom: 3em;
|
||||
}
|
||||
.search-container {
|
||||
background: rgba(30,30,40,0.98);
|
||||
border-radius: 22px;
|
||||
box-shadow: 0 2px 24px #0008;
|
||||
padding: 2.2em 2em 2.5em 2em;
|
||||
max-width: 480px;
|
||||
width: 100%;
|
||||
border: 1.5px solid #333;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.search-live-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.7em;
|
||||
margin-bottom: 1.2em;
|
||||
}
|
||||
.search-live-icon {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.search-live-title {
|
||||
font-size: 1.1em;
|
||||
font-weight: 700;
|
||||
color: #39ff14;
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
.search-tip {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.6em;
|
||||
margin-top: 1.5em;
|
||||
font-size: 1em;
|
||||
color: #ffd580;
|
||||
background: #23232b;
|
||||
border-radius: 8px;
|
||||
padding: 0.5em 1em;
|
||||
}
|
||||
.search-tip svg {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
.search-hero-title {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
.search-container {
|
||||
padding: 1.2em 0.5em 1.5em 0.5em;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -1,5 +1,14 @@
|
|||
{
|
||||
"extends": "astro/tsconfigs/strict",
|
||||
"include": [".astro/types.d.ts", "**/*"],
|
||||
"exclude": ["dist"]
|
||||
}
|
||||
"include": [
|
||||
".astro/types.d.ts",
|
||||
"**/*"
|
||||
],
|
||||
"exclude": [
|
||||
"dist"
|
||||
],
|
||||
"compilerOptions": {
|
||||
"jsx": "react-jsx",
|
||||
"jsxImportSource": "react"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue