reworked HP + new snippet

This commit is contained in:
Nico 2023-06-12 15:47:35 +02:00
parent 4d184782fc
commit 407cdf9099
17 changed files with 334 additions and 494 deletions

276
.astro/types.d.ts vendored
View File

@ -198,279 +198,7 @@ declare module 'astro:content' {
>;
type ContentEntryMap = {
"articles": {
"en/2022.md": {
id: "en/2022.md";
slug: "2022";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"en/2023.md": {
id: "en/2023.md";
slug: "2023";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"en/after-effects-expressions.mdx": {
id: "en/after-effects-expressions.mdx";
slug: "after-effects-expressions";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".mdx"] };
"en/faq.md": {
id: "en/faq.md";
slug: "faq";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"en/gratuiste.md": {
id: "en/gratuiste.md";
slug: "gratuiste";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"en/sci-hub-blocage.mdx": {
id: "en/sci-hub-blocage.mdx";
slug: "sci-hub-unblock";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".mdx"] };
"en/the-day-I-jamd.mdx": {
id: "en/the-day-I-jamd.mdx";
slug: "the-day-I-jamd";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".mdx"] };
"en/video-compression.mdx": {
id: "en/video-compression.mdx";
slug: "video-compression";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".mdx"] };
"fr/2022.md": {
id: "fr/2022.md";
slug: "2022";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"fr/2023.md": {
id: "fr/2023.md";
slug: "2023";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"fr/after-effects-expressions.md": {
id: "fr/after-effects-expressions.md";
slug: "after-effects-expressions";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"fr/faq.md": {
id: "fr/faq.md";
slug: "faq";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"fr/gratuiste.md": {
id: "fr/gratuiste.md";
slug: "gratuiste";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
"fr/sci-hub-blocage.mdx": {
id: "fr/sci-hub-blocage.mdx";
slug: "sci-hub-blocage";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".mdx"] };
"fr/the-day-I-jamd.mdx": {
id: "fr/the-day-I-jamd.mdx";
slug: "the-day-I-jamd";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".mdx"] };
"fr/video-compression.md": {
id: "fr/video-compression.md";
slug: "video-compression";
body: string;
collection: "articles";
data: InferEntrySchema<"articles">
} & { render(): Render[".md"] };
};
"fragments": {
"en/acme-sh-tls-cert.md": {
id: "en/acme-sh-tls-cert.md";
slug: "acme-sh-tls-cert";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"en/array-vs-array.md": {
id: "en/array-vs-array.md";
slug: "array-vs-array";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"en/buttons.md": {
id: "en/buttons.md";
slug: "buttons";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"en/image-full.mdx": {
id: "en/image-full.mdx";
slug: "image-full";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".mdx"] };
"en/nuxt-graphql-static.md": {
id: "en/nuxt-graphql-static.md";
slug: "nuxt-graphql-static";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"en/super-cookies.md": {
id: "en/super-cookies.md";
slug: "super-cookies";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"en/toulouse-fun.md": {
id: "en/toulouse-fun.md";
slug: "toulouse-fun";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"fr/acme-sh-tls-cert.md": {
id: "fr/acme-sh-tls-cert.md";
slug: "acme-sh-tls-cert";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"fr/array-vs-array.md": {
id: "fr/array-vs-array.md";
slug: "array-vs-array";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"fr/buttons.mdx": {
id: "fr/buttons.mdx";
slug: "buttons";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".mdx"] };
"fr/image-full.mdx": {
id: "fr/image-full.mdx";
slug: "image-full";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".mdx"] };
"fr/nuxt-graphql-static.md": {
id: "fr/nuxt-graphql-static.md";
slug: "nuxt-graphql-static";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
"fr/super-cookies.mdx": {
id: "fr/super-cookies.mdx";
slug: "super-cookies";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".mdx"] };
"fr/toulouse-fun.md": {
id: "fr/toulouse-fun.md";
slug: "toulouse-fun";
body: string;
collection: "fragments";
data: InferEntrySchema<"fragments">
} & { render(): Render[".md"] };
};
"references": {
"en/3w.md": {
id: "en/3w.md";
slug: "3w";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"en/natureo.md": {
id: "en/natureo.md";
slug: "natureo";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"en/parole-expression.md": {
id: "en/parole-expression.md";
slug: "parole-expression";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"en/rose-primaire.md": {
id: "en/rose-primaire.md";
slug: "rose-primaire";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"fr/3w.md": {
id: "fr/3w.md";
slug: "3w";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"fr/natureo.md": {
id: "fr/natureo.md";
slug: "natureo";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"fr/parole-expression.md": {
id: "fr/parole-expression.md";
slug: "parole-expression";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
"fr/rose-primaire.md": {
id: "fr/rose-primaire.md";
slug: "rose-primaire";
body: string;
collection: "references";
data: InferEntrySchema<"references">
} & { render(): Render[".md"] };
};
};
type DataEntryMap = {
@ -479,5 +207,5 @@ declare module 'astro:content' {
type AnyEntryMap = ContentEntryMap & DataEntryMap;
type ContentConfig = typeof import("../src/content/config");
type ContentConfig = never;
}

View File

@ -13,11 +13,11 @@
"i18n:sync": "astro-i18n sync"
},
"dependencies": {
"@astrojs/image": "0.16.7",
"@astrojs/mdx": "^0.19.6",
"@astrojs/image": "0.17.0",
"@astrojs/mdx": "^0.19.7",
"@astrojs/rss": "^2.4.3",
"@astrojs/sitemap": "^1.3.3",
"astro": "2.5.7",
"astro": "2.6.3",
"astro-i18n": "1.8.1"
},
"devDependencies": {

View File

@ -2,11 +2,11 @@ lockfileVersion: '6.0'
dependencies:
'@astrojs/image':
specifier: 0.16.7
version: 0.16.7(astro@2.5.7)
specifier: 0.17.0
version: 0.17.0(astro@2.6.3)
'@astrojs/mdx':
specifier: ^0.19.6
version: 0.19.6(astro@2.5.7)
specifier: ^0.19.7
version: 0.19.7(astro@2.6.3)
'@astrojs/rss':
specifier: ^2.4.3
version: 2.4.3
@ -14,8 +14,8 @@ dependencies:
specifier: ^1.3.3
version: 1.3.3
astro:
specifier: 2.5.7
version: 2.5.7
specifier: 2.6.3
version: 2.6.3
astro-i18n:
specifier: 1.8.1
version: 1.8.1
@ -42,21 +42,21 @@ packages:
'@jridgewell/trace-mapping': 0.3.18
dev: false
/@astrojs/compiler@1.5.0:
resolution: {integrity: sha512-k04X/7nlMklU0HQUScxbCTf5n8/Vr+0U0bawb9QWulWxd6qJf3FmBrNATgTYiltjB4pc5HBqmmttAfFi7m4lLg==}
/@astrojs/compiler@1.5.1:
resolution: {integrity: sha512-iIGKu/uzB8sJ5VveQf0eHrVPPFEcrvSlp4qShYMOuY2aMmK2RVXQlX9dUjtmBQ+NAokfIOb7fwCutvH+p13l+g==}
dev: false
/@astrojs/image@0.16.7(astro@2.5.7):
resolution: {integrity: sha512-8X1DnMh3lUTA7BNt7dF0rfWTXNwvLoPWWXtLi+TdO3CW1SvdY9LJRuCEWwHfnKzcQ0EC2TfLwjukpbtJuCRxjw==}
/@astrojs/image@0.17.0(astro@2.6.3):
resolution: {integrity: sha512-YSolAMFtABhmgLH5BCeGX5e7QKApgSI1XcxO+HLqHFayQKVQ9r6fwslodTjzQkqxgcWEcQKF4nFR4Sq3hAq6YQ==}
peerDependencies:
astro: ^2.3.4
astro: ^2.6.0
sharp: '>=0.31.0'
peerDependenciesMeta:
sharp:
optional: true
dependencies:
'@altano/tiny-async-pool': 1.0.2
astro: 2.5.7
astro: 2.6.3
http-cache-semantics: 4.1.1
image-size: 1.0.2
kleur: 4.1.5
@ -64,13 +64,17 @@ packages:
mime: 3.0.0
dev: false
/@astrojs/internal-helpers@0.1.0:
resolution: {integrity: sha512-OSwvoFkTqVowiyP+codQeQZWoq/HOwY32x17NxDglWoCx2sdyXzplDZoVV4/3odmSEY6/A+48WMl5qkjmP1CXw==}
dev: false
/@astrojs/language-server@1.0.8:
resolution: {integrity: sha512-gssRxLGb8XnvKpqSzrDW5jdzdFnXD7eBXVkPCkkt2hv7Qzb+SAzv6hVgMok3jDCxpR1aeB+XNd9Qszj2h29iog==}
hasBin: true
dependencies:
'@astrojs/compiler': 1.5.0
'@astrojs/compiler': 1.5.1
'@jridgewell/trace-mapping': 0.3.18
'@vscode/emmet-helper': 2.8.8
'@vscode/emmet-helper': 2.8.9
events: 3.3.0
prettier: 2.8.8
prettier-plugin-astro: 0.9.1
@ -83,13 +87,13 @@ packages:
vscode-uri: 3.0.7
dev: false
/@astrojs/markdown-remark@2.2.1(astro@2.5.7):
/@astrojs/markdown-remark@2.2.1(astro@2.6.3):
resolution: {integrity: sha512-VF0HRv4GpC1XEMLnsKf6jth7JSmlt9qpqP0josQgA2eSpCIAC/Et+y94mgdBIZVBYH/yFnMoIxgKVe93xfO2GA==}
peerDependencies:
astro: ^2.5.0
dependencies:
'@astrojs/prism': 2.1.2
astro: 2.5.7
astro: 2.6.3
github-slugger: 1.5.0
import-meta-resolve: 2.2.2
rehype-raw: 6.1.1
@ -106,15 +110,15 @@ packages:
- supports-color
dev: false
/@astrojs/mdx@0.19.6(astro@2.5.7):
resolution: {integrity: sha512-P9CU+l/GveJPG3OOOdlZtIK5NWcJuEnXPtxwfjJUaoIPHDByp6okT/yN/WwLAA4TfnluFnULNG4bDsEnwcpYvw==}
/@astrojs/mdx@0.19.7(astro@2.6.3):
resolution: {integrity: sha512-mfEbBD7oi8yBHhcJucEjnrquREkJ3os+jioURP8BR2B8tOV2rV2j8trvmLUgfS+P/+HevGObxCTjcRYxn6T7eg==}
engines: {node: '>=16.12.0'}
dependencies:
'@astrojs/markdown-remark': 2.2.1(astro@2.5.7)
'@astrojs/markdown-remark': 2.2.1(astro@2.6.3)
'@astrojs/prism': 2.1.2
'@mdx-js/mdx': 2.3.0
acorn: 8.8.2
es-module-lexer: 1.2.1
es-module-lexer: 1.3.0
estree-util-visit: 1.2.1
github-slugger: 1.5.0
gray-matter: 4.0.3
@ -176,32 +180,32 @@ packages:
undici: 5.22.1
dev: false
/@babel/code-frame@7.21.4:
resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==}
/@babel/code-frame@7.22.5:
resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': 7.18.6
'@babel/highlight': 7.22.5
dev: false
/@babel/compat-data@7.22.3:
resolution: {integrity: sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==}
/@babel/compat-data@7.22.5:
resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/core@7.22.1:
resolution: {integrity: sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==}
/@babel/core@7.22.5:
resolution: {integrity: sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.21.4
'@babel/generator': 7.22.3
'@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1)
'@babel/helper-module-transforms': 7.22.1
'@babel/helpers': 7.22.3
'@babel/parser': 7.22.4
'@babel/template': 7.21.9
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
'@babel/code-frame': 7.22.5
'@babel/generator': 7.22.5
'@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5)
'@babel/helper-module-transforms': 7.22.5
'@babel/helpers': 7.22.5
'@babel/parser': 7.22.5
'@babel/template': 7.22.5
'@babel/traverse': 7.22.5
'@babel/types': 7.22.5
convert-source-map: 1.9.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@ -211,199 +215,199 @@ packages:
- supports-color
dev: false
/@babel/generator@7.22.3:
resolution: {integrity: sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==}
/@babel/generator@7.22.5:
resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.18
jsesc: 2.5.2
dev: false
/@babel/helper-annotate-as-pure@7.18.6:
resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==}
/@babel/helper-annotate-as-pure@7.22.5:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@babel/helper-compilation-targets@7.22.1(@babel/core@7.22.1):
resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==}
/@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5):
resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/compat-data': 7.22.3
'@babel/core': 7.22.1
'@babel/helper-validator-option': 7.21.0
'@babel/compat-data': 7.22.5
'@babel/core': 7.22.5
'@babel/helper-validator-option': 7.22.5
browserslist: 4.21.7
lru-cache: 5.1.1
semver: 6.3.0
dev: false
/@babel/helper-environment-visitor@7.22.1:
resolution: {integrity: sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==}
/@babel/helper-environment-visitor@7.22.5:
resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-function-name@7.21.0:
resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==}
/@babel/helper-function-name@7.22.5:
resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.21.9
'@babel/types': 7.22.4
'@babel/template': 7.22.5
'@babel/types': 7.22.5
dev: false
/@babel/helper-hoist-variables@7.18.6:
resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==}
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@babel/helper-module-imports@7.21.4:
resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==}
/@babel/helper-module-imports@7.22.5:
resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@babel/helper-module-transforms@7.22.1:
resolution: {integrity: sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==}
/@babel/helper-module-transforms@7.22.5:
resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-environment-visitor': 7.22.1
'@babel/helper-module-imports': 7.21.4
'@babel/helper-simple-access': 7.21.5
'@babel/helper-split-export-declaration': 7.18.6
'@babel/helper-validator-identifier': 7.19.1
'@babel/template': 7.21.9
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
'@babel/helper-environment-visitor': 7.22.5
'@babel/helper-module-imports': 7.22.5
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.5
'@babel/helper-validator-identifier': 7.22.5
'@babel/template': 7.22.5
'@babel/traverse': 7.22.5
'@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
dev: false
/@babel/helper-plugin-utils@7.21.5:
resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==}
/@babel/helper-plugin-utils@7.22.5:
resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-simple-access@7.21.5:
resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==}
/@babel/helper-simple-access@7.22.5:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@babel/helper-split-export-declaration@7.18.6:
resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==}
/@babel/helper-split-export-declaration@7.22.5:
resolution: {integrity: sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@babel/helper-string-parser@7.21.5:
resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-validator-identifier@7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
/@babel/helper-validator-identifier@7.22.5:
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-validator-option@7.21.0:
resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==}
/@babel/helper-validator-option@7.22.5:
resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helpers@7.22.3:
resolution: {integrity: sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==}
/@babel/helpers@7.22.5:
resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.21.9
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
'@babel/template': 7.22.5
'@babel/traverse': 7.22.5
'@babel/types': 7.22.5
transitivePeerDependencies:
- supports-color
dev: false
/@babel/highlight@7.18.6:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
/@babel/highlight@7.22.5:
resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.19.1
'@babel/helper-validator-identifier': 7.22.5
chalk: 2.4.2
js-tokens: 4.0.0
dev: false
/@babel/parser@7.22.4:
resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==}
/@babel/parser@7.22.5:
resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@babel/plugin-syntax-jsx@7.21.4(@babel/core@7.22.1):
resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==}
/@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5):
resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.22.1
'@babel/helper-plugin-utils': 7.21.5
'@babel/core': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
dev: false
/@babel/plugin-transform-react-jsx@7.22.3(@babel/core@7.22.1):
resolution: {integrity: sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==}
/@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5):
resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.22.1
'@babel/helper-annotate-as-pure': 7.18.6
'@babel/helper-module-imports': 7.21.4
'@babel/helper-plugin-utils': 7.21.5
'@babel/plugin-syntax-jsx': 7.21.4(@babel/core@7.22.1)
'@babel/types': 7.22.4
'@babel/core': 7.22.5
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-module-imports': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
'@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5)
'@babel/types': 7.22.5
dev: false
/@babel/template@7.21.9:
resolution: {integrity: sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==}
/@babel/template@7.22.5:
resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
'@babel/code-frame': 7.22.5
'@babel/parser': 7.22.5
'@babel/types': 7.22.5
dev: false
/@babel/traverse@7.22.4:
resolution: {integrity: sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==}
/@babel/traverse@7.22.5:
resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.21.4
'@babel/generator': 7.22.3
'@babel/helper-environment-visitor': 7.22.1
'@babel/helper-function-name': 7.21.0
'@babel/helper-hoist-variables': 7.18.6
'@babel/helper-split-export-declaration': 7.18.6
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
'@babel/code-frame': 7.22.5
'@babel/generator': 7.22.5
'@babel/helper-environment-visitor': 7.22.5
'@babel/helper-function-name': 7.22.5
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.5
'@babel/parser': 7.22.5
'@babel/types': 7.22.5
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: false
/@babel/types@7.22.4:
resolution: {integrity: sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==}
/@babel/types@7.22.5:
resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.21.5
'@babel/helper-validator-identifier': 7.19.1
'@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.5
to-fast-properties: 2.0.0
dev: false
@ -743,8 +747,8 @@ packages:
/@types/babel__core@7.20.1:
resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==}
dependencies:
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
'@babel/parser': 7.22.5
'@babel/types': 7.22.5
'@types/babel__generator': 7.6.4
'@types/babel__template': 7.4.1
'@types/babel__traverse': 7.20.1
@ -753,20 +757,20 @@ packages:
/@types/babel__generator@7.6.4:
resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@types/babel__template@7.4.1:
resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
dependencies:
'@babel/parser': 7.22.4
'@babel/types': 7.22.4
'@babel/parser': 7.22.5
'@babel/types': 7.22.5
dev: false
/@types/babel__traverse@7.20.1:
resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==}
dependencies:
'@babel/types': 7.22.4
'@babel/types': 7.22.5
dev: false
/@types/debug@4.1.8:
@ -841,8 +845,8 @@ packages:
resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
dev: false
/@vscode/emmet-helper@2.8.8:
resolution: {integrity: sha512-QuD4CmNeXSFxuP8VZwI6qL+8vmmd7JcSdwsEIdsrzb4YumWs/+4rXRX9MM+NsFfUO69g6ezngCD7XRd6jY9TQw==}
/@vscode/emmet-helper@2.8.9:
resolution: {integrity: sha512-ygpVStaePHt9aI9zk4NNJWI/NsRaeDSW1vQsZVmtpVRVCOdwYlsc3BfB/eppUu1OucT0x3OHDAzKcxnitjcSXQ==}
dependencies:
emmet: 2.4.4
jsonc-parser: 2.3.1
@ -946,8 +950,8 @@ packages:
get-file-exports: 1.2.1
dev: false
/astro@2.5.7:
resolution: {integrity: sha512-qYKMIN4tXAOAsm10vU4f+Q7LfC05JmEbQiJmSBqIEhp+wnQcEUFkGLrHMSsps3oBzMtjErUdDDW5tGJcn5eVlA==}
/astro@2.6.3:
resolution: {integrity: sha512-gJoBX+t11qAeYDjterGEaQZx7qqlGOigWhE0zkcEBv4zy7l4IpKx6nGGUNzD/l8x6WomZxkdZROsOsiEaWSJmQ==}
engines: {node: '>=16.12.0', npm: '>=6.14.0'}
hasBin: true
peerDependencies:
@ -956,17 +960,18 @@ packages:
sharp:
optional: true
dependencies:
'@astrojs/compiler': 1.5.0
'@astrojs/compiler': 1.5.1
'@astrojs/internal-helpers': 0.1.0
'@astrojs/language-server': 1.0.8
'@astrojs/markdown-remark': 2.2.1(astro@2.5.7)
'@astrojs/markdown-remark': 2.2.1(astro@2.6.3)
'@astrojs/telemetry': 2.1.1
'@astrojs/webapi': 2.2.0
'@babel/core': 7.22.1
'@babel/generator': 7.22.3
'@babel/parser': 7.22.4
'@babel/plugin-transform-react-jsx': 7.22.3(@babel/core@7.22.1)
'@babel/traverse': 7.22.4
'@babel/types': 7.22.4
'@babel/core': 7.22.5
'@babel/generator': 7.22.5
'@babel/parser': 7.22.5
'@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.5)
'@babel/traverse': 7.22.5
'@babel/types': 7.22.5
'@types/babel__core': 7.20.1
'@types/yargs-parser': 21.0.0
acorn: 8.8.2
@ -979,7 +984,7 @@ packages:
deepmerge-ts: 4.3.0
devalue: 4.3.2
diff: 5.1.0
es-module-lexer: 1.2.1
es-module-lexer: 1.3.0
esbuild: 0.17.19
estree-walker: 3.0.0
execa: 6.1.0
@ -1097,9 +1102,9 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001488
electron-to-chromium: 1.4.397
node-releases: 2.0.10
caniuse-lite: 1.0.30001441
electron-to-chromium: 1.4.427
node-releases: 2.0.12
update-browserslist-db: 1.0.11(browserslist@4.21.4)
dev: true
@ -1108,8 +1113,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001492
electron-to-chromium: 1.4.419
caniuse-lite: 1.0.30001502
electron-to-chromium: 1.4.427
node-releases: 2.0.12
update-browserslist-db: 1.0.11(browserslist@4.21.7)
dev: false
@ -1144,12 +1149,8 @@ packages:
resolution: {integrity: sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==}
dev: true
/caniuse-lite@1.0.30001488:
resolution: {integrity: sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ==}
dev: true
/caniuse-lite@1.0.30001492:
resolution: {integrity: sha512-2efF8SAZwgAX1FJr87KWhvuJxnGJKOnctQa8xLOskAXNXq8oiuqgl6u1kk3fFpsp3GgvzlRjiK1sl63hNtFADw==}
/caniuse-lite@1.0.30001502:
resolution: {integrity: sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==}
dev: false
/ccount@2.0.1:
@ -1362,13 +1363,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: false
/electron-to-chromium@1.4.397:
resolution: {integrity: sha512-jwnPxhh350Q/aMatQia31KAIQdhEsYS0fFZ0BQQlN9tfvOEwShu6ZNwI4kL/xBabjcB/nTy6lSt17kNIluJZ8Q==}
dev: true
/electron-to-chromium@1.4.419:
resolution: {integrity: sha512-jdie3RiEgygvDTyS2sgjq71B36q2cDSBfPlwzUyuOrfYTNoYWyBxxjGJV/HAu3A2hB0Y+HesvCVkVAFoCKwCSw==}
dev: false
/electron-to-chromium@1.4.427:
resolution: {integrity: sha512-HK3r9l+Jm8dYAm1ctXEWIC+hV60zfcjS9UA5BDlYvnI5S7PU/yytjpvSrTNrSSRRkuu3tDyZhdkwIczh+0DWaw==}
/emmet@2.4.4:
resolution: {integrity: sha512-v8Mwpjym55CS3EjJgiCLWUB3J2HSR93jhzXW325720u8KvYxdI2voYLstW3pHBxFz54H6jFjayR9G4LfTG0q+g==}
@ -1385,8 +1381,8 @@ packages:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
dev: false
/es-module-lexer@1.2.1:
resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==}
/es-module-lexer@1.3.0:
resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==}
dev: false
/esbuild-android-64@0.15.18:
@ -2905,13 +2901,8 @@ packages:
path-is-absolute: 1.0.1
dev: false
/node-releases@2.0.10:
resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==}
dev: true
/node-releases@2.0.12:
resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==}
dev: false
/normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@ -3133,7 +3124,7 @@ packages:
resolution: {integrity: sha512-pYZXSbdq0eElvzoIMArzv1SBn1NUXzopjlcnt6Ql8VW32PjC12NovwBjXJ6rh8qQLi7vF8jNqAbraKW03UPfag==}
engines: {node: ^14.15.0 || >=16.0.0, pnpm: '>=7.14.0'}
dependencies:
'@astrojs/compiler': 1.5.0
'@astrojs/compiler': 1.5.1
prettier: 2.8.8
sass-formatter: 0.7.6
synckit: 0.8.5
@ -3336,8 +3327,8 @@ packages:
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: false
/rollup@3.23.0:
resolution: {integrity: sha512-h31UlwEi7FHihLe1zbk+3Q7z1k/84rb9BSwmBSr/XjOCEaBJ2YyedQDuM0t/kfOS0IxM+vk1/zI9XxYj9V+NJQ==}
/rollup@3.25.1:
resolution: {integrity: sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==}
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
@ -3834,7 +3825,7 @@ packages:
dependencies:
esbuild: 0.17.19
postcss: 8.4.24
rollup: 3.23.0
rollup: 3.25.1
optionalDependencies:
fsevents: 2.3.2
dev: false

