Refactored code into components, added custom colors support inside the json config, added the page name attribute and fixed mouse wheel control on mobile devices
All checks were successful
Build and deploy all / build (amiral.json, /var/www/amiral, amiral) (push) Successful in 47s
Build and deploy all / build (atlantis.json, /var/www/atlantis, atlantis) (push) Successful in 43s
Build and deploy all / build (harbor.json, /var/www/harbor, harbor) (push) Successful in 43s
Build and deploy all / deploy (amiral.json, /var/www/amiral, amiral) (push) Successful in 14s
Build and deploy all / deploy (atlantis.json, /var/www/atlantis, atlantis) (push) Successful in 12s
Build and deploy all / deploy (harbor.json, /var/www/harbor, harbor) (push) Successful in 12s
Build and deploy all / notify (push) Successful in 2s

This commit is contained in:
Gu://em_ 2026-03-31 18:11:02 +02:00
parent c0ed3d2d1d
commit d5b638405f
14 changed files with 988 additions and 813 deletions

View file

@ -23,13 +23,6 @@ jobs:
include: *site_matrix
steps:
- name: Debug Matrix
run: |
echo "Full Matrix Site: '${{ matrix.site }}'"
echo "Full Matrix Config: '${{ matrix.config_file }}'"
echo "Dump Matrix Context: "
echo '${{ toJSON(matrix) }}'
- name: Checkout git repository
uses: actions/checkout@v4
with:

5
.gitignore vendored
View file

@ -1,6 +1,11 @@
# trash folder
old/
# custom blueprints
src/data/
# (keep default template)
!src/data/content.json
# build output
dist/

View file

@ -5,6 +5,75 @@
Contains the source code of the Home OP website.
Now uses Astro instead of the old static website !
## How to use it
If you want to use this project for yourself, you'll first want to edit the configuration file located at `src/data/content.json`.
The file should look like this, don't hesitate to take the provided template file to make yours.
```json
{
"website_title": "Website Title",
"website_logo": "https://...",
"website_status_link": "https://...",
"colors": {
... // Optional
},
"cards": [
{
"title": "Card One",
"icon": "https://...",
"description": "First description",
"link": "https://..."
},
{
"title": "Card Two",
"icon": "https://...",
"description": "Second description",
"link": "https://..."
}
]
}
```
> [!NOTE]
> You can also use a relative path for your icons like that
> ```json
> "icon": "../assets/some-icon.svg",
>```
### Optimized image loading
I would recommend to use only SVGs in your image links if possible. If it's not possible and that you want to optimize the loading time, you should use the lazy image loading.
> [!WARNING]
> This feature is not implemented yet and you'll have to go manually inside the `src/components/` folder to make modifications.
In order to use the lazy image loading you'll need to allow your source domain inside `astro.config.mjs` like following
```js
import { defineConfig } from 'astro/config';
export default defineConfig({
image: {
// Add your domain
domains: ['resources.example.com'],
},
});
```
Then for each component that uses a raster image (PNG, JPG...) use the following syntax
```astro
---
import { Image } from 'astro:assets';
const { title, icon, ... } = Astro.props;
---
<Image
src={icon}
alt={title}
width={160}
height={160}
quality="high"
format="webp"
loading="eager"
/>
```
Note that in this case, it would be a good idea to store your images in the assets folder an to access them using their relative path to let astro generate what it needs to fully take advantage of this feature.
## Structure
### Project
@ -22,7 +91,7 @@ Now uses Astro instead of the old static website !
- `layouts/`
- `pages/`
- `scripts/`
- `data/` - Contains the configs to generate the website, each as a JSON file (contains cards, site name, etc.)
- `data/` - Contains the configs to generate the website, each as a JSON file (contains cards, site name, colors, etc.)
- `styles` - default CSS style sheets and custom themes
## Build

View file

@ -12,6 +12,6 @@
"astro": "astro"
},
"dependencies": {
"astro": "^6.0.4"
"astro": "^6.1.2"
}
}

359
pnpm-lock.yaml generated
View file

