diff --git a/astro.config.mjs b/astro.config.mjs index c0cf3d5c..60ff151d 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -2,7 +2,7 @@ import cloudflare from "@astrojs/cloudflare"; import { cacheCloudflare } from "@astrojs/cloudflare/cache"; import svelte from "@astrojs/svelte"; import tailwindcss from "@tailwindcss/vite"; -import { defineConfig } from "astro/config"; +import { defineConfig, fontProviders } from "astro/config"; const locales = ["es", "en", "ca"]; @@ -49,6 +49,28 @@ export default defineConfig({ routeRules, + /** + * Karla is downloaded from Google at build time and served from our own origin, so no + * request reaches a third party while a visitor reads a page. + * + * Karla is a variable font: the whole `200 800` range travels in a single file, which is + * why asking for every weight the interface uses costs no extra request. The previous + * `@fontsource/karla` import only shipped weight 400, so the ~360 `font-bold`, + * `font-medium` and `font-semibold` usages were being faked by the browser. + * + * `latin-ext` is not optional here: Catalan needs U+0140 (`ŀ`) for the geminate `l·l`. + */ + fonts: [ + { + provider: fontProviders.google(), + name: "Karla", + cssVariable: "--font-karla", + weights: ["200 800"], + styles: ["normal", "italic"], + subsets: ["latin", "latin-ext"], + }, + ], + vite: { plugins: [tailwindcss()], }, diff --git a/package.json b/package.json index 71031463..e756ca6a 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "@astrojs/svelte": "^9.0.1", "@aws-sdk/client-s3": "^3.1090.0", "@aws-sdk/s3-request-presigner": "^3.1090.0", - "@fontsource/karla": "^5.3.0", "@hey-api/client-fetch": "^0.11.0", "@internationalized/date": "^3.12.2", "@tailwindcss/vite": "^4.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 64227cb8..2fb1f6a2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 14.1.3(@types/node@26.1.1)(astro@7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0))(esbuild@0.28.1)(jiti@2.7.0)(wrangler@4.112.0(@cloudflare/workers-types@5.20260719.1))(yaml@2.9.0) '@astrojs/node': specifier: ^11.0.2 - version: 11.0.2(astro@7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0)) + version: 11.0.2(astro@7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0))(supports-color@8.1.1) '@astrojs/svelte': specifier: ^9.0.1 version: 9.0.1(@types/node@26.1.1)(astro@7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0))(esbuild@0.28.1)(jiti@2.7.0)(svelte@5.56.6(@typescript-eslint/types@8.64.0))(typescript@5.9.3)(yaml@2.9.0) @@ -26,9 +26,6 @@ importers: '@aws-sdk/s3-request-presigner': specifier: ^3.1090.0 version: 3.1090.0 - '@fontsource/karla': - specifier: ^5.3.0 - version: 5.3.0 '@hey-api/client-fetch': specifier: ^0.11.0 version: 0.11.0(@hey-api/openapi-ts@0.69.2(typescript@5.9.3)) @@ -82,7 +79,7 @@ importers: version: 17.4.2 file-type: specifier: ^22.0.1 - version: 22.0.1 + version: 22.0.1(supports-color@8.1.1) flickity: specifier: ^3.0.0 version: 3.0.0 @@ -119,7 +116,7 @@ importers: version: 5.20260719.1 '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.7.0(jiti@2.7.0)) + version: 10.0.1(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)) '@hey-api/openapi-ts': specifier: ^0.69.2 version: 0.69.2(typescript@5.9.3) @@ -149,10 +146,10 @@ importers: version: 26.1.1 '@typescript-eslint/eslint-plugin': specifier: ^8.64.0 - version: 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + version: 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.64.0 - version: 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + version: 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@vitest/browser-playwright': specifier: ^4.1.10 version: 4.1.10(playwright@1.61.1)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.0))(vitest@4.1.10) @@ -164,22 +161,22 @@ importers: version: 15.18.1 eslint: specifier: ^10.0.1 - version: 10.7.0(jiti@2.7.0) + version: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) eslint-plugin-cypress: specifier: ^6.4.3 - version: 6.4.3(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)) + version: 6.4.3(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)) + version: 2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1) eslint-plugin-storybook: specifier: ^10.5.2 - version: 10.5.2(eslint@10.7.0(jiti@2.7.0))(storybook@10.5.2(@types/react@19.2.17)(prettier@3.6.2)(react@19.2.7))(typescript@5.9.3) + version: 10.5.2(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(storybook@10.5.2(@types/react@19.2.17)(prettier@3.6.2)(react@19.2.7))(supports-color@8.1.1)(typescript@5.9.3) eslint-plugin-svelte: specifier: ^3.21.0 - version: 3.22.0(eslint@10.7.0(jiti@2.7.0))(svelte@5.56.6(@typescript-eslint/types@8.64.0)) + version: 3.22.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(svelte@5.56.6(@typescript-eslint/types@8.64.0)) eslint-plugin-unused-imports: specifier: ^4.4.1 - version: 4.4.1(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)) + version: 4.4.1(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)) flowbite: specifier: ^3.1.2 version: 3.1.2 @@ -209,7 +206,7 @@ importers: version: 0.6.14(prettier-plugin-astro@0.14.1)(prettier-plugin-svelte@4.1.1(prettier@3.6.2)(svelte@5.56.6(@typescript-eslint/types@8.64.0)))(prettier@3.6.2) start-server-and-test: specifier: ^3.0.11 - version: 3.0.11 + version: 3.0.11(supports-color@8.1.1) storybook: specifier: ^10.5.2 version: 10.5.2(@types/react@19.2.17)(prettier@3.6.2)(react@19.2.7) @@ -221,13 +218,13 @@ importers: version: 4.1.1(svelte@5.56.6(@typescript-eslint/types@8.64.0)) typescript-eslint: specifier: ^8.64.0 - version: 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + version: 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) vitest: specifier: ^4.1.10 version: 4.1.10(@types/node@26.1.1)(@vitest/browser-playwright@4.1.10)(@vitest/coverage-v8@4.1.10)(vite@8.1.5(@types/node@26.1.1)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.0)) wait-on: specifier: ^9.0.10 - version: 9.0.10(debug@4.4.3) + version: 9.0.10(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) wrangler: specifier: ^4.112.0 version: 4.112.0(@cloudflare/workers-types@5.20260719.1) @@ -847,9 +844,6 @@ packages: '@floating-ui/utils@0.2.12': resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - '@fontsource/karla@5.3.0': - resolution: {integrity: sha512-zHBkxMumwFE+K4RgHQAv2xH0O2lAX9y4zPun5JEFZyNQQclZ5Oz/XvByE3CB5+rnxKEV5BXlZShIEfz0VILDmQ==} - '@hapi/address@5.1.1': resolution: {integrity: sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==} engines: {node: '>=14.0.0'} @@ -1173,6 +1167,10 @@ packages: engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] + '@img/sharp-wasm32@0.35.3': + resolution: {integrity: sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==} + engines: {node: '>=20.9.0'} + '@img/sharp-webcontainers-wasm32@0.35.3': resolution: {integrity: sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==} engines: {node: '>=20.9.0'} @@ -5827,11 +5825,11 @@ snapshots: hast-util-from-html: 2.0.3 satteri: 0.9.5 - '@astrojs/node@11.0.2(astro@7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0))': + '@astrojs/node@11.0.2(astro@7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0))(supports-color@8.1.1)': dependencies: '@astrojs/internal-helpers': 0.10.1 astro: 7.1.1(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)(@types/node@26.1.1)(jiti@2.7.0)(yaml@2.9.0) - send: 1.2.1 + send: 1.2.1(supports-color@8.1.1) server-destroy: 1.0.1 transitivePeerDependencies: - supports-color @@ -6337,14 +6335,14 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@2.7.0))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))': dependencies: - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.23.5': + '@eslint/config-array@0.23.5(supports-color@8.1.1)': dependencies: '@eslint/object-schema': 3.0.5 debug: 4.4.3(supports-color@8.1.1) @@ -6360,9 +6358,9 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0))': + '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))': optionalDependencies: - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) '@eslint/object-schema@3.0.5': {} @@ -6382,8 +6380,6 @@ snapshots: '@floating-ui/utils@0.2.12': {} - '@fontsource/karla@5.3.0': {} - '@hapi/address@5.1.1': dependencies: '@hapi/hoek': 11.0.7 @@ -6462,6 +6458,8 @@ snapshots: optional: true '@img/sharp-freebsd-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 optional: true '@img/sharp-libvips-darwin-arm64@1.2.4': @@ -6609,7 +6607,14 @@ snapshots: '@emnapi/runtime': 1.11.2 optional: true + '@img/sharp-wasm32@0.35.3': + dependencies: + '@emnapi/runtime': 1.11.2 + optional: true + '@img/sharp-webcontainers-wasm32@0.35.3': + dependencies: + '@img/sharp-wasm32': 0.35.3 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -7383,7 +7388,7 @@ snapshots: '@tiptap/extensions': 3.28.0(@tiptap/core@3.28.0(@tiptap/pm@3.28.0))(@tiptap/pm@3.28.0) '@tiptap/pm': 3.28.0 - '@tokenizer/inflate@0.4.1': + '@tokenizer/inflate@0.4.1(supports-color@8.1.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) token-types: 6.1.2 @@ -7456,15 +7461,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.64.0 - '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.64.0 - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) ignore: 7.0.6 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -7472,19 +7477,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.64.0 '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.64.0 debug: 4.4.3(supports-color@8.1.1) - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.64.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.64.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.9.3) '@typescript-eslint/types': 8.64.0 @@ -7502,13 +7507,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -7516,9 +7521,9 @@ snapshots: '@typescript-eslint/types@8.64.0': {} - '@typescript-eslint/typescript-estree@8.64.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.64.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.64.0(typescript@5.9.3) + '@typescript-eslint/project-service': 8.64.0(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.64.0(typescript@5.9.3) '@typescript-eslint/types': 8.64.0 '@typescript-eslint/visitor-keys': 8.64.0 @@ -7531,13 +7536,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3)': + '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)) '@typescript-eslint/scope-manager': 8.64.0 '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) - eslint: 10.7.0(jiti@2.7.0) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@8.1.1)(typescript@5.9.3) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7718,7 +7723,7 @@ snapshots: acorn@8.17.0: {} - agent-base@6.0.2: + agent-base@6.0.2(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -7972,11 +7977,11 @@ snapshots: axe-core@4.12.1: {} - axios@1.18.1(debug@4.4.3): + axios@1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - follow-redirects: 1.16.0(debug@4.4.3) + follow-redirects: 1.16.0(debug@4.4.3(supports-color@8.1.1)) form-data: 4.0.6 - https-proxy-agent: 5.0.1 + https-proxy-agent: 5.0.1(supports-color@8.1.1) proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -8565,7 +8570,7 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-import-resolver-node@0.3.10: + eslint-import-resolver-node@0.3.10(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) is-core-module: 2.16.2 @@ -8573,24 +8578,24 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.7.0(jiti@2.7.0)): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) - eslint: 10.7.0(jiti@2.7.0) - eslint-import-resolver-node: 0.3.10 + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) + eslint-import-resolver-node: 0.3.10(supports-color@8.1.1) transitivePeerDependencies: - supports-color - eslint-plugin-cypress@6.4.3(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)): + eslint-plugin-cypress@6.4.3(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)): dependencies: - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) globals: 17.7.0 optionalDependencies: - '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -8599,9 +8604,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7(supports-color@8.1.1) doctrine: 2.1.0 - eslint: 10.7.0(jiti@2.7.0) - eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.7.0(jiti@2.7.0)) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) + eslint-import-resolver-node: 0.3.10(supports-color@8.1.1) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10(supports-color@8.1.1))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -8613,27 +8618,27 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-storybook@10.5.2(eslint@10.7.0(jiti@2.7.0))(storybook@10.5.2(@types/react@19.2.17)(prettier@3.6.2)(react@19.2.7))(typescript@5.9.3): + eslint-plugin-storybook@10.5.2(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(storybook@10.5.2(@types/react@19.2.17)(prettier@3.6.2)(react@19.2.7))(supports-color@8.1.1)(typescript@5.9.3): dependencies: '@typescript-eslint/types': 8.64.0 - '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) - eslint: 10.7.0(jiti@2.7.0) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) storybook: 10.5.2(@types/react@19.2.17)(prettier@3.6.2)(react@19.2.7) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-svelte@3.22.0(eslint@10.7.0(jiti@2.7.0))(svelte@5.56.6(@typescript-eslint/types@8.64.0)): + eslint-plugin-svelte@3.22.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(svelte@5.56.6(@typescript-eslint/types@8.64.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)) '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 @@ -8647,11 +8652,11 @@ snapshots: transitivePeerDependencies: - ts-node - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)): dependencies: - eslint: 10.7.0(jiti@2.7.0) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) eslint-scope@8.4.0: dependencies: @@ -8671,11 +8676,11 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.7.0(jiti@2.7.0): + eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.5 + '@eslint/config-array': 0.23.5(supports-color@8.1.1) '@eslint/config-helpers': 0.6.0 '@eslint/core': 1.2.1 '@eslint/plugin-kit': 0.7.2 @@ -8825,9 +8830,9 @@ snapshots: dependencies: flat-cache: 4.0.1 - file-type@22.0.1: + file-type@22.0.1(supports-color@8.1.1): dependencies: - '@tokenizer/inflate': 0.4.1 + '@tokenizer/inflate': 0.4.1(supports-color@8.1.1) strtok3: 10.3.5 token-types: 6.1.2 uint8array-extras: 1.5.0 @@ -8902,7 +8907,7 @@ snapshots: transitivePeerDependencies: - rollup - follow-redirects@1.16.0(debug@4.4.3): + follow-redirects@1.16.0(debug@4.4.3(supports-color@8.1.1)): optionalDependencies: debug: 4.4.3(supports-color@8.1.1) @@ -9162,9 +9167,9 @@ snapshots: jsprim: 2.0.2 sshpk: 1.18.0 - https-proxy-agent@5.0.1: + https-proxy-agent@5.0.1(supports-color@8.1.1): dependencies: - agent-base: 6.0.2 + agent-base: 6.0.2(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10332,7 +10337,7 @@ snapshots: semver@7.8.5: {} - send@1.2.1: + send@1.2.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 @@ -10530,7 +10535,7 @@ snapshots: stackback@0.0.2: {} - start-server-and-test@3.0.11: + start-server-and-test@3.0.11(supports-color@8.1.1): dependencies: arg: 5.0.2 check-more-types: 2.24.0 @@ -10538,7 +10543,7 @@ snapshots: execa: 5.1.1 lazy-ass: 2.0.3 tree-kill: 1.2.2 - wait-on: 9.0.10(debug@4.4.3) + wait-on: 9.0.10(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10890,13 +10895,13 @@ snapshots: dependencies: semver: 7.8.5 - typescript-eslint@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3): + typescript-eslint@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.64.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@5.9.3) - eslint: 10.7.0(jiti@2.7.0) + '@typescript-eslint/eslint-plugin': 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.64.0(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + eslint: 10.7.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -11184,9 +11189,9 @@ snapshots: w3c-keyname@2.2.8: {} - wait-on@9.0.10(debug@4.4.3): + wait-on@9.0.10(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - axios: 1.18.1(debug@4.4.3) + axios: 1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) joi: 18.2.3 lodash: 4.18.1 minimist: 1.2.8 diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 6a8b4367..e5583377 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -1,8 +1,19 @@ --- +import { Font } from "astro:assets"; + import "../styles/global.css"; import Metatags from "./Metatags.svelte"; +import type { FontPreloadFilter } from "astro:assets"; + const { title, description, keywords } = Astro.props; + +/** + * Only the upright latin face is worth preloading — it is the one every page needs before + * first paint. Italic and latin-ext are declared all the same, and the browser fetches them + * when a glyph on the page actually calls for them. + */ +const preloadedFaces: FontPreloadFilter = [{ style: "normal", subset: "latin" }]; --- @@ -12,6 +23,7 @@ const { title, description, keywords } = Astro.props;