View File

@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" clip-rule="evenodd" viewBox="0 0 547 260">
<g transform="translate(-176.96 -424.18)">
<path fill="none" d="M176.96 424.18h546.08v260H176.96z"/>
<clipPath id="a">
<path d="M176.96 424.18h546.08v260H176.96z"/>
</clipPath>
<g clip-path="url(#a)">
<path fill="#ff826c" fill-rule="nonzero" d="M699 439.36h-15v15h-10v-15h-15v15h-10v-15h-15v35h10v15h45v-15h10v-35Z"/>
<path fill="#d4ebf2" fill-rule="nonzero" d="M674 539.36v-50h-15v20h-15v20h15v65h15v-30h20v-25h-20Z"/>
<path fill="#ff826c" fill-rule="nonzero" d="M404.42 579.36v25h15v80h85v-80h15v-25h-115Zm-211.5 0v25h15v80h85v-80h15v-25h-115Zm416.08 0v25h15v80h85v-80h15v-25H609Z"/>
<path fill="#d4ebf2" fill-rule="nonzero" d="M524.42 524.36h-35v-75h-60v90h15v40h45v-35h7.31v10h27.69v-30Z"/>
<path fill="#10113a" d="M470.11 464.36h9.31v10h-9.31zm-25.35 20h9.31v10h-9.31zm20.35 20h9.31v10h-9.31zm20 20h9.31v10h-9.31zm-25.35 15h9.31v10h-9.31z"/>
<path fill="#d4ebf2" d="M444.42 564.36h4.31v10h-4.31z"/>
<path fill="#10113a" d="M429.42 459.36h4.31v10h-4.31zm-171.5 15h10v105h-10z"/>
<path fill="#ff826c" fill-rule="nonzero" d="M292.92 434.36h-10v-10h-40v10h-10v30h10v10h40v-10h10v-30Z"/>
<path fill="#d4ebf2" d="M227.92 484.36h30v25h-30zm40 25h30v30h-30zm-15-70h20v20h-20z"/>
<path fill="#ff826c" d="M177.92 499.36h20v20h-20z"/>
<path fill="#d4ebf2" fill-rule="nonzero" d="M247.92 529.36v30h-10v10h-30v10h50v-50h-10Z"/>
<path fill="#d4ebf2" fill-rule="nonzero" d="M237.92 529.36h-10v10h-10v10h-10v10h30v-30Z"/>
<path fill="#d4ebf2" d="M207.92 529.36h10v10h-10zm-10-10h10v10h-10z"/>
<path fill="#d4ebf2" fill-rule="nonzero" d="M187.92 509.36h-5v10h15v-15h-10v5Z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -10,24 +10,26 @@ const { toc } = Astro.props;
<ol class="table-of-content__list" role="list">
{
// loop over the toc
toc.map((heading) =>
// if h2, set as a li
heading.depth === 2 ? (
<li>
<a href={`#${heading.slug}`} class="toc-2">
{heading.text}
</a>
</li>
) : // if h3, set as inner ol > li
heading.depth === 3 ? (
<ol role="list">
toc.map(
(
heading
// if h2, set as a li
) =>
heading.depth === 2 ? (
<li>
<a href={`#${heading.slug}`} class="toc-3">
<a href={`#${heading.slug}`} class="toc-2">
{heading.text}
</a>
</li>
</ol>
) : null
</li> // if h3, set as inner ol > li
) : heading.depth === 3 ? (
<ol role="list">
<li>
<a href={`#${heading.slug}`} class="toc-3">
{heading.text}
</a>
</li>
</ol>
) : null
)
}
</ol>
@ -68,15 +70,18 @@ const { toc } = Astro.props;
}
.table-of-content__list a::before {
content: "·";
content: "";
position: absolute;
top: 0;
top: 50%;
left: 0;
inline-size: 2px;
block-size: 2px;
border-radius: 4px;
transform: translate(-6px, 0);
color: var(--color-grey);
background-color: var(--color-grey);
}
.table-of-content__list a:visited::before {
color: white;
background-color: white;
}
.table-of-content__list a:focus,