@ -9,23 +9,23 @@ importers:
.:
dependencies:
astro:
specifier: ^6.0.4
version: 6.0.4(rollup@4.59.0)
specifier: ^6.1.2
version: 6.1.2(rollup@4.60.1)
packages:
'@astrojs/compiler@3.0.0':
resolution: {integrity: sha512-MwAbDE5mawZ1SS+D8qWiHdprdME5Tlj2e0YjxnEICvcOpbSukNS7Sa7hA5PK+6RrmUr/t6Gi5YgrdZKjbO/WPQ==}
'@astrojs/compiler@3.0.1':
resolution: {integrity: sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==}
'@astrojs/internal-helpers@0.8.0':
resolution: {integrity: sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w==}
'@astrojs/markdown-remark@7.0.0':
resolution: {integrity: sha512-jTAXHPy45L7o1ljH4jYV+ShtOHtyQUa1mGp3a5fJp1soX8lInuTJQ6ihmldHzVM4Q7QptU4SzIDIcKbBJO7sXQ==}
'@astrojs/markdown-remark@7.1.0':
resolution: {integrity: sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ==}
'@astrojs/prism@4.0.0':
resolution: {integrity: sha512-NndtNPpxaGinRpRytljGBvYHpTOwHycSZ/c+lQi5cHvkqqrHKWdkPEhImlODBNmbuB+vyQUNUDXyjzt66CihJg==}
engines: {node: ^20.19.1 || >=22.12.0}
'@astrojs/prism@4.0.1':
resolution: {integrity: sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ==}
engines: {node: '>=22.12.0'}
'@astrojs/telemetry@3.3.0':
resolution: {integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==}
@ -39,8 +39,8 @@ packages:
resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/parser@7.29.0':
resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
'@babel/parser@7.29.2':
resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
engines: {node: '>=6.0.0'}
hasBin: true
@ -58,8 +58,8 @@ packages:
'@clack/prompts@1.1.0':
resolution: {integrity: sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==}
'@emnapi/runtime@1.9.0':
resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==}
'@emnapi/runtime@1.9.1':
resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==}
'@esbuild/aix-ppc64@0.27.4':
resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==}
@ -369,128 +369,128 @@ packages:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.59.0':
resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
'@rollup/rollup-android-arm-eabi@4.60.1':
resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.59.0':
resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
'@rollup/rollup-android-arm64@4.60.1':
resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.59.0':
resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
'@rollup/rollup-darwin-arm64@4.60.1':
resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.59.0':
resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
'@rollup/rollup-darwin-x64@4.60.1':
resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.59.0':
resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
'@rollup/rollup-freebsd-arm64@4.60.1':
resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.59.0':
resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
'@rollup/rollup-freebsd-x64@4.60.1':
resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.59.0':
resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
'@rollup/rollup-linux-arm-gnueabihf@4.60.1':
resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.59.0':
resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
'@rollup/rollup-linux-arm-musleabihf@4.60.1':
resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
cpu: [arm]
os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.59.0':
resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
'@rollup/rollup-linux-arm64-gnu@4.60.1':
resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-arm64-musl@4.59.0':
resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
'@rollup/rollup-linux-arm64-musl@4.60.1':
resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
cpu: [arm64]
os: [linux]
'@rollup/rollup-linux-loong64-gnu@4.59.0':
resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
'@rollup/rollup-linux-loong64-gnu@4.60.1':
resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-loong64-musl@4.59.0':
resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==}
'@rollup/rollup-linux-loong64-musl@4.60.1':
resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
cpu: [loong64]
os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.59.0':
resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
'@rollup/rollup-linux-ppc64-gnu@4.60.1':
resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-ppc64-musl@4.59.0':
resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==}
'@rollup/rollup-linux-ppc64-musl@4.60.1':
resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
cpu: [ppc64]
os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.59.0':
resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
'@rollup/rollup-linux-riscv64-gnu@4.60.1':
resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.59.0':
resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
'@rollup/rollup-linux-riscv64-musl@4.60.1':
resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
cpu: [riscv64]
os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.59.0':
resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
'@rollup/rollup-linux-s390x-gnu@4.60.1':
resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
cpu: [s390x]
os: [linux]
'@rollup/rollup-linux-x64-gnu@4.59.0':
resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
'@rollup/rollup-linux-x64-gnu@4.60.1':
resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
cpu: [x64]
os: [linux]
'@rollup/rollup-linux-x64-musl@4.59.0':
resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
'@rollup/rollup-linux-x64-musl@4.60.1':
resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
cpu: [x64]
os: [linux]
'@rollup/rollup-openbsd-x64@4.59.0':
resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==}
'@rollup/rollup-openbsd-x64@4.60.1':
resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
cpu: [x64]
os: [openbsd]
'@rollup/rollup-openharmony-arm64@4.59.0':
resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
'@rollup/rollup-openharmony-arm64@4.60.1':
resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==}
cpu: [arm64]
os: [openharmony]
'@rollup/rollup-win32-arm64-msvc@4.59.0':
resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
'@rollup/rollup-win32-arm64-msvc@4.60.1':
resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.59.0':
resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
'@rollup/rollup-win32-ia32-msvc@4.60.1':
resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-gnu@4.59.0':
resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==}
'@rollup/rollup-win32-x64-gnu@4.60.1':
resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==}
cpu: [x64]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.59.0':
resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
'@rollup/rollup-win32-x64-msvc@4.60.1':
resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==}
cpu: [x64]
os: [win32]
@ -525,8 +525,8 @@ packages:
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/debug@4.1.13':
resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
@ -563,9 +563,9 @@ packages:
array-iterate@2.0.1:
resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
astro@6.0.4:
resolution: {integrity: sha512-1piLJCPTL/x7AMO2cjVFSTFyRqKuC3W8sSEySCt1aJio+p/wGs5H3K+Xr/rE9ftKtknLUtjxCqCE7/0NsXfGpQ==}
engines: {node: ^20.19.1 || >=22.12.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
astro@6.1.2:
resolution: {integrity: sha512-r3iIvmB6JvQxsdJLvapybKKq7Bojd1iQK6CCx5P55eRnXJIyUpHx/1UB/GdMm+em/lwaCUasxHCmIO0lCLV2uA==}
engines: {node: '>=22.12.0', npm: '>=9.6.5', pnpm: '>=7.1.0'}
hasBin: true
axobject-query@4.1.0:
@ -674,8 +674,8 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
diff@8.0.3:
resolution: {integrity: sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==}
diff@8.0.4:
resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
engines: {node: '>=0.3.1'}
dlv@1.1.3:
@ -755,8 +755,8 @@ packages:
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
h3@1.15.6:
resolution: {integrity: sha512-oi15ESLW5LRthZ+qPCi5GNasY/gvynSKUQxgiovrY63bPAtG59wtM+LSrlcwvOHAXzGrXVLnI97brbkdPF9WoQ==}
h3@1.15.10:
resolution: {integrity: sha512-YzJeWSkDZxAhvmp8dexjRK5hxziRO7I9m0N53WhvYL5NiWfkUkzssVzY9jvGu0HBoLFW6+duYmNSn6MaZBCCtg==}
hast-util-from-html@2.0.3:
resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
@ -1011,8 +1011,8 @@ packages:
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
oniguruma-to-es@4.3.4:
resolution: {integrity: sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==}
oniguruma-to-es@4.3.5:
resolution: {integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ==}
p-limit@7.3.0:
resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==}
@ -1041,12 +1041,12 @@ packages:
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
picomatch@2.3.2:
resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
engines: {node: '>=8.6'}
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
picomatch@4.0.4:
resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
engines: {node: '>=12'}
postcss@8.5.8:
@ -1116,13 +1116,13 @@ packages:
retext@9.0.0:
resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
rollup@4.59.0:
resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
rollup@4.60.1:
resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
sax@1.5.0:
resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==}
sax@1.6.0:
resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
engines: {node: '>=11.0.0'}
semver@7.7.4:
@ -1141,8 +1141,8 @@ packages:
sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
smol-toml@1.6.0:
resolution: {integrity: sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==}
smol-toml@1.6.1:
resolution: {integrity: sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==}
engines: {node: '>= 18'}
source-map-js@1.2.1:
@ -1236,8 +1236,8 @@ packages:
unist-util-visit@5.1.0:
resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==}
unstorage@1.17.4:
resolution: {integrity: sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==}
unstorage@1.17.5:
resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==}
peerDependencies:
'@azure/app-configuration': ^1.8.0
'@azure/cosmos': ^4.2.0
@ -1381,16 +1381,16 @@ packages:
snapshots:
'@astrojs/compiler@3.0.0': {}
'@astrojs/compiler@3.0.1': {}
'@astrojs/internal-helpers@0.8.0':
dependencies:
picomatch: 4.0.3
picomatch: 4.0.4
'@astrojs/markdown-remark@7.0.0':
'@astrojs/markdown-remark@7.1.0':
dependencies:
'@astrojs/internal-helpers': 0.8.0
'@astrojs/prism': 4.0.0
'@astrojs/prism': 4.0.1
github-slugger: 2.0.0
hast-util-from-html: 2.0.3
hast-util-to-text: 4.0.2
@ -1402,8 +1402,9 @@ snapshots:
remark-parse: 11.0.0
remark-rehype: 11.1.2
remark-smartypants: 3.0.2
retext-smartypants: 6.2.0
shiki: 4.0.2
smol-toml: 1.6.0
smol-toml: 1.6.1
unified: 11.0.5
unist-util-remove-position: 5.0.0
unist-util-visit: 5.1.0
@ -1412,7 +1413,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@astrojs/prism@4.0.0':
'@astrojs/prism@4.0.1':
dependencies:
prismjs: 1.30.0
@ -1432,7 +1433,7 @@ snapshots:
'@babel/helper-validator-identifier@7.28.5': {}
'@babel/parser@7.29.0':
'@babel/parser@7.29.2':
dependencies:
'@babel/types': 7.29.0
@ -1454,7 +1455,7 @@ snapshots:
'@clack/core': 1.1.0
sisteransi: 1.0.5
'@emnapi/runtime@1.9.0':
'@emnapi/runtime@1.9.1':
dependencies:
tslib: 2.8.1
optional: true
@ -1622,7 +1623,7 @@ snapshots:
'@img/sharp-wasm32@0.34.5':
dependencies:
'@emnapi/runtime': 1.9.0
'@emnapi/runtime': 1.9.1
optional: true
'@img/sharp-win32-arm64@0.34.5':
@ -1638,87 +1639,87 @@ snapshots:
'@oslojs/encoding@1.1.0': {}
'@rollup/pluginutils@5.3.0(rollup@4.59.0)':
'@rollup/pluginutils@5.3.0(rollup@4.60.1)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
picomatch: 4.0.4
optionalDependencies:
rollup: 4.59.0
rollup: 4.60.1
'@rollup/rollup-android-arm-eabi@4.59.0':
'@rollup/rollup-android-arm-eabi@4.60.1':
optional: true
'@rollup/rollup-android-arm64@4.59.0':
'@rollup/rollup-android-arm64@4.60.1':
optional: true
'@rollup/rollup-darwin-arm64@4.59.0':
'@rollup/rollup-darwin-arm64@4.60.1':
optional: true
'@rollup/rollup-darwin-x64@4.59.0':
'@rollup/rollup-darwin-x64@4.60.1':
optional: true
'@rollup/rollup-freebsd-arm64@4.59.0':
'@rollup/rollup-freebsd-arm64@4.60.1':
optional: true
'@rollup/rollup-freebsd-x64@4.59.0':
'@rollup/rollup-freebsd-x64@4.60.1':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.59.0':
'@rollup/rollup-linux-arm-gnueabihf@4.60.1':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.59.0':
'@rollup/rollup-linux-arm-musleabihf@4.60.1':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.59.0':
'@rollup/rollup-linux-arm64-gnu@4.60.1':
optional: true
'@rollup/rollup-linux-arm64-musl@4.59.0':
'@rollup/rollup-linux-arm64-musl@4.60.1':
optional: true
'@rollup/rollup-linux-loong64-gnu@4.59.0':
'@rollup/rollup-linux-loong64-gnu@4.60.1':
optional: true
'@rollup/rollup-linux-loong64-musl@4.59.0':
'@rollup/rollup-linux-loong64-musl@4.60.1':
optional: true
'@rollup/rollup-linux-ppc64-gnu@4.59.0':
'@rollup/rollup-linux-ppc64-gnu@4.60.1':
optional: true
'@rollup/rollup-linux-ppc64-musl@4.59.0':
'@rollup/rollup-linux-ppc64-musl@4.60.1':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.59.0':
'@rollup/rollup-linux-riscv64-gnu@4.60.1':
optional: true
'@rollup/rollup-linux-riscv64-musl@4.59.0':
'@rollup/rollup-linux-riscv64-musl@4.60.1':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.59.0':
'@rollup/rollup-linux-s390x-gnu@4.60.1':
optional: true
'@rollup/rollup-linux-x64-gnu@4.59.0':
'@rollup/rollup-linux-x64-gnu@4.60.1':
optional: true
'@rollup/rollup-linux-x64-musl@4.59.0':
'@rollup/rollup-linux-x64-musl@4.60.1':
optional: true
'@rollup/rollup-openbsd-x64@4.59.0':
'@rollup/rollup-openbsd-x64@4.60.1':
optional: true
'@rollup/rollup-openharmony-arm64@4.59.0':
'@rollup/rollup-openharmony-arm64@4.60.1':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.59.0':
'@rollup/rollup-win32-arm64-msvc@4.60.1':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.59.0':
'@rollup/rollup-win32-ia32-msvc@4.60.1':
optional: true
'@rollup/rollup-win32-x64-gnu@4.59.0':
'@rollup/rollup-win32-x64-gnu@4.60.1':
optional: true
'@rollup/rollup-win32-x64-msvc@4.59.0':
'@rollup/rollup-win32-x64-msvc@4.60.1':
optional: true
'@shikijs/core@4.0.2':
@ -1733,7 +1734,7 @@ snapshots:
dependencies:
'@shikijs/types': 4.0.2
'@shikijs/vscode-textmate': 10.0.2
oniguruma-to-es: 4.3.4
oniguruma-to-es: 4.3.5
'@shikijs/engine-oniguruma@4.0.2':
dependencies:
@ -1761,7 +1762,7 @@ snapshots:
'@shikijs/vscode-textmate@10.0.2': {}
'@types/debug@4.1.12':
'@types/debug@4.1.13':
dependencies:
'@types/ms': 2.1.0
@ -1788,7 +1789,7 @@ snapshots:
anymatch@3.1.3:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
picomatch: 2.3.2
argparse@2.0.1: {}
@ -1796,16 +1797,16 @@ snapshots:
array-iterate@2.0.1: {}
astro@6.0.4(rollup@4.59.0):
astro@6.1.2(rollup@4.60.1):
dependencies:
'@astrojs/compiler': 3.0.0
'@astrojs/compiler': 3.0.1
'@astrojs/internal-helpers': 0.8.0
'@astrojs/markdown-remark': 7.0.0
'@astrojs/markdown-remark': 7.1.0
'@astrojs/telemetry': 3.3.0
'@capsizecss/unpack': 4.0.0
'@clack/prompts': 1.1.0
'@oslojs/encoding': 1.1.0
'@rollup/pluginutils': 5.3.0(rollup@4.59.0)
'@rollup/pluginutils': 5.3.0(rollup@4.60.1)
aria-query: 5.3.2
axobject-query: 4.1.0
ci-info: 4.4.0
@ -1813,7 +1814,7 @@ snapshots:
common-ancestor-path: 2.0.0
cookie: 1.1.1
devalue: 5.6.4
diff: 8.0.3
diff: 8.0.4
dlv: 1.1.3
dset: 3.1.4
es-module-lexer: 2.0.0
@ -1833,11 +1834,11 @@ snapshots:
p-queue: 9.1.0
package-manager-detector: 1.6.0
piccolore: 0.1.3
picomatch: 4.0.3
picomatch: 4.0.4
rehype: 13.0.2
semver: 7.7.4
shiki: 4.0.2
smol-toml: 1.6.0
smol-toml: 1.6.1
svgo: 4.0.1
tinyclip: 0.1.12
tinyexec: 1.0.4
@ -1846,7 +1847,7 @@ snapshots:
ultrahtml: 1.6.0
unifont: 0.7.4
unist-util-visit: 5.1.0
unstorage: 1.17.4
unstorage: 1.17.5
vfile: 6.0.3
vite: 7.3.1
vitefu: 1.1.2(vite@7.3.1)
@ -1973,7 +1974,7 @@ snapshots:
dependencies:
dequal: 2.0.3
diff@8.0.3: {}
diff@8.0.4: {}
dlv@1.1.3: {}
@ -2040,9 +2041,9 @@ snapshots:
extend@3.0.2: {}
fdir@6.5.0(picomatch@4.0.3):
fdir@6.5.0(picomatch@4.0.4):
optionalDependencies:
picomatch: 4.0.3
picomatch: 4.0.4
flattie@1.1.1: {}
@ -2059,7 +2060,7 @@ snapshots:
github-slugger@2.0.0: {}
h3@1.15.6:
h3@1.15.10:
dependencies:
cookie-es: 1.2.2
crossws: 0.3.5
@ -2192,7 +2193,7 @@ snapshots:
magicast@0.5.2:
dependencies:
'@babel/parser': 7.29.0
'@babel/parser': 7.29.2
'@babel/types': 7.29.0
source-map-js: 1.2.1
@ -2493,7 +2494,7 @@ snapshots:
micromark@4.0.2:
dependencies:
'@types/debug': 4.1.12
'@types/debug': 4.1.13
debug: 4.4.3
decode-named-character-reference: 1.3.0
devlop: 1.1.0
@ -2547,7 +2548,7 @@ snapshots:
oniguruma-parser@0.12.1: {}
oniguruma-to-es@4.3.4:
oniguruma-to-es@4.3.5:
dependencies:
oniguruma-parser: 0.12.1
regex: 6.1.0
@ -2583,9 +2584,9 @@ snapshots:
picocolors@1.1.1: {}
picomatch@2.3.1: {}
picomatch@2.3.2: {}
picomatch@4.0.3: {}
picomatch@4.0.4: {}
postcss@8.5.8:
dependencies:
@ -2702,38 +2703,38 @@ snapshots:
retext-stringify: 4.0.0
unified: 11.0.5
rollup@4.59.0:
rollup@4.60.1:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.59.0
'@rollup/rollup-android-arm64': 4.59.0
'@rollup/rollup-darwin-arm64': 4.59.0
'@rollup/rollup-darwin-x64': 4.59.0
'@rollup/rollup-freebsd-arm64': 4.59.0
'@rollup/rollup-freebsd-x64': 4.59.0
'@rollup/rollup-linux-arm-gnueabihf': 4.59.0
'@rollup/rollup-linux-arm-musleabihf': 4.59.0
'@rollup/rollup-linux-arm64-gnu': 4.59.0
'@rollup/rollup-linux-arm64-musl': 4.59.0
'@rollup/rollup-linux-loong64-gnu': 4.59.0
'@rollup/rollup-linux-loong64-musl': 4.59.0
'@rollup/rollup-linux-ppc64-gnu': 4.59.0
'@rollup/rollup-linux-ppc64-musl': 4.59.0
'@rollup/rollup-linux-riscv64-gnu': 4.59.0
'@rollup/rollup-linux-riscv64-musl': 4.59.0
'@rollup/rollup-linux-s390x-gnu': 4.59.0
'@rollup/rollup-linux-x64-gnu': 4.59.0
'@rollup/rollup-linux-x64-musl': 4.59.0
'@rollup/rollup-openbsd-x64': 4.59.0
'@rollup/rollup-openharmony-arm64': 4.59.0
'@rollup/rollup-win32-arm64-msvc': 4.59.0
'@rollup/rollup-win32-ia32-msvc': 4.59.0
'@rollup/rollup-win32-x64-gnu': 4.59.0
'@rollup/rollup-win32-x64-msvc': 4.59.0
'@rollup/rollup-android-arm-eabi': 4.60.1
'@rollup/rollup-android-arm64': 4.60.1
'@rollup/rollup-darwin-arm64': 4.60.1
'@rollup/rollup-darwin-x64': 4.60.1
'@rollup/rollup-freebsd-arm64': 4.60.1
'@rollup/rollup-freebsd-x64': 4.60.1
'@rollup/rollup-linux-arm-gnueabihf': 4.60.1
'@rollup/rollup-linux-arm-musleabihf': 4.60.1
'@rollup/rollup-linux-arm64-gnu': 4.60.1
'@rollup/rollup-linux-arm64-musl': 4.60.1
'@rollup/rollup-linux-loong64-gnu': 4.60.1
'@rollup/rollup-linux-loong64-musl': 4.60.1
'@rollup/rollup-linux-ppc64-gnu': 4.60.1
'@rollup/rollup-linux-ppc64-musl': 4.60.1
'@rollup/rollup-linux-riscv64-gnu': 4.60.1
'@rollup/rollup-linux-riscv64-musl': 4.60.1
'@rollup/rollup-linux-s390x-gnu': 4.60.1
'@rollup/rollup-linux-x64-gnu': 4.60.1
'@rollup/rollup-linux-x64-musl': 4.60.1
'@rollup/rollup-openbsd-x64': 4.60.1
'@rollup/rollup-openharmony-arm64': 4.60.1
'@rollup/rollup-win32-arm64-msvc': 4.60.1
'@rollup/rollup-win32-ia32-msvc': 4.60.1
'@rollup/rollup-win32-x64-gnu': 4.60.1
'@rollup/rollup-win32-x64-msvc': 4.60.1
fsevents: 2.3.3
sax@1.5.0: {}
sax@1.6.0: {}
semver@7.7.4: {}
@ -2782,7 +2783,7 @@ snapshots:
sisteransi@1.0.5: {}
smol-toml@1.6.0: {}
smol-toml@1.6.1: {}
source-map-js@1.2.1: {}
@ -2801,7 +2802,7 @@ snapshots:
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
sax: 1.5.0
sax: 1.6.0
tiny-inflate@1.0.3: {}
@ -2811,8 +2812,8 @@ snapshots:
tinyglobby@0.2.15:
dependencies:
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
trim-lines@3.0.1: {}
@ -2887,12 +2888,12 @@ snapshots:
unist-util-is: 6.0.1
unist-util-visit-parents: 6.0.2
unstorage@1.17.4:
unstorage@1.17.5:
dependencies:
anymatch: 3.1.3
chokidar: 5.0.0
destr: 2.0.5
h3: 1.15.6
h3: 1.15.10
lru-cache: 11.2.7
node-fetch-native: 1.6.7
ofetch: 1.5.1
@ -2916,10 +2917,10 @@ snapshots:
vite@7.3.1:
dependencies:
esbuild: 0.27.4
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
fdir: 6.5.0(picomatch@4.0.4)
picomatch: 4.0.4
postcss: 8.5.8
rollup: 4.59.0
rollup: 4.60.1
tinyglobby: 0.2.15
optionalDependencies:
fsevents: 2.3.3

