Compare changes

Choose any two refs to compare.

+14
.tangled/workflows/deploy.yaml
···
+
when:
+
- event: ["push"]
+
branch: ["main"]
+
+
dependencies:
+
nixpkgs:
+
- deno
+
+
engine: "nixery"
+
+
steps:
+
- name: Deploy to Deno Deploy
+
command: |
+
deno deploy --prod --no-wait
+10 -7
astro.config.mjs
···
// @ts-check
import { defineConfig } from "astro/config";
import deno from "@deno/astro-adapter";
+
import preact from "@astrojs/preact";
+
import icon from "astro-icon";
+
import { config } from "./src/config.ts";
// https://astro.build/config
export default defineConfig({
-
site: "https://staging.colinozanne.fr",
+
site: "https://next.colinozanne.fr",
output: "server",
adapter: deno(),
+
integrations: [preact(), icon()],
i18n: {
-
locales: ["en", "fr"],
-
defaultLocale: "fr",
+
locales: /** @type {string[]} */ (
+
/** @type {unknown} */ (config.locales)
+
),
+
defaultLocale: config.defaultLocale,
routing: {
prefixDefaultLocale: false,
},
-
domains: {
-
fr: "https://staging.colinozanne.fr",
-
en: "https://staging.colinozanne.co.uk",
-
},
+
domains: config.domains,
},
});
+5 -4
deno.jsonc
···
{
-
"deploy": {
-
"org": "finxol",
-
"app": "portfolio"
-
}
+
"deploy": {
+
"org": "finxol",
+
"app": "portfolio"
+
},
+
"nodeModulesDir": "auto",
}
+1111 -53
deno.lock
···
{
"version": "5",
"specifiers": {
-
"npm:@deno/astro-adapter@~0.3.2": "0.3.2_astro@5.15.3__vite@6.4.1___picomatch@4.0.3__zod@3.25.76",
-
"npm:astro@^5.15.3": "5.15.3_vite@6.4.1__picomatch@4.0.3_zod@3.25.76"
+
"npm:@astrojs/preact@^4.1.3": "4.1.3_preact@10.27.2_vite@6.4.1__picomatch@4.0.3",
+
"npm:@astrojs/upgrade@*": "0.6.2",
+
"npm:@deno/astro-adapter@~0.3.2": "0.3.2_astro@5.16.5__vite@6.4.1___picomatch@4.0.3__zod@3.25.76",
+
"npm:@evilmartians/harmony@^1.4.0": "1.4.0",
+
"npm:@iconify-json/lucide@^1.2.74": "1.2.74",
+
"npm:@iconify-json/pixel@^1.2.1": "1.2.1",
+
"npm:@iconify-json/tabler@^1.2.23": "1.2.23",
+
"npm:astro-icon@^1.1.5": "1.1.5",
+
"npm:astro@^5.16.5": "5.16.5_vite@6.4.1__picomatch@4.0.3_zod@3.25.76",
+
"npm:ofetch@^1.5.1": "1.5.1",
+
"npm:preact@^10.27.2": "10.27.2"
},
"npm": {
+
"@antfu/install-pkg@1.1.0": {
+
"integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
+
"dependencies": [
+
"package-manager-detector",
+
"tinyexec"
+
]
+
},
+
"@antfu/utils@8.1.1": {
+
"integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ=="
+
},
+
"@astrojs/cli-kit@0.4.1": {
+
"integrity": "sha512-bVzyKzEpIwqjihBU/aUzt1LQckJuHK0agd3/ITdXhPUYculrc6K1/K7H+XG4rwjXtg+ikT3PM05V1MVYWiIvQw==",
+
"dependencies": [
+
"chalk",
+
"log-update",
+
"sisteransi"
+
]
+
},
"@astrojs/compiler@2.13.0": {
"integrity": "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw=="
},
-
"@astrojs/internal-helpers@0.7.4": {
-
"integrity": "sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw=="
+
"@astrojs/internal-helpers@0.7.5": {
+
"integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA=="
},
-
"@astrojs/markdown-remark@6.3.8": {
-
"integrity": "sha512-uFNyFWadnULWK2cOw4n0hLKeu+xaVWeuECdP10cQ3K2fkybtTlhb7J7TcScdjmS8Yps7oje9S/ehYMfZrhrgCg==",
+
"@astrojs/markdown-remark@6.3.10": {
+
"integrity": "sha512-kk4HeYR6AcnzC4QV8iSlOfh+N8TZ3MEStxPyenyCtemqn8IpEATBFMTJcfrNW32dgpt6MY3oCkMM/Tv3/I4G3A==",
"dependencies": [
"@astrojs/internal-helpers",
"@astrojs/prism",
···
"vfile"
]
},
+
"@astrojs/preact@4.1.3_preact@10.27.2_vite@6.4.1__picomatch@4.0.3": {
+
"integrity": "sha512-Ph416wbgyumkmYr7erZ83l/d+LXdZethlHRRCbgoKEn8wo3Rkq13shKFp0QYXYSDYxVaA6UBdkdimeowy/lMLQ==",
+
"dependencies": [
+
"@preact/preset-vite",
+
"@preact/signals",
+
"preact",
+
"preact-render-to-string",
+
"vite"
+
]
+
},
"@astrojs/prism@3.3.0": {
"integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
"dependencies": [
···
"which-pm-runs"
]
},
+
"@astrojs/upgrade@0.6.2": {
+
"integrity": "sha512-vlhuH5GQicpp7zHxzlbt4XU0ERTDved1jGHyAGeocVHbKGiUwt9utqMQpDfIx5OP2a/xur09jl/grgtdVJQOIg==",
+
"dependencies": [
+
"@astrojs/cli-kit",
+
"package-manager-detector",
+
"semver@7.7.3",
+
"terminal-link"
+
],
+
"bin": true
+
},
+
"@babel/code-frame@7.27.1": {
+
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+
"dependencies": [
+
"@babel/helper-validator-identifier",
+
"js-tokens",
+
"picocolors"
+
]
+
},
+
"@babel/compat-data@7.28.5": {
+
"integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="
+
},
+
"@babel/core@7.28.5": {
+
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
+
"dependencies": [
+
"@babel/code-frame",
+
"@babel/generator",
+
"@babel/helper-compilation-targets",
+
"@babel/helper-module-transforms",
+
"@babel/helpers",
+
"@babel/parser",
+
"@babel/template",
+
"@babel/traverse",
+
"@babel/types",
+
"@jridgewell/remapping",
+
"convert-source-map",
+
"debug",
+
"gensync",
+
"json5",
+
"semver@6.3.1"
+
]
+
},
+
"@babel/generator@7.28.5": {
+
"integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==",
+
"dependencies": [
+
"@babel/parser",
+
"@babel/types",
+
"@jridgewell/gen-mapping",
+
"@jridgewell/trace-mapping",
+
"jsesc"
+
]
+
},
+
"@babel/helper-annotate-as-pure@7.27.3": {
+
"integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
+
"dependencies": [
+
"@babel/types"
+
]
+
},
+
"@babel/helper-compilation-targets@7.27.2": {
+
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
+
"dependencies": [
+
"@babel/compat-data",
+
"@babel/helper-validator-option",
+
"browserslist",
+
"lru-cache@5.1.1",
+
"semver@6.3.1"
+
]
+
},
+
"@babel/helper-globals@7.28.0": {
+
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="
+
},
+
"@babel/helper-module-imports@7.27.1": {
+
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
+
"dependencies": [
+
"@babel/traverse",
+
"@babel/types"
+
]
+
},
+
"@babel/helper-module-transforms@7.28.3_@babel+core@7.28.5": {
+
"integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-module-imports",
+
"@babel/helper-validator-identifier",
+
"@babel/traverse"
+
]
+
},
+
"@babel/helper-plugin-utils@7.27.1": {
+
"integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="
+
},
"@babel/helper-string-parser@7.27.1": {
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
},
"@babel/helper-validator-identifier@7.28.5": {
"integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="
},
+
"@babel/helper-validator-option@7.27.1": {
+
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="
+
},
+
"@babel/helpers@7.28.4": {
+
"integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==",
+
"dependencies": [
+
"@babel/template",
+
"@babel/types"
+
]
+
},
"@babel/parser@7.28.5": {
"integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==",
"dependencies": [
···
],
"bin": true
},
+
"@babel/plugin-syntax-jsx@7.27.1_@babel+core@7.28.5": {
+
"integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-plugin-utils"
+
]
+
},
+
"@babel/plugin-transform-react-jsx-development@7.27.1_@babel+core@7.28.5": {
+
"integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/plugin-transform-react-jsx"
+
]
+
},
+
"@babel/plugin-transform-react-jsx@7.27.1_@babel+core@7.28.5": {
+
"integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/helper-annotate-as-pure",
+
"@babel/helper-module-imports",
+
"@babel/helper-plugin-utils",
+
"@babel/plugin-syntax-jsx",
+
"@babel/types"
+
]
+
},
+
"@babel/template@7.27.2": {
+
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
+
"dependencies": [
+
"@babel/code-frame",
+
"@babel/parser",
+
"@babel/types"
+
]
+
},
+
"@babel/traverse@7.28.5": {
+
"integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==",
+
"dependencies": [
+
"@babel/code-frame",
+
"@babel/generator",
+
"@babel/helper-globals",
+
"@babel/parser",
+
"@babel/template",
+
"@babel/types",
+
"debug"
+
]
+
},
"@babel/types@7.28.5": {
"integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==",
"dependencies": [
···
"@babel/helper-validator-identifier"
]
},
-
"@capsizecss/unpack@3.0.0": {
-
"integrity": "sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA==",
+
"@capsizecss/unpack@3.0.1": {
+
"integrity": "sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==",
"dependencies": [
"fontkit"
]
},
-
"@deno/astro-adapter@0.3.2_astro@5.15.3__vite@6.4.1___picomatch@4.0.3__zod@3.25.76": {
+
"@deno/astro-adapter@0.3.2_astro@5.16.5__vite@6.4.1___picomatch@4.0.3__zod@3.25.76": {
"integrity": "sha512-nN0kQGobRs2XE3R+O/DWYQanEWpteJNsIf5TD65787qFEw2CrqkFNcNolZFJiKUF/2Y/TKyOLRjMS3F6auECVg==",
"dependencies": [
"astro"
···
"os": ["win32"],
"cpu": ["x64"]
},
+
"@evilmartians/harmony@1.4.0": {
+
"integrity": "sha512-NgKkhTnQOSE07IvDxHHPLzFF81TaWU1Ir5nmaRM+PebXAol5vNXnk+Lp2JPgj1P/PBTu6lzSWckSpNjC19XSUw=="
+
},
+
"@iconify-json/lucide@1.2.74": {
+
"integrity": "sha512-vDoGHcDZdWgUbt9J3TCJlxFzX/Mw0vUIAoZdkfI2mINOi1/cgVZHivgZ8QtiGlepskTL3PcG8t93Ky/vtQgXGA==",
+
"dependencies": [
+
"@iconify/types"
+
]
+
},
+
"@iconify-json/pixel@1.2.1": {
+
"integrity": "sha512-XwzURAMyZ/BJKeygh4PloKo9cUvS8GfcePueApzwrePvmwCwYT8SC581AQLxJHJl2FZjGWmUMVQ2FN3b9/cYyw==",
+
"dependencies": [
+
"@iconify/types"
+
]
+
},
+
"@iconify-json/tabler@1.2.23": {
+
"integrity": "sha512-Knb8ykgMwB5uSoqrDv1xIdJYM03OP06OXjN6QvGXaTNtdHkW9ciKA+aftz6lwM2jwJA+bsUWeDzLBlPt2uJm4w==",
+
"dependencies": [
+
"@iconify/types"
+
]
+
},
+
"@iconify/tools@4.1.4": {
+
"integrity": "sha512-s6BcNUcCxQ3S6cvhlsoWzOuBt8qKXdVyXB9rT57uSJ/ARHD7dVM43+5ERBWn3tmkMWXeJ/s9DPVc3dUasayzeA==",
+
"dependencies": [
+
"@iconify/types",
+
"@iconify/utils",
+
"@types/tar",
+
"axios",
+
"cheerio",
+
"domhandler",
+
"extract-zip",
+
"local-pkg@0.5.1",
+
"pathe@1.1.2",
+
"svgo@3.3.2",
+
"tar"
+
]
+
},
+
"@iconify/types@2.0.0": {
+
"integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="
+
},
+
"@iconify/utils@2.3.0": {
+
"integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==",
+
"dependencies": [
+
"@antfu/install-pkg",
+
"@antfu/utils",
+
"@iconify/types",
+
"debug",
+
"globals",
+
"kolorist",
+
"local-pkg@1.1.2",
+
"mlly"
+
]
+
},
"@img/colour@1.0.0": {
"integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="
},
···
"os": ["win32"],
"cpu": ["x64"]
},
+
"@jridgewell/gen-mapping@0.3.13": {
+
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+
"dependencies": [
+
"@jridgewell/sourcemap-codec",
+
"@jridgewell/trace-mapping"
+
]
+
},
+
"@jridgewell/remapping@2.3.5": {
+
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
+
"dependencies": [
+
"@jridgewell/gen-mapping",
+
"@jridgewell/trace-mapping"
+
]
+
},
+
"@jridgewell/resolve-uri@3.1.2": {
+
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="
+
},
"@jridgewell/sourcemap-codec@1.5.5": {
"integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
},
+
"@jridgewell/trace-mapping@0.3.31": {
+
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+
"dependencies": [
+
"@jridgewell/resolve-uri",
+
"@jridgewell/sourcemap-codec"
+
]
+
},
"@oslojs/encoding@1.1.0": {
"integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="
},
+
"@preact/preset-vite@2.10.2_@babel+core@7.28.5_vite@6.4.1__picomatch@4.0.3_preact@10.27.2": {
+
"integrity": "sha512-K9wHlJOtkE+cGqlyQ5v9kL3Ge0Ql4LlIZjkUTL+1zf3nNdF88F9UZN6VTV8jdzBX9Fl7WSzeNMSDG7qECPmSmg==",
+
"dependencies": [
+
"@babel/core",
+
"@babel/plugin-transform-react-jsx",
+
"@babel/plugin-transform-react-jsx-development",
+
"@prefresh/vite",
+
"@rollup/pluginutils@4.2.1",
+
"babel-plugin-transform-hook-names",
+
"debug",
+
"picocolors",
+
"vite",
+
"vite-prerender-plugin"
+
]
+
},
+
"@preact/signals-core@1.12.1": {
+
"integrity": "sha512-BwbTXpj+9QutoZLQvbttRg5x3l5468qaV2kufh+51yha1c53ep5dY4kTuZR35+3pAZxpfQerGJiQqg34ZNZ6uA=="
+
},
+
"@preact/signals@2.3.1_preact@10.27.2": {
+
"integrity": "sha512-nyuRIGmcwM/HjvFHhN2xUWfyla9D4llHt+prWoxjQfD6b5prO7CFPlG/xjJkP31Oic4KQXfH9SIhJFP9cy4lmg==",
+
"dependencies": [
+
"@preact/signals-core",
+
"preact"
+
]
+
},
+
"@prefresh/babel-plugin@0.5.2": {
+
"integrity": "sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA=="
+
},
+
"@prefresh/core@1.5.7_preact@10.27.2": {
+
"integrity": "sha512-AsyeitiPwG7UkT0mqgKzIDuydmYSKtBlzXEb5ymzskvxewcmVGRjQkcHDy6PCNBT7soAyHpQ0mPgXX4IeyOlUg==",
+
"dependencies": [
+
"preact"
+
]
+
},
+
"@prefresh/utils@1.2.1": {
+
"integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw=="
+
},
+
"@prefresh/vite@2.4.10_preact@10.27.2_vite@6.4.1__picomatch@4.0.3": {
+
"integrity": "sha512-lt+ODASOtXRWaPplp7/DlrgAaInnQYNvcpCglQBMx2OeJPyZ4IqPRaxsK77w96mWshjYwkqTsRSHoAM7aAn0ow==",
+
"dependencies": [
+
"@babel/core",
+
"@prefresh/babel-plugin",
+
"@prefresh/core",
+
"@prefresh/utils",
+
"@rollup/pluginutils@4.2.1",
+
"preact",
+
"vite"
+
]
+
},
+
"@rollup/pluginutils@4.2.1": {
+
"integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+
"dependencies": [
+
"estree-walker@2.0.2",
+
"picomatch@2.3.1"
+
]
+
},
"@rollup/pluginutils@5.3.0": {
"integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
"dependencies": [
···
"os": ["win32"],
"cpu": ["x64"]
},
-
"@shikijs/core@3.13.0": {
-
"integrity": "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==",
+
"@shikijs/core@3.20.0": {
+
"integrity": "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==",
"dependencies": [
"@shikijs/types",
"@shikijs/vscode-textmate",
···
"hast-util-to-html"
]
},
-
"@shikijs/engine-javascript@3.13.0": {
-
"integrity": "sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==",
+
"@shikijs/engine-javascript@3.20.0": {
+
"integrity": "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==",
"dependencies": [
"@shikijs/types",
"@shikijs/vscode-textmate",
"oniguruma-to-es"
]
},
-
"@shikijs/engine-oniguruma@3.13.0": {
-
"integrity": "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==",
+
"@shikijs/engine-oniguruma@3.20.0": {
+
"integrity": "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==",
"dependencies": [
"@shikijs/types",
"@shikijs/vscode-textmate"
]
},
-
"@shikijs/langs@3.13.0": {
-
"integrity": "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==",
+
"@shikijs/langs@3.20.0": {
+
"integrity": "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==",
"dependencies": [
"@shikijs/types"
]
},
-
"@shikijs/themes@3.13.0": {
-
"integrity": "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==",
+
"@shikijs/themes@3.20.0": {
+
"integrity": "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==",
"dependencies": [
"@shikijs/types"
]
},
-
"@shikijs/types@3.13.0": {
-
"integrity": "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==",
+
"@shikijs/types@3.20.0": {
+
"integrity": "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==",
"dependencies": [
"@shikijs/vscode-textmate",
"@types/hast"
···
"dependencies": [
"tslib"
]
+
},
+
"@trysound/sax@0.2.0": {
+
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
},
"@types/debug@4.1.12": {
"integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
···
"undici-types"
]
},
+
"@types/tar@6.1.13": {
+
"integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==",
+
"dependencies": [
+
"@types/node",
+
"minipass@4.2.8"
+
]
+
},
"@types/unist@3.0.3": {
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="
+
},
+
"@types/yauzl@2.10.3": {
+
"integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+
"dependencies": [
+
"@types/node"
+
]
},
"@ungap/structured-clone@1.3.0": {
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="
···
"string-width@4.2.3"
]
},
+
"ansi-escapes@5.0.0": {
+
"integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+
"dependencies": [
+
"type-fest@1.4.0"
+
]
+
},
+
"ansi-escapes@7.0.0": {
+
"integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==",
+
"dependencies": [
+
"environment"
+
]
+
},
"ansi-regex@5.0.1": {
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
},
···
"array-iterate@2.0.1": {
"integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="
},
-
"astro@5.15.3_vite@6.4.1__picomatch@4.0.3_zod@3.25.76": {
-
"integrity": "sha512-wUO/isJrcUoduRoKacKB9jpO6TxTlPV1zw8UqQx39jSNY7z9IxusJAiib3AiNvqK+dCWhqXx+OnExCCwELmcUw==",
+
"astro-icon@1.1.5": {
+
"integrity": "sha512-CJYS5nWOw9jz4RpGWmzNQY7D0y2ZZacH7atL2K9DeJXJVaz7/5WrxeyIxO8KASk1jCM96Q4LjRx/F3R+InjJrw==",
+
"dependencies": [
+
"@iconify/tools",
+
"@iconify/types",
+
"@iconify/utils"
+
]
+
},
+
"astro@5.16.5_vite@6.4.1__picomatch@4.0.3_zod@3.25.76": {
+
"integrity": "sha512-QeuM4xzTR0QuXFDNlGVW0BW7rcquKFIkylaPeM4ufii0/RRiPTYtwxDYVZ3KfiMRuuc+nbLD0214kMKTvz/yvQ==",
"dependencies": [
"@astrojs/compiler",
"@astrojs/internal-helpers",
···
"@astrojs/telemetry",
"@capsizecss/unpack",
"@oslojs/encoding",
-
"@rollup/pluginutils",
+
"@rollup/pluginutils@5.3.0",
"acorn",
"aria-query",
"axobject-query",
···
"p-limit",
"p-queue",
"package-manager-detector",
-
"picocolors",
+
"piccolore",
"picomatch@4.0.3",
"prompts",
"rehype",
-
"semver",
+
"semver@7.7.3",
"shiki",
"smol-toml",
+
"svgo@4.0.0",
"tinyexec",
"tinyglobby",
"tsconfck",
···
],
"bin": true
},
+
"asynckit@0.4.0": {
+
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+
},
+
"axios@1.13.2": {
+
"integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
+
"dependencies": [
+
"follow-redirects",
+
"form-data",
+
"proxy-from-env"
+
]
+
},
"axobject-query@4.1.0": {
"integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="
},
+
"babel-plugin-transform-hook-names@1.0.2_@babel+core@7.28.5": {
+
"integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==",
+
"dependencies": [
+
"@babel/core"
+
]
+
},
"bail@2.0.2": {
"integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw=="
},
···
"base64-js@1.5.1": {
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
+
"baseline-browser-mapping@2.8.25": {
+
"integrity": "sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==",
+
"bin": true
+
},
+
"boolbase@1.0.0": {
+
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+
},
"boxen@8.0.1": {
"integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
"dependencies": [
···
"chalk",
"cli-boxes",
"string-width@7.2.0",
-
"type-fest",
+
"type-fest@4.41.0",
"widest-line",
-
"wrap-ansi"
+
"wrap-ansi@9.0.2"
]
},
"brotli@1.3.3": {
···
"base64-js"
]
},
+
"browserslist@4.27.0": {
+
"integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==",
+
"dependencies": [
+
"baseline-browser-mapping",
+
"caniuse-lite",
+
"electron-to-chromium",
+
"node-releases",
+
"update-browserslist-db"
+
],
+
"bin": true
+
},
+
"buffer-crc32@0.2.13": {
+
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="
+
},
+
"call-bind-apply-helpers@1.0.2": {
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+
"dependencies": [
+
"es-errors",
+
"function-bind"
+
]
+
},
"camelcase@8.0.0": {
"integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA=="
+
},
+
"caniuse-lite@1.0.30001753": {
+
"integrity": "sha512-Bj5H35MD/ebaOV4iDLqPEtiliTN29qkGtEHCwawWn4cYm+bPJM2NsaP30vtZcnERClMzp52J4+aw2UNbK4o+zw=="
},
"ccount@2.0.1": {
"integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="
···
"character-entities@2.0.2": {
"integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="
},
+
"cheerio-select@2.1.0": {
+
"integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+
"dependencies": [
+
"boolbase",
+
"css-select",
+
"css-what",
+
"domelementtype",
+
"domhandler",
+
"domutils"
+
]
+
},
+
"cheerio@1.0.0": {
+
"integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==",
+
"dependencies": [
+
"cheerio-select",
+
"dom-serializer",
+
"domhandler",
+
"domutils",
+
"encoding-sniffer",
+
"htmlparser2",
+
"parse5",
+
"parse5-htmlparser2-tree-adapter",
+
"parse5-parser-stream",
+
"undici",
+
"whatwg-mimetype"
+
]
+
},
"chokidar@4.0.3": {
"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
"dependencies": [
"readdirp"
]
},
+
"chownr@2.0.0": {
+
"integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
+
},
"ci-info@4.3.1": {
"integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA=="
},
"cli-boxes@3.0.0": {
"integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="
},
+
"cli-cursor@4.0.0": {
+
"integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+
"dependencies": [
+
"restore-cursor"
+
]
+
},
"clone@2.1.2": {
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
},
"clsx@2.1.1": {
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="
},
+
"combined-stream@1.0.8": {
+
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+
"dependencies": [
+
"delayed-stream"
+
]
+
},
"comma-separated-tokens@2.0.3": {
"integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="
},
+
"commander@11.1.0": {
+
"integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="
+
},
+
"commander@7.2.0": {
+
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+
},
"common-ancestor-path@1.0.1": {
"integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w=="
},
+
"confbox@0.1.8": {
+
"integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
+
},
+
"confbox@0.2.2": {
+
"integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="
+
},
+
"convert-source-map@2.0.0": {
+
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
+
},
"cookie-es@1.2.2": {
"integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="
},
···
"uncrypto"
]
},
+
"css-select@5.2.2": {
+
"integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+
"dependencies": [
+
"boolbase",
+
"css-what",
+
"domhandler",
+
"domutils",
+
"nth-check"
+
]
+
},
+
"css-tree@2.2.1": {
+
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+
"dependencies": [
+
"mdn-data@2.0.28",
+
"source-map-js"
+
]
+
},
+
"css-tree@2.3.1": {
+
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
+
"dependencies": [
+
"mdn-data@2.0.30",
+
"source-map-js"
+
]
+
},
"css-tree@3.1.0": {
"integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
"dependencies": [
-
"mdn-data",
+
"mdn-data@2.12.2",
"source-map-js"
]
},
+
"css-what@6.2.2": {
+
"integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="
+
},
"cssesc@3.0.0": {
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"bin": true
},
+
"csso@5.0.5": {
+
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+
"dependencies": [
+
"css-tree@2.2.1"
+
]
+
},
"debug@4.4.3": {
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dependencies": [
···
"defu@6.1.4": {
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="
},
+
"delayed-stream@1.0.0": {
+
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+
},
"dequal@2.0.3": {
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="
},
···
"base-64"
]
},
-
"devalue@5.4.2": {
-
"integrity": "sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw=="
+
"devalue@5.5.0": {
+
"integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w=="
},
"devlop@1.1.0": {
"integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
···
"dlv@1.1.3": {
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
},
+
"dom-serializer@2.0.0": {
+
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+
"dependencies": [
+
"domelementtype",
+
"domhandler",
+
"entities@4.5.0"
+
]
+
},
+
"domelementtype@2.3.0": {
+
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+
},
+
"domhandler@5.0.3": {
+
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+
"dependencies": [
+
"domelementtype"
+
]
+
},
+
"domutils@3.2.2": {
+
"integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+
"dependencies": [
+
"dom-serializer",
+
"domelementtype",
+
"domhandler"
+
]
+
},
"dset@3.1.4": {
"integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA=="
},
+
"dunder-proto@1.0.1": {
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+
"dependencies": [
+
"call-bind-apply-helpers",
+
"es-errors",
+
"gopd"
+
]
+
},
+
"eastasianwidth@0.2.0": {
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+
},
+
"electron-to-chromium@1.5.245": {
+
"integrity": "sha512-rdmGfW47ZhL/oWEJAY4qxRtdly2B98ooTJ0pdEI4jhVLZ6tNf8fPtov2wS1IRKwFJT92le3x4Knxiwzl7cPPpQ=="
+
},
"emoji-regex@10.6.0": {
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="
},
"emoji-regex@8.0.0": {
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
+
"emoji-regex@9.2.2": {
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+
},
+
"encoding-sniffer@0.2.1": {
+
"integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==",
+
"dependencies": [
+
"iconv-lite",
+
"whatwg-encoding"
+
]
+
},
+
"end-of-stream@1.4.5": {
+
"integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+
"dependencies": [
+
"once"
+
]
+
},
+
"entities@4.5.0": {
+
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+
},
"entities@6.0.1": {
"integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="
},
+
"environment@1.1.0": {
+
"integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="
+
},
+
"es-define-property@1.0.1": {
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="
+
},
+
"es-errors@1.3.0": {
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
+
},
"es-module-lexer@1.7.0": {
"integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="
+
},
+
"es-object-atoms@1.1.1": {
+
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+
"dependencies": [
+
"es-errors"
+
]
+
},
+
"es-set-tostringtag@2.1.0": {
+
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+
"dependencies": [
+
"es-errors",
+
"get-intrinsic",
+
"has-tostringtag",
+
"hasown"
+
]
},
"esbuild@0.25.12": {
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
···
"scripts": true,
"bin": true
},
+
"escalade@3.2.0": {
+
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="
+
},
"escape-string-regexp@5.0.0": {
"integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="
},
···
"eventemitter3@5.0.1": {
"integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="
},
+
"exsolve@1.0.7": {
+
"integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw=="
+
},
"extend@3.0.2": {
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
+
"extract-zip@2.0.1": {
+
"integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+
"dependencies": [
+
"debug",
+
"get-stream",
+
"yauzl"
+
],
+
"optionalDependencies": [
+
"@types/yauzl"
+
],
+
"bin": true
+
},
"fast-deep-equal@3.1.3": {
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
+
"fd-slicer@1.1.0": {
+
"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+
"dependencies": [
+
"pend"
+
]
+
},
"fdir@6.5.0_picomatch@4.0.3": {
"integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
"dependencies": [
···
},
"flattie@1.1.1": {
"integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ=="
+
},
+
"follow-redirects@1.15.11": {
+
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="
},
"fontace@0.3.1": {
"integrity": "sha512-9f5g4feWT1jWT8+SbL85aLIRLIXUaDygaM2xPXRmzPYxrOMNok79Lr3FGJoKVNKibE0WCunNiEVG2mwuE+2qEg==",
···
"unicode-trie"
]
},
+
"form-data@4.0.4": {
+
"integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
+
"dependencies": [
+
"asynckit",
+
"combined-stream",
+
"es-set-tostringtag",
+
"hasown",
+
"mime-types"
+
]
+
},
+
"fs-minipass@2.1.0": {
+
"integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+
"dependencies": [
+
"minipass@3.3.6"
+
]
+
},
"fsevents@2.3.3": {
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"os": ["darwin"],
"scripts": true
},
+
"function-bind@1.1.2": {
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+
},
+
"gensync@1.0.0-beta.2": {
+
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+
},
"get-east-asian-width@1.4.0": {
"integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="
},
+
"get-intrinsic@1.3.0": {
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+
"dependencies": [
+
"call-bind-apply-helpers",
+
"es-define-property",
+
"es-errors",
+
"es-object-atoms",
+
"function-bind",
+
"get-proto",
+
"gopd",
+
"has-symbols",
+
"hasown",
+
"math-intrinsics"
+
]
+
},
+
"get-proto@1.0.1": {
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+
"dependencies": [
+
"dunder-proto",
+
"es-object-atoms"
+
]
+
},
+
"get-stream@5.2.0": {
+
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+
"dependencies": [
+
"pump"
+
]
+
},
"github-slugger@2.0.0": {
"integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="
+
},
+
"globals@15.15.0": {
+
"integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg=="
+
},
+
"gopd@1.2.0": {
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
},
"h3@1.15.4": {
"integrity": "sha512-z5cFQWDffyOe4vQ9xIqNfCZdV4p//vy6fBnr8Q1AWnVZ0teurKMG66rLj++TKwKPUP3u7iMUvrvKaEUiQw2QWQ==",
···
"uncrypto"
]
},
+
"has-flag@4.0.0": {
+
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+
},
+
"has-symbols@1.1.0": {
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="
+
},
+
"has-tostringtag@1.0.2": {
+
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+
"dependencies": [
+
"has-symbols"
+
]
+
},
+
"hasown@2.0.2": {
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+
"dependencies": [
+
"function-bind"
+
]
+
},
"hast-util-from-html@2.0.3": {
"integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
"dependencies": [
···
"space-separated-tokens"
},
+
"he@1.2.0": {
+
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+
"bin": true
+
},
"html-escaper@3.0.3": {
"integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ=="
},
"html-void-elements@3.0.0": {
"integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="
},
+
"htmlparser2@9.1.0": {
+
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
+
"dependencies": [
+
"domelementtype",
+
"domhandler",
+
"domutils",
+
"entities@4.5.0"
+
]
+
},
"http-cache-semantics@4.2.0": {
"integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="
},
+
"iconv-lite@0.6.3": {
+
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+
"dependencies": [
+
"safer-buffer"
+
]
+
},
"import-meta-resolve@4.2.0": {
"integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="
},
···
"is-fullwidth-code-point@3.0.0": {
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
},
+
"is-fullwidth-code-point@4.0.0": {
+
"integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ=="
+
},
"is-inside-container@1.0.0": {
"integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
"dependencies": [
···
"is-inside-container"
},
-
"js-yaml@4.1.0": {
-
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+
"js-tokens@4.0.0": {
+
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+
},
+
"js-yaml@4.1.1": {
+
"integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"dependencies": [
"argparse"
],
+
"bin": true
+
},
+
"jsesc@3.1.0": {
+
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+
"bin": true
+
},
+
"json5@2.2.3": {
+
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"bin": true
},
"kleur@3.0.3": {
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
},
+
"kolorist@1.8.0": {
+
"integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="
+
},
+
"local-pkg@0.5.1": {
+
"integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==",
+
"dependencies": [
+
"mlly",
+
"pkg-types@1.3.1"
+
]
+
},
+
"local-pkg@1.1.2": {
+
"integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==",
+
"dependencies": [
+
"mlly",
+
"pkg-types@2.3.0",
+
"quansync"
+
]
+
},
+
"log-update@5.0.1": {
+
"integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==",
+
"dependencies": [
+
"ansi-escapes@5.0.0",
+
"cli-cursor",
+
"slice-ansi",
+
"strip-ansi@7.1.2",
+
"wrap-ansi@8.1.0"
+
]
+
},
"longest-streak@3.1.0": {
"integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="
},
"lru-cache@10.4.3": {
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="
+
},
+
"lru-cache@5.1.1": {
+
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+
"dependencies": [
+
"yallist@3.1.1"
+
]
},
"magic-string@0.30.21": {
"integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
···
"@jridgewell/sourcemap-codec"
},
-
"magicast@0.3.5": {
-
"integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
+
"magicast@0.5.1": {
+
"integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==",
"dependencies": [
"@babel/parser",
"@babel/types",
···
},
"markdown-table@3.0.4": {
"integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="
+
},
+
"math-intrinsics@1.1.0": {
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="
},
"mdast-util-definitions@6.0.0": {
"integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
···
"dependencies": [
"@types/mdast"
+
},
+
"mdn-data@2.0.28": {
+
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
+
},
+
"mdn-data@2.0.30": {
+
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
},
"mdn-data@2.12.2": {
"integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA=="
···
"micromark-util-types"
},
+
"mime-db@1.52.0": {
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+
},
+
"mime-types@2.1.35": {
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+
"dependencies": [
+
"mime-db"
+
]
+
},
+
"mimic-fn@2.1.0": {
+
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+
},
+
"minipass@3.3.6": {
+
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+
"dependencies": [
+
"yallist@4.0.0"
+
]
+
},
+
"minipass@4.2.8": {
+
"integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ=="
+
},
+
"minipass@5.0.0": {
+
"integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="
+
},
+
"minizlib@2.1.2": {
+
"integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+
"dependencies": [
+
"minipass@3.3.6",
+
"yallist@4.0.0"
+
]
+
},
+
"mkdirp@1.0.4": {
+
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+
"bin": true
+
},
+
"mlly@1.8.0": {
+
"integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==",
+
"dependencies": [
+
"acorn",
+
"pathe@2.0.3",
+
"pkg-types@1.3.1",
+
"ufo"
+
]
+
},
"mrmime@2.0.1": {
"integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="
},
···
"node-fetch-native@1.6.7": {
"integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="
},
+
"node-html-parser@6.1.13": {
+
"integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==",
+
"dependencies": [
+
"css-select",
+
"he"
+
]
+
},
"node-mock-http@1.0.3": {
"integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog=="
},
+
"node-releases@2.0.27": {
+
"integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="
+
},
"normalize-path@3.0.0": {
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+
},
+
"nth-check@2.1.1": {
+
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+
"dependencies": [
+
"boolbase"
+
]
},
"ofetch@1.5.1": {
"integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
···
"ohash@2.0.11": {
"integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="
},
+
"once@1.4.0": {
+
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+
"dependencies": [
+
"wrappy"
+
]
+
},
+
"onetime@5.1.2": {
+
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+
"dependencies": [
+
"mimic-fn"
+
]
+
},
"oniguruma-parser@0.12.1": {
"integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="
},
-
"oniguruma-to-es@4.3.3": {
-
"integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
+
"oniguruma-to-es@4.3.4": {
+
"integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==",
"dependencies": [
"oniguruma-parser",
"regex",
···
"unist-util-modify-children",
"unist-util-visit-children",
"vfile"
+
]
+
},
+
"parse5-htmlparser2-tree-adapter@7.1.0": {
+
"integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==",
+
"dependencies": [
+
"domhandler",
+
"parse5"
+
]
+
},
+
"parse5-parser-stream@7.1.2": {
+
"integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+
"dependencies": [
+
"parse5"
},
"parse5@7.3.0": {
"integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
"dependencies": [
-
"entities"
+
"entities@6.0.1"
},
+
"pathe@1.1.2": {
+
"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
+
},
+
"pathe@2.0.3": {
+
"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
+
},
+
"pend@1.2.0": {
+
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
+
},
+
"piccolore@0.1.3": {
+
"integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="
+
},
"picocolors@1.1.1": {
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
···
"picomatch@4.0.3": {
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
},
+
"pkg-types@1.3.1": {
+
"integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+
"dependencies": [
+
"confbox@0.1.8",
+
"mlly",
+
"pathe@2.0.3"
+
]
+
},
+
"pkg-types@2.3.0": {
+
"integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==",
+
"dependencies": [
+
"confbox@0.2.2",
+
"exsolve",
+
"pathe@2.0.3"
+
]
+
},
"postcss@8.5.6": {
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dependencies": [
···
"source-map-js"
},
+
"preact-render-to-string@6.6.1_preact@10.27.2": {
+
"integrity": "sha512-IIMfXRjmbSP9QmG18WJLQa4Z4yx3J0VC9QN5q9z2XYlWSzFlJ+bSm/AyLyyV/YFwjof1OXFX2Mz6Ao60LXudJg==",
+
"dependencies": [
+
"preact"
+
]
+
},
+
"preact@10.27.2": {
+
"integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg=="
+
},
"prismjs@1.30.0": {
"integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="
},
···
},
"property-information@7.1.0": {
"integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="
+
},
+
"proxy-from-env@1.1.0": {
+
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+
},
+
"pump@3.0.3": {
+
"integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
+
"dependencies": [
+
"end-of-stream",
+
"once"
+
]
+
},
+
"quansync@0.2.11": {
+
"integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="
},
"radix3@1.1.2": {
"integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="
···
"unified"
},
+
"restore-cursor@4.0.0": {
+
"integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+
"dependencies": [
+
"onetime",
+
"signal-exit"
+
]
+
},
"restructure@3.0.2": {
"integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="
},
···
],
"bin": true
},
+
"safer-buffer@2.1.2": {
+
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+
},
+
"sax@1.4.3": {
+
"integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="
+
},
+
"semver@6.3.1": {
+
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+
"bin": true
+
},
"semver@7.7.3": {
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"bin": true
···
"dependencies": [
"@img/colour",
"detect-libc",
-
"semver"
+
"semver@7.7.3"
],
"optionalDependencies": [
"@img/sharp-darwin-arm64",
···
],
"scripts": true
},
-
"shiki@3.13.0": {
-
"integrity": "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==",
+
"shiki@3.20.0": {
+
"integrity": "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==",
"dependencies": [
"@shikijs/core",
"@shikijs/engine-javascript",
···
"@types/hast"
},
+
"signal-exit@3.0.7": {
+
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+
},
+
"simple-code-frame@1.3.0": {
+
"integrity": "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==",
+
"dependencies": [
+
"kolorist"
+
]
+
},
"sisteransi@1.0.5": {
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
},
-
"smol-toml@1.4.2": {
-
"integrity": "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g=="
+
"slice-ansi@5.0.0": {
+
"integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+
"dependencies": [
+
"ansi-styles",
+
"is-fullwidth-code-point@4.0.0"
+
]
+
},
+
"smol-toml@1.5.2": {
+
"integrity": "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ=="
},
"source-map-js@1.2.1": {
"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
},
+
"source-map@0.7.6": {
+
"integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="
+
},
"space-separated-tokens@2.0.2": {
"integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="
},
+
"stack-trace@1.0.0-pre2": {
+
"integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A=="
+
},
"string-width@4.2.3": {
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dependencies": [
"emoji-regex@8.0.0",
-
"is-fullwidth-code-point",
+
"is-fullwidth-code-point@3.0.0",
"strip-ansi@6.0.1"
},
+
"string-width@5.1.2": {
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+
"dependencies": [
+
"eastasianwidth",
+
"emoji-regex@9.2.2",
+
"strip-ansi@7.1.2"
+
]
+
},
"string-width@7.2.0": {
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dependencies": [
···
"ansi-regex@6.2.2"
},
+
"supports-color@7.2.0": {
+
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+
"dependencies": [
+
"has-flag"
+
]
+
},
+
"supports-hyperlinks@3.2.0": {
+
"integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==",
+
"dependencies": [
+
"has-flag",
+
"supports-color"
+
]
+
},
+
"svgo@3.3.2": {
+
"integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
+
"dependencies": [
+
"@trysound/sax",
+
"commander@7.2.0",
+
"css-select",
+
"css-tree@2.3.1",
+
"css-what",
+
"csso",
+
"picocolors"
+
],
+
"bin": true
+
},
+
"svgo@4.0.0": {
+
"integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==",
+
"dependencies": [
+
"commander@11.1.0",
+
"css-select",
+
"css-tree@3.1.0",
+
"css-what",
+
"csso",
+
"picocolors",
+
"sax"
+
],
+
"bin": true
+
},
+
"tar@6.2.1": {
+
"integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+
"dependencies": [
+
"chownr",
+
"fs-minipass",
+
"minipass@5.0.0",
+
"minizlib",
+
"mkdirp",
+
"yallist@4.0.0"
+
]
+
},
+
"terminal-link@4.0.0": {
+
"integrity": "sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==",
+
"dependencies": [
+
"ansi-escapes@7.0.0",
+
"supports-hyperlinks"
+
]
+
},
"tiny-inflate@1.0.3": {
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
},
···
"tslib@2.8.1": {
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
+
"type-fest@1.4.0": {
+
"integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA=="
+
},
"type-fest@4.41.0": {
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="
},
···
"undici-types@7.10.0": {
"integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag=="
},
+
"undici@6.22.0": {
+
"integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw=="
+
},
"unicode-properties@1.4.1": {
"integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==",
"dependencies": [
···
"unifont@0.6.0": {
"integrity": "sha512-5Fx50fFQMQL5aeHyWnZX9122sSLckcDvcfFiBf3QYeHa7a1MKJooUy52b67moi2MJYkrfo/TWY+CoLdr/w0tTA==",
"dependencies": [
-
"css-tree",
+
"css-tree@3.1.0",
"ofetch",
"ohash"
···
"@types/unist"
},
-
"unist-util-visit-parents@6.0.1": {
-
"integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==",
+
"unist-util-visit-parents@6.0.2": {
+
"integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
"dependencies": [
"@types/unist",
"unist-util-is"
···
"unist-util-visit-parents"
},
-
"unstorage@1.17.2": {
-
"integrity": "sha512-cKEsD6iBWJgOMJ6vW1ID/SYuqNf8oN4yqRk8OYqaVQ3nnkJXOT1PSpaMh2QfzLs78UN5kSNRD2c/mgjT8tX7+w==",
+
"unstorage@1.17.3": {
+
"integrity": "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==",
"dependencies": [
"anymatch",
"chokidar",
"destr",
"h3",
-
"lru-cache",
+
"lru-cache@10.4.3",
"node-fetch-native",
"ofetch",
"ufo"
},
+
"update-browserslist-db@1.1.4_browserslist@4.27.0": {
+
"integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==",
+
"dependencies": [
+
"browserslist",
+
"escalade",
+
"picocolors"
+
],
+
"bin": true
+
},
"vfile-location@5.0.3": {
"integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
"dependencies": [
···
"vfile-message"
},
+
"vite-prerender-plugin@0.5.12_vite@6.4.1__picomatch@4.0.3": {
+
"integrity": "sha512-EiwhbMn+flg14EysbLTmZSzq8NGTxhytgK3bf4aGRF1evWLGwZiHiUJ1KZDvbxgKbMf2pG6fJWGEa3UZXOnR1g==",
+
"dependencies": [
+
"kolorist",
+
"magic-string",
+
"node-html-parser",
+
"simple-code-frame",
+
"source-map",
+
"stack-trace",
+
"vite"
+
]
+
},
"vite@6.4.1_picomatch@4.0.3": {
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"dependencies": [
···
"web-namespaces@2.0.1": {
"integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="
},
+
"whatwg-encoding@3.1.1": {
+
"integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+
"dependencies": [
+
"iconv-lite"
+
]
+
},
+
"whatwg-mimetype@4.0.0": {
+
"integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="
+
},
"which-pm-runs@1.1.0": {
"integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA=="
},
···
"string-width@7.2.0"
},
+
"wrap-ansi@8.1.0": {
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+
"dependencies": [
+
"ansi-styles",
+
"string-width@5.1.2",
+
"strip-ansi@7.1.2"
+
]
+
},
"wrap-ansi@9.0.2": {
"integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
"dependencies": [
···
"string-width@7.2.0",
"strip-ansi@7.1.2"
+
},
+
"wrappy@1.0.2": {
+
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"xxhash-wasm@1.1.0": {
"integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA=="
},
+
"yallist@3.1.1": {
+
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
+
},
+
"yallist@4.0.0": {
+
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+
},
"yargs-parser@21.1.1": {
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="
},
+
"yauzl@2.10.0": {
+
"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+
"dependencies": [
+
"buffer-crc32",
+
"fd-slicer"
+
]
+
},
"yocto-queue@1.2.1": {
"integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg=="
},
···
"yoctocolors@2.1.2": {
"integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="
},
-
"zod-to-json-schema@3.24.6_zod@3.25.76": {
-
"integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==",
+
"zod-to-json-schema@3.25.0_zod@3.25.76": {
+
"integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==",
"dependencies": [
"zod"
···
"workspace": {
"packageJson": {
"dependencies": [
+
"npm:@astrojs/preact@^4.1.3",
"npm:@deno/astro-adapter@~0.3.2",
-
"npm:astro@^5.15.3"
+
"npm:@evilmartians/harmony@^1.4.0",
+
"npm:@iconify-json/lucide@^1.2.74",
+
"npm:@iconify-json/pixel@^1.2.1",
+
"npm:@iconify-json/tabler@^1.2.23",
+
"npm:astro-icon@^1.1.5",
+
"npm:astro@^5.16.5",
+
"npm:ofetch@^1.5.1",
+
"npm:preact@^10.27.2"
+9 -1
package.json
···
"astro": "astro"
},
"dependencies": {
+
"@astrojs/preact": "^4.1.3",
"@deno/astro-adapter": "^0.3.2",
-
"astro": "^5.15.3"
+
"@evilmartians/harmony": "^1.4.0",
+
"@iconify-json/lucide": "^1.2.74",
+
"@iconify-json/pixel": "^1.2.1",
+
"@iconify-json/tabler": "^1.2.23",
+
"astro": "^5.16.5",
+
"astro-icon": "^1.1.5",
+
"ofetch": "^1.5.1",
+
"preact": "^10.27.2"
}
}
public/fonts/easy-coast/EasyCoast-Condensed.otf

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Condensed.ttf

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Condensed.woff

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Condensed.woff2

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Regular.otf

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Regular.ttf

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Regular.woff

This is a binary file and will not be displayed.

public/fonts/easy-coast/EasyCoast-Regular.woff2

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Bold.otf

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Bold.woff

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Bold.woff2

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Regular.otf

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Regular.woff

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Regular.woff2

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Semibold.otf

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Semibold.woff

This is a binary file and will not be displayed.

public/fonts/scorekard/Scorekard-Semibold.woff2

This is a binary file and will not be displayed.

public/fonts/spagetty/Spagetty-Regular.otf

This is a binary file and will not be displayed.

public/fonts/spagetty/Spagetty-Regular.woff2

This is a binary file and will not be displayed.

public/fonts/spagetty/Spagetty-Rough.otf

This is a binary file and will not be displayed.

public/fonts/spagetty/Spagetty-Rough.woff2

This is a binary file and will not be displayed.

-1
src/assets/astro.svg
···
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" width="115" height="48"><path fill="#17191E" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="url(#a)" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="#17191E" d="M.02 30.31s4.02-1.95 8.05-1.95l3.04-9.4c.11-.45.44-.76.82-.76.37 0 .7.31.82.76l3.04 9.4c4.77 0 8.05 1.95 8.05 1.95L17 11.71c-.2-.56-.53-.91-.98-.91H7.83c-.44 0-.76.35-.97.9L.02 30.31Zm42.37-5.97c0 1.64-2.05 2.62-4.88 2.62-1.85 0-2.5-.45-2.5-1.41 0-1 .8-1.49 2.65-1.49 1.67 0 3.09.03 4.73.23v.05Zm.03-2.04a21.37 21.37 0 0 0-4.37-.36c-5.32 0-7.82 1.25-7.82 4.18 0 3.04 1.71 4.2 5.68 4.2 3.35 0 5.63-.84 6.46-2.92h.14c-.03.5-.05 1-.05 1.4 0 1.07.18 1.16 1.06 1.16h4.15a16.9 16.9 0 0 1-.36-4c0-1.67.06-2.93.06-4.62 0-3.45-2.07-5.64-8.56-5.64-2.8 0-5.9.48-8.26 1.19.22.93.54 2.83.7 4.06 2.04-.96 4.95-1.37 7.2-1.37 3.11 0 3.97.71 3.97 2.15v.57Zm11.37 3c-.56.07-1.33.07-2.12.07-.83 0-1.6-.03-2.12-.1l-.02.58c0 2.85 1.87 4.52 8.45 4.52 6.2 0 8.2-1.64 8.2-4.55 0-2.74-1.33-4.09-7.2-4.39-4.58-.2-4.99-.7-4.99-1.28 0-.66.59-1 3.65-1 3.18 0 4.03.43 4.03 1.35v.2a46.13 46.13 0 0 1 4.24.03l.02-.55c0-3.36-2.8-4.46-8.2-4.46-6.08 0-8.13 1.49-8.13 4.39 0 2.6 1.64 4.23 7.48 4.48 4.3.14 4.77.62 4.77 1.28 0 .7-.7 1.03-3.71 1.03-3.47 0-4.35-.48-4.35-1.47v-.13Zm19.82-12.05a17.5 17.5 0 0 1-6.24 3.48c.03.84.03 2.4.03 3.24l1.5.02c-.02 1.63-.04 3.6-.04 4.9 0 3.04 1.6 5.32 6.58 5.32 2.1 0 3.5-.23 5.23-.6a43.77 43.77 0 0 1-.46-4.13c-1.03.34-2.34.53-3.78.53-2 0-2.82-.55-2.82-2.13 0-1.37 0-2.65.03-3.84 2.57.02 5.13.07 6.64.11-.02-1.18.03-2.9.1-4.04-2.2.04-4.65.07-6.68.07l.07-2.93h-.16Zm13.46 6.04a767.33 767.33 0 0 1 .07-3.18H82.6c.07 1.96.07 3.98.07 6.92 0 2.95-.03 4.99-.07 6.93h5.18c-.09-1.37-.11-3.68-.11-5.65 0-3.1 1.26-4 4.12-4 1.33 0 2.28.16 3.1.46.03-1.16.26-3.43.4-4.43-.86-.25-1.81-.41-2.96-.41-2.46-.03-4.26.98-5.1 3.38l-.17-.02Zm22.55 3.65c0 2.5-1.8 3.66-4.64 3.66-2.81 0-4.61-1.1-4.61-3.66s1.82-3.52 4.61-3.52c2.82 0 4.64 1.03 4.64 3.52Zm4.71-.11c0-4.96-3.87-7.18-9.35-7.18-5.5 0-9.23 2.22-9.23 7.18 0 4.94 3.49 7.59 9.21 7.59 5.77 0 9.37-2.65 9.37-7.6Z"/><defs><linearGradient id="a" x1="6.33" x2="19.43" y1="40.8" y2="34.6" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient></defs></svg>
-1
src/assets/background.svg
···
-
<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="1024" fill="none"><path fill="url(#a)" fill-rule="evenodd" d="M-217.58 475.75c91.82-72.02 225.52-29.38 341.2-44.74C240 415.56 372.33 315.14 466.77 384.9c102.9 76.02 44.74 246.76 90.31 366.31 29.83 78.24 90.48 136.14 129.48 210.23 57.92 109.99 169.67 208.23 155.9 331.77-13.52 121.26-103.42 264.33-224.23 281.37-141.96 20.03-232.72-220.96-374.06-196.99-151.7 25.73-172.68 330.24-325.85 315.72-128.6-12.2-110.9-230.73-128.15-358.76-12.16-90.14 65.87-176.25 44.1-264.57-26.42-107.2-167.12-163.46-176.72-273.45-10.15-116.29 33.01-248.75 124.87-320.79Z" clip-rule="evenodd" style="opacity:.154"/><path fill="url(#b)" fill-rule="evenodd" d="M1103.43 115.43c146.42-19.45 275.33-155.84 413.5-103.59 188.09 71.13 409 212.64 407.06 413.88-1.94 201.25-259.28 278.6-414.96 405.96-130 106.35-240.24 294.39-405.6 265.3-163.7-28.8-161.93-274.12-284.34-386.66-134.95-124.06-436-101.46-445.82-284.6-9.68-180.38 247.41-246.3 413.54-316.9 101.01-42.93 207.83 21.06 316.62 6.61Z" clip-rule="evenodd" style="opacity:.154"/><defs><linearGradient id="b" x1="373" x2="1995.44" y1="1100" y2="118.03" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient><linearGradient id="a" x1="107.37" x2="1130.66" y1="1993.35" y2="1026.31" gradientUnits="userSpaceOnUse"><stop stop-color="#3245FF"/><stop offset="1" stop-color="#BC52EE"/></linearGradient></defs></svg>
+24
src/assets/fonts/easycoast.css
···
+
@font-face {
+
font-family: "EasyCoast";
+
src:
+
url("/fonts/easy-coast/EasyCoast-Regular.woff2") format("woff2"),
+
url("/fonts/easy-coast/EasyCoast-Regular.woff") format("woff"),
+
url("/fonts/easy-coast/EasyCoast-Regular.ttf") format("truetype"),
+
url("/fonts/easy-coast/EasyCoast-Regular.otf") format("opentype");
+
font-weight: normal;
+
font-style: normal;
+
font-display: swap;
+
}
+
+
@font-face {
+
font-family: "EasyCoast";
+
src:
+
url("/fonts/easy-coast/EasyCoast-Condensed.woff2") format("woff2"),
+
url("/fonts/easy-coast/EasyCoast-Condensed.woff") format("woff"),
+
url("/fonts/easy-coast/EasyCoast-Condensed.ttf") format("truetype"),
+
url("/fonts/easy-coast/EasyCoast-Condensed.otf") format("opentype");
+
font-stretch: condensed;
+
font-weight: normal;
+
font-style: normal;
+
font-display: swap;
+
}
+32
src/assets/fonts/scorekard.css
···
+
@font-face {
+
font-family: "Scorekard";
+
src:
+
url("/fonts/scorekard/Scorekard-Regular.woff2") format("woff2"),
+
url("/fonts/scorekard/Scorekard-Regular.woff") format("woff"),
+
url("/fonts/scorekard/Scorekard-Regular.otf") format("opentype");
+
font-weight: normal;
+
font-style: normal;
+
font-display: swap;
+
}
+
+
@font-face {
+
font-family: "Scorekard";
+
src:
+
url("/fonts/scorekard/Scorekard-Semibold.woff2") format("woff2"),
+
url("/fonts/scorekard/Scorekard-Semibold.woff") format("woff"),
+
url("/fonts/scorekard/Scorekard-Semibold.otf") format("opentype");
+
font-weight: 600;
+
font-style: normal;
+
font-display: swap;
+
}
+
+
@font-face {
+
font-family: "Scorekard";
+
src:
+
url("/fonts/scorekard/Scorekard-Bold.woff2") format("woff2"),
+
url("/fonts/scorekard/Scorekard-Bold.woff") format("woff"),
+
url("/fonts/scorekard/Scorekard-Bold.otf") format("opentype");
+
font-weight: bold;
+
font-style: normal;
+
font-display: swap;
+
}
+20
src/assets/fonts/spagetty.css
···
+
@font-face {
+
font-family: "Spagetty";
+
src:
+
url("/fonts/spagetty/Spagetty-Regular.woff2") format("woff2"),
+
url("/fonts/spagetty/Spagetty-Regular.otf") format("opentype");
+
font-weight: normal;
+
font-style: normal;
+
font-display: swap;
+
}
+
+
@font-face {
+
font-family: "Spagetty";
+
src:
+
url("/fonts/spagetty/Spagetty-Rough.woff2") format("woff2"),
+
url("/fonts/spagetty/Spagetty-Rough.otf") format("opentype");
+
font-weight: normal;
+
font-style: normal;
+
font-variation-settings: "RUFF" 1;
+
font-display: swap;
+
}
src/assets/img/colin.png

This is a binary file and will not be displayed.

src/assets/img/colin.webp

This is a binary file and will not be displayed.

src/assets/img/finxol_blog_home.jpg

This is a binary file and will not be displayed.

src/assets/img/finxol_blog_home.webp

This is a binary file and will not be displayed.

src/assets/img/karr_demo.jpg

This is a binary file and will not be displayed.

src/assets/img/karr_demo.webp

This is a binary file and will not be displayed.

src/assets/img/viscircle_recaro_pitch.jpg

This is a binary file and will not be displayed.

src/assets/img/viscircle_recaro_pitch.webp

This is a binary file and will not be displayed.

+242
src/assets/styles/index.css
···
+
p {
+
margin: 0;
+
font-size: 1.2rem;
+
}
+
+
article {
+
--spacing: 1.5rem;
+
+
display: grid;
+
grid-template-columns: repeat(2, 1fr);
+
grid-template-areas:
+
"content-intro content-intro"
+
"content-languages content-blog"
+
"title-projects title-projects"
+
"content-projects content-projects";
+
gap: var(--spacing);
+
}
+
+
section.title-projects {
+
grid-area: title-projects;
+
display: flex;
+
flex-direction: row;
+
align-items: center;
+
justify-content: start;
+
gap: 1rem;
+
margin-inline: calc(var(--spacing) * 2);
+
margin-block: calc(var(--spacing) * 3) calc(var(--spacing) * 2);
+
+
@media screen and (max-width: 768px) {
+
flex-direction: column;
+
}
+
+
& > * {
+
margin: 0;
+
}
+
+
& > aside {
+
grid-area: aside;
+
margin-inline: 1.5rem;
+
font-size: var(--size-3);
+
font-weight: bold;
+
+
@media screen and (max-width: 768px) {
+
margin-inline: 0.5rem;
+
}
+
}
+
+
& > h3 {
+
grid-area: h3;
+
margin: 0;
+
margin-inline-end: 2rem;
+
font-family: "Spagetty";
+
font-size: var(--size-2);
+
font-weight: bold;
+
}
+
+
& > p {
+
grid-area: intro;
+
margin: 0;
+
font-size: var(--size-0);
+
}
+
}
+
+
section.container {
+
&.content-intro {
+
--container-color: var(--rose-400);
+
grid-area: content-intro;
+
}
+
+
&.content-languages {
+
--container-color: var(--sky-400);
+
+
grid-area: content-languages;
+
display: flex;
+
align-items: center;
+
justify-content: start;
+
gap: 1rem;
+
+
@media screen and (max-width: 768px) {
+
flex-direction: column;
+
}
+
}
+
+
&.content-blog {
+
--container-color: var(--yellow-400);
+
+
grid-area: content-blog;
+
+
a {
+
display: flex;
+
align-items: center;
+
justify-content: start;
+
gap: 1rem;
+
text-decoration: none;
+
margin: 0;
+
font-size: var(--size-0);
+
+
@media screen and (max-width: 768px) {
+
flex-direction: column;
+
}
+
+
svg {
+
width: 1.5rem;
+
height: 1.5rem;
+
}
+
}
+
}
+
+
&.content-projects {
+
grid-area: content-projects;
+
}
+
}
+
+
section.container.content-projects {
+
display: grid;
+
grid-template-columns: repeat(2, 1fr);
+
grid-template-rows: auto;
+
grid-gap: var(--spacing);
+
padding-inline: 0;
+
background-color: transparent;
+
+
@media screen and (max-width: 768px) {
+
grid-template-columns: 1fr;
+
grid-template-rows: repeat(2, 1fr);
+
}
+
+
.project {
+
display: grid;
+
grid-template-areas:
+
"img img"
+
"title title"
+
"tags tags"
+
"description description";
+
grid-template-columns: 1fr auto;
+
grid-template-rows: repeat(5, auto);
+
grid-gap: var(--spacing);
+
+
overflow: hidden;
+
border-radius: var(--radius);
+
background-color: var(--container-color, var(--teal-300));
+
+
& > a {
+
grid-area: title;
+
font-size: var(--size-2);
+
font-weight: bold;
+
text-decoration: none;
+
color: inherit;
+
}
+
+
& > :not(picture) {
+
margin: 0 var(--spacing);
+
padding: 0;
+
}
+
+
& > picture {
+
grid-area: img;
+
+
width: 100%;
+
}
+
+
& > ul {
+
grid-area: tags;
+
+
list-style-type: none;
+
display: flex;
+
flex-wrap: wrap;
+
justify-content: flex-start;
+
gap: calc(var(--spacing) * 0.4);
+
margin-top: -1rem;
+
+
& > li {
+
display: inline-block;
+
padding: 0.25rem 1rem;
+
border-radius: 100vw;
+
background-color: var(--teal-700);
+
color: var(--teal-100);
+
font-weight: lighter;
+
font-size: var(--size--2);
+
letter-spacing: 0.025em;
+
}
+
}
+
+
& > p {
+
grid-area: description;
+
}
+
}
+
}
+
+
@layer components {
+
section.container.layout {
+
display: grid;
+
grid-template-columns: auto auto 1fr;
+
grid-template-areas:
+
"aside h3 intro"
+
". body body";
+
align-items: center;
+
justify-content: start;
+
padding: calc(var(--spacing) * 2) var(--spacing)
+
calc(var(--spacing) * 3);
+
grid-column-gap: var(--spacing);
+
+
@media screen and (max-width: 768px) {
+
grid-template-areas:
+
"aside h3"
+
". intro"
+
". body";
+
}
+
+
& > aside {
+
grid-area: aside;
+
margin-inline: 1.5rem;
+
font-size: var(--size-3);
+
font-weight: bold;
+
+
@media screen and (max-width: 768px) {
+
margin-inline: 0.5rem;
+
}
+
}
+
+
& > h3 {
+
grid-area: h3;
+
margin: 0;
+
margin-inline-end: 2rem;
+
font-family: "Spagetty";
+
font-size: var(--size-2);
+
font-weight: bold;
+
}
+
+
& > p {
+
grid-area: intro;
+
margin: 0;
+
font-size: var(--size-1);
+
}
+
+
& > div {
+
grid-area: body;
+
display: flex;
+
flex-direction: column;
+
gap: var(--spacing);
+
}
+
}
+
}
+119
src/assets/styles/main.css
···
+
/* https://harmonizer.evilmartians.com/#W1siMTAwIiwxMDAsbnVsbCwiMjAwIiw5MCxudWxsLCIzMDAiLDc3LG51bGwsIjQwMCIsNjUsbnVsbCwiNTAwIiw1MSxudWxsLCI2MDAiLDY1LG51bGwsIjcwMCIsNzcsbnVsbCwiODAwIiw5MCxudWxsLCI5MDAiLDEwMCxudWxsXSxbIlJlZCIsMjAsIk1haG9nYW55IiwzOCwiQnJvbnplIiw1NSwiT3JhbmdlIiw3MywiTXVzdGFyZCIsOTAsIkxpbWUiLDEzNSwiVHVycXVvaXNlIiwxODAsIkF6dXJlIiwyNTAsIkxhdmVuZGVyIiwyODUsIkZ1Y2hzaWEiLDMyMCwiRmxhbWluZ28iLDM2MF0sWyJhcGNhIiwiZmdUb0JnIiwiZXZlbiIsIiNmZmYiLCIjMDAwIiw1LCJwMyJdXQ */
+
/* https://color.surf/ */
+
@import "@evilmartians/harmony/css/amber.css";
+
@import "@evilmartians/harmony/css/yellow.css";
+
@import "@evilmartians/harmony/css/lime.css";
+
@import "@evilmartians/harmony/css/emerald.css";
+
@import "@evilmartians/harmony/css/teal.css";
+
@import "@evilmartians/harmony/css/sky.css";
+
@import "@evilmartians/harmony/css/indigo.css";
+
@import "@evilmartians/harmony/css/fuchsia.css";
+
@import "@evilmartians/harmony/css/rose.css";
+
@import "@evilmartians/harmony/css/gray.css";
+
+
/* Fonts */
+
@import url("@/assets/fonts/spagetty.css");
+
@import url("@/assets/fonts/easycoast.css");
+
@import url("@/assets/fonts/scorekard.css");
+
+
@layer base, layout, components, utilities;
+
+
@view-transition {
+
navigation: auto;
+
}
+
+
:root {
+
--radius: 0.75rem;
+
--spacing: 0.75rem;
+
+
/* @link https://utopia.fyi/type/calculator?c=360,18,1.2,1240,20,1.25,5,2,&s=0.75|0.5|0.25,1.5|2|3|4|6,s-l&g=s,l,xl,12 */
+
/* Step -2: 12.5px → 12.8px */
+
--size--2: clamp(0.7813rem, 0.7736rem + 0.0341cqi, 0.8rem);
+
/* Step -1: 15px → 16px */
+
--size--1: clamp(0.9375rem, 0.9119rem + 0.1136cqi, 1rem);
+
/* Step 0: 18px → 20px */
+
--size-0: clamp(1.125rem, 1.0739rem + 0.2273cqi, 1.25rem);
+
/* Step 1: 21.6px → 25px */
+
--size-1: clamp(1.35rem, 1.2631rem + 0.3864cqi, 1.5625rem);
+
/* Step 2: 25.92px → 31.25px */
+
--size-2: clamp(1.62rem, 1.4837rem + 0.6057cqi, 1.9531rem);
+
/* Step 3: 31.104px → 39.0625px */
+
--size-3: clamp(1.944rem, 1.7405rem + 0.9044cqi, 2.4414rem);
+
/* Step 4: 37.3248px → 48.8281px */
+
--size-4: clamp(2.3328rem, 2.0387rem + 1.3072cqi, 3.0518rem);
+
/* Step 5: 44.7898px → 61.0352px */
+
--size-5: clamp(2.7994rem, 2.384rem + 1.8461cqi, 3.8147rem);
+
}
+
+
@layer components {
+
a svg {
+
--size: 1.5rem;
+
+
&.external-link {
+
--size: 0.75rem;
+
}
+
}
+
+
svg[data-icon] {
+
--size: 1.5rem;
+
+
width: var(--size);
+
height: var(--size);
+
}
+
}
+
+
@layer utilities {
+
:has(> .cover) {
+
position: relative;
+
}
+
+
a.cover::before {
+
content: "";
+
position: absolute;
+
inset: 0;
+
z-index: 1;
+
}
+
+
.container {
+
padding: var(--spacing);
+
width: calc(100% - 2rem * var(--spacing));
+
border-radius: var(--radius);
+
color: var(--container-text-color, var(--emerald-950, black));
+
background-color: var(--container-color, var(--emerald-500, red));
+
}
+
+
@media (max-width: 768px) {
+
.desktop-only {
+
display: none;
+
}
+
}
+
+
.content-grid {
+
--padding-inline: min(2%, 1.5rem);
+
+
display: grid;
+
grid-template-columns:
+
[full-width-start] var(--padding-inline)
+
[breakout-start] var(--padding-inline)
+
[content-start] 1fr
+
[content-end]
+
var(--padding-inline) [breakout-end]
+
var(--padding-inline) [full-width-end];
+
justify-content: start;
+
align-content: start;
+
row-gap: calc(var(--spacing) * 4);
+
}
+
+
.content-grid > :not(.breakout, .full-width),
+
.full-width > :not(.breakout, .full-width) {
+
grid-column: content;
+
}
+
+
.content-grid > .breakout {
+
grid-column: breakout;
+
}
+
+
.content-grid > .full-width {
+
grid-column: full-width;
+
}
+
}
+118
src/assets/styles/projects/karr.css
···
+
article {
+
display: grid;
+
grid-template-columns: auto auto 1fr;
+
grid-template-areas:
+
"back-btn title subtitle"
+
". img img"
+
". description description";
+
gap: var(--spacing);
+
column-gap: calc(var(--spacing) * 2);
+
row-gap: calc(var(--spacing) * 3);
+
align-items: center;
+
margin-inline-end: 3rem;
+
font-size: 1.1rem;
+
+
@media screen and (max-width: 768px) {
+
grid-template-areas:
+
"back-btn title"
+
"subtitle subtitle"
+
"img img"
+
"description description"
+
"boxes boxes";
+
margin-inline-end: 0;
+
}
+
+
& > a {
+
grid-area: back-btn;
+
}
+
+
& > h2 {
+
grid-area: title;
+
margin: 0;
+
font-size: 2.7rem;
+
font-weight: bolder;
+
width: min-content;
+
}
+
+
& > p.subtitle {
+
grid-area: subtitle;
+
margin: 0;
+
font-size: 1.5rem;
+
align-self: end;
+
margin-block-end: 0.2rem;
+
}
+
+
& > div {
+
grid-area: img;
+
align-self: center;
+
justify-self: center;
+
+
&,
+
img {
+
border-radius: var(--radius);
+
}
+
}
+
+
& > p.description {
+
grid-area: description;
+
margin: 0;
+
font-size: 1.2rem;
+
}
+
+
& > div {
+
display: grid;
+
grid-template-areas:
+
"img box1"
+
"img box2"
+
"img box3";
+
gap: var(--spacing);
+
+
@media screen and (max-width: 768px) {
+
flex-direction: column;
+
align-items: center;
+
}
+
+
& > img,
+
& > picture {
+
grid-area: img;
+
border-radius: var(--radius);
+
+
img {
+
object-fit: cover;
+
height: 100%;
+
}
+
}
+
+
div.container {
+
display: flex;
+
flex-direction: column;
+
align-items: center;
+
justify-content: center;
+
gap: var(--spacing);
+
font-size: 1.2rem;
+
text-align: center;
+
+
&:nth-child(1) {
+
grid-area: box1;
+
}
+
&:nth-child(2) {
+
grid-area: box2;
+
}
+
&:nth-child(3) {
+
grid-area: box3;
+
}
+
+
& > svg {
+
--size: 3rem;
+
color: var(--color-primary);
+
}
+
+
a {
+
text-decoration: none;
+
color: inherit;
+
}
+
+
--container-color: var(--teal-300);
+
}
+
}
+
}
+95
src/assets/styles/reset.css
···
+
/* CSS Reset by Andy Bell : https://piccalil.li/blog/a-more-modern-css-reset/ */
+
+
@layer base {
+
/* Box sizing rules */
+
*,
+
*::before,
+
*::after {
+
box-sizing: border-box;
+
}
+
+
/* Prevent font size inflation */
+
html {
+
-moz-text-size-adjust: none;
+
-webkit-text-size-adjust: none;
+
text-size-adjust: none;
+
}
+
+
/* Remove default margin in favour of better control in authored CSS */
+
body,
+
h1,
+
h2,
+
h3,
+
h4,
+
p,
+
figure,
+
blockquote,
+
dl,
+
dd {
+
margin-block-end: 0;
+
}
+
+
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
+
ul[role="list"],
+
ol[role="list"] {
+
list-style: none;
+
}
+
+
/* Set core body defaults */
+
body {
+
line-height: 1.3;
+
padding: 0;
+
margin: 0;
+
}
+
+
/* Set shorter line heights on headings and interactive elements */
+
h1,
+
h2,
+
h3,
+
h4,
+
button,
+
input,
+
label {
+
line-height: 1.1;
+
}
+
+
/* Balance text wrapping on headings */
+
h1,
+
h2,
+
h3,
+
h4 {
+
text-wrap: balance;
+
}
+
+
/* A elements that don't have a class get default styles */
+
a:not([class]) {
+
text-decoration-skip-ink: auto;
+
color: currentColor;
+
}
+
+
/* Make images easier to work with */
+
img,
+
picture {
+
max-width: 100%;
+
display: block;
+
}
+
+
/* Inherit fonts for inputs and buttons */
+
input,
+
button,
+
textarea,
+
select {
+
font-family: inherit;
+
font-size: inherit;
+
}
+
+
/* Make sure textareas without a rows attribute are not tiny */
+
textarea:not([rows]) {
+
min-height: 10em;
+
}
+
+
/* Anything that has been anchored to should have extra scroll margin */
+
:target {
+
scroll-margin-block: 5ex;
+
}
+
}
+99
src/components/pages/index.astro
···
+
---
+
import Layout from "@/layouts/Layout.astro";
+
import "@/assets/styles/index.css";
+
import { Icon } from "astro-icon/components";
+
import { projects } from "@/data/projects";
+
import { locale } from "@/hooks/useLocale.astro";
+
+
interface Props {
+
content: {
+
intro: {
+
title: string;
+
description: string;
+
ps: string[];
+
};
+
languages: string;
+
blogSection: {
+
linkText: string;
+
};
+
projectsSection: {
+
title: string;
+
description: string;
+
};
+
};
+
}
+
+
const {
+
content: { intro, languages, blogSection, projectsSection },
+
} = Astro.props;
+
---
+
+
<Layout>
+
<article>
+
<section class="container layout content-intro">
+
<aside>👋</aside>
+
<h3>{intro.title}</h3>
+
<p>{intro.description}</p>
+
<div>
+
{intro.ps.map((p) => <p>{p}</p>)}
+
</div>
+
</section>
+
+
<section class="container content-languages">
+
<Icon name="pixel:globe" />
+
<Fragment set:html={languages} />
+
</section>
+
+
<section class="container content-blog">
+
<a
+
href="https://finxol.io"
+
target="_blank"
+
rel="noopener noreferrer"
+
>
+
<Icon name="pixel:external-link" class="external-link" />
+
<span> {blogSection.linkText} </span>
+
</a>
+
</section>
+
+
<section class="title-projects">
+
<aside>💻</aside>
+
<h3>{projectsSection.title}</h3>
+
<p>
+
{projectsSection.description}
+
</p>
+
</section>
+
+
<section class="container content-projects">
+
{
+
projects.map((project) => (
+
<div
+
class="project"
+
{...(project.colour && {
+
style: `--container-color: var(${project.colour});`,
+
})}
+
>
+
<picture style="view-transition-name: project-img">
+
<source
+
srcset={project.imgs.webp.src}
+
type="image/webp"
+
/>
+
<img
+
src={project.imgs.jpg.src}
+
alt={project.title[locale]}
+
/>
+
</picture>
+
<a href={`/projects/${project.slug}`} class="cover">
+
{project.title[locale]}
+
</a>
+
<p>{project.description[locale]}</p>
+
<ul>
+
{project.tags.map((tag: string) => (
+
<li class="tag">{tag}</li>
+
))}
+
</ul>
+
</div>
+
))
+
}
+
</section>
+
</article>
+
</Layout>
+75
src/components/pages/project.astro
···
+
---
+
import Layout from "@/layouts/Layout.astro";
+
import "@/assets/styles/projects/karr.css";
+
import { Icon } from "astro-icon/components";
+
import { projects } from "@/data/projects";
+
+
interface Props {
+
content: {
+
projectId: string;
+
title: string;
+
subtitle: string;
+
datePrefix: string;
+
repoLinkText: string;
+
};
+
}
+
+
const locale = Astro.currentLocale;
+
+
const { content } = Astro.props;
+
+
const project = projects.find((p) => p.slug === content.projectId);
+
if (!project) {
+
throw new Error(`Project not found: ${content.projectId}`);
+
}
+
+
const homepage = Astro.url;
+
homepage.pathname = "/";
+
---
+
+
<Layout>
+
<article>
+
<a href={homepage}>
+
<Icon name="pixel:arrow-alt-circle-left" />
+
</a>
+
+
<h2>{content.title}</h2>
+
+
<p class="subtitle">{content.subtitle}</p>
+
+
<div class="boxes">
+
<picture style="view-transition-name: project-img">
+
<source srcset={project.imgs.webp.src} type="image/webp" />
+
<img src={project.imgs.jpg.src} alt={content.title} />
+
</picture>
+
+
<div class="container">
+
<Icon name="tabler:brand-git" />
+
<span>
+
{content.datePrefix}
+
{project.startDate.toLocaleDateString(locale)}
+
</span>
+
</div>
+
+
<div class="container">
+
<Icon name={project.runtimeIcon} />
+
<span>{project.runtime}</span>
+
</div>
+
+
<div class="container">
+
<Icon name={project.repoIcon} />
+
<a
+
href={project.repoUrl}
+
class="cover"
+
target="_blank"
+
rel="noopener noreferrer"
+
>
+
{content.repoLinkText}
+
<Icon name="pixel:external-link" class="external-link" />
+
</a>
+
</div>
+
</div>
+
+
<slot />
+
</article>
+
</Layout>
+8
src/config.ts
···
+
export const config = {
+
defaultLocale: "fr",
+
locales: ["fr", "en"],
+
domains: {
+
fr: "https://next.colinozanne.fr",
+
en: "https://next.colinozanne.co.uk",
+
},
+
} as const;
+97
src/data/projects.ts
···
+
import type { ImageMetadata } from "astro";
+
+
import karrJpg from "@/assets/img/karr_demo.jpg";
+
import karrWebp from "@/assets/img/karr_demo.webp";
+
import blogJpg from "@/assets/img/finxol_blog_home.jpg";
+
import blogWebp from "@/assets/img/finxol_blog_home.webp";
+
import recaroPitchJpg from "@/assets/img/viscircle_recaro_pitch.jpg";
+
import recaroPitchWebp from "@/assets/img/viscircle_recaro_pitch.webp";
+
import { config } from "@/config.ts";
+
+
type Localised = Record<(typeof config.locales)[number], string>;
+
+
export interface ProjectMetadata {
+
slug: string;
+
title: Localised;
+
description: Localised;
+
imgs: {
+
jpg: ImageMetadata;
+
webp: ImageMetadata;
+
};
+
tags: string[];
+
colour?: string;
+
startDate: Date;
+
runtime: string;
+
runtimeIcon: string;
+
repoUrl: string;
+
repoIcon: string;
+
}
+
+
export const projects: ProjectMetadata[] = [
+
{
+
slug: "karr",
+
title: {
+
fr: "Karr",
+
en: "Karr",
+
},
+
description: {
+
fr: "Plateforme de covoiturage fédérée pour les entreprises",
+
en: "Federated carpool platform for businesses",
+
},
+
imgs: {
+
jpg: karrJpg,
+
webp: karrWebp,
+
},
+
tags: ["Next.js", "Hono", "OpenAuth", "CI"],
+
startDate: new Date("10 October 2024"),
+
runtime: "NodeJS",
+
runtimeIcon: "tabler:brand-nodejs",
+
repoUrl: "https://github.com/karr-mobi/karr",
+
repoIcon: "tabler:brand-github",
+
},
+
{
+
slug: "blog",
+
title: {
+
fr: "Blog Technique",
+
en: "Technical Blog",
+
},
+
description: {
+
fr:
+
"Blog personnel technique sur lequel j'écris des articles sur la technologie",
+
en: "Technical blog where I write articles about technology",
+
},
+
imgs: {
+
jpg: blogJpg,
+
webp: blogWebp,
+
},
+
tags: ["Nuxt.js", "Markdown"],
+
colour: "--yellow-300",
+
startDate: new Date("24 April 2022"),
+
runtime: "Deno",
+
runtimeIcon: "tabler:brand-deno",
+
repoUrl: "https://tangled.org/finxol.io/blog",
+
repoIcon: "tabler:brand-git",
+
},
+
{
+
slug: "viscircle-recaro-pitch",
+
title: {
+
fr: "Demo Recaro pour VisCircle",
+
en: "VisCircle Demo for Recaro",
+
},
+
description: {
+
fr: "Quelques choses",
+
en: "Some things",
+
},
+
imgs: {
+
jpg: recaroPitchJpg,
+
webp: recaroPitchWebp,
+
},
+
tags: ["Vue.js", "Three.js"],
+
colour: "--indigo-300",
+
startDate: new Date("24 April 2022"),
+
runtime: "Deno",
+
runtimeIcon: "tabler:brand-deno",
+
repoUrl: "https://tangled.org/finxol.io/blog",
+
repoIcon: "tabler:brand-git",
+
},
+
];
+7
src/hooks/useLocale.astro
···
+
---
+
import { config } from "@/config";
+
+
export type Locale = (typeof config.locales)[number];
+
+
export const locale = (Astro.currentLocale as Locale) || config.defaultLocale;
+
---
+312 -77
src/layouts/Layout.astro
···
+
---
+
import "@/assets/styles/main.css";
+
import "@/assets/styles/reset.css";
+
import { Icon } from "astro-icon/components";
+
import { config } from "@/config.ts";
+
+
import colinPng from "@/assets/img/colin.png";
+
import colinWebp from "@/assets/img/colin.webp";
+
+
const path = Astro.originPathname.replace(/\/(fr|en)\//, "/");
+
const locale = Astro.currentLocale;
+
+
const subtitle =
+
locale === "fr"
+
? "Étudiant M1 Informatique"
+
: "Master's Computer Science Student";
+
---
+
<!doctype html>
<html lang="en">
<head>
···
<title>Colin Ozanne</title>
</head>
<body>
-
<slot />
+
<div class="wip-banner">
+
<div>
+
<h3>Work in Progress</h3>
+
<span>
+
You are previewing the next version of my portfolio. Any
+
feedback is welcome!
+
</span>
+
</div>
+
</div>
+
<div class="app">
+
<aside>
+
<header>
+
<picture class="container">
+
<source srcset={colinWebp.src} type="image/webp" />
+
<img src={colinPng.src} alt="Colin Ozanne" />
+
</picture>
+
<h1 class="container">
+
Colin <br class="desktop-only" /> Ozanne
+
</h1>
+
<p class="container">{subtitle}</p>
+
</header>
+
<footer>
+
<div class="container lang-switcher">
+
<a
+
class={locale === "en" ? "active" : ""}
+
href={`${config.domains.en}${path}`}
+
target="_self"
+
>
+
EN
+
</a>
+
<Icon name="pixel:globe" />
+
<a
+
class={locale === "fr" ? "active" : ""}
+
href={`${config.domains.fr}${path}`}
+
target="_self"
+
>
+
FR
+
</a>
+
</div>
+
+
<a
+
href="mailto:contact@colinozanne.fr"
+
target="_blank"
+
rel="noopener noreferrer"
+
class="container"
+
>
+
<Icon name="pixel:envelope" />
+
<span> Email </span>
+
<Icon
+
name="pixel:external-link"
+
class="external-link"
+
/>
+
</a>
+
<a
+
href="https://www.linkedin.com/in/colin-ozanne/"
+
target="_blank"
+
rel="noopener noreferrer"
+
class="container"
+
>
+
<Icon name="pixel:linkedin" />
+
<span> Linkedin </span>
+
<Icon
+
name="pixel:external-link"
+
class="external-link"
+
/>
+
</a>
+
<a
+
href="https://finxol.io"
+
target="_blank"
+
rel="noopener noreferrer"
+
class="container"
+
>
+
<Icon name="pixel:pen-nib" />
+
<span> Blog </span>
+
<Icon
+
name="pixel:external-link"
+
class="external-link"
+
/>
+
</a>
+
<p class="container">
+
&copy; {new Date().getFullYear()} Colin Ozanne
+
</p>
+
</footer>
+
</aside>
+
<main class="">
+
<slot />
+
</main>
+
</div>
</body>
</html>
<style>
-
/* CSS Reset by Andy Bell : https://piccalil.li/blog/a-more-modern-css-reset/ */
+
.wip-banner {
+
padding: 0.5rem 1rem;
+
text-align: center;
+
font-weight: bold;
+
font-size: 2rem;
+
color: #000;
+
background: repeating-linear-gradient(
+
135deg,
+
var(--yellow-300),
+
var(--yellow-300) 20px,
+
var(--yellow-500) 20px,
+
var(--yellow-500) 40px
+
);
+
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
+
+
div {
+
display: flex;
+
flex-direction: column;
+
align-items: center;
+
justify-content: center;
+
width: fit-content;
+
margin: 0 auto;
+
background: oklch(from var(--yellow-300) l c h / 30%);
+
backdrop-filter: blur(10px);
+
padding: 0.25rem 0.75rem;
+
border-radius: 4px;
-
/* Box sizing rules */
-
*,
-
*::before,
-
*::after {
-
box-sizing: border-box;
+
h3 {
+
margin: 0;
+
font-size: 1.5rem;
+
font-weight: bold;
+
font-family: "Spagetty", serif;
+
}
+
+
span {
+
display: inline-block;
+
margin-top: 0rem;
+
font-size: 0.95rem;
+
font-weight: normal;
+
text-wrap: balance;
+
}
+
}
}
-
/* Prevent font size inflation */
-
html {
-
-moz-text-size-adjust: none;
-
-webkit-text-size-adjust: none;
-
text-size-adjust: none;
+
body {
+
font-family: "Scorekard", sans-serif;
+
container: body / inline-size;
}
-
/* Remove default margin in favour of better control in authored CSS */
-
body,
-
h1,
-
h2,
-
h3,
-
h4,
-
p,
-
figure,
-
blockquote,
-
dl,
-
dd {
-
margin-block-end: 0;
-
}
+
.app {
+
width: 100svw;
+
display: grid;
+
grid-template-columns: clamp(15rem, 20vw, 30rem) auto;
+
grid-template-rows: 1fr auto;
+
grid-auto-flow: row;
+
grid-template-areas: "aside main";
+
gap: 0;
+
+
& > aside {
+
position: sticky;
+
top: 0;
+
bottom: 0;
+
grid-area: aside;
+
display: flex;
+
flex-direction: column;
+
align-items: center;
+
justify-content: space-between;
+
height: max-content;
+
min-height: 100svh;
+
}
+
+
& > main {
+
grid-area: main;
+
}
+
+
@media screen and (max-width: 768px) {
+
grid-template-columns: 1fr;
+
grid-template-rows: auto 1fr auto;
+
grid-template-areas:
+
"header"
+
"main"
+
"footer";
+
gap: 0;
+
height: auto;
+
min-height: 100svh;
-
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
-
ul[role="list"],
-
ol[role="list"] {
-
list-style: none;
-
}
+
& > aside {
+
display: contents;
-
/* Set core body defaults */
-
body {
-
min-height: 100vh;
-
line-height: 1.5;
-
padding: 0;
-
margin: 0;
-
}
+
& > header {
+
grid-area: header;
+
}
-
/* Set shorter line heights on headings and interactive elements */
-
h1,
-
h2,
-
h3,
-
h4,
-
button,
-
input,
-
label {
-
line-height: 1.1;
+
& > footer {
+
grid-area: footer;
+
}
+
}
+
}
}
-
/* Balance text wrapping on headings */
-
h1,
-
h2,
-
h3,
-
h4 {
-
text-wrap: balance;
-
}
+
/* aside */
+
footer,
+
header {
+
container-type: inline-size;
+
container-name: sidebar;
+
display: flex;
+
flex-direction: column;
+
align-items: stretch;
+
gap: var(--spacing, 1rem);
+
width: 100%;
+
padding: var(--spacing, 1rem);
-
/* A elements that don't have a class get default styles */
-
a:not([class]) {
-
text-decoration-skip-ink: auto;
-
color: currentColor;
-
}
+
picture {
+
aspect-ratio: auto;
+
height: auto;
+
padding: 0;
+
margin: 0;
+
overflow: hidden;
+
}
-
/* Make images easier to work with */
-
img,
-
picture {
-
max-width: 100%;
-
display: block;
-
}
+
h1 {
+
font-family: "EasyCoast", serif;
+
letter-spacing: initial;
+
font-size: 15cqi;
+
color: var(--clr-dark-a0);
+
margin: 0;
+
--container-color: var(--fuchsia-500);
+
--container-text-color: var(--fuchsia-950);
-
/* Inherit fonts for inputs and buttons */
-
input,
-
button,
-
textarea,
-
select {
-
font-family: inherit;
-
font-size: inherit;
+
@media screen and (max-width: 768px) {
+
font-size: 2rem;
+
}
+
}
+
+
p {
+
margin: 0;
+
--container-color: var(--sky-400);
+
--container-text-color: var(--sky-950);
+
}
+
+
.lang-switcher {
+
display: flex;
+
align-items: center;
+
justify-content: center;
+
gap: 1rem;
+
+
--container-color: var(--fuchsia-100);
+
--container-text-color: var(--fuchsia-800);
+
+
a {
+
padding: 0.5rem 1rem;
+
border-radius: var(--radius);
+
background-color: var(--fuchsia-200);
+
color: inherit;
+
transition: background-color 0.2s ease-in-out;
+
+
&:hover {
+
background-color: var(--fuchsia-300);
+
}
+
+
&.active {
+
background-color: var(--fuchsia-400);
+
--container-text-color: var(--fuchsia-950);
+
}
+
}
+
}
+
+
a {
+
display: flex;
+
align-items: center;
+
justify-content: center;
+
gap: 0.5rem;
+
text-decoration: none;
+
transition: color 0.3s ease-in-out;
+
--container-color: var(--amber-500);
+
--container-text-color: var(--amber-950);
+
}
+
+
& > * {
+
text-align: center;
+
font-family: "Spagetty", serif;
+
letter-spacing: 0.01em;
+
font-size: var(--size-1);
+
}
}
-
/* Make sure textareas without a rows attribute are not tiny */
-
textarea:not([rows]) {
-
min-height: 10em;
+
@media screen and (max-width: 768px) {
+
header {
+
--img-size: 5rem;
+
+
display: grid;
+
grid-template-columns: var(--img-size) 1fr;
+
grid-template-rows: 1fr auto;
+
grid-template-areas:
+
"img name"
+
"title title";
+
gap: var(--spacing);
+
+
picture {
+
grid-area: img;
+
width: var(--img-size);
+
height: var(--img-size);
+
}
+
+
h1 {
+
container-type: inline-size;
+
grid-area: name;
+
display: inline-grid;
+
place-items: center;
+
height: var(--img-size);
+
font-size: 7.6cqi;
+
}
+
+
p {
+
grid-area: title;
+
}
+
}
}
-
/* Anything that has been anchored to should have extra scroll margin */
-
:target {
-
scroll-margin-block: 5ex;
+
main {
+
container-type: inline-size;
+
padding: var(--spacing);
+
overflow-y: scroll;
}
</style>
+35
src/pages/404.astro
···
+
---
+
import Layout from "@/layouts/Layout.astro";
+
---
+
+
<Layout>
+
<article>
+
<h1>404 Not Found</h1>
+
<a href="/">Take me home (country roads)</a>
+
</article>
+
</Layout>
+
+
<style>
+
article {
+
display: flex;
+
flex-direction: column;
+
align-items: center;
+
justify-content: center;
+
height: 100%;
+
}
+
+
h1 {
+
font-size: 2rem;
+
margin-bottom: 1rem;
+
}
+
+
a {
+
color: var(--indigo-500);
+
text-decoration: none;
+
transition: color 0.3s ease;
+
}
+
+
a:hover {
+
color: var(--indigo-700);
+
}
+
</style>
+32 -2
src/pages/en/index.astro
···
---
-
import Layout from "@/layouts/Layout.astro";
+
import IndexPage from "@/components/pages/index.astro";
+
+
const content = {
+
intro: {
+
title: "Hiya!",
+
description: "I'm a 🇫🇷 French computer science student.",
+
ps: ["I love building robust and performant websites."],
+
},
+
languages: `<p>I'm a native 🇬🇧 <strong>English</strong> and 🇫🇷 <strong>French</strong> speaker.</p>`,
+
blogSection: {
+
linkText: "Check out my blog for some technical write-ups!",
+
},
+
projectsSection: {
+
title: "Projects",
+
description:
+
"Here are my most interesting projects. Click through to get more details!",
+
},
+
projects: [
+
{
+
id: "karr",
+
name: "Karr",
+
description: "Federated carpool platform for businesses",
+
},
+
{
+
id: "blog",
+
name: "Technical Blog",
+
description:
+
"Technical blog where I write articles about technology",
+
},
+
],
+
};
---
-
<Layout> Hello My name is Colin, I build stuff </Layout>
+
<IndexPage content={content} />
+18
src/pages/en/projects/blog.astro
···
+
---
+
import ProjectPage from "@/components/pages/project.astro";
+
+
const content = {
+
projectId: "blog",
+
title: "Blog",
+
subtitle: "Personal technical blog",
+
datePrefix: "Since",
+
repoLinkText: "Tangled repo",
+
};
+
---
+
+
<ProjectPage content={content}>
+
<p class="description">
+
On this blog, I write about various topics, including web development
+
and technology.
+
</p>
+
</ProjectPage>
+20
src/pages/en/projects/karr.astro
···
+
---
+
import ProjectPage from "@/components/pages/project.astro";
+
+
const content = {
+
projectId: "karr",
+
title: "Karr",
+
subtitle: "Federated carpool platform for companies",
+
datePrefix: "Since",
+
repoLinkText: "Github repo",
+
};
+
---
+
+
<ProjectPage content={content}>
+
<p class="description">
+
This entrepreneurial project was carried out for 5 months with
+
<a href="https://www.pepitebretagne.fr/">Pépite Bretagne</a>. The
+
project was discontinued after a market study revealed a
+
well-established competition, already subsidized by public funds.
+
</p>
+
</ProjectPage>
+15
src/pages/en/projects/viscircle-recaro-pitch.astro
···
+
---
+
import ProjectPage from "@/components/pages/project.astro";
+
+
const content = {
+
projectId: "viscircle-recaro-pitch",
+
title: "VisCircle Demo for Recaro",
+
subtitle: "Quelques choses",
+
datePrefix: "Depuis le",
+
repoLinkText: "Github repo",
+
};
+
---
+
+
<ProjectPage content={content}>
+
<p class="description">Projet de stage</p>
+
</ProjectPage>
+19 -2
src/pages/fr/index.astro
···
---
-
import Layout from "@/layouts/Layout.astro";
+
import IndexPage from "@/components/pages/index.astro";
+
+
const content = {
+
intro: {
+
title: "Bonjour!",
+
description: "Je suis un étudiant en informatique 🇫🇷 Français.",
+
ps: ["J'adore construire des sites web robustes et performants."],
+
},
+
languages: `<p>Je suis natif en 🇬🇧 <strong>Anglais</strong> et 🇫🇷 <strong>Français</strong>.</p>`,
+
blogSection: {
+
linkText: "Voir mon blog pour des articles techniques !",
+
},
+
projectsSection: {
+
title: "Projets",
+
description:
+
"Voici mes projets les plus intéressants. Cliquez pour en savoir plus !",
+
},
+
};
---
-
<Layout> Bonjour Je m'appelle Colin </Layout>
+
<IndexPage content={content} />
+18
src/pages/fr/projects/blog.astro
···
+
---
+
import ProjectPage from "@/components/pages/project.astro";
+
+
const content = {
+
projectId: "blog",
+
title: "Blog",
+
subtitle: "Blog technique personnel",
+
datePrefix: "Depuis le",
+
repoLinkText: "Repo Tangled",
+
};
+
---
+
+
<ProjectPage content={content}>
+
<p class="description">
+
Sur ce blog, j'écris sur des sujets variés, notamment sur le
+
développement web, et la technologie.
+
</p>
+
</ProjectPage>
+20
src/pages/fr/projects/karr.astro
···
+
---
+
import ProjectPage from "@/components/pages/project.astro";
+
+
const content = {
+
projectId: "karr",
+
title: "Karr",
+
subtitle: "Plateforme de covoiturage fédérée pour entreprises",
+
datePrefix: "Depuis le",
+
repoLinkText: "Github repo",
+
};
+
---
+
+
<ProjectPage content={content}>
+
<p class="description">
+
Ce projet entrepreneurial a été porté pendant 5 mois avec
+
<a href="https://www.pepitebretagne.fr/">Pépite Bretagne</a>. L'arrêt du
+
projet a été décidé après une étude de marché révélant une concurrence
+
déjà fortement présente et subventionnée par des fonds publics.
+
</p>
+
</ProjectPage>
+15
src/pages/fr/projects/viscircle-recaro-pitch.astro
···
+
---
+
import ProjectPage from "@/components/pages/project.astro";
+
+
const content = {
+
projectId: "viscircle-recaro-pitch",
+
title: "Demo Recaro pour VisCircle",
+
subtitle: "Quelques choses",
+
datePrefix: "Depuis le",
+
repoLinkText: "Github repo",
+
};
+
---
+
+
<ProjectPage content={content}>
+
<p class="description">Projet de stage</p>
+
</ProjectPage>
+3 -1
tsconfig.json
···
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
-
}
+
},
+
"jsx": "react-jsx",
+
"jsxImportSource": "preact"
}
}