View File

@ -22,7 +22,7 @@ I have completely redeveloped my site with <a href="https://astro.build/" rel="n
I will definitely do an article or two about Astro and the extensions I used. It was a great experience. Nuxt v2 is not really up to date anymore, so the performance was not good. Astro has completely fixed that.
My <a href="https://pagespeed.web.dev/" rel="noopener noreferer">PageSpeed</a> performance score had dropped to 77/100. Thanks to Astro I'm back to a solid **95/100** without any particular optimization.
My <a href="https://pagespeed.web.dev/analysis/https-nardu-in/06as4el7ed?form_factor=mobile" rel="noopener noreferer">PageSpeed</a> performance score had dropped to 77/100. Thanks to Astro I'm back to a solid **95/100** without any particular optimization. With some small efforts, I've reached the good old 100/100.
I then did a work of modernization of the codebase. Hello CSS variables and goodbye `media queries`. In no particular order, here are some of the improvements I made:

View File

@ -22,7 +22,7 @@ J'ai entièrement re-développé mon site avec <a href="https://astro.build/" re
Je ferai certainement un ou deux articles/fragments sur Astro et les extensions que j'ai utilisées. En tout cas c'était super comme expérience. Nuxt v2 n'étant plus vraiment à jour, les performances n'étaient plus au rendez-vous. Astro a complètement corrigé ça.
Mon score de performance <a href="https://pagespeed.web.dev/" rel="noopener noreferer" hreflang="en" lang="en">PageSpeed</a> était tombé à 77/100. Grâce à Astro je retrouve un solide **95/100** sans optimisation particulière.
Mon score de performance <a href="https://pagespeed.web.dev/analysis/https-nardu-in/06as4el7ed?form_factor=mobile" rel="noopener noreferer" hreflang="en" lang="en">PageSpeed</a> était tombé à 77/100. Grâce à Astro je retrouve un solide **95/100** sans optimisation particulière. Avec quelques efforts sur le poids des ressources, je retrouve ce bon vieux 100/100.
J'ai ensuite fait un travail de modernisation du code. Bonjour variables CSS et au-revoir les `media queries`. En vrac, voici certaines améliorations que j'ai mises en place&nbsp;:

View File

@ -0,0 +1,83 @@
---
title: Liens visités et indication visuelle
subtitle: Comment différencier les liens déjà cliqués
lang: fr
draft: false
slug: "visited-links"
excerpt: Petit hack CSS
tags: ["Front-end"]
type: snippets
createdAt: "2023-06-06T18:34:00.000Z"
---
## La théorie
Il est possible sur le web d'appliquer un style différent aux liens déjà visités par un utilisateur. Par défaut, un lien non visité est bleu tandis qu'un lien visité est violet.
Généralement, ces styles sont modifiés, voire supprimés dans le cas des liens visités. L'information qu'un lien a déjà été visité ne semble pas indispensable à la navigation. C'est sûrement vrai, mais personnellement, je suis assez content d'avoir un rappel des pages que j'ai déjà consultées lorsque je navigue.
Une information uniquement communiquée par la couleur est faillible, car certaines personnes ne distinguent pas les couleurs correctement. J'ai alors cherché un moyen d'ajouter un élément graphique supplémentaire aux liens visités/non visités. La solution démontrée ici n'est certainement pas idéale, elle se rapproche plus d'une expérience, à priori inoffensive pour l'internaute.
## La spécification
Quand je me suis intéressé à ce qu'il était possible de faire avec les liens déjà visités, j'ai découvert qu'extrêmement peu de propriétés <abbr>CSS</abbr> étaient autorisées. En effet, seulement des changements de couleurs sont disponibles. Ceci est dû au fait qu'il était possible de récupérer l'historique de navigation d'un utilisateur grâce aux styles des liens visités. Le sélecteur `:visited` a donc été restreint par les navigateurs afin de lutter contre cette brèche de la vie privée. [Plus d'informations dans cet article.](https://developer.mozilla.org/fr/docs/Web/CSS/Privacy_and_the_:visited_selector)
## La pratique
Que faire alors, en terme de style, quand on ne peut changer que des couleurs&nbsp;?
D'après MDN, les propriétés suivantes sont modifiables&nbsp;:
- `color`
- `background-color`
- `border-color` (et les propriétés détaillées associées),
- `column-rule-color`
- `outline-color`
- `text-decoration-color`
- `text-emphasis-color`
- Les composantes de couleur liées aux attributs SVG `fill` et `stroke`.
Changer la couleur d'un lien visité ne sera pas compris par les internautes, à moins de garder une colorimétrie proche de celle par défaut (bleu et violet).
En revanche, il est possible de "&nbsp;masquer&nbsp;" un élément en modifiant sa couleur pour qu'elle corresponde à la couleur du fond de la page ou de l'élément parent. On pourrait ainsi imaginer masquer une `border` ou un `outline`.
J'ai personnellement choisi de faire différemment. J'ai décidé d'utiliser un pseudo-élément `::before` sur l'état non visité du lien puis de le masquer quand celui-ci devient visité.
### Le code
```css
a {
position: relative;
text-decoration: none;
}
a::before {
content: "";
position: absolute;
top: 50%;
left: 0;
inline-size: 2px;
block-size: 2px;
border-radius: 4px;
transform: translate(-6px, 0);
background-color: grey;
}
a:visited::before {
background-color: white;
}
```
Ces règles, utilisées dans la table des matières de mes articles, ajoutent une sorte de petite puce ou pastille au début du lien. Cette puce est ensuite passée en blanc sur fond blanc une fois que le lien est visité, ce qui la masque visuellement.
### Accessibilité
On pourrait simplifier la règle et utiliser le caractère de puce directement dans la propriété `content` mais les lecteurs d'écran annonceront alors ce caractère lors de leur retranscription du lien. De plus, les lecteurs d'écrans annoncent déjà si un lien est visité avant de lire son intitulé.
## Aller plus loin
Afin de pousser l'expérience un peu plus loin, j'ai tenté d'utiliser des éléments plus explicites pour signifier l'état visité du lien. Bien qu'encore assez imparfait, il est possible de créer un indicateur plus complet de lien visité.
L'idée est d'avoir un `::before` et un `::after`, chacun contenant une icône en base 64 blanche en tant qu'image de fond. Quand le lien est non visité, le `::before` contient un fond coloré qui fait apparaître l'icône. Quand le lien passe en visité, le fond du `::before` devient blanc et celui du `::after` devient coloré, ce qui masque la première icône et affiche la deuxième.
Il est nécessaire de positionner les icônes côte à côte sinon elles se retrouveront l'une sur l'autre.
[Voir la démo sur codepen.](https://codepen.io/narduin/pen/VwVwmrO)

View File

@ -4,13 +4,13 @@ id: offre
lang: en
slug:
createdAt:
image: /assets/images/home/offres.svg
image: /assets/images/home/offre-1.1.svg
order: 1
quickTitle: My offers
quickImage: /assets/images/home/icon-desktop.svg
---
## Full website offer.
## Full website offer
### Small website, blog, landing page…
@ -21,7 +21,7 @@ Whether it's a creation or a redesign, I can handle everything:
- hosting and deploying;
- maintenance.
### Bigger websites, e-commerce.
### Bigger websites, e-commerce
When the project is larger, I call on talented partners who share the same values:

View File

@ -10,13 +10,13 @@ quickTitle: My methodology
quickImage: /assets/images/home/icon-methodo.svg
---
## Methodology.
## Methodology
### Accessibility by default.
### Accessibility by default
Committed to a more accessible web, I create **websites** relying on the [french General Accessibility Guidelines (RGAA)](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/) as well as the [Opquast recommandations.](https://www.opquast.com/en/making-the-web-better/)
### Sobriety by choice.
### Sobriety by choice
I specialize in the development of **static websites**, adopting an [eco-design](https://en.wikipedia.org/wiki/Ecological_design) approach.
It means that the website is designed to only include the necessary functionalities for its use.

View File

@ -10,20 +10,20 @@ quickTitle: Me
quickImage: /assets/images/home/icon-heart.svg
---
## About.
## About
### Trainings myself.
### Trainings myself
In order to strengthen my skills, I have completed the following training and certifications:
- [Opquast](https://directory.opquast.com/en/certificat/CTQSKP/) - Mastering Web Quality Assurance;
- Access42 - Developing and coding accessible websites (cert number: 696fa2e0-cc67-11ec-88d2-9dabf3f992d4).
### Trainings others.
### Trainings others
For several years, I have been teaching web development courses on various campuses.
### Free time.
### Free time
I try to contribute to [open source projects](https://git.nardu.in/explore/repos) that I enjoy.

View File

@ -12,8 +12,8 @@ reference: parole-expression
## L'offre site web classique
Cette offre est destinée à un public souhaitant **se doter d'un site web.** Sans forcément chercher une conformité totale au [référentiel général d'amélioration de l'accessibilité](https://accessibilite.numerique.gouv.fr/) (<abbr>RGAA</abbr>), le site sera malgré tout développé au plus proche des règles du référentiel.
Cette offre est destinée à un public souhaitant **se doter d'un site web**, sans forcément intégrer l'accessibilité au cœur du projet. Le site sera malgré tout développé au plus proche des règles du [référentiel général d'amélioration de l'accessibilité](https://accessibilite.numerique.gouv.fr/) (<abbr>RGAA</abbr>).
L'objectif principal de cette offre étant d'**établir une présence en ligne** pour le client. Que cette dernière ait un but informatif et/ou éditorial.
<a href="/offres/web-classique" class="btn">L'offre classique en détails.</a>
<a href="/offres/web-classique" class="btn">L'offre classique en détails</a>

View File

@ -7,11 +7,11 @@ reference: rose-primaire
## L'offre accessibilité avancée
Cette offre s'adresse plus spécifiquement aux entités pour lesquelles **l'accessibilité du site est un critère majeur.** Qu'il s'agisse d'une création de zéro ou d'une mise en conformité après un audit d'accessibilité.
Cette offre s'adresse plus spécifiquement aux entités pour lesquelles **l'accessibilité du site est un critère majeur.** Qu'il s'agisse d'une création ou d'une mise en conformité après un audit d'accessibilité.
Lorsque le projet le nécessite, je fais appel à des partenaires talentueux partageant les mêmes valeurs&nbsp;:
- [Rose Primaire](https://roseprimaire.com/) pour le conseil et l'accompagnement du projet&nbsp;;
- [Sylvain Plantier](https://jedessinebien.com/) et/ou [Benoît Etchevery](http://ben-etche.com/) pour l'illustration et la direction artistique.
<a href="/offres/accessibilite" class="btn">L'offre accessibilité en détails.</a>
<a href="/offres/accessibilite" class="btn">L'offre accessibilité en détails</a>

View File

@ -0,0 +1,9 @@
---
type: section
lang: fr
image: /assets/images/home/offre-1.3.svg
---
## Et l'éco-conception alors&nbsp;?
Je ne conçois pas l'éco-conception comme une offre. C'est plutôt une façon de travailler, voire même une vision de mon métier. On fait rarement de l'éco-conception sans accessibilité, j'applique donc ces méthodologies quelque soit le projet&nbsp;!

View File

@ -10,13 +10,13 @@ quickTitle: Ma méthodologie
quickImage: /assets/images/home/icon-methodo.svg
---
## Méthodologie.
## Méthodologie
### Accessibilité par défaut.
### Accessibilité par défaut
Engagé pour un web plus accessible, je crée des **sites web** en m'appuyant sur le [référentiel général d'amélioration de l'accessibilité (RGAA)](https://www.numerique.gouv.fr/publications/rgaa-accessibilite/) ainsi que sur les bonnes pratiques [Opquast.](https://www.opquast.com/rendre-le-web-meilleur/)
### Sobriété par choix.
### Sobriété par choix
Je privilégie le développement de **sites statiques** en adoptant une approche [d'éco-conception numérique.](https://eco-conception.designersethiques.org/guide/fr/)
C'est-à-dire que le site est pensé pour n'embarquer que les fonctionnalités nécessaires à son utilisation.

View File

@ -10,20 +10,20 @@ quickTitle: Moi
quickImage: /assets/images/home/icon-heart.svg
---
## À propos.
## À propos
### Formations personnelles.
### Formations personnelles
Afin de solidifier mes compétences, j'ai suivi les formations et passé les certifications suivantes&nbsp;:
- [Opquast](https://directory.opquast.com/fr/certificat/CTQSKP/) - Maîtrise de la qualité en projet web&nbsp;;
- Access42 - Développer et coder des sites accessibles (certificat numéro&nbsp;: 696fa2e0-cc67-11ec-88d2-9dabf3f992d4).
### Formations des autres.
### Formations des autres
Depuis plusieurs années, j'interviens dans différents campus afin de dispenser des cours de développement web.
### Temps libre.
### Temps libre
Jessaie de contribuer à des [projets open source](https://git.nardu.in/explore/repos) qui me tiennent à cœur et je m'engage localement avec le collectif [good-it!](https://www.good-it.org/)

View File

@ -61,9 +61,9 @@ a {
color: var(--color-blue);
text-decoration: underline;
}
a:visited {
/* a:visited {
color: currentColor;
}
} */
a:hover,
a:focus {
text-decoration: none;