225
src/components/Card.astro Normal file
View file

@ -0,0 +1,225 @@
---
const { link, icon, title, description } = Astro.props;
---
<a class="card" href={link}>
<img src={icon} width={80} height={80} />
<div class="card-title">{title}</div>
<div class="card-desc">{description}</div>
</a>
<!--Default---------------------------------------------------------->
<style>
.card {
position: relative;
top: 0px;
width: 500px;
height: 290px;
margin-top: 4rem;
background-color: var(--card-background);
border: 4px solid transparent;
border-radius: 1.4em;
background-clip: padding-box;
transition: 300ms;
}
/*Cards borders*/
.card::after {
position: absolute;
top: -0.05em;
bottom: -0.05em;
left: -0.05em;
right: -0.05em;
background: linear-gradient(
135deg,
var(--card-gradient-left) 0%,
var(--card-gradient-right) 100%
);
content: "";
z-index: -1;
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 2em 40px);
transition: 500ms;
}
.card:hover {
top: -1%;
}
.card:hover::after {
background: linear-gradient(
135deg,
var(--card-hover-gradient-left) 0%,
var(--card-hover-gradient-right) 100%
);
filter: drop-shadow(var(--card-hover-shadow) 0 2em 40px);
top: -0.1em;
bottom: -0.1em;
left: -0.1em;
right: -0.1em;
}
.card-title {
position: absolute;
top: 12%;
left: 25%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 2em;
color: var(--text);
}
.card-desc {
position: absolute;
top: 50%;
left: 25%;
height: fit-content;
width: 65%;
font-family: "IBM Plex Mono";
font-size: 1.4em;
color: var(--text);
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 4em;
height: 4em;
}
</style>
<!--Tablets---------------------------------------------------------->
<style>
@media (max-width: 1210px) AND (min-width: 800px) {
.card {
position: relative;
width: 100%;
/*max-width: 300px;*/
height: auto;
min-height: 14rem;
margin: 0;
padding: 1.4rem;
background-color: #121212;
box-sizing: border-box;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 3em;
height: 3em;
}
.card-title {
position: absolute;
top: 12%;
left: 23%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 1.6em;
color: #eaeaea;
}
.card-desc {
position: static;
width: 100%;
margin-top: 5em;
margin-left: 0;
font-size: 1.2em;
color: #eaeaea;
text-align: center;
}
}
</style>
<!--Mobile---------------------------------------------------------->
<style>
@media (max-width: 800px) {
.card {
position: relative;
width: 90vw;
max-width: 420px;
height: auto;
min-height: 14rem;
margin: 1rem 0;
padding: 1.2rem 1rem;
background-color: #121212;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: static;
width: 3em;
height: 3em;
margin-bottom: 0.8em;
margin-right: 0;
margin-top: 0.2em;
flex-shrink: 0;
display: block;
}
.card-title {
position: static;
margin-bottom: 0.5em;
margin-top: 0.2em;
margin-left: 0;
font-size: 1.7em;
font-weight: 600;
color: #eaeaea;
text-align: center;
text-decoration: none;
}
.card-desc {
position: static;
width: 100%;
margin-top: 1em;
margin-left: 0;
font-size: 1em;
color: #eaeaea;
text-align: center;
}
}
</style>

81
src/components/Logo.astro Normal file
View file

@ -0,0 +1,81 @@
---
const { logo, link, text } = Astro.props;
---
<a href={link}>
<img class="logo" src={logo} alt="://" />
</a>
<div class="instance-name">
{text}
</div>
<!--Default---------------------------------------------------------->
<style>
.logo {
position: fixed;
top: 1.8rem;
left: 2rem;
width: 3.7rem;
height: 3.7rem;
transition-duration: 500ms;
}
.logo:hover {
filter: drop-shadow(0 0 4px #7782ff);
-webkit-filter: drop-shadow(0 0 4px #7782ff);
transition: cubic-bezier(0.075, 0.82, 0.165, 1);
transition-duration: 500ms;
}
.instance-name {
position: fixed;
top: 2rem;
left: 6.5rem;
color: var(--text);
font-family: "IBM Plex Mono";
font-weight: 600;
font-size: 2.5em;
}
</style>
<!--Tablets---------------------------------------------------------->
<style>
@media (max-width: 1210px) AND (min-width: 800px) {
.logo {
position: absolute;
top: 1.3rem;
left: 1.3rem;
z-index: 2;
width: 3rem;
height: 3rem;
margin: 0;
padding: 0;
display: block;
pointer-events: auto;
}
.instance-name {
display: none;
}
}
</style>
<!--Mobile---------------------------------------------------------->
<style>
@media (max-width: 800px) {
.logo {
display: none;
}
.instance-name {
display: none;
}
}
</style>

View file

@ -1,6 +1,23 @@
{
"website_title": "Website Title",
"website_logo": "https://...",
"page_name": "",
"website_status_link": "https://...",
"colors": {
"primary_accent": "#353be5",
"secondary_accent": "#353be5",
"background": "#000000",
"text": "#eaeaea",
"cards": {
"background": "#121212",
"text": "#eaeaea",
"gradient_left": "#353be5",
"gradient_right": "#43434388",
"hover_gradient_left": "#4000ff",
"hover_gradient_right": "#353be570",
"hover_shadow": "#4f35e5a0"
}
},
"cards": [
{
"title": "Card One",

View file

@ -1,66 +1,98 @@
---
import "../styles/common.css";
import "../styles/mobile.css";
import "../styles/tablet.css";
// === Imports
import "../styles/global.css";
import "./index.css";
import Card from "../components/Card.astro";
import Logo from "../components/Logo.astro";
import data from "../data/content.json";
const { cards, website_title, website_logo } = data;
// === Defaults
const defaultColors = {
accent: "#353be5",
background: "#000000",
text: "#eaeaea",
cards: {
background: "#121212",
text: "#eaeaea",
gradient_left: "#353be5",
gradient_right: "#43434388",
hover_gradient_left: "#4000ff",
hover_gradient_right: "#353be570",
hover_shadow: "#4f35e5a0",
},
};
// === Configs
const { cards, website_title, website_logo, website_status_link, page_name } =
data;
const theme = { ...defaultColors, ...data.colors };
---
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<!-- <link rel="stylesheet" href="style.css" /> -->
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<!-- DISABLED because it prevents the font from loading -->
<!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'"> -->
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="theme-color" content="#000000" />
<title>{website_title}</title>
<style define:vars={theme}></style>
<style
define:vars={{
// Flatten card object to use inside css
"card-background": theme.cards.background,
"card-text": theme.cards.text,
"card-gradient-left": theme.cards.gradient_left,
"card-gradient-right": theme.cards.gradient_right,
"card-hover-gradient-left": theme.cards.hover_gradient_left,
"card-hover-gradient-right": theme.cards.hover_gradient_right,
"card-hover-shadow": theme.cards.hover_shadow,
}}
></style>
</head>
<body>
<div class="halo"></div>
<header class="site-header">
<div class="header-row">
<a href="https://status.oblic-parallels.fr">
<img class="logo" src={website_logo} />
</a>
<Logo
logo={website_logo}
link={website_status_link}
text={page_name}
/>
<h1 class="site-title">{website_title}</h1>
</div>
<div class="welcome-title">
<h2>Welcome to</h2>
</div>
</header>
<script>
window.addEventListener(
"wheel",
function (e) {
if (e.deltaY !== 0) {
e.preventDefault();
window.scrollBy({
left: e.deltaY,
behavior: "auto",
});
}
},
{ passive: false },
);
</script>
<div class="card-container">
{
cards.map((card) => (
<a class="card" href={card.link}>
<img src={card.icon} />
<div class="card-title">{card.title}</div>
<div class="card-desc">{card.description}</div>
</a>
))
}
{cards.map((info) => <Card {...info} />)}
</div>
</body>
<!-- Vertical scroll conversion -->
<script>
window.addEventListener(
"wheel",
function (e) {
if (window.innerWidth > 1210 && e.deltaY !== 0) {
e.preventDefault();
window.scrollBy({
left: e.deltaY,
behavior: "auto",
});
}
},
{ passive: false },
);
</script>
</html>

337
src/pages/index.css Normal file
View file

@ -0,0 +1,337 @@
/*-Computer-Screen-----------------------------------------------------*/
/*-(Default)-----------------------------*/
html,
body {
height: 100%;
margin: 0;
}
body {
user-select: none;
background: radial-gradient(
circle at 50% 200%,
var(--accent) 40%,
var(--accent) 45%,
#00000000 80%
);
background-color: var(--background);
background-size: cover;
background-attachment: fixed;
padding: 0;
font-family: "Inter";
}
/*-Texts-----------------------------*/
h1 {
position: fixed;
top: 27%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: var(--text);
text-align: center;
font-family: "Inter";
font-weight: 600;
font-size: 500%;
user-select: none;
letter-spacing: 0.1rem;
}
h2 {
position: fixed;
top: 16%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: var(--text);
text-align: center;
font-family: "IBM Plex Mono";
font-weight: 400;
font-size: 250%;
user-select: none;
}
/*-Cards-----------------------------*/
.card-container {
position: absolute;
bottom: 10%;
z-index: 1;
height: 40%;
/*Calculate offset to center the second card (if possible) */
/* screen_width - (card1_width + card2_margins)/2 */ /* Width includes margins */
padding-left: calc(max(50vw - ((500px + 2rem) + (500px + 6rem) / 2), 4rem));
padding-right: 4rem;
display: flex;
flex-direction: row;
justify-content: flex-start;
gap: 4rem;
align-items: center; /* Vertical alignment */
overflow: visible; /* Prevent cards shadows to be cut off */
/* Hide scrollbar for Chrome and Safari */
/*&::-webkit-scrollbar {
display: none;
}*/
/* Hide scrollbar for IE, Edge and Firefox */
/*-ms-overflow-style: none;
scrollbar-width: none;*/
}
/*-Tablet-Screen-----------------------------------------------------*/
@media (max-width: 1210px) AND (min-width: 800px) {
/*-Page-----------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
height: auto;
margin: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
}
body {
font-family: "Inter";
background-color: #000;
background-size: cover;
background-attachment: fixed;
}
/*-Header-----------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: #00000090;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
/*mask: linear-gradient(black, black, transparent);*/
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts-----------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards-----------------------------*/
.card-container {
position: relative;
left: 0;
right: 0;
bottom: 0;
top: 22rem;
min-height: 0;
height: calc(100vh - 5.5rem);
width: 80vw;
max-width: 1200px; /* Prevents from getting too wide */
margin: 0 auto; /* 'auto' centers it horizontally */
padding-bottom: 10%;
display: grid;
/* 2 equal columns ('1fr' means 1 fraction of available space) */
grid-template-columns: repeat(2, 1fr);
overflow: visible;
gap: 3rem;
}
}
/*-Phone-Screen-----------------------------------------------------*/
@media (max-width: 800px) {
/*-Page-----------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
margin: 0;
padding: 0;
overflow-x: hidden;
}
body {
font-family: "Inter";
background-color: #000;
}
/*-Header-----------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: transparent;
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts-----------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards-----------------------------*/
.card-container {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 5.5rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
width: 100vw;
min-height: 0;
height: calc(100vh - 5.5rem);
margin: 0;
padding: 10rem 1rem 1rem 1rem;
gap: 1rem;
overflow-x: hidden;
overflow-y: auto;
box-sizing: border-box;
background: transparent;
}
}

View file

@ -1,193 +0,0 @@
/*-Impports----------------------------------------------------------*/
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
/*-Fonts----------------------------------------------------------*/
/*-Page----------------------------------------------------------*/
html,
body {
height: 100%;
margin: 0;
}
body {
user-select: none;
background: radial-gradient(
circle at 50% 200%,
#353be5 0%,
#353be5 45%,
#00000000 80%
);
background-color: #000000;
background-size: cover;
background-attachment: fixed;
padding: 0;
font-family: "Inter";
}
/*-Texts----------------------------------------------------------*/
h1 {
position: fixed;
top: 27%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: #eaeaea;
text-align: center;
font-family: "Inter";
font-weight: 600;
font-size: 500%;
user-select: none;
letter-spacing: 0.1rem;
}
h2 {
position: fixed;
top: 16%;
left: 50%;
transform: translate(-50%, -50%); /*Center (compensate size)*/
color: white;
text-align: center;
font-family: "IBM Plex Mono";
font-weight: 400;
font-size: 250%;
user-select: none;
}
/*-Cards----------------------------------------------------------*/
.card-container {
position: absolute;
bottom: 10%;
z-index: 1;
height: 40%;
/*Calculate offset to center the second card (if possible) */
/* screen_width - (card1_width + card2_margins)/2 */ /* Width includes margins */
padding-left: calc(max(50vw - ((500px + 2rem) + (500px + 6rem) / 2), 4rem));
padding-right: 4rem;
display: flex;
flex-direction: row;
justify-content: flex-start;
gap: 4rem;
align-items: center; /* Vertical alignment */
overflow: visible; /* Prevent cards shadows to be cut off */
/* Hide scrollbar for Chrome and Safari */
/*&::-webkit-scrollbar {
display: none;
}*/
/* Hide scrollbar for IE, Edge and Firefox */
/*-ms-overflow-style: none;
scrollbar-width: none;*/
}
.card {
position: relative;
top: 0px;
width: 500px;
height: 290px;
margin-top: 4rem;
background-color: #121212;
border: 4px solid transparent;
border-radius: 1.4em;
background-clip: padding-box;
transition: 300ms;
}
/*Cards borders*/
.card::after {
position: absolute;
top: -0.05em;
bottom: -0.05em;
left: -0.05em;
right: -0.05em;
background: linear-gradient(135deg, #353be5 0%, #43434388 100%);
content: "";
z-index: -1;
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 2em 40px);
transition: 500ms;
}
.card:hover {
top: -1%;
}
.card:hover::after {
background: linear-gradient(135deg, #4000ff 0%, #353be570 100%);
filter: drop-shadow(#4f35e5a0 0 2em 40px);
top: -0.1em;
bottom: -0.1em;
left: -0.1em;
right: -0.1em;
}
.card-title {
position: absolute;
top: 12%;
left: 25%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 2em;
color: #eaeaea;
}
.card-desc {
position: absolute;
top: 50%;
left: 25%;
height: fit-content;
width: 65%;
font-family: "IBM Plex Mono";
font-size: 1.4em;
color: #eaeaea;
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 4em;
height: 4em;
}
/*-Logo----------------------------------------------------------*/
.logo {
position: fixed;
margin-top: 3vh;
margin-left: 3vh;
width: 3.7rem;
height: 3.7rem;
transition-duration: 500ms;
}
.logo:hover {
filter: drop-shadow(0 0 4px #7782ff);
-webkit-filter: drop-shadow(0 0 4px #7782ff);
transition: cubic-bezier(0.075, 0.82, 0.165, 1);
transition-duration: 500ms;
}

3
src/styles/global.css Normal file
View file

@ -0,0 +1,3 @@
/*-Fonts----------------------------------------------------------*/
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");

View file

@ -1,203 +0,0 @@
/*-Phone-Screen-----------------------------------------------------*/
@media (max-width: 800px) {
/*-Page----------------------------------------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
margin: 0;
padding: 0;
overflow-x: hidden;
}
body {
font-family: "Inter";
background-color: #000;
}
/*-Header--------------------------------------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: transparent;
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.logo {
display: none;
position: absolute;
top: 1.3rem;
left: 1.3rem;
z-index: 2;
width: 3rem;
height: 3rem;
margin: 0;
padding: 0;
/*display: block;*/
pointer-events: auto;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts---------------------------------------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards---------------------------------------------------------*/
.card-container {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 5.5rem;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
width: 100vw;
min-height: 0;
height: calc(100vh - 5.5rem);
margin: 0;
padding: 10rem 1rem 1rem 1rem;
gap: 1rem;
overflow-x: hidden;
overflow-y: auto;
box-sizing: border-box;
background: transparent;
}
.card {
position: relative;
width: 90vw;
max-width: 420px;
height: auto;
min-height: 14rem;
margin: 1rem 0;
padding: 1.2rem 1rem;
background-color: #121212;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: static;
width: 3em;
height: 3em;
margin-bottom: 0.8em;
margin-right: 0;
margin-top: 0.2em;
flex-shrink: 0;
display: block;
}
.card-title {
position: static;
margin-bottom: 0.5em;
margin-top: 0.2em;
margin-left: 0;
font-size: 1.7em;
font-weight: 600;
color: #eaeaea;
text-align: center;
text-decoration: none;
}
.card-desc {
position: static;
width: 100%;
margin-top: 1em;
margin-left: 0;
font-size: 1em;
color: #eaeaea;
text-align: center;
}
}

View file

@ -1,192 +0,0 @@
/*-Tablet-Screen-----------------------------------------------------*/
@media (max-width: 1210px) AND (min-width: 800px) {
/*-Page----------------------------------------------------------*/
html,
body {
width: 100vw;
min-height: 100vh;
height: auto;
margin: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
}
body {
font-family: "Inter";
background-color: #000;
background-size: cover;
background-attachment: fixed;
}
/*-Header--------------------------------------------------------*/
.site-header {
position: fixed;
top: 0;
left: 0;
z-index: 20;
width: 100vw;
height: 5.5rem;
background: #00000090;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
/*mask: linear-gradient(black, black, transparent);*/
box-sizing: border-box;
display: block;
}
.header-row {
position: relative;
width: 100vw;
height: 5.5rem;
display: flex;
align-items: center;
justify-content: center;
}
.logo {
position: absolute;
top: 1.3rem;
left: 1.3rem;
z-index: 2;
width: 3rem;
height: 3rem;
margin: 0;
padding: 0;
display: block;
pointer-events: auto;
}
.site-title {
width: 100%;
z-index: 2;
margin: 0;
flex: 0 1 auto;
font-size: 2.2em;
font-family: "Inter";
font-weight: 600;
color: #eaeaea;
text-align: center;
letter-spacing: 0.1rem;
line-height: 1;
user-select: none;
}
.welcome-title {
display: none;
}
/*-Texts---------------------------------------------------------*/
h1,
h2 {
position: static;
transform: none;
z-index: 1;
margin-top: 2.5rem;
margin-bottom: 0.5rem;
font-size: 2.2em;
text-align: center;
}
h2 {
font-size: 1.3em;
margin-top: 1.2rem;
}
a {
text-decoration: none;
}
/*-Cards---------------------------------------------------------*/
.card-container {
position: relative;
left: 0;
right: 0;
bottom: 0;
top: 22rem;
min-height: 0;
height: calc(100vh - 5.5rem);
width: 80vw;
max-width: 1200px; /* Prevents from getting too wide */
margin: 0 auto; /* 'auto' centers it horizontally */
padding-bottom: 10%;
display: grid;
/* 2 equal columns ('1fr' means 1 fraction of available space) */
grid-template-columns: repeat(2, 1fr);
overflow: visible;
gap: 3rem;
}
.card {
position: relative;
width: 100%;
/*max-width: 300px;*/
height: auto;
min-height: 14rem;
margin: 0;
padding: 1.4rem;
background-color: #121212;
box-sizing: border-box;
}
.card::after {
border-radius: 1.2em;
filter: drop-shadow(#00000080 0 1em 20px);
}
.card > img {
position: absolute;
top: 10%;
left: 6%;
width: 3em;
height: 3em;
}
.card-title {
position: absolute;
top: 12%;
left: 23%;
font-family: "IBM Plex Mono";
font-weight: 500;
font-size: 1.6em;
color: #eaeaea;
}
.card-desc {
position: static;
width: 100%;
margin-top: 5em;
margin-left: 0;
font-size: 1.2em;
color: #eaeaea;
text-align: center;
}
}