diff --git a/astro.config.ts b/astro.config.ts index a9fb296f..861483e4 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -70,7 +70,7 @@ export default defineConfig({ /* start remark plugins here */ [behead, { depth: 1 }], [ - remarkEmbedder as never, + remarkEmbedder, { transformers: [oembedTransformer, TwitchTransformer], } as RemarkEmbedderOptions, diff --git a/build-scripts/generate-epubs.ts b/build-scripts/generate-epubs.ts index a474b3a3..5c464e7d 100644 --- a/build-scripts/generate-epubs.ts +++ b/build-scripts/generate-epubs.ts @@ -40,7 +40,7 @@ async function generateEpubHTML(slug: string, content: string) { createRehypePlugins({ format: "epub", path: resolve(process.cwd(), `content/blog/${slug}/`), - }) + }), ) // Voids: [] is required for epub generation, and causes little/no harm for non-epub usage .use(rehypeStringify, { allowDangerousHtml: true, voids: [] }); @@ -55,7 +55,7 @@ type EpubOptions = ConstructorParameters[0]; async function generateCollectionEPub( collection: RawCollectionInfo & Pick, collectionPosts: ExtendedPostInfo[], - fileLocation: string + fileLocation: string, ) { const authors = collection.authors.map((id) => { return unicorns.find((u) => u.id === id).name; @@ -115,10 +115,10 @@ async function generateCollectionEPub( collectionPosts.map(async (post) => ({ title: post.title, data: await generateEpubHTML(post.slug, post.contentMeta), - })) + })), ), } as Partial as EpubOptions, - fileLocation + fileLocation, ); await epub.render(); @@ -128,12 +128,12 @@ const posts = [...getAllExtendedPosts("en")]; for (const collection of collections) { const collectionPosts = posts.filter( - (post) => post.collection === collection.slug + (post) => post.collection === collection.slug, ); generateCollectionEPub( collection, collectionPosts, - resolve(process.cwd(), `public/${collection.slug}.epub`) + resolve(process.cwd(), `public/${collection.slug}.epub`), ); } diff --git a/build-scripts/search-index.ts b/build-scripts/search-index.ts index 29c31a02..ca0b35ea 100644 --- a/build-scripts/search-index.ts +++ b/build-scripts/search-index.ts @@ -38,7 +38,7 @@ const createPostIndex = () => { { name: "description", weight: 1.2 }, { name: "excerpt", weight: 1.2 }, ], - posts + posts, ).toJSON(); }; @@ -74,7 +74,7 @@ const createCollectionIndex = () => { weight: 1.2, }, ], - collections + collections, ).toJSON(); }; diff --git a/build-scripts/social-previews/index.ts b/build-scripts/social-previews/index.ts index 7ebe5d92..112faed9 100644 --- a/build-scripts/social-previews/index.ts +++ b/build-scripts/social-previews/index.ts @@ -71,7 +71,7 @@ const page = await context.newPage(); async function renderPostImage( layout: Layout, post: ExtendedPostInfo, - path: string + path: string, ) { const label = `${post.slug} (${layout.name})`; console.time(label); @@ -97,7 +97,7 @@ for (const post of getAllExtendedPosts("en")) { await renderPostImage( twitterPreview, post, - resolve(outDir, `.${post.socialImg}`) + resolve(outDir, `.${post.socialImg}`), ); } } diff --git a/build-scripts/social-previews/layouts/banner.tsx b/build-scripts/social-previews/layouts/banner.tsx index add1bfda..4470c352 100644 --- a/build-scripts/social-previews/layouts/banner.tsx +++ b/build-scripts/social-previews/layouts/banner.tsx @@ -1,18 +1,20 @@ -import * as React from 'preact'; -import { readFileAsBase64 } from '../utils'; -import { ComponentProps, Layout } from '../base'; -import style from './banner-css'; -import classnames from 'classnames'; +import * as React from "preact"; +import { readFileAsBase64 } from "../utils"; +import { ComponentProps, Layout } from "../base"; +import style from "./banner-css"; +import classnames from "classnames"; const tagStickers: Record = { - "default": readFileAsBase64("public/stickers/role_devops.png"), + default: readFileAsBase64("public/stickers/role_devops.png"), "html,webdev": readFileAsBase64("public/stickers/html.png"), - "vue": readFileAsBase64("public/stickers/vue.png"), + vue: readFileAsBase64("public/stickers/vue.png"), "documentation,opinion": readFileAsBase64("public/stickers/role_author.png"), - 'computer science,bash,javascript': readFileAsBase64("public/stickers/role_developer.png"), - "design": readFileAsBase64("public/stickers/role_designer.png"), - "rust": readFileAsBase64("public/stickers/ferris.png"), - "git": readFileAsBase64("public/stickers/git.png"), + "computer science,bash,javascript": readFileAsBase64( + "public/stickers/role_developer.png", + ), + design: readFileAsBase64("public/stickers/role_designer.png"), + rust: readFileAsBase64("public/stickers/ferris.png"), + git: readFileAsBase64("public/stickers/git.png"), }; function BannerCodeScreen({ @@ -20,16 +22,18 @@ function BannerCodeScreen({ postHtml, blur, }: { - post: ComponentProps['post'], - postHtml: string, - blur?: boolean, + post: ComponentProps["post"]; + postHtml: string; + blur?: boolean; }) { const rotX = (post.description.length % 20) - 10; - const rotY = ((post.title.length * 3) % 20); + const rotY = (post.title.length * 3) % 20; let tagImg = tagStickers["default"]; for (const tag of post.tags) { - const key = Object.keys(tagStickers).find(k => k.split(",").includes(tag)); + const key = Object.keys(tagStickers).find((k) => + k.split(",").includes(tag), + ); if (key) { tagImg = tagStickers[key]; break; @@ -38,38 +42,45 @@ function BannerCodeScreen({ const theme = post.title.length % 3; - return <> -
-
-
-				
- { - post.tags.map((tag) => ( + return ( + <> +
+
+
+					
+ {post.tags.map((tag) => ( {tag} - )) - } + ))} +
+
+
+
-
- -
-
- ; + + ); } -function Banner({ - post, - postHtml, -}: ComponentProps) { - return <> - -
- ; +function Banner({ post, postHtml }: ComponentProps) { + return ( + <> + +
+ + ); } export default { diff --git a/build-scripts/social-previews/layouts/twitter-preview.test.tsx b/build-scripts/social-previews/layouts/twitter-preview.test.tsx index 37e09c0f..da08b19b 100644 --- a/build-scripts/social-previews/layouts/twitter-preview.test.tsx +++ b/build-scripts/social-previews/layouts/twitter-preview.test.tsx @@ -1,54 +1,54 @@ -import * as React from 'preact'; +import * as React from "preact"; import { render } from "@testing-library/preact"; import { MockPost } from "__mocks__/data/mock-post"; import TwitterLargeCard, { splitSentence } from "./twitter-preview"; test("Social previews splitSentence", () => { - // doesn't split at start/end of short titles - expect(splitSentence("Topic: Topic")).toStrictEqual(["Topic: Topic", ""]); + // doesn't split at start/end of short titles + expect(splitSentence("Topic: Topic")).toStrictEqual(["Topic: Topic", ""]); - // splits by colon (including the colon char) - expect(splitSentence("A Topic: an Attribute")).toStrictEqual([ - "A Topic", - ": an Attribute", - ]); + // splits by colon (including the colon char) + expect(splitSentence("A Topic: an Attribute")).toStrictEqual([ + "A Topic", + ": an Attribute", + ]); - // splits by commas - expect( - splitSentence("An Attribute of Topic, Topic, and Topic") - ).toStrictEqual(["An Attribute of ", "Topic, Topic, and Topic"]); + // splits by commas + expect( + splitSentence("An Attribute of Topic, Topic, and Topic"), + ).toStrictEqual(["An Attribute of ", "Topic, Topic, and Topic"]); - // splits by apostrophe - expect(splitSentence("A Topic's Attribute")).toStrictEqual([ - "A Topic's", - " Attribute", - ]); + // splits by apostrophe + expect(splitSentence("A Topic's Attribute")).toStrictEqual([ + "A Topic's", + " Attribute", + ]); - // splits by apostrophe (plural) - expect(splitSentence("Some Topics' Attributes")).toStrictEqual([ - "Some Topics'", - " Attributes", - ]); + // splits by apostrophe (plural) + expect(splitSentence("Some Topics' Attributes")).toStrictEqual([ + "Some Topics'", + " Attributes", + ]); - // splits by lowercase words - expect(splitSentence("An Attribute in a Topic")).toStrictEqual([ - "An Attribute in ", - "a Topic", - ]); + // splits by lowercase words + expect(splitSentence("An Attribute in a Topic")).toStrictEqual([ + "An Attribute in ", + "a Topic", + ]); }); test("Social preview renders", async () => { - const post = MockPost; - const { baseElement, findByText } = render( - - ); + const post = MockPost; + const { baseElement, findByText } = render( + , + ); - expect(baseElement).toBeInTheDocument(); - expect(await findByText(post.title)).toBeInTheDocument(); + expect(baseElement).toBeInTheDocument(); + expect(await findByText(post.title)).toBeInTheDocument(); }); diff --git a/build-scripts/social-previews/layouts/twitter-preview.tsx b/build-scripts/social-previews/layouts/twitter-preview.tsx index b3ed20fa..f5c0aab5 100644 --- a/build-scripts/social-previews/layouts/twitter-preview.tsx +++ b/build-scripts/social-previews/layouts/twitter-preview.tsx @@ -1,130 +1,134 @@ -import * as React from 'preact'; -import { readFileAsBase64 } from '../utils'; -import { ComponentProps, Layout } from '../base'; -import style from './twitter-preview-css'; +import * as React from "preact"; +import { readFileAsBase64 } from "../utils"; +import { ComponentProps, Layout } from "../base"; +import style from "./twitter-preview-css"; export function splitSentence(str: string): [string, string] { - const splitStr = str.split(" "); - const splitBy = ( - regex: RegExp, - matchLast: boolean = true - ): [string, string] | null => { - const matches = splitStr.map((word, i) => ({ reg: regex.exec(word), i })); - const match = (matchLast ? matches.reverse() : matches) - .slice(1, -1) - .find(({ reg }) => !!reg); + const splitStr = str.split(" "); + const splitBy = ( + regex: RegExp, + matchLast: boolean = true, + ): [string, string] | null => { + const matches = splitStr.map((word, i) => ({ reg: regex.exec(word), i })); + const match = (matchLast ? matches.reverse() : matches) + .slice(1, -1) + .find(({ reg }) => !!reg); - // if match is not found, fail - if (!match || !match.reg) return null; + // if match is not found, fail + if (!match || !match.reg) return null; - const firstHalf = [ - ...splitStr.slice(0, match.i), - match.reg.input.substring(0, match.reg.index), - ].join(" "); - const secondHalf = [match.reg[0], ...splitStr.slice(match.i + 1)].join(" "); - return [firstHalf, secondHalf]; - }; + const firstHalf = [ + ...splitStr.slice(0, match.i), + match.reg.input.substring(0, match.reg.index), + ].join(" "); + const secondHalf = [match.reg[0], ...splitStr.slice(match.i + 1)].join(" "); + return [firstHalf, secondHalf]; + }; - let ret; - // try to split by "Topic[: Attribute]" or "Topic [- Attribute]" (hyphens/colons) - if ((ret = splitBy(/(?<=^\w+):$|^[-—]$/))) return ret; - // try to split by "Attribute in [Topic, Topic, and Topic]" (commas) - if ((ret = splitBy(/^\w+,$/, false))) return ret; - // try to split by "Topic['s Attribute]" (apostrophe) - if ((ret = splitBy(/(?<=^\w+\'s?)$/))) return ret; - // try to split by "Attribute [in Topic]" (lowercase words) - if ((ret = splitBy(/^[a-z][A-Za-z]*$/))) return ret; - // otherwise, don't split the string - return [str, ""]; + let ret; + // try to split by "Topic[: Attribute]" or "Topic [- Attribute]" (hyphens/colons) + if ((ret = splitBy(/(?<=^\w+):$|^[-—]$/))) return ret; + // try to split by "Attribute in [Topic, Topic, and Topic]" (commas) + if ((ret = splitBy(/^\w+,$/, false))) return ret; + // try to split by "Topic['s Attribute]" (apostrophe) + if ((ret = splitBy(/(?<=^\w+\'s?)$/))) return ret; + // try to split by "Attribute [in Topic]" (lowercase words) + if ((ret = splitBy(/^[a-z][A-Za-z]*$/))) return ret; + // otherwise, don't split the string + return [str, ""]; } -const unicornUtterancesHead = readFileAsBase64("src/assets/unicorn_head_1024.png"); +const unicornUtterancesHead = readFileAsBase64( + "src/assets/unicorn_head_1024.png", +); interface TwitterCodeScreenProps { - title: string; - html: string; - blur: boolean; + title: string; + html: string; + blur: boolean; } const TwitterCodeScreen = ({ title, html, blur }: TwitterCodeScreenProps) => { - const rotations = [ - "rotateX(-17deg) rotateY(32deg) rotateZ(-3deg) translate(16%, 0%)", - "rotateX(5deg) rotateY(35deg) rotateZ(345deg) translate(18%, 0)", - "rotateX(15deg) rotateY(25deg) rotateZ(12deg) translate(3%, -15%)", - ]; + const rotations = [ + "rotateX(-17deg) rotateY(32deg) rotateZ(-3deg) translate(16%, 0%)", + "rotateX(5deg) rotateY(35deg) rotateZ(345deg) translate(18%, 0)", + "rotateX(15deg) rotateY(25deg) rotateZ(12deg) translate(3%, -15%)", + ]; - // use second char of title as "deterministic" random value - const transform = rotations[title.charCodeAt(1) % rotations.length]; + // use second char of title as "deterministic" random value + const transform = rotations[title.charCodeAt(1) % rotations.length]; - return ( -
-
-
-
-        
-
-
- ); + return ( +
+
+
+
+				
+
+
+ ); }; const TwitterLargeCard = ({ - post, - postHtml, - width, - authorImageMap, + post, + postHtml, + width, + authorImageMap, }: ComponentProps) => { - const title = post.title; - const [firstHalfTitle, secondHalfTitle] = splitSentence(title); + const title = post.title; + const [firstHalfTitle, secondHalfTitle] = splitSentence(title); - return <> - - -
-
-

- {firstHalfTitle} - {secondHalfTitle} -

-
-
-
-
- {post.authors.map((author) => ( - - ))} -
-
-

unicorn-utterances.com

- -
-
- ; + return ( + <> + + +
+
+

+ {firstHalfTitle} + {secondHalfTitle} +

+
+
+
+
+ {post.authors.map((author) => ( + + ))} +
+
+

unicorn-utterances.com

+ +
+
+ + ); }; export default { - name: "twitter-preview", - css: style, - Component: TwitterLargeCard, + name: "twitter-preview", + css: style, + Component: TwitterLargeCard, } as Layout; diff --git a/content/data/i18n/es.json b/content/data/i18n/es.json index a5f84175..3b50aaed 100644 --- a/content/data/i18n/es.json +++ b/content/data/i18n/es.json @@ -4,4 +4,4 @@ "title.where_to_find_us": "Dónde encontrarnos", "title.sponsors": "Patrocinadores", "desc.about_us": "Acerca de Unicorn Utterances - quiénes somos, cuáles son nuestros objetivos, y cómo queremos ayudar a que otros aprendan" -} \ No newline at end of file +} diff --git a/content/data/i18n/fr.json b/content/data/i18n/fr.json index 455a3f24..3c637d3c 100644 --- a/content/data/i18n/fr.json +++ b/content/data/i18n/fr.json @@ -4,4 +4,4 @@ "title.where_to_find_us": "Où Nous Trouver", "title.sponsors": "Partenaires", "desc.about_us": "À propos de Unicorn Utterances - qui nous sommes, quels sont nos buts, et comment nous voulons aidez les gens à apprendre" -} \ No newline at end of file +} diff --git a/content/data/i18n/pt.json b/content/data/i18n/pt.json index 01f90dcd..01b6dea9 100644 --- a/content/data/i18n/pt.json +++ b/content/data/i18n/pt.json @@ -4,4 +4,4 @@ "title.where_to_find_us": "Onde nos podes encontrar?", "title.sponsors": "Patrocinadores", "desc.about_us": "Sobre Unicorn Utterances - quem somos nós, quais são os nossos objetivos e como queremos ajudar no processo de aprendizagem dos outros" -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 1b868765..e707bf8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,18 +30,18 @@ "@testing-library/preact": "^3.2.3", "@types/jest": "^29.5.2", "@types/json5": "^2.2.0", - "@types/node": "^20.4.4", + "@types/node": "^20.4.5", "@types/uuid": "^9.0.2", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.1.0", + "@typescript-eslint/eslint-plugin": "^6.2.0", + "@typescript-eslint/parser": "^6.2.0", "@vercel/node": "^2.15.6", - "astro": "^2.9.2", + "astro": "^2.9.3", "astro-icon": "^0.8.1", "autoprefixer": "^10.4.14", "classnames": "^2.3.2", "dayjs": "^1.11.9", "env-cmd": "^10.1.0", - "esbuild": "^0.18.16", + "esbuild": "^0.18.17", "esbuild-jest": "^0.5.0", "eslint": "^8.44.0", "eslint-plugin-astro": "^0.27.1", @@ -64,7 +64,7 @@ "lint-staged": "^13.2.3", "npm-run-all": "^4.1.5", "plausible-tracker": "^0.3.8", - "playwright": "^1.36.1", + "playwright": "^1.36.2", "postcss": "^8.4.27", "postcss-csso": "^6.0.1", "preact-render-to-string": "^6.1.0", @@ -90,7 +90,7 @@ "unist-util-is": "^6.0.0", "unist-util-replace-all-between": "^0.1.1", "unist-util-visit": "^5.0.0", - "vercel": "^31.0.4", + "vercel": "^31.1.1", "vite-plugin-svgr": "^3.2.0" } }, @@ -412,6 +412,321 @@ "astro": "^2.9.1" } }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@astrojs/vercel/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@astrojs/vercel/node_modules/@esbuild/win32-x64": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", @@ -2342,6 +2657,342 @@ "source-map-support": "^0.5.21" } }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", @@ -2424,10 +3075,325 @@ "get-tsconfig": "^4.4.0" } }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.17.tgz", + "integrity": "sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.17.tgz", + "integrity": "sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.17.tgz", + "integrity": "sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.17.tgz", + "integrity": "sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.17.tgz", + "integrity": "sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.17.tgz", + "integrity": "sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.17.tgz", + "integrity": "sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.17.tgz", + "integrity": "sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.17.tgz", + "integrity": "sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.17.tgz", + "integrity": "sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.17.tgz", + "integrity": "sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.17.tgz", + "integrity": "sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.17.tgz", + "integrity": "sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.17.tgz", + "integrity": "sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.17.tgz", + "integrity": "sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.17.tgz", + "integrity": "sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.17.tgz", + "integrity": "sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.17.tgz", + "integrity": "sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.17.tgz", + "integrity": "sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.17.tgz", + "integrity": "sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.17.tgz", + "integrity": "sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz", - "integrity": "sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.17.tgz", + "integrity": "sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==", "cpu": [ "x64" ], @@ -6249,6 +7215,342 @@ } } }, + "node_modules/@remix-run/dev/node_modules/@esbuild/android-arm": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", + "integrity": "sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/android-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.6.tgz", + "integrity": "sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/android-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.6.tgz", + "integrity": "sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz", + "integrity": "sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/darwin-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.6.tgz", + "integrity": "sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.6.tgz", + "integrity": "sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.6.tgz", + "integrity": "sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-arm": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.6.tgz", + "integrity": "sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.6.tgz", + "integrity": "sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-ia32": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.6.tgz", + "integrity": "sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-loong64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.6.tgz", + "integrity": "sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.6.tgz", + "integrity": "sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.6.tgz", + "integrity": "sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.6.tgz", + "integrity": "sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-s390x": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.6.tgz", + "integrity": "sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/linux-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.6.tgz", + "integrity": "sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.6.tgz", + "integrity": "sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.6.tgz", + "integrity": "sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/sunos-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.6.tgz", + "integrity": "sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/win32-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.6.tgz", + "integrity": "sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@remix-run/dev/node_modules/@esbuild/win32-ia32": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.6.tgz", + "integrity": "sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@remix-run/dev/node_modules/@esbuild/win32-x64": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.6.tgz", @@ -7775,9 +9077,9 @@ } }, "node_modules/@types/node": { - "version": "20.4.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.4.tgz", - "integrity": "sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==", + "version": "20.4.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", + "integrity": "sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==", "devOptional": true }, "node_modules/@types/node-fetch": { @@ -7893,16 +9195,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.1.0.tgz", - "integrity": "sha512-qg7Bm5TyP/I7iilGyp6DRqqkt8na00lI6HbjWZObgk3FFSzH5ypRwAHXJhJkwiRtTcfn+xYQIMOR5kJgpo6upw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.0.tgz", + "integrity": "sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/type-utils": "6.1.0", - "@typescript-eslint/utils": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/scope-manager": "6.2.0", + "@typescript-eslint/type-utils": "6.2.0", + "@typescript-eslint/utils": "6.2.0", + "@typescript-eslint/visitor-keys": "6.2.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -7929,13 +9231,13 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", - "integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.0.tgz", + "integrity": "sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0" + "@typescript-eslint/types": "6.2.0", + "@typescript-eslint/visitor-keys": "6.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7946,9 +9248,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", - "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.0.tgz", + "integrity": "sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -7959,12 +9261,12 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", - "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz", + "integrity": "sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/types": "6.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -8009,15 +9311,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.1.0.tgz", - "integrity": "sha512-hIzCPvX4vDs4qL07SYzyomamcs2/tQYXg5DtdAfj35AyJ5PIUqhsLf4YrEIFzZcND7R2E8tpQIZKayxg8/6Wbw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.0.tgz", + "integrity": "sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/typescript-estree": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/scope-manager": "6.2.0", + "@typescript-eslint/types": "6.2.0", + "@typescript-eslint/typescript-estree": "6.2.0", + "@typescript-eslint/visitor-keys": "6.2.0", "debug": "^4.3.4" }, "engines": { @@ -8037,13 +9339,13 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", - "integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.0.tgz", + "integrity": "sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0" + "@typescript-eslint/types": "6.2.0", + "@typescript-eslint/visitor-keys": "6.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -8054,9 +9356,9 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", - "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.0.tgz", + "integrity": "sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -8067,12 +9369,12 @@ } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", - "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz", + "integrity": "sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/types": "6.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -8101,13 +9403,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.1.0.tgz", - "integrity": "sha512-kFXBx6QWS1ZZ5Ni89TyT1X9Ag6RXVIVhqDs0vZE/jUeWlBv/ixq2diua6G7ece6+fXw3TvNRxP77/5mOMusx2w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.0.tgz", + "integrity": "sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.1.0", - "@typescript-eslint/utils": "6.1.0", + "@typescript-eslint/typescript-estree": "6.2.0", + "@typescript-eslint/utils": "6.2.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -8141,13 +9443,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.1.0.tgz", - "integrity": "sha512-nUKAPWOaP/tQjU1IQw9sOPCDavs/iU5iYLiY/6u7gxS7oKQoi4aUxXS1nrrVGTyBBaGesjkcwwHkbkiD5eBvcg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.0.tgz", + "integrity": "sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0", + "@typescript-eslint/types": "6.2.0", + "@typescript-eslint/visitor-keys": "6.2.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -8168,9 +9470,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", - "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.0.tgz", + "integrity": "sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -8181,12 +9483,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", - "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz", + "integrity": "sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/types": "6.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -8231,17 +9533,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.1.0.tgz", - "integrity": "sha512-wp652EogZlKmQoMS5hAvWqRKplXvkuOnNzZSE0PVvsKjpexd/XznRVHAtrfHFYmqaJz0DFkjlDsGYC9OXw+OhQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.0.tgz", + "integrity": "sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.1.0", - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/typescript-estree": "6.1.0", + "@typescript-eslint/scope-manager": "6.2.0", + "@typescript-eslint/types": "6.2.0", + "@typescript-eslint/typescript-estree": "6.2.0", "semver": "^7.5.4" }, "engines": { @@ -8256,13 +9558,13 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.1.0.tgz", - "integrity": "sha512-AxjgxDn27hgPpe2rQe19k0tXw84YCOsjDJ2r61cIebq1t+AIxbgiXKvD4999Wk49GVaAcdJ/d49FYel+Pp3jjw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.0.tgz", + "integrity": "sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", - "@typescript-eslint/visitor-keys": "6.1.0" + "@typescript-eslint/types": "6.2.0", + "@typescript-eslint/visitor-keys": "6.2.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -8273,9 +9575,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.1.0.tgz", - "integrity": "sha512-+Gfd5NHCpDoHDOaU/yIF3WWRI2PcBRKKpP91ZcVbL0t5tQpqYWBs3z/GGhvU+EV1D0262g9XCnyqQh19prU0JQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.0.tgz", + "integrity": "sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -8286,12 +9588,12 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.1.0.tgz", - "integrity": "sha512-yQeh+EXhquh119Eis4k0kYhj9vmFzNpbhM3LftWQVwqVjipCkwHBQOZutcYW+JVkjtTG9k8nrZU1UoNedPDd1A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz", + "integrity": "sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.1.0", + "@typescript-eslint/types": "6.2.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -8500,6 +9802,342 @@ "vite-node": "^0.28.5" } }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-arm": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.6.tgz", + "integrity": "sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.6.tgz", + "integrity": "sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/android-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.6.tgz", + "integrity": "sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.6.tgz", + "integrity": "sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/darwin-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.6.tgz", + "integrity": "sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.6.tgz", + "integrity": "sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.6.tgz", + "integrity": "sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-arm": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.6.tgz", + "integrity": "sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.6.tgz", + "integrity": "sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-ia32": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.6.tgz", + "integrity": "sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-loong64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.6.tgz", + "integrity": "sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.6.tgz", + "integrity": "sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.6.tgz", + "integrity": "sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.6.tgz", + "integrity": "sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-s390x": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.6.tgz", + "integrity": "sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/linux-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.6.tgz", + "integrity": "sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.6.tgz", + "integrity": "sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.6.tgz", + "integrity": "sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/sunos-x64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.6.tgz", + "integrity": "sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-arm64": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.6.tgz", + "integrity": "sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-ia32": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.6.tgz", + "integrity": "sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@vanilla-extract/integration/node_modules/@esbuild/win32-x64": { "version": "0.17.6", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.6.tgz", @@ -8760,9 +10398,9 @@ "dev": true }, "node_modules/@vercel/next": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/@vercel/next/-/next-3.9.0.tgz", - "integrity": "sha512-o5xGLLYU9crP3ReDJSTU8y4gwgAEbSQSp6CG9QQYHFkn3YBJrgubXpNj1+OSfCcGKH9AK0TAfayJPPbwKilwvA==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@vercel/next/-/next-3.9.2.tgz", + "integrity": "sha512-ashWLVn7NtLOFchBRYAs/aEE7edEq91IIGb+T8Cqcv4R1C9xb0m1UOp2r6X1HKV0FjqCWwg8MBEgt5vzK1cJ6w==", "dev": true }, "node_modules/@vercel/nft": { @@ -9106,9 +10744,9 @@ "dev": true }, "node_modules/@vercel/static-build": { - "version": "1.3.41", - "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-1.3.41.tgz", - "integrity": "sha512-1wHz338v/72RqmLu2S3XtUZkyTQfw1QR7kpODj+DIXVzz2HcpGqv70voex+B3FeC6wtD2yLCtTi2eLmFLEiB8A==", + "version": "1.3.42", + "resolved": "https://registry.npmjs.org/@vercel/static-build/-/static-build-1.3.42.tgz", + "integrity": "sha512-iu2jqCQ/xen6r82CxLjzSfGPYl0byCpB4ygoVwd6LRfP5XmXj4wh49ZL6KvP/0pQNlxT6ggaJHgmNPes438aCA==", "dev": true, "dependencies": { "@vercel/gatsby-plugin-vercel-analytics": "1.0.10", @@ -9695,9 +11333,9 @@ } }, "node_modules/astro": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/astro/-/astro-2.9.2.tgz", - "integrity": "sha512-ejdGM9SbK58AvJS8lbkre/d5CoW8JftqaRxc9rGqzpiZQ8iU8gfdFmi3Hzkcvd2HrGvYYsJku88pM6tkBPniJQ==", + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/astro/-/astro-2.9.3.tgz", + "integrity": "sha512-EcFYnJytMgDhBf1MxWIG1GNwfDL2yRvVt+4aguYbcFDNz8EjLKgpLYbbTzR2VlIQu1vpxImZZ0bmPy8Hd+tAfw==", "dependencies": { "@astrojs/compiler": "^1.6.0", "@astrojs/internal-helpers": "^0.1.1", @@ -9858,6 +11496,321 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/astro/node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/astro/node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/astro/node_modules/@esbuild/win32-x64": { "version": "0.17.19", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", @@ -12800,9 +14753,9 @@ } }, "node_modules/esbuild": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.16.tgz", - "integrity": "sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==", + "version": "0.18.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.17.tgz", + "integrity": "sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -12811,28 +14764,124 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.16", - "@esbuild/android-arm64": "0.18.16", - "@esbuild/android-x64": "0.18.16", - "@esbuild/darwin-arm64": "0.18.16", - "@esbuild/darwin-x64": "0.18.16", - "@esbuild/freebsd-arm64": "0.18.16", - "@esbuild/freebsd-x64": "0.18.16", - "@esbuild/linux-arm": "0.18.16", - "@esbuild/linux-arm64": "0.18.16", - "@esbuild/linux-ia32": "0.18.16", - "@esbuild/linux-loong64": "0.18.16", - "@esbuild/linux-mips64el": "0.18.16", - "@esbuild/linux-ppc64": "0.18.16", - "@esbuild/linux-riscv64": "0.18.16", - "@esbuild/linux-s390x": "0.18.16", - "@esbuild/linux-x64": "0.18.16", - "@esbuild/netbsd-x64": "0.18.16", - "@esbuild/openbsd-x64": "0.18.16", - "@esbuild/sunos-x64": "0.18.16", - "@esbuild/win32-arm64": "0.18.16", - "@esbuild/win32-ia32": "0.18.16", - "@esbuild/win32-x64": "0.18.16" + "@esbuild/android-arm": "0.18.17", + "@esbuild/android-arm64": "0.18.17", + "@esbuild/android-x64": "0.18.17", + "@esbuild/darwin-arm64": "0.18.17", + "@esbuild/darwin-x64": "0.18.17", + "@esbuild/freebsd-arm64": "0.18.17", + "@esbuild/freebsd-x64": "0.18.17", + "@esbuild/linux-arm": "0.18.17", + "@esbuild/linux-arm64": "0.18.17", + "@esbuild/linux-ia32": "0.18.17", + "@esbuild/linux-loong64": "0.18.17", + "@esbuild/linux-mips64el": "0.18.17", + "@esbuild/linux-ppc64": "0.18.17", + "@esbuild/linux-riscv64": "0.18.17", + "@esbuild/linux-s390x": "0.18.17", + "@esbuild/linux-x64": "0.18.17", + "@esbuild/netbsd-x64": "0.18.17", + "@esbuild/openbsd-x64": "0.18.17", + "@esbuild/sunos-x64": "0.18.17", + "@esbuild/win32-arm64": "0.18.17", + "@esbuild/win32-ia32": "0.18.17", + "@esbuild/win32-x64": "0.18.17" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", + "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", + "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", + "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", + "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", + "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", + "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, "node_modules/esbuild-jest": { @@ -12849,6 +14898,166 @@ "esbuild": ">=0.8.50" } }, + "node_modules/esbuild-linux-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", + "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", + "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", + "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", + "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", + "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", + "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", + "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", + "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", + "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", + "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-plugins-node-modules-polyfill": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.3.0.tgz", @@ -12866,6 +15075,38 @@ "esbuild": "^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0" } }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", + "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", + "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-windows-64": { "version": "0.14.47", "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", @@ -12882,6 +15123,22 @@ "node": ">=12" } }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", + "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -24520,13 +26777,13 @@ } }, "node_modules/playwright": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.36.1.tgz", - "integrity": "sha512-2ZqHpD0U0COKR8bqR3W5IkyIAAM0mT9FgGJB9xWCI1qAUkqLxJskA1ueeQOTH2Qfz3+oxdwwf2EzdOX+RkZmmQ==", + "version": "1.36.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.36.2.tgz", + "integrity": "sha512-4Fmlq3KWsl85Bl4InJw1NC21aeQV0iSZuFvTDcy1F8zVmXmgQRe89GxF8zMSRt/KIS+2tUolak7EXVl9aC+JdA==", "dev": true, "hasInstallScript": true, "dependencies": { - "playwright-core": "1.36.1" + "playwright-core": "1.36.2" }, "bin": { "playwright": "cli.js" @@ -24536,9 +26793,9 @@ } }, "node_modules/playwright-core": { - "version": "1.36.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.1.tgz", - "integrity": "sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg==", + "version": "1.36.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.2.tgz", + "integrity": "sha512-sQYZt31dwkqxOrP7xy2ggDfEzUxM1lodjhsQ3NMMv5uGTRDsLxU0e4xf4wwMkF2gplIxf17QMBCodSFgm6bFVQ==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -29735,21 +31992,21 @@ } }, "node_modules/vercel": { - "version": "31.0.4", - "resolved": "https://registry.npmjs.org/vercel/-/vercel-31.0.4.tgz", - "integrity": "sha512-KO2r6he/KtCWg7mgdiGVJefe6Y369yfne794/K3mzFjJZo8A1lEt6vB5yy2a79G4SX8VY7JfT2DvfsAlhIb7vQ==", + "version": "31.1.1", + "resolved": "https://registry.npmjs.org/vercel/-/vercel-31.1.1.tgz", + "integrity": "sha512-0plv2fF2qjtygPMmctOsG64I/QAXX/WE7q1ryB8x0QlIpNflhFNrhMe4jxhGEWQ9iZzYmIH7aIgQ6hqk/6pNEQ==", "dev": true, "dependencies": { "@vercel/build-utils": "6.8.2", "@vercel/go": "2.5.1", "@vercel/hydrogen": "0.0.64", - "@vercel/next": "3.9.0", + "@vercel/next": "3.9.2", "@vercel/node": "2.15.6", "@vercel/python": "3.1.60", "@vercel/redwood": "1.1.15", "@vercel/remix-builder": "1.8.18", "@vercel/ruby": "1.3.76", - "@vercel/static-build": "1.3.41" + "@vercel/static-build": "1.3.42" }, "bin": { "vc": "dist/index.js", diff --git a/package.json b/package.json index b5af2838..e6f5caa9 100644 --- a/package.json +++ b/package.json @@ -52,18 +52,18 @@ "@testing-library/preact": "^3.2.3", "@types/jest": "^29.5.2", "@types/json5": "^2.2.0", - "@types/node": "^20.4.4", + "@types/node": "^20.4.5", "@types/uuid": "^9.0.2", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.1.0", + "@typescript-eslint/eslint-plugin": "^6.2.0", + "@typescript-eslint/parser": "^6.2.0", "@vercel/node": "^2.15.6", - "astro": "^2.9.2", + "astro": "^2.9.3", "astro-icon": "^0.8.1", "autoprefixer": "^10.4.14", "classnames": "^2.3.2", "dayjs": "^1.11.9", "env-cmd": "^10.1.0", - "esbuild": "^0.18.16", + "esbuild": "^0.18.17", "esbuild-jest": "^0.5.0", "eslint": "^8.44.0", "eslint-plugin-astro": "^0.27.1", @@ -86,7 +86,7 @@ "lint-staged": "^13.2.3", "npm-run-all": "^4.1.5", "plausible-tracker": "^0.3.8", - "playwright": "^1.36.1", + "playwright": "^1.36.2", "postcss": "^8.4.27", "postcss-csso": "^6.0.1", "preact-render-to-string": "^6.1.0", @@ -112,7 +112,7 @@ "unist-util-is": "^6.0.0", "unist-util-replace-all-between": "^0.1.1", "unist-util-visit": "^5.0.0", - "vercel": "^31.0.4", + "vercel": "^31.1.1", "vite-plugin-svgr": "^3.2.0" }, "lint-staged": { diff --git a/postcss.config.cjs b/postcss.config.cjs index f22a06b3..76b60896 100644 --- a/postcss.config.cjs +++ b/postcss.config.cjs @@ -1,7 +1,4 @@ // @ts-nocheck module.exports = { - plugins: [ - require("autoprefixer"), - require("postcss-csso"), - ], + plugins: [require("autoprefixer"), require("postcss-csso")], }; diff --git a/src/components/banner-stickers/banner-stickers.ts b/src/components/banner-stickers/banner-stickers.ts index 9d76e751..556c271e 100644 --- a/src/components/banner-stickers/banner-stickers.ts +++ b/src/components/banner-stickers/banner-stickers.ts @@ -12,7 +12,7 @@ export type StickerInfo = { export async function createSticker( name: string, width: number = STICKER_SIZE, - height: number = STICKER_SIZE + height: number = STICKER_SIZE, ): Promise { const image = await getImage({ src: `/stickers/${name}.png`, diff --git a/src/components/button/button.tsx b/src/components/button/button.tsx index d3029c47..eb91a437 100644 --- a/src/components/button/button.tsx +++ b/src/components/button/button.tsx @@ -33,7 +33,7 @@ const ButtonWrapper = forwardRef( rightIcon, ...props }: ButtonProps, - ref: Ref + ref: Ref, ) => { const Wrapper: any = tag; @@ -49,13 +49,13 @@ const ButtonWrapper = forwardRef( {rightIcon &&
{rightIcon}
} ); - } + }, ); export const Button = forwardRef( ( { class: className = "", ...props }: ButtonProps, - ref: Ref + ref: Ref, ) => { return ( ); - } + }, ); export const LargeButton = forwardRef( ( { class: className = "", ...props }: ButtonProps, - ref: Ref + ref: Ref, ) => { return ( ); - } + }, ); type IconOnlyButtonProps = Omit< @@ -90,7 +90,7 @@ type IconOnlyButtonProps = Omit< export const IconOnlyButton = forwardRef( ( { class: className = "", children, ...props }: IconOnlyButtonProps, - ref: Ref + ref: Ref, ) => { return ( {children}
); - } + }, ); export const LargeIconOnlyButton = forwardRef( ( { class: className = "", children, ...props }: IconOnlyButtonProps, - ref: Ref + ref: Ref, ) => { return (
{children}
); - } + }, ); diff --git a/src/components/chip/chip.module.scss b/src/components/chip/chip.module.scss index 474b2a3f..77074bbc 100644 --- a/src/components/chip/chip.module.scss +++ b/src/components/chip/chip.module.scss @@ -55,7 +55,8 @@ outline-offset: 0; border-color: transparent; @include transition(color background-color box-shadow); - outline: var(--chip_focus-outline_color) solid var(--chip_focus-outline_width); + outline: var(--chip_focus-outline_color) solid + var(--chip_focus-outline_width); color: var(--chip_foreground-color); } diff --git a/src/components/chip/chip.tsx b/src/components/chip/chip.tsx index 9fc53a76..568947a4 100644 --- a/src/components/chip/chip.tsx +++ b/src/components/chip/chip.tsx @@ -24,5 +24,5 @@ export const Chip = forwardRef( {children} ); - } + }, ); diff --git a/src/components/collection-card/collection-card.module.scss b/src/components/collection-card/collection-card.module.scss index b713657e..9860a7ae 100644 --- a/src/components/collection-card/collection-card.module.scss +++ b/src/components/collection-card/collection-card.module.scss @@ -1,7 +1,6 @@ @import "src/tokens/index"; :root { - --collection-card_corner-radius: var(--corner-radius_xl); --collection-card_author_padding-top: var(--spc-3x); @@ -90,7 +89,8 @@ } } -.forwardIcon, .forwardIcon svg { +.forwardIcon, +.forwardIcon svg { height: 100%; width: 100%; } diff --git a/src/components/hero/hero.module.scss b/src/components/hero/hero.module.scss index 840c2e00..3500fa77 100644 --- a/src/components/hero/hero.module.scss +++ b/src/components/hero/hero.module.scss @@ -1,48 +1,48 @@ -@import "src/tokens/index"; - -.header { - align-items: center; - position: relative; -} - -.buttons { - gap: var(--spc-4x) var(--spc-6x); - padding: var(--spc-4x) 0; -} - -.bannerLogo { - display: none; -} - -.bannerLogoMobile { - display: block; - position: absolute; - top: calc(-1 * var(--site-spacing)); - left: calc(-1 * var(--site-spacing)); - right: calc(-1 * var(--site-spacing)); - z-index: -1; -} - -.bannerTextShadow { - text-shadow: - 0 0 5px var(--background_primary), - 0 0 6px var(--background_primary), - 0 0 8px var(--background_primary), - 0 0 8px var(--background_primary); -} - -@include from($desktopSmall) { - .header { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: var(--site-spacing); - } - - .bannerLogo { - display: block; - } - - .bannerLogoMobile { - display: none; - } -} +@import "src/tokens/index"; + +.header { + align-items: center; + position: relative; +} + +.buttons { + gap: var(--spc-4x) var(--spc-6x); + padding: var(--spc-4x) 0; +} + +.bannerLogo { + display: none; +} + +.bannerLogoMobile { + display: block; + position: absolute; + top: calc(-1 * var(--site-spacing)); + left: calc(-1 * var(--site-spacing)); + right: calc(-1 * var(--site-spacing)); + z-index: -1; +} + +.bannerTextShadow { + text-shadow: + 0 0 5px var(--background_primary), + 0 0 6px var(--background_primary), + 0 0 8px var(--background_primary), + 0 0 8px var(--background_primary); +} + +@include from($desktopSmall) { + .header { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: var(--site-spacing); + } + + .bannerLogo { + display: block; + } + + .bannerLogoMobile { + display: none; + } +} diff --git a/src/components/image/picture.tsx b/src/components/image/picture.tsx index 807304fb..51f791c4 100644 --- a/src/components/image/picture.tsx +++ b/src/components/image/picture.tsx @@ -3,26 +3,23 @@ import { JSX } from "preact"; interface PictureProps { picture: GetPictureResult; - alt: string, + alt: string; class?: string; imgAttrs?: JSX.HTMLAttributes; } export const Picture = ({ - picture, alt, + picture, + alt, class: className, imgAttrs, }: PictureProps) => { return ( - + {picture.sources.map((attrs) => ( ))} - {alt} + {alt} ); }; diff --git a/src/components/page-card/page-card.module.scss b/src/components/page-card/page-card.module.scss index 0869d4ef..d69fccda 100644 --- a/src/components/page-card/page-card.module.scss +++ b/src/components/page-card/page-card.module.scss @@ -1,203 +1,230 @@ -@import "src/tokens/index"; - -:root { - --page-card_container_corner-radius: calc(var(--site-spacing) * 2); - --page-card_container_padding: calc(var(--site-spacing) * 2); - --page-card_container_compound-padding: calc(var(--page-card_image_border_width) + var(--page-card_container_padding)); - --page-card_description_padding-top: var(--spc-4x); - - --page-card_image_size: 240px; - --page-card_image_border_width: 16px; - --page-card_image_inset: var(--spc-12x); - --page_card_image_corner-radius: 48px; - - --page-card_button-gap: var(--site-spacing); - - --page-card_image_border_color: var(--background_primary); - --page-card_container_background-color: var(--surface_primary_emphasis-none); - - --page-card_title_color: var(--foreground_emphasis-high); - --page-card_supporting-text_color: var(--foreground_emphasis-medium); - - @include from($tabletSmall) { - --page-card_container_padding: var(--spc-6x); - --page-card_image_size: 240px; - --page-card_max-width: 640px; - } - - @include from($tabletLarge) { - --page-card_container_padding: var(--spc-12x); - --page-card_image_size: 320px; - --page-card_max-width: 960px; - } - - @include from($desktopSmall) { - --page-card_container_padding: var(--spc-12x); - --page-card_image_inset: var(--spc-16x); - --page-card_image_size: 360px; - --page-card_max-width: 960px; - } -} - -.pageCardContainer { - background: var(--page-card_container_background-color); - display: grid; - border-radius: var(--page-card_container_corner-radius); - grid-template-columns: 1fr; - grid-row-gap: var(--page-card_container_padding); - padding: 0 var(--page-card_container_padding) var(--page-card_container_padding) var(--page-card_container_padding); - - margin-top: var(--page-card_image_inset); - - @include from($tabletSmall) { - max-width: var(--page-card_max-width); - grid-template-columns: auto 1fr; - grid-template-rows: auto auto auto; - grid-row-gap: var(--page-card_container_padding); - grid-column-gap: var(--page-card_container_padding); - padding: var(--page-card_container_padding) var(--page-card_container_compound-padding) var(--page-card_container_compound-padding) var(--page-card_container_compound-padding); - } - - @include from($tabletLarge) { - grid-template-columns: auto 1fr; - grid-template-rows: 1fr 1fr var(--page-card_container_padding) auto; - grid-row-gap: unset; - grid-column-gap: var(--page-card_container_padding); - padding: var(--page-card_container_padding) var(--page-card_container_compound-padding); - } - - @include from($desktopSmall) { - margin-top: unset; - grid-template-columns: auto 1fr; - grid-template-rows: auto auto 1fr auto; - grid-column-gap: var(--page-card_container_padding); - grid-row-gap: var(--page-card_description_padding-top); - padding: var(--page-card_container_padding) var(--page-card_container_compound-padding) var(--page-card_container_padding) 0; - } -} - -.imageContainer { - display: inline-block; - - margin-left: auto; - margin-right: auto; - margin-top: calc(0px - var(--page-card_image_inset)); - - @include from($tabletSmall) { - margin-left: unset; - margin-right: unset; - grid-row: 1/1; - grid-column: 1/1; - margin-top: calc(0px - var(--page-card_image_inset) - var(--page-card_container_padding)); - } - - @include from($tabletLarge) { - grid-row: 1/3; - grid-column: 1/1; - margin-top: calc(0px - var(--page-card_image_inset) - var(--page-card_container_padding)); - } - - @include from($desktopSmall) { - grid-row: 1/5; - grid-column: unset; - margin-top: unset; - margin-left: calc(0px - var(--page-card_image_inset)); - } -} - -.image { - height: var(--page-card_image_size); - width: var(--page-card_image_size); - border-style: solid; - border-radius: var(--page_card_image_corner-radius); - border-width: var(--page-card_image_border_width); - border-color: var(--page-card_image_border_color); - overflow: hidden; -} - -.title { - margin: 0; - color: var(--foreground_emphasis-high); - - @include from($tabletSmall) { - display: flex; - align-items: center; - padding-bottom: var(--page-card_container_padding); - } - - @include from($tabletLarge) { - display: flex; - align-items: flex-end; - padding-bottom: unset; - margin-bottom: var(--page-card_description_padding-top); - } - - @include from($desktopSmall) { - display: unset; - align-items: unset; - margin-bottom: unset; - margin-top: calc(var(--page-card_container_compound-padding) - var(--page-card_container_padding)); - } -} - -.description { - margin: 0; - color: var(--foreground_emphasis-medium); - - @include from($tabletSmall) { - grid-column: 1/3; - padding: 0 calc(var(--page-card_container_compound-padding) - var(--page-card_container_padding)); - } - - @include from($tabletLarge) { - grid-column: unset; - padding: unset; - } -} - -.pageCardSpacer { - display: none; - - @include from($tabletLarge) { - all: unset; - } -} - -.buttonsContainer { - display: flex; - flex-direction: column; - gap: var(--page-card_button-gap); - - @include from($tabletSmall) { - flex-direction: row; - grid-column: 1/3; - padding: 0 calc(var(--page-card_container_compound-padding) - var(--page-card_container_padding)); - } - - @include from($desktopSmall) { - grid-column: unset; - justify-content: space-between; - margin-bottom: calc(var(--page-card_container_compound-padding) - var(--page-card_container_padding)); - padding: unset; - } -} - -.buttonsContainer.twoButtons > * { - @include from($tabletSmall) { - flex-basis: 50%; - } - - @include from($desktopSmall) { - flex-basis: unset; - } -} - -.buttonsContainer:not(.twoButtons) > * { - @include from($tabletSmall) { - flex-basis: 100%; - } - - @include from($desktopSmall) { - flex-basis: unset; - } -} +@import "src/tokens/index"; + +:root { + --page-card_container_corner-radius: calc(var(--site-spacing) * 2); + --page-card_container_padding: calc(var(--site-spacing) * 2); + --page-card_container_compound-padding: calc( + var(--page-card_image_border_width) + var(--page-card_container_padding) + ); + --page-card_description_padding-top: var(--spc-4x); + + --page-card_image_size: 240px; + --page-card_image_border_width: 16px; + --page-card_image_inset: var(--spc-12x); + --page_card_image_corner-radius: 48px; + + --page-card_button-gap: var(--site-spacing); + + --page-card_image_border_color: var(--background_primary); + --page-card_container_background-color: var(--surface_primary_emphasis-none); + + --page-card_title_color: var(--foreground_emphasis-high); + --page-card_supporting-text_color: var(--foreground_emphasis-medium); + + @include from($tabletSmall) { + --page-card_container_padding: var(--spc-6x); + --page-card_image_size: 240px; + --page-card_max-width: 640px; + } + + @include from($tabletLarge) { + --page-card_container_padding: var(--spc-12x); + --page-card_image_size: 320px; + --page-card_max-width: 960px; + } + + @include from($desktopSmall) { + --page-card_container_padding: var(--spc-12x); + --page-card_image_inset: var(--spc-16x); + --page-card_image_size: 360px; + --page-card_max-width: 960px; + } +} + +.pageCardContainer { + background: var(--page-card_container_background-color); + display: grid; + border-radius: var(--page-card_container_corner-radius); + grid-template-columns: 1fr; + grid-row-gap: var(--page-card_container_padding); + padding: 0 var(--page-card_container_padding) + var(--page-card_container_padding) var(--page-card_container_padding); + + margin-top: var(--page-card_image_inset); + + @include from($tabletSmall) { + max-width: var(--page-card_max-width); + grid-template-columns: auto 1fr; + grid-template-rows: auto auto auto; + grid-row-gap: var(--page-card_container_padding); + grid-column-gap: var(--page-card_container_padding); + padding: var(--page-card_container_padding) + var(--page-card_container_compound-padding) + var(--page-card_container_compound-padding) + var(--page-card_container_compound-padding); + } + + @include from($tabletLarge) { + grid-template-columns: auto 1fr; + grid-template-rows: 1fr 1fr var(--page-card_container_padding) auto; + grid-row-gap: unset; + grid-column-gap: var(--page-card_container_padding); + padding: var(--page-card_container_padding) + var(--page-card_container_compound-padding); + } + + @include from($desktopSmall) { + margin-top: unset; + grid-template-columns: auto 1fr; + grid-template-rows: auto auto 1fr auto; + grid-column-gap: var(--page-card_container_padding); + grid-row-gap: var(--page-card_description_padding-top); + padding: var(--page-card_container_padding) + var(--page-card_container_compound-padding) + var(--page-card_container_padding) 0; + } +} + +.imageContainer { + display: inline-block; + + margin-left: auto; + margin-right: auto; + margin-top: calc(0px - var(--page-card_image_inset)); + + @include from($tabletSmall) { + margin-left: unset; + margin-right: unset; + grid-row: 1/1; + grid-column: 1/1; + margin-top: calc( + 0px - var(--page-card_image_inset) - var(--page-card_container_padding) + ); + } + + @include from($tabletLarge) { + grid-row: 1/3; + grid-column: 1/1; + margin-top: calc( + 0px - var(--page-card_image_inset) - var(--page-card_container_padding) + ); + } + + @include from($desktopSmall) { + grid-row: 1/5; + grid-column: unset; + margin-top: unset; + margin-left: calc(0px - var(--page-card_image_inset)); + } +} + +.image { + height: var(--page-card_image_size); + width: var(--page-card_image_size); + border-style: solid; + border-radius: var(--page_card_image_corner-radius); + border-width: var(--page-card_image_border_width); + border-color: var(--page-card_image_border_color); + overflow: hidden; +} + +.title { + margin: 0; + color: var(--foreground_emphasis-high); + + @include from($tabletSmall) { + display: flex; + align-items: center; + padding-bottom: var(--page-card_container_padding); + } + + @include from($tabletLarge) { + display: flex; + align-items: flex-end; + padding-bottom: unset; + margin-bottom: var(--page-card_description_padding-top); + } + + @include from($desktopSmall) { + display: unset; + align-items: unset; + margin-bottom: unset; + margin-top: calc( + var(--page-card_container_compound-padding) - + var(--page-card_container_padding) + ); + } +} + +.description { + margin: 0; + color: var(--foreground_emphasis-medium); + + @include from($tabletSmall) { + grid-column: 1/3; + padding: 0 + calc( + var(--page-card_container_compound-padding) - + var(--page-card_container_padding) + ); + } + + @include from($tabletLarge) { + grid-column: unset; + padding: unset; + } +} + +.pageCardSpacer { + display: none; + + @include from($tabletLarge) { + all: unset; + } +} + +.buttonsContainer { + display: flex; + flex-direction: column; + gap: var(--page-card_button-gap); + + @include from($tabletSmall) { + flex-direction: row; + grid-column: 1/3; + padding: 0 + calc( + var(--page-card_container_compound-padding) - + var(--page-card_container_padding) + ); + } + + @include from($desktopSmall) { + grid-column: unset; + justify-content: space-between; + margin-bottom: calc( + var(--page-card_container_compound-padding) - + var(--page-card_container_padding) + ); + padding: unset; + } +} + +.buttonsContainer.twoButtons > * { + @include from($tabletSmall) { + flex-basis: 50%; + } + + @include from($desktopSmall) { + flex-basis: unset; + } +} + +.buttonsContainer:not(.twoButtons) > * { + @include from($tabletSmall) { + flex-basis: 100%; + } + + @include from($desktopSmall) { + flex-basis: unset; + } +} diff --git a/src/components/pagination/pagination-popover.test.tsx b/src/components/pagination/pagination-popover.test.tsx index 1e870b8d..3ba7a474 100644 --- a/src/components/pagination/pagination-popover.test.tsx +++ b/src/components/pagination/pagination-popover.test.tsx @@ -8,7 +8,7 @@ test("when the menu button is clicked, the menu popup is opened", async () => { currentPage: 2, lastPage: 11, }} - /> + />, ); // click the "..." menu @@ -27,7 +27,7 @@ test("when '+' is clicked, the page number is incremented", async () => { currentPage: 2, lastPage: 11, }} - /> + />, ); // click the "..." menu @@ -54,7 +54,7 @@ test("when '-' is clicked, the page number is decremented", async () => { currentPage: 2, lastPage: 11, }} - /> + />, ); // click the "..." menu @@ -84,7 +84,7 @@ test("when 'Go to page' is clicked, softNavigate is invoked with the input page }} getPageHref={(pageNum: number) => `./${pageNum}`} softNavigate={softNavigate} - /> + />, ); // click the "..." menu diff --git a/src/components/pagination/pagination-popover.tsx b/src/components/pagination/pagination-popover.tsx index e0525f01..9cee821c 100644 --- a/src/components/pagination/pagination-popover.tsx +++ b/src/components/pagination/pagination-popover.tsx @@ -21,7 +21,7 @@ import { DOMProps } from "@react-types/shared"; function PopupContents( props: Pick & { close: () => void; - } + }, ) { const [count, setCount] = useState(props.page.currentPage); return ( @@ -123,7 +123,7 @@ function PaginationPopover({ popoverRef, triggerRef, }, - state + state, ); /* Setup dialog */ @@ -167,7 +167,7 @@ function PaginationPopover({ } export function PaginationMenuAndPopover( - props: Pick + props: Pick, ) { /* Setup trigger */ const triggerRef = useRef(null); @@ -175,7 +175,7 @@ export function PaginationMenuAndPopover( const { triggerProps, overlayProps } = useOverlayTrigger( { type: "dialog" }, state, - triggerRef + triggerRef, ); return ( diff --git a/src/components/pagination/pagination.test.tsx b/src/components/pagination/pagination.test.tsx index c7fb5562..cfa03526 100644 --- a/src/components/pagination/pagination.test.tsx +++ b/src/components/pagination/pagination.test.tsx @@ -1,5 +1,5 @@ import { render } from "@testing-library/preact"; -import { Pagination } from './pagination'; +import { Pagination } from "./pagination"; test("Pagination renders", () => { const { baseElement, getByText } = render( @@ -8,7 +8,7 @@ test("Pagination renders", () => { currentPage: 3, lastPage: 8, }} - /> + />, ); expect(baseElement).toBeInTheDocument(); @@ -22,7 +22,7 @@ test("when there is only one page, nothing is rendered", () => { currentPage: 1, lastPage: 1, }} - /> + />, ); expect(container.childNodes).toHaveLength(0); @@ -35,7 +35,7 @@ test("when there is more than one page, the pages are rendered", () => { currentPage: 1, lastPage: 2, }} - /> + />, ); expect(container.childNodes).not.toHaveLength(0); @@ -50,7 +50,7 @@ test("when page 1 is selected, its button has the selected state", () => { currentPage: 1, lastPage: 11, }} - /> + />, ); const button1 = getByText("1"); @@ -67,7 +67,7 @@ test("when the previous button is clicked, softNavigate is called for the previo lastPage: 11, }} softNavigate={softNavigate} - /> + />, ); const previous = getByTestId("pagination-previous"); @@ -86,7 +86,7 @@ test("when the next button is clicked, softNavigate is called for the next page" lastPage: 11, }} softNavigate={softNavigate} - /> + />, ); const next = getByTestId("pagination-next"); @@ -105,7 +105,7 @@ test("when a page button is clicked, softNavigate is called for its page", () => lastPage: 11, }} softNavigate={softNavigate} - /> + />, ); const button5 = getByText("5"); diff --git a/src/components/pagination/pagination.tsx b/src/components/pagination/pagination.tsx index a7dd94c8..71b91e1e 100644 --- a/src/components/pagination/pagination.tsx +++ b/src/components/pagination/pagination.tsx @@ -3,7 +3,10 @@ import forward from "src/icons/arrow_right.svg?raw"; import back from "src/icons/arrow_left.svg?raw"; import { PaginationMenuAndPopover } from "components/pagination/pagination-popover"; import { useEffect, useState } from "preact/hooks"; -import { PaginationButtonProps, PaginationProps } from "components/pagination/types"; +import { + PaginationButtonProps, + PaginationProps, +} from "components/pagination/types"; import { usePagination } from "./use-pagination"; import { onSoftNavClick } from "./on-click-base"; @@ -14,11 +17,18 @@ function PaginationButton({ selected, softNavigate, }: PaginationButtonProps) { - const pageOptionalMin = Math.min(Math.max(1, pageInfo.currentPage - 1), pageInfo.lastPage - 3); + const pageOptionalMin = Math.min( + Math.max(1, pageInfo.currentPage - 1), + pageInfo.lastPage - 3, + ); const isOptional = pageNum < pageOptionalMin || pageNum > pageOptionalMin + 3; return ( -
  • +
  • + props: Pick, ) { const [shouldRender, setShouldRender] = useState(false); diff --git a/src/components/pagination/use-pagination.ts b/src/components/pagination/use-pagination.ts index 6b9bc134..32355905 100644 --- a/src/components/pagination/use-pagination.ts +++ b/src/components/pagination/use-pagination.ts @@ -16,7 +16,7 @@ export function usePagination(page: PageInfo) { const firstPageNum = Math.max( 2, - Math.min(page.lastPage - PAGE_BUTTON_COUNT, page.currentPage - 1) + Math.min(page.lastPage - PAGE_BUTTON_COUNT, page.currentPage - 1), ); const pages = [ @@ -32,7 +32,7 @@ export function usePagination(page: PageInfo) { page.lastPage, ].filter( // ensure that displayed pages are within the desired range - (i) => (i === "..." && isDotsEnabled) || (+i > 0 && +i <= page.lastPage) + (i) => (i === "..." && isDotsEnabled) || (+i > 0 && +i <= page.lastPage), ); return { diff --git a/src/components/post-card/post-card-grid.tsx b/src/components/post-card/post-card-grid.tsx index 2416008a..f0240fcf 100644 --- a/src/components/post-card/post-card-grid.tsx +++ b/src/components/post-card/post-card-grid.tsx @@ -26,9 +26,12 @@ export function PostCardGrid({ postsToDisplay, ...props }: PostGridProps) { unicornProfilePicMap={props.unicornProfilePicMap} /> ) : ( - + ); })} - ) + ); } diff --git a/src/components/post-card/post-card.module.scss b/src/components/post-card/post-card.module.scss index b0932230..36c9331b 100644 --- a/src/components/post-card/post-card.module.scss +++ b/src/components/post-card/post-card.module.scss @@ -119,7 +119,8 @@ text-decoration: none; } -.authorName:hover, .authorName:focus { +.authorName:hover, +.authorName:focus { text-decoration: underline; } diff --git a/src/components/related-posts/related-posts-card.module.scss b/src/components/related-posts/related-posts-card.module.scss index 5eed5d3c..68d475f5 100644 --- a/src/components/related-posts/related-posts-card.module.scss +++ b/src/components/related-posts/related-posts-card.module.scss @@ -8,7 +8,7 @@ gap: var(--spc-1x); border-radius: var(--corner-radius_m); text-decoration: none; - + @include transition(background-color); } diff --git a/src/components/select/select.module.scss b/src/components/select/select.module.scss index fef0bb1a..70ce6c41 100644 --- a/src/components/select/select.module.scss +++ b/src/components/select/select.module.scss @@ -11,7 +11,9 @@ --popup_item_padding: var(--spc-2x); --popup_item_label_padding: var(--spc-1x); --popup_item_min-height: var(--min-target-size_m); - --popup_item_corner-radius: calc(var(--popup_corner-radius) - var(--popup_padding)); + --popup_item_corner-radius: calc( + var(--popup_corner-radius) - var(--popup_padding) + ); --popup_item_icon-size: var(--icon-size_dense); --popup_item_background-color_hovered: var(--surface_primary_emphasis-medium); diff --git a/src/components/select/select.tsx b/src/components/select/select.tsx index 9b34d0e4..642631e1 100644 --- a/src/components/select/select.tsx +++ b/src/components/select/select.tsx @@ -7,9 +7,9 @@ import { useSelect, AriaListBoxOptions, DismissButton, - Overlay, - usePopover, - AriaPopoverProps, + Overlay, + usePopover, + AriaPopoverProps, } from "react-aria"; import { PropsWithChildren } from "preact/compat"; import down from "src/icons/chevron_down.svg?raw"; @@ -21,25 +21,29 @@ import { Node } from "@react-types/shared"; export { Item, Section } from "react-stately"; -interface PopoverProps extends Omit { +interface PopoverProps extends Omit { state: OverlayTriggerState; } -function Popover({ children, state, ...props }: PropsWithChildren) { +function Popover({ + children, + state, + ...props +}: PropsWithChildren) { const popoverRef = useRef(null); - const { popoverProps, underlayProps } = usePopover({ - ...props, - offset: 8, - popoverRef - }, state); + const { popoverProps, underlayProps } = usePopover( + { + ...props, + offset: 8, + popoverRef, + }, + state, + ); return (
    -
    +
    {children} @@ -65,34 +69,36 @@ export function Select({ const { labelProps, triggerProps, valueProps, menuProps } = useSelect( props, state, - ref + ref, ); return ( -
    +
    Post sort order
    - - {/* onPress and onPressStart isn't working for Preact */} + + {/* onPress and onPressStart isn't working for Preact */} {state.isOpen && ( - - - + + + )}
    ); @@ -145,7 +151,7 @@ export function Option({ item, state }: OptionProps) { key: item.key, }, state, - ref + ref, ); return ( @@ -154,7 +160,9 @@ export function Option({ item, state }: OptionProps) { ref={ref} class={`${styles.option} ${isSelected ? styles.selected : ""}`} > - {item.rendered} + + {item.rendered} + {isSelected && ( ; -export function SubHeader({ tag, children, text, class: className, ...props }: SubHeaderProps) { - const Heading = (props: any) => createElement(tag, { - ...props, - }, props.children); +export function SubHeader({ + tag, + children, + text, + class: className, + ...props +}: SubHeaderProps) { + const Heading = (props: any) => + createElement( + tag, + { + ...props, + }, + props.children, + ); - return ( -
    - !!c).join(" ")}>{text} - {children} -
    - ); + return ( +
    + !!c) + .join(" ")} + > + {text} + + {children} +
    + ); } diff --git a/src/env.d.ts b/src/env.d.ts index dc790a86..92317955 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -1 +1 @@ -/// \ No newline at end of file +/// diff --git a/src/global.scss b/src/global.scss index 1f5a966d..fd64f7fc 100644 --- a/src/global.scss +++ b/src/global.scss @@ -68,7 +68,8 @@ body { margin: 0; padding: 0; color: var(--foreground_emphasis-high); - transition: color $animStyle $animSpeed, + transition: + color $animStyle $animSpeed, background-color $animStyle $animSpeed; } @@ -94,7 +95,8 @@ body { height: auto; } -img.circleImg, .circleImg img { +img.circleImg, +.circleImg img { flex-shrink: 0; flex-grow: 0; border-radius: 50%; diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index 4c5dd372..9c845c81 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -5,7 +5,7 @@ import { ExtendedPostInfo } from "types/index"; const postImportResult = import.meta.glob>( "../../content/blog/**/*.md", - { eager: true } + { eager: true }, ); const posts = Object.values(postImportResult); @@ -30,7 +30,7 @@ export const get = () => { .sort((a, b) => new Date(b.frontmatter.published) > new Date(a.frontmatter.published) ? 1 - : -1 + : -1, ) .forEach((post) => { const nodeUrl = `${siteUrl}/posts/${post.frontmatter.slug}`; diff --git a/src/styles/markdown/blockquote.scss b/src/styles/markdown/blockquote.scss index 91fd3bf3..4a8537a8 100644 --- a/src/styles/markdown/blockquote.scss +++ b/src/styles/markdown/blockquote.scss @@ -8,12 +8,14 @@ blockquote:not([class]) { position: relative; margin: var(--site-spacing) 0; padding: 0; - padding-left: calc(var(--blockquote_border-width) + var(--blockquote_padding-start)); + padding-left: calc( + var(--blockquote_border-width) + var(--blockquote_padding-start) + ); color: var(--foreground_emphasis-medium); &::before { - content: ''; + content: ""; display: block; position: absolute; left: 0; diff --git a/src/styles/markdown/codeblock.scss b/src/styles/markdown/codeblock.scss index 6babf590..306d05aa 100644 --- a/src/styles/markdown/codeblock.scss +++ b/src/styles/markdown/codeblock.scss @@ -4,7 +4,10 @@ :root { --code-block_padding: var(--spc-2x); --code-block_corner-radius: var(--corner-radius_l); - --code-block_inner-corner-radius: calc(var(--code-block_corner-radius) - var(--code-block_padding) - var(--code-block_border_width)); + --code-block_inner-corner-radius: calc( + var(--code-block_corner-radius) - var(--code-block_padding) - + var(--code-block_border_width) + ); --code-block_header_gap: var(--spc-4x); --code-block_header_min-height: var(--min-target-size_xl); @@ -30,7 +33,9 @@ pre.shiki { color: var(--code-block_header_title_color); - min-height: calc(var(--code-block_header_min-height) - 2*var(--code-block_padding)); + min-height: calc( + var(--code-block_header_min-height) - 2 * var(--code-block_padding) + ); padding: 0 var(--code-block_header_title_margin-horizontal); display: flex; diff --git a/src/styles/markdown/embed.scss b/src/styles/markdown/embed.scss index c780ea22..bb45cf16 100644 --- a/src/styles/markdown/embed.scss +++ b/src/styles/markdown/embed.scss @@ -5,13 +5,17 @@ --embed_header_gap: var(--spc-2x); --embed_corner-radius: var(--corner-radius_l); - --embed-iframe_margin: calc( var(--embed_header_padding) / 2 ); - --embed-iframe_corner-radius: calc( var(--embed_corner-radius) - var(--embed-iframe_margin) ); + --embed-iframe_margin: calc(var(--embed_header_padding) / 2); + --embed-iframe_corner-radius: calc( + var(--embed_corner-radius) - var(--embed-iframe_margin) + ); --embed-iframe_border-width: var(--border-width_s); --embed_background-color: var(--surface_primary_emphasis-none); --embed_favicon_container_size: var(--min-target-size_m); - --embed_favicon_container_background-color: var(--surface_primary_emphasis-low); + --embed_favicon_container_background-color: var( + --surface_primary_emphasis-low + ); --embed_favicon_icon-size: var(--icon-size_regular); --embed_favicon_icon_color: var(--primary_on-variant); --embed_iframe_background-color: var(--surface_primary_emphasis-low); @@ -41,12 +45,16 @@ width: var(--embed_favicon_container_size); height: var(--embed_favicon_container_size); flex-shrink: 0; - padding: calc((var(--embed_favicon_container_size) - var(--embed_favicon_icon-size)) / 2); + padding: calc( + (var(--embed_favicon_container_size) - var(--embed_favicon_icon-size)) / + 2 + ); background-color: var(--embed_favicon_container_background-color); border-radius: 50%; - & picture, & img { + & picture, + & img { width: var(--embed_favicon_icon-size); height: var(--embed_favicon_icon-size); } @@ -56,12 +64,12 @@ flex: 1; min-width: 0; - &> p { + & > p { @extend .text-style-body-medium-bold; margin: 0; } - &> a { + & > a { @extend .text-style-body-small-bold; white-space: nowrap; overflow: hidden; @@ -89,7 +97,8 @@ &__placeholder { background-color: var(--embed_iframe_background-color); - border: var(--embed-iframe_border-width) solid var(--embed_iframe_border_color); + border: var(--embed-iframe_border-width) solid + var(--embed_iframe_border_color); border-radius: var(--embed-iframe_corner-radius); margin: var(--embed-iframe_margin); @@ -99,7 +108,7 @@ margin-top: 0; } - &> .button { + & > .button { position: absolute; top: 50%; left: 50%; @@ -107,10 +116,11 @@ } } - &> iframe { + & > iframe { box-sizing: border-box; display: block; - border: var(--embed-iframe_border-width) solid var(--embed_iframe_border_color); + border: var(--embed-iframe_border-width) solid + var(--embed_iframe_border_color); border-radius: var(--embed-iframe_corner-radius); margin: var(--embed-iframe_margin); overflow: hidden; diff --git a/src/styles/markdown/hints.scss b/src/styles/markdown/hints.scss index d090926c..6377f4c0 100644 --- a/src/styles/markdown/hints.scss +++ b/src/styles/markdown/hints.scss @@ -9,7 +9,9 @@ --hint-container_corner-radius_expanded: var(--corner-radius_m); // We calculate the content radius off of two tokens so they update accordingly if any of the values is changed - --hint-content_corner-radius: calc(var(--hint-container_corner-radius_expanded) - var(--hint-container_padding)); + --hint-content_corner-radius: calc( + var(--hint-container_corner-radius_expanded) - var(--hint-container_padding) + ); --hint-content_background-color: var(--background_primary); --hint-content_padding: var(--spc-4x); @@ -20,8 +22,12 @@ --hint-header_gap: var(--spc-2x); --hint-container_background-color: var(--surface_primary_emphasis-low); - --hint-container_background-color_hovered: var(--surface_primary_emphasis-medium); - --hint-container_background-color_pressed: var(--surface_primary_emphasis-high); + --hint-container_background-color_hovered: var( + --surface_primary_emphasis-medium + ); + --hint-container_background-color_pressed: var( + --surface_primary_emphasis-high + ); --hint-container_background-color_focused: var(--background_focus); --hint-container_foreground-color: var(--foreground_emphasis-high); @@ -41,7 +47,7 @@ .hint { margin: var(--site-spacing) 0; - &> .hint__container { + & > .hint__container { display: inline-block; overflow: hidden; max-width: 100%; @@ -55,9 +61,9 @@ transform: rotateZ(180deg); } - &> .hint__title { + & > .hint__title { &::marker { - content: ''; + content: ""; } display: flex; @@ -74,7 +80,7 @@ outline: none !important; } - &> .hint__content { + & > .hint__content { margin: var(--hint-container_padding); background-color: var(--hint-content_background-color); border-radius: var(--hint-content_corner-radius); @@ -82,12 +88,12 @@ @include transition(background-color); - &> *:first-child { + & > *:first-child { margin-top: 0; padding-top: 0; } - &> *:last-child { + & > *:last-child { margin-bottom: 0; padding-bottom: 0; } @@ -107,7 +113,8 @@ @supports selector(:has(*)) { &:has(.hint__title:focus-visible) { background-color: var(--hint-container_background-color_focused); - outline: var(--hint_focus-outline_width) solid var(--hint_focus-outline_color); + outline: var(--hint_focus-outline_width) solid + var(--hint_focus-outline_color); } } @@ -117,7 +124,8 @@ @supports not selector(:has(*)) { &:focus-within { background-color: var(--hint-container_background-color_focused); - outline: var(--hint_focus-outline_width) solid var(--hint_focus-outline_color); + outline: var(--hint_focus-outline_width) solid + var(--hint_focus-outline_color); } } } diff --git a/src/styles/markdown/lists.scss b/src/styles/markdown/lists.scss index 053b328f..8ed764eb 100644 --- a/src/styles/markdown/lists.scss +++ b/src/styles/markdown/lists.scss @@ -8,7 +8,10 @@ // should match public/icons/list-bowtie-*.svg --list_bowtie_size: 16px; - --list_bowtie_top: calc((var(--list_item_padding-vertical) / 2) + ((var(--p_medium_line-height) - var(--list_bowtie_size)) / 2)) + --list_bowtie_top: calc( + (var(--list_item_padding-vertical) / 2) + + ((var(--p_medium_line-height) - var(--list_bowtie_size)) / 2) + ); } .post-body ul:not([class]) { @@ -17,16 +20,20 @@ padding: calc(var(--list_item_padding-vertical) / 2) 0; padding-left: var(--list_padding-start); - &> li { - background: url('/icons/list-bowtie-light.svg') no-repeat 0 var(--list_bowtie_top); + & > li { + background: url("/icons/list-bowtie-light.svg") no-repeat 0 + var(--list_bowtie_top); padding: calc(var(--list_item_padding-vertical) / 2) 0; - padding-left: calc(var(--list_bowtie_size) + var(--list_item_padding-start)); + padding-left: calc( + var(--list_bowtie_size) + var(--list_item_padding-start) + ); @include darkTheme { - background: url('/icons/list-bowtie-dark.svg') no-repeat 0 var(--list_bowtie_top); + background: url("/icons/list-bowtie-dark.svg") no-repeat 0 + var(--list_bowtie_top); } - &> *:first-child { + & > *:first-child { margin-top: 0; } } diff --git a/src/styles/markdown/table.scss b/src/styles/markdown/table.scss index 2993f759..4a9977bb 100644 --- a/src/styles/markdown/table.scss +++ b/src/styles/markdown/table.scss @@ -7,7 +7,9 @@ --table_header_padding: var(--spc-3x); --table_grid-wrapper_cell-gap: var(--border-width_s); - --table_grid-wrapper_corner-radius: calc(var(--table_corner-radius) - var(--table_padding-horizontal)); + --table_grid-wrapper_corner-radius: calc( + var(--table_corner-radius) - var(--table_padding-horizontal) + ); --table_cell_padding-horizontal: var(--spc-3x); --table_cell_padding-vertical: var(--spc-2x); @@ -101,7 +103,7 @@ thead { position: relative; &:not(:last-child)::after { - content: ''; + content: ""; display: block; position: absolute; top: 50%; @@ -121,17 +123,31 @@ tbody { border-radius: var(--table_grid-wrapper_corner-radius); td { - padding: var(--table_cell_padding-vertical) var(--table_cell_padding-horizontal); - background: linear-gradient(var(--table_cell_background-color), var(--table_cell_background-color)), - linear-gradient(var(--table_grid-wrapper_background-color), var(--table_grid-wrapper_background-color)); + padding: var(--table_cell_padding-vertical) + var(--table_cell_padding-horizontal); + background: linear-gradient( + var(--table_cell_background-color), + var(--table_cell_background-color) + ), + linear-gradient( + var(--table_grid-wrapper_background-color), + var(--table_grid-wrapper_background-color) + ); - border: var(--table_grid-wrapper_cell-gap) solid var(--table_grid-wrapper_background-color); + border: var(--table_grid-wrapper_cell-gap) solid + var(--table_grid-wrapper_background-color); } tr:nth-child(even) { td { - background: linear-gradient(var(--table_cell-alternate_background-color), var(--table_cell-alternate_background-color)), - linear-gradient(var(--table_grid-wrapper_background-color), var(--table_grid-wrapper_background-color)); + background: linear-gradient( + var(--table_cell-alternate_background-color), + var(--table_cell-alternate_background-color) + ), + linear-gradient( + var(--table_grid-wrapper_background-color), + var(--table_grid-wrapper_background-color) + ); } } @@ -152,6 +168,7 @@ tbody { } } -th > code, td > code { +th > code, +td > code { word-break: break-word; } diff --git a/src/styles/markdown/tabs.scss b/src/styles/markdown/tabs.scss index cf2eefb2..85c996c3 100644 --- a/src/styles/markdown/tabs.scss +++ b/src/styles/markdown/tabs.scss @@ -50,7 +50,8 @@ user-select: none; } -.tabs__tab[aria-selected="true"], .tabs__tab[aria-selected=""] { +.tabs__tab[aria-selected="true"], +.tabs__tab[aria-selected=""] { background-color: var(--tab_background-color_selected); color: var(--tab_foreground-color_selected); } @@ -76,7 +77,8 @@ background-color: var(--tabbed-wrapper_background-color); } -.tabs__tab-panel[aria-hidden="true"], .tabs__tab-panel[aria-hidden=""] { +.tabs__tab-panel[aria-hidden="true"], +.tabs__tab-panel[aria-hidden=""] { display: none; } @@ -111,7 +113,8 @@ grid-row-start: 2; grid-column: 1 / 3; - &[aria-hidden="true"], &[aria-hidden=""] { + &[aria-hidden="true"], + &[aria-hidden=""] { display: block; visibility: hidden; } diff --git a/src/styles/markdown/tooltips.scss b/src/styles/markdown/tooltips.scss index 33d9e24d..13a81d8c 100644 --- a/src/styles/markdown/tooltips.scss +++ b/src/styles/markdown/tooltips.scss @@ -31,14 +31,14 @@ align-items: center; gap: var(--tooltip_icon-margin); - &> svg { + & > svg { padding: var(--icon-size-dense-padding); width: var(--tooltip_icon-size); height: var(--tooltip_icon-size); color: var(--tooltip_icon-color); } - &> p { + & > p { @extend .text-style-body-medium-bold; margin: 0; } @@ -48,18 +48,16 @@ padding-left: calc(var(--tooltip_icon-size) + var(--tooltip_icon-margin)); margin-top: var(--tooltip_desc-gap); - &> * { + & > * { @extend .text-style-body-small; } - &> *:first-child { + & > *:first-child { margin-top: 0; } - &> *:last-child { + & > *:last-child { margin-bottom: 0; } } } - - diff --git a/src/styles/post-body.scss b/src/styles/post-body.scss index 1d2c08f8..5defc465 100644 --- a/src/styles/post-body.scss +++ b/src/styles/post-body.scss @@ -57,16 +57,21 @@ color: var(--foreground_emphasis-high); - h1, .text-style-headline-1, - h2, .text-style-headline-2, - h3, .text-style-headline-3, - h4, .text-style-headline-4, - h5, .text-style-headline-5, - h6, .text-style-headline-6 { + h1, + .text-style-headline-1, + h2, + .text-style-headline-2, + h3, + .text-style-headline-3, + h4, + .text-style-headline-4, + h5, + .text-style-headline-5, + h6, + .text-style-headline-6 { color: var(--foreground_emphasis-high); } - // Fix autolink-headings anchors positioning .anchor { line-height: 1; @@ -135,7 +140,8 @@ background-color: #eee; border-radius: 3px; border: 1px solid #b4b4b4; - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), + box-shadow: + 0 1px 1px rgba(0, 0, 0, 0.2), 0 2px 0 0 rgba(255, 255, 255, 0.7) inset; color: #333; display: inline-block; diff --git a/src/styles/text-styles.scss b/src/styles/text-styles.scss index 8e70cb7f..cc89aac8 100644 --- a/src/styles/text-styles.scss +++ b/src/styles/text-styles.scss @@ -1,28 +1,32 @@ @import "src/tokens/index"; @font-face { - font-family: 'Figtree'; - src: url('/fonts/Figtree/Figtree-VariableFont_wght.ttf') format("truetype-variations"); + font-family: "Figtree"; + src: url("/fonts/Figtree/Figtree-VariableFont_wght.ttf") + format("truetype-variations"); font-weight: 1 999; } @font-face { - font-family: 'Figtree'; + font-family: "Figtree"; font-style: italic; - src: url('/fonts/Figtree/Figtree-Italic-VariableFont_wght.ttf') format("truetype-variations"); + src: url("/fonts/Figtree/Figtree-Italic-VariableFont_wght.ttf") + format("truetype-variations"); font-weight: 1 999; } @font-face { - font-family: 'Roboto Mono'; - src: url('/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf') format("truetype-variations"); + font-family: "Roboto Mono"; + src: url("/fonts/Roboto_Mono/RobotoMono-VariableFont_wght.ttf") + format("truetype-variations"); font-weight: 1 999; } @font-face { - font-family: 'Roboto Mono'; + font-family: "Roboto Mono"; font-style: italic; - src: url('/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf') format("truetype-variations"); + src: url("/fonts/Roboto_Mono/RobotoMono-Italic-VariableFont_wght.ttf") + format("truetype-variations"); font-weight: 1 999; } @@ -35,49 +39,56 @@ font-family: var(--uu-font-family); } -h1, .text-style-headline-1 { +h1, +.text-style-headline-1 { font-family: var(--uu-font-family); font-size: var(--h1_font-size); font-weight: var(--weight_black); line-height: var(--h1_line-height); } -h2, .text-style-headline-2 { +h2, +.text-style-headline-2 { font-family: var(--uu-font-family); font-size: var(--h2_font-size); font-weight: var(--weight_extrabold); line-height: var(--h2_line-height); } -h3, .text-style-headline-3 { +h3, +.text-style-headline-3 { font-family: var(--uu-font-family); font-size: var(--h3_font-size); font-weight: var(--weight_bold); line-height: var(--h3_line-height); } -h4, .text-style-headline-4 { +h4, +.text-style-headline-4 { font-family: var(--uu-font-family); font-size: var(--h4_font-size); font-weight: var(--weight_bold); line-height: var(--h4_line-height); } -h5, .text-style-headline-5 { +h5, +.text-style-headline-5 { font-family: var(--uu-font-family); font-size: var(--h5_font-size); font-weight: var(--weight_bold); line-height: var(--h5_line-height); } -h6, .text-style-headline-6 { +h6, +.text-style-headline-6 { font-family: var(--uu-font-family); font-size: var(--h6_font-size); font-weight: var(--weight_bold); line-height: var(--h6_line-height); } -p, .text-style-body-large { +p, +.text-style-body-large { font-family: var(--uu-font-family); font-size: var(--p_large_font-size); font-weight: var(--weight_regular); @@ -124,7 +135,8 @@ p, .text-style-body-large { margin: 0; } -button, .text-style-button-regular { +button, +.text-style-button-regular { font-family: var(--uu-font-family); font-size: var(--button_regular_font-size); font-weight: var(--weight_semibold); @@ -132,7 +144,9 @@ button, .text-style-button-regular { margin: 0; } -pre, code, .text-style-code { +pre, +code, +.text-style-code { @extend .text-style-body-large; font-family: var(--uu-font-family-code); } diff --git a/src/styles/variables/border_widths.scss b/src/styles/variables/border_widths.scss index 413389ef..c2bf0e0f 100644 --- a/src/styles/variables/border_widths.scss +++ b/src/styles/variables/border_widths.scss @@ -1,7 +1,7 @@ -:root { - --border-width_s: 1px; - --border-width_m: 2px; - --border-width_l: 4px; - --border-width_xl: 8px; - --border-width_focus: var(--border-width_l); -} +:root { + --border-width_s: 1px; + --border-width_m: 2px; + --border-width_l: 4px; + --border-width_xl: 8px; + --border-width_focus: var(--border-width_l); +} diff --git a/src/styles/variables/corner_radius.scss b/src/styles/variables/corner_radius.scss index 4e4c0d60..4997fa40 100644 --- a/src/styles/variables/corner_radius.scss +++ b/src/styles/variables/corner_radius.scss @@ -1,7 +1,7 @@ -:root { - --corner-radius_s: 8px; - --corner-radius_m: 16px; - --corner-radius_l: 24px; - --corner-radius_xl: 32px; - --corner-radius_circular: 9999px; -} +:root { + --corner-radius_s: 8px; + --corner-radius_m: 16px; + --corner-radius_l: 24px; + --corner-radius_xl: 32px; + --corner-radius_circular: 9999px; +} diff --git a/src/styles/variables/fonts.scss b/src/styles/variables/fonts.scss index 6a9a3ab9..713b692c 100644 --- a/src/styles/variables/fonts.scss +++ b/src/styles/variables/fonts.scss @@ -1,108 +1,106 @@ @import "src/tokens/index"; :root { - --uu-font-family: "Figtree", "Arial", "Roboto", sans-serif; - --uu-font-family-code: "Roboto Mono", monospace; - --weight_regular: 400; - --weight_semibold: 600; - --weight_bold: 700; - --weight_extrabold: 800; - --weight_black: 900; + --uu-font-family: "Figtree", "Arial", "Roboto", sans-serif; + --uu-font-family-code: "Roboto Mono", monospace; + --weight_regular: 400; + --weight_semibold: 600; + --weight_bold: 700; + --weight_extrabold: 800; + --weight_black: 900; - --h1_font-size: #{pxToRem(32)}; - --h1_line-height: 100%; - --h1_block-padding-top: #{pxToRem(16)}; - --h1_block-padding-bottom: #{pxToRem(16)}; + --h1_font-size: #{pxToRem(32)}; + --h1_line-height: 100%; + --h1_block-padding-top: #{pxToRem(16)}; + --h1_block-padding-bottom: #{pxToRem(16)}; - --h2_font-size: #{pxToRem(28)}; - --h2_line-height: #{pxToRem(32)}; - --h2_block-padding-top: #{pxToRem(16)}; - --h2_block-padding-bottom: #{pxToRem(8)}; + --h2_font-size: #{pxToRem(28)}; + --h2_line-height: #{pxToRem(32)}; + --h2_block-padding-top: #{pxToRem(16)}; + --h2_block-padding-bottom: #{pxToRem(8)}; - --h3_font-size: #{pxToRem(24)}; - --h3_line-height: #{pxToRem(28)}; - --h3_block-padding-top: #{pxToRem(16)}; - --h3_block-padding-bottom: #{pxToRem(4)}; + --h3_font-size: #{pxToRem(24)}; + --h3_line-height: #{pxToRem(28)}; + --h3_block-padding-top: #{pxToRem(16)}; + --h3_block-padding-bottom: #{pxToRem(4)}; - --h4_font-size: #{pxToRem(22)}; - --h4_line-height: #{pxToRem(24)}; - --h4_block-padding-top: #{pxToRem(16)}; - --h4_block-padding-bottom: #{pxToRem(0)}; + --h4_font-size: #{pxToRem(22)}; + --h4_line-height: #{pxToRem(24)}; + --h4_block-padding-top: #{pxToRem(16)}; + --h4_block-padding-bottom: #{pxToRem(0)}; - --h5_font-size: #{pxToRem(20)}; - --h5_line-height: #{pxToRem(24)}; - --h5_block-padding-top: #{pxToRem(16)}; - --h5_block-padding-bottom: #{pxToRem(0)}; + --h5_font-size: #{pxToRem(20)}; + --h5_line-height: #{pxToRem(24)}; + --h5_block-padding-top: #{pxToRem(16)}; + --h5_block-padding-bottom: #{pxToRem(0)}; - --h6_font-size: #{pxToRem(18)}; - --h6_line-height: #{pxToRem(20)}; - --h6_block-padding-top: #{pxToRem(16)}; - --h6_block-padding-bottom: #{pxToRem(0)}; + --h6_font-size: #{pxToRem(18)}; + --h6_line-height: #{pxToRem(20)}; + --h6_block-padding-top: #{pxToRem(16)}; + --h6_block-padding-bottom: #{pxToRem(0)}; - --p_block-padding-vertical: #{pxToRem(16)}; + --p_block-padding-vertical: #{pxToRem(16)}; - --p_large_font-size: #{pxToRem(16)}; - --p_large_line-height: #{pxToRem(20)}; + --p_large_font-size: #{pxToRem(16)}; + --p_large_line-height: #{pxToRem(20)}; - --p_medium_font-size: #{pxToRem(14)}; - --p_medium_line-height: #{pxToRem(20)}; + --p_medium_font-size: #{pxToRem(14)}; + --p_medium_line-height: #{pxToRem(20)}; - --p_small_font-size: #{pxToRem(12)}; - --p_small_line-height: #{pxToRem(16)}; + --p_small_font-size: #{pxToRem(12)}; + --p_small_line-height: #{pxToRem(16)}; - --button_block-padding-vertical: var(--spc-3x); + --button_block-padding-vertical: var(--spc-3x); + --button_large_font-size: #{pxToRem(16)}; + --button_large_line-height: #{pxToRem(20)}; - --button_large_font-size: #{pxToRem(16)}; - --button_large_line-height: #{pxToRem(20)}; + --button_regular_font-size: #{pxToRem(14)}; + --button_regular_line-height: #{pxToRem(20)}; - --button_regular_font-size: #{pxToRem(14)}; - --button_regular_line-height: #{pxToRem(20)}; + @include from($desktopSmall) { + --h1_font-size: #{pxToRem(48)}; + --h1_line-height: 100%; + --h1_block-padding-top: #{pxToRem(24)}; + --h1_block-padding-bottom: #{pxToRem(24)}; - @include from($desktopSmall) { + --h2_font-size: #{pxToRem(40)}; + --h2_line-height: 100%; + --h2_block-padding-top: #{pxToRem(24)}; + --h2_block-padding-bottom: #{pxToRem(16)}; - --h1_font-size: #{pxToRem(48)}; - --h1_line-height: 100%; - --h1_block-padding-top: #{pxToRem(24)}; - --h1_block-padding-bottom: #{pxToRem(24)}; + --h3_font-size: #{pxToRem(32)}; + --h3_line-height: #{pxToRem(36)}; + --h3_block-padding-top: #{pxToRem(24)}; + --h3_block-padding-bottom: #{pxToRem(8)}; - --h2_font-size: #{pxToRem(40)}; - --h2_line-height: 100%; - --h2_block-padding-top: #{pxToRem(24)}; - --h2_block-padding-bottom: #{pxToRem(16)}; + --h4_font-size: #{pxToRem(28)}; + --h4_line-height: #{pxToRem(32)}; + --h4_block-padding-top: #{pxToRem(24)}; + --h4_block-padding-bottom: #{pxToRem(8)}; - --h3_font-size: #{pxToRem(32)}; - --h3_line-height: #{pxToRem(36)}; - --h3_block-padding-top: #{pxToRem(24)}; - --h3_block-padding-bottom: #{pxToRem(8)}; + --h5_font-size: #{pxToRem(24)}; + --h5_line-height: #{pxToRem(28)}; + --h5_block-padding-top: #{pxToRem(24)}; + --h5_block-padding-bottom: #{pxToRem(8)}; - --h4_font-size: #{pxToRem(28)}; - --h4_line-height: #{pxToRem(32)}; - --h4_block-padding-top: #{pxToRem(24)}; - --h4_block-padding-bottom: #{pxToRem(8)}; + --h6_font-size: #{pxToRem(20)}; + --h6_line-height: #{pxToRem(24)}; + --h6_block-padding-top: #{pxToRem(24)}; + --h6_block-padding-bottom: #{pxToRem(8)}; - --h5_font-size: #{pxToRem(24)}; - --h5_line-height: #{pxToRem(28)}; - --h5_block-padding-top: #{pxToRem(24)}; - --h5_block-padding-bottom: #{pxToRem(8)}; + --p_block-padding-vertical: #{pxToRem(24)}; - --h6_font-size: #{pxToRem(20)}; - --h6_line-height: #{pxToRem(24)}; - --h6_block-padding-top: #{pxToRem(24)}; - --h6_block-padding-bottom: #{pxToRem(8)}; + --p_large_font-size: #{pxToRem(18)}; + --p_large_line-height: #{pxToRem(24)}; - --p_block-padding-vertical: #{pxToRem(24)}; + --p_medium_font-size: #{pxToRem(16)}; + --p_medium_line-height: #{pxToRem(20)}; - --p_large_font-size: #{pxToRem(18)}; - --p_large_line-height: #{pxToRem(24)}; + --p_small_font-size: #{pxToRem(14)}; + --p_small_line-height: #{pxToRem(20)}; - --p_medium_font-size: #{pxToRem(16)}; - --p_medium_line-height: #{pxToRem(20)}; - - --p_small_font-size: #{pxToRem(14)}; - --p_small_line-height: #{pxToRem(20)}; - - --button_large_font-size: #{pxToRem(18)}; - --button_large_line-height: #{pxToRem(24)}; - } + --button_large_font-size: #{pxToRem(18)}; + --button_large_line-height: #{pxToRem(24)}; + } } diff --git a/src/styles/variables/icons.scss b/src/styles/variables/icons.scss index 553dd844..87303de5 100644 --- a/src/styles/variables/icons.scss +++ b/src/styles/variables/icons.scss @@ -1,15 +1,15 @@ -:root { - /* - ** Default size for icons. - */ - - --icon-size_regular: 1.5rem; - - /* - ** Size for dense layouts with small text sizes. - ** The fixed dimension and the padding serve to - ** automatically resize the icon to the desired 18pt. - */ - --icon-size_dense: 1.25rem; - --icon-size-dense-padding: 0.0625rem; -}; +:root { + /* + ** Default size for icons. + */ + + --icon-size_regular: 1.5rem; + + /* + ** Size for dense layouts with small text sizes. + ** The fixed dimension and the padding serve to + ** automatically resize the icon to the desired 18pt. + */ + --icon-size_dense: 1.25rem; + --icon-size-dense-padding: 0.0625rem; +} diff --git a/src/styles/variables/max_widths.scss b/src/styles/variables/max_widths.scss index e6804dbb..a5d2ce36 100644 --- a/src/styles/variables/max_widths.scss +++ b/src/styles/variables/max_widths.scss @@ -1,7 +1,7 @@ -:root { - --max-width_xs: 480px; - --max-width_s: 640px; - --max-width_m: 960px; - --max-width_l: 1280px; - --max-width_xl: 1920px; -}; +:root { + --max-width_xs: 480px; + --max-width_s: 640px; + --max-width_m: 960px; + --max-width_l: 1280px; + --max-width_xl: 1920px; +} diff --git a/src/styles/variables/shadows.scss b/src/styles/variables/shadows.scss index 4fb55c31..43fd2d2c 100644 --- a/src/styles/variables/shadows.scss +++ b/src/styles/variables/shadows.scss @@ -1,6 +1,10 @@ -:root { - --shadow_sticker_light: 0px 1px 1.5px rgba(0, 0, 0, 0.24), 0px 0.5px 0px rgba(0, 0, 0, 0.12); - --shadow_popup_light: 0px 8px 16px rgba(79, 97, 109, 0.24), 0px 4px 6px rgba(79, 97, 109, 0.24); - --shadow_sticker_dark: 0px 1px 1.5px rgba(0, 0, 0, 0.72), 0px 0.5px 0px rgba(0, 0, 0, 0.36); - --shadow_popup_dark: 0px 8px 16px rgba(0, 0, 0, 0.72), 0px 4px 6px rgba(0, 0, 0, 0.72); -} +:root { + --shadow_sticker_light: 0px 1px 1.5px rgba(0, 0, 0, 0.24), + 0px 0.5px 0px rgba(0, 0, 0, 0.12); + --shadow_popup_light: 0px 8px 16px rgba(79, 97, 109, 0.24), + 0px 4px 6px rgba(79, 97, 109, 0.24); + --shadow_sticker_dark: 0px 1px 1.5px rgba(0, 0, 0, 0.72), + 0px 0.5px 0px rgba(0, 0, 0, 0.36); + --shadow_popup_dark: 0px 8px 16px rgba(0, 0, 0, 0.72), + 0px 4px 6px rgba(0, 0, 0, 0.72); +} diff --git a/src/styles/variables/spacing.scss b/src/styles/variables/spacing.scss index 840f7a36..16b3b6ef 100644 --- a/src/styles/variables/spacing.scss +++ b/src/styles/variables/spacing.scss @@ -20,11 +20,11 @@ --chip-gap: var(--spc-2x); --site-spacing: var(--spc-4x); - @include from($tabletLarge) { - --site-spacing: var(--spc-6x); - } + @include from($tabletLarge) { + --site-spacing: var(--spc-6x); + } - @include from($desktopSmall) { - --site-spacing: var(--spc-8x); - } + @include from($desktopSmall) { + --site-spacing: var(--spc-8x); + } } diff --git a/src/styles/variables/target_sizes.scss b/src/styles/variables/target_sizes.scss index d610bb33..2820e3d6 100644 --- a/src/styles/variables/target_sizes.scss +++ b/src/styles/variables/target_sizes.scss @@ -1,6 +1,6 @@ -:root { - --min-target-size_s: 32px; - --min-target-size_m: 40px; - --min-target-size_l: 48px; - --min-target-size_xl: 56px; -} +:root { + --min-target-size_s: 32px; + --min-target-size_m: 40px; + --min-target-size_l: 48px; + --min-target-size_xl: 56px; +} diff --git a/src/tokens/_breakpoints.scss b/src/tokens/_breakpoints.scss index 8a9c2e0d..05e250af 100644 --- a/src/tokens/_breakpoints.scss +++ b/src/tokens/_breakpoints.scss @@ -1,18 +1,18 @@ -// Update breakpoints.ts when updating this file -$desktopLarge: 1920px; -$desktopSmall: 1280px; -$tabletLarge: 960px; -$tabletSmall: 640px; -$mobile: 400px; - -@mixin until($breakpoint) { - @media screen and (max-width: $breakpoint) { - @content; - } -} - -@mixin from($breakpoint) { - @media screen and (min-width: $breakpoint) { - @content; - } -} +// Update breakpoints.ts when updating this file +$desktopLarge: 1920px; +$desktopSmall: 1280px; +$tabletLarge: 960px; +$tabletSmall: 640px; +$mobile: 400px; + +@mixin until($breakpoint) { + @media screen and (max-width: $breakpoint) { + @content; + } +} + +@mixin from($breakpoint) { + @media screen and (min-width: $breakpoint) { + @content; + } +} diff --git a/src/tokens/_index.scss b/src/tokens/_index.scss index c471b556..9e6e8b33 100644 --- a/src/tokens/_index.scss +++ b/src/tokens/_index.scss @@ -1,3 +1,3 @@ -@import "./_breakpoints.scss"; -@import "./_utils.scss"; -@import "./_vars.scss"; +@import "./_breakpoints.scss"; +@import "./_utils.scss"; +@import "./_vars.scss"; diff --git a/src/utils/api.ts b/src/utils/api.ts index afacee70..9344d462 100644 --- a/src/utils/api.ts +++ b/src/utils/api.ts @@ -8,16 +8,16 @@ export function getPostsByLang(language: Languages): PostInfo[] { export function getPostsByUnicorn( authorId: string, - language: Languages + language: Languages, ): PostInfo[] { return getPostsByLang(language).filter((post) => - post.authors.find((postAuthor) => postAuthor === authorId) + post.authors.find((postAuthor) => postAuthor === authorId), ); } export function getPostsByCollection( collection: string, - language: Languages + language: Languages, ): PostInfo[] { return getPostsByLang(language) .filter((post) => post.collection === collection) diff --git a/src/utils/data.ts b/src/utils/data.ts index 94dad067..279b58cc 100644 --- a/src/utils/data.ts +++ b/src/utils/data.ts @@ -48,12 +48,12 @@ const fullUnicorns: UnicornInfo[] = unicornsRaw.map((unicorn) => { */ const relativeServerPath = getFullRelativePath( "/content/data/", - unicorn.profileImg + unicorn.profileImg, ); const profileImgSize = getImageSize( unicorn.profileImg, dataDirectory, - dataDirectory + dataDirectory, ); // Mutation go BRR @@ -68,7 +68,7 @@ const fullUnicorns: UnicornInfo[] = unicornsRaw.map((unicorn) => { }; newUnicorn.rolesMeta = unicorn.roles.map( - (role) => rolesRaw.find((rRole) => rRole.id === role)! as RolesEnum + (role) => rolesRaw.find((rRole) => rRole.id === role)! as RolesEnum, ); // normalize social links - if a URL or "@name" is entered, only preserve the last part @@ -99,7 +99,7 @@ function getCollections(): CollectionInfo[] { return files.map((file, i): CollectionInfo => { const fileContents = fs.readFileSync( join(collectionsDirectory, slug, file), - "utf8" + "utf8", ); const frontmatter = matter(fileContents).data as RawCollectionInfo; @@ -107,7 +107,7 @@ function getCollections(): CollectionInfo[] { const coverImgSize = getImageSize( frontmatter.coverImg, join(collectionsDirectory, slug), - join(collectionsDirectory, slug) + join(collectionsDirectory, slug), ); const coverImgMeta = { @@ -116,13 +116,13 @@ function getCollections(): CollectionInfo[] { relativePath: frontmatter.coverImg, relativeServerPath: getFullRelativePath( `/content/collections/${slug}`, - frontmatter.coverImg + frontmatter.coverImg, ), absoluteFSPath: join(collectionsDirectory, slug, frontmatter.coverImg), }; const authorsMeta = frontmatter.authors.map((authorId) => - fullUnicorns.find((u) => u.id === authorId) + fullUnicorns.find((u) => u.id === authorId), ); return { @@ -155,7 +155,7 @@ function getPosts(): Array { return files.map((file, i): PostInfo => { const fileContents = fs.readFileSync( join(postsDirectory, slug, file), - "utf8" + "utf8", ); const frontmatter = matter(fileContents).data as RawPostInfo; @@ -175,7 +175,7 @@ function getPosts(): Array { locales, locale: locales[i], authorsMeta: frontmatter.authors.map((authorId) => - fullUnicorns.find((u) => u.id === authorId) + fullUnicorns.find((u) => u.id === authorId), ), wordCount: (counts.InlineCodeWords || 0) + (counts.WordNode || 0), publishedMeta: diff --git a/src/utils/get-suggested-articles.ts b/src/utils/get-suggested-articles.ts index 74755ad5..4ffb4e11 100644 --- a/src/utils/get-suggested-articles.ts +++ b/src/utils/get-suggested-articles.ts @@ -57,13 +57,13 @@ const getOrderRange = (arr: PostInfo[]) => { { largest: null as PostInfo, smallest: null as PostInfo, - } + }, ); }; export const getSuggestedArticles = ( postNode: ExtendedPostInfo, - lang: Languages + lang: Languages, ) => { const suggestedPosts = getPostsByLang(lang); @@ -119,7 +119,7 @@ export const getSuggestedArticles = ( } const howManyTagsSimilar = howManySimilarBetween( post.tags, - postNode.tags || [] + postNode.tags || [], ); if (howManyTagsSimilar > 0) { similarTags.push({ post, howManyTagsSimilar }); diff --git a/src/utils/get-unicorn-profile-pic-map.ts b/src/utils/get-unicorn-profile-pic-map.ts index ca4cdcc2..c542bc6e 100644 --- a/src/utils/get-unicorn-profile-pic-map.ts +++ b/src/utils/get-unicorn-profile-pic-map.ts @@ -16,7 +16,7 @@ const unicornProfilePicMap = Promise.all( alt: "", })), id: unicorn.id, - })) + })), ); export const getUnicornProfilePicMap = async () => { diff --git a/src/utils/markdown/file-tree/file-list.tsx b/src/utils/markdown/file-tree/file-list.tsx index 17cc28a6..95a3d6c5 100644 --- a/src/utils/markdown/file-tree/file-list.tsx +++ b/src/utils/markdown/file-tree/file-list.tsx @@ -26,7 +26,7 @@ const FolderIcon = makeSVGIcon( ` -` +`, ); export interface File { diff --git a/src/utils/markdown/get-picture-hack.ts b/src/utils/markdown/get-picture-hack.ts index e75e04ba..a56fc3b8 100644 --- a/src/utils/markdown/get-picture-hack.ts +++ b/src/utils/markdown/get-picture-hack.ts @@ -6,7 +6,7 @@ import { import squoosh_service from "../../../node_modules/@astrojs/image/dist/loaders/squoosh.js"; export function getPicture( - params: GetPictureParams + params: GetPictureParams, ): Promise { // HACK: This is a hack that heavily relies on `getImage`'s internals :( globalThis.astroImage = { diff --git a/src/utils/markdown/hints/hints.tsx b/src/utils/markdown/hints/hints.tsx index 59bd51f3..57bcdbef 100644 --- a/src/utils/markdown/hints/hints.tsx +++ b/src/utils/markdown/hints/hints.tsx @@ -8,7 +8,7 @@ const chevron_down = await fs.readFile("src/icons/chevron_down.svg", "utf8"); interface HintProps { title: string; children: Node[]; -}; +} /** @jsxImportSource hastscript */ export function Hint({ title, children }: HintProps): Element { @@ -20,9 +20,7 @@ export function Hint({ title, children }: HintProps): Element { {title} -
    - {children} -
    +
    {children}
    ) as never; diff --git a/src/utils/markdown/iframes/iframe-placeholder.tsx b/src/utils/markdown/iframes/iframe-placeholder.tsx index f4b20e9c..e702ccc3 100644 --- a/src/utils/markdown/iframes/iframe-placeholder.tsx +++ b/src/utils/markdown/iframes/iframe-placeholder.tsx @@ -16,7 +16,11 @@ export interface IFramePlaceholderProps { } /** @jsxImportSource hastscript */ -export function IFramePlaceholder({ height, width, ...props }: IFramePlaceholderProps): Element { +export function IFramePlaceholder({ + height, + width, + ...props +}: IFramePlaceholderProps): Element { return (
    { const iframeButtons: HTMLElement[] = document.querySelectorAll( - "[data-iframeurl] > button" + "[data-iframeurl] > button", ) as never; [...iframeButtons].forEach((el) => { diff --git a/src/utils/markdown/iframes/rehype-transform.ts b/src/utils/markdown/iframes/rehype-transform.ts index 83238839..c5ed56b7 100644 --- a/src/utils/markdown/iframes/rehype-transform.ts +++ b/src/utils/markdown/iframes/rehype-transform.ts @@ -40,7 +40,7 @@ function fetchPageIcon(src: URL, srcHast: Root): Promise { // const manifestPath: Element = find( srcHast, - (node: unknown) => (node as Element)?.properties?.rel?.[0] === "manifest" + (node: unknown) => (node as Element)?.properties?.rel?.[0] === "manifest", ); let iconLink: string; @@ -63,8 +63,10 @@ function fetchPageIcon(src: URL, srcHast: Root): Promise { if (!iconLink) { // fetch `favicon.ico` // - const favicon: Element = find(srcHast, (node: unknown) => - (node as Element)?.properties?.rel?.toString()?.includes("icon") + const favicon: Element = find( + srcHast, + (node: unknown) => + (node as Element)?.properties?.rel?.toString()?.includes("icon"), ); if (favicon) { @@ -155,7 +157,7 @@ export const rehypeUnicornIFrameClickToRun: Plugin< const width = iframeNode.properties.width ?? EMBED_SIZE.w; const height = iframeNode.properties.height ?? EMBED_SIZE.h; const info: PageInfo = (await fetchPageInfo( - iframeNode.properties.src.toString() + iframeNode.properties.src.toString(), ).catch(() => null)) || { icon: await fetchDefaultPageIcon() }; const iframeReplacement = IFramePlaceholder({ @@ -167,7 +169,7 @@ export const rehypeUnicornIFrameClickToRun: Plugin< }); Object.assign(iframeNode, iframeReplacement); - }) + }), ); }; }; diff --git a/src/utils/markdown/rehype-header-text.ts b/src/utils/markdown/rehype-header-text.ts index 220347e6..4dc941c9 100644 --- a/src/utils/markdown/rehype-header-text.ts +++ b/src/utils/markdown/rehype-header-text.ts @@ -8,29 +8,29 @@ import { visit } from "unist-util-visit"; * Plugin to add `data-header-text`s to headings. */ export const rehypeHeaderText = () => { - return (tree: Root, file) => { - visit(tree, "element", (node: Parent["children"][number]) => { - if ( - headingRank(node) && - "properties" in node && - node.properties && - !hasProperty(node, "data-header-text") - ) { - const headerText = toString(node); - node.properties["data-header-text"] = headerText; + return (tree: Root, file) => { + visit(tree, "element", (node: Parent["children"][number]) => { + if ( + headingRank(node) && + "properties" in node && + node.properties && + !hasProperty(node, "data-header-text") + ) { + const headerText = toString(node); + node.properties["data-header-text"] = headerText; - const headingWithID = { - value: headerText, - depth: headingRank(node)!, - slug: node.properties["id"] as string, - }; + const headingWithID = { + value: headerText, + depth: headingRank(node)!, + slug: node.properties["id"] as string, + }; - if (file.data.astro.frontmatter.headingsWithId) { - file.data.astro.frontmatter.headingsWithId.push(headingWithID); - } else { - file.data.astro.frontmatter.headingsWithId = [headingWithID]; - } - } - }); - }; + if (file.data.astro.frontmatter.headingsWithId) { + file.data.astro.frontmatter.headingsWithId.push(headingWithID); + } else { + file.data.astro.frontmatter.headingsWithId = [headingWithID]; + } + } + }); + }; }; diff --git a/src/utils/markdown/rehype-unicorn-element-map.ts b/src/utils/markdown/rehype-unicorn-element-map.ts index 7603f572..ff5131ac 100644 --- a/src/utils/markdown/rehype-unicorn-element-map.ts +++ b/src/utils/markdown/rehype-unicorn-element-map.ts @@ -25,7 +25,7 @@ export const rehypeUnicornElementMap: Plugin<[], Root> = () => { "/content/", parentFolder, slug, - node.properties.src.toString() + node.properties.src.toString(), ); } diff --git a/src/utils/markdown/tables/tables-script.ts b/src/utils/markdown/tables/tables-script.ts index 03d0ae37..c5306e33 100644 --- a/src/utils/markdown/tables/tables-script.ts +++ b/src/utils/markdown/tables/tables-script.ts @@ -4,7 +4,7 @@ export const enableTables = () => { (e.target as HTMLElement).dataset.sticky = e.intersectionRatio < 1 ? "pinned" : ""; }, - { threshold: [1] } + { threshold: [1] }, ); document.querySelectorAll("thead").forEach((e) => observer.observe(e)); diff --git a/src/utils/markdown/tabs/rehype-transform.ts b/src/utils/markdown/tabs/rehype-transform.ts index 6f3f1ae3..71ce84b3 100644 --- a/src/utils/markdown/tabs/rehype-transform.ts +++ b/src/utils/markdown/tabs/rehype-transform.ts @@ -33,7 +33,7 @@ const getApproxLineCount = (nodes: Node[], inParagraph?: boolean): number => { if ("children" in n) { lines += getApproxLineCount( (n as Parent).children as Node[], - isInParagraph + isInParagraph, ); } // assume that any div/p/br causes a line break @@ -125,7 +125,7 @@ export const rehypeTabs: Plugin<[], Root> = () => { // Determine if the set of tabs should use a constant height (via the "tabs-small" class) const tabHeights = tabs.map(({ contents }) => - getApproxLineCount(contents) + getApproxLineCount(contents), ); const isSmall = // all tabs must be <= 30 approx. lines (less than the height of most desktop viewports) @@ -145,13 +145,13 @@ export const rehypeTabs: Plugin<[], Root> = () => { tree, { type: "raw", value: "" } as never, { type: "raw", value: "" } as never, - replaceTabNodes + replaceTabNodes, ); replaceAllBetween( tree, { type: "comment", value: " tabs:start " } as never, { type: "comment", value: " tabs:end " } as never, - replaceTabNodes + replaceTabNodes, ); return tree; }; diff --git a/src/utils/markdown/tabs/tabs-script.ts b/src/utils/markdown/tabs/tabs-script.ts index 6aa9b0f8..1e9c169c 100644 --- a/src/utils/markdown/tabs/tabs-script.ts +++ b/src/utils/markdown/tabs/tabs-script.ts @@ -85,7 +85,7 @@ export const enableTabs = () => { tabs.forEach((tab) => { const panel = parent.querySelector( - `#${tab.getAttribute("aria-controls")}` + `#${tab.getAttribute("aria-controls")}`, ); entry.set(tab.dataset.tabname, { tab, diff --git a/src/utils/markdown/tabs/tabs.tsx b/src/utils/markdown/tabs/tabs.tsx index 9da5f2fc..a6470eb6 100644 --- a/src/utils/markdown/tabs/tabs.tsx +++ b/src/utils/markdown/tabs/tabs.tsx @@ -14,7 +14,7 @@ export interface TabInfo { interface TabsProps { tabs: TabInfo[]; isSmall: boolean; -}; +} /** @jsxImportSource hastscript */ export function Tabs({ tabs, isSmall }: TabsProps): Element { @@ -46,9 +46,7 @@ export function Tabs({ tabs, isSmall }: TabsProps): Element { aria-labelledby={`tab-${index}`} aria-hidden={index === 0 ? undefined : true} > -
    - {contents} -
    +
    {contents}
    ))}
    diff --git a/src/utils/markdown/tooltips/tooltips.tsx b/src/utils/markdown/tooltips/tooltips.tsx index 033a2f13..3a7fa3cd 100644 --- a/src/utils/markdown/tooltips/tooltips.tsx +++ b/src/utils/markdown/tooltips/tooltips.tsx @@ -10,7 +10,7 @@ interface TooltipProps { icon: "info" | "warning"; title: string; children: Node[]; -}; +} /** @jsxImportSource hastscript */ export function Tooltip({ icon, title, children }: TooltipProps): Element { @@ -20,9 +20,7 @@ export function Tooltip({ icon, title, children }: TooltipProps): Element { {icon === "info" ? fromHtml(info) : fromHtml(warning)}

    {title}

    -
    - {children} -
    +
    {children}
    ) as never; } diff --git a/src/utils/translations.test.ts b/src/utils/translations.test.ts index 2b98b8c8..d92e9100 100644 --- a/src/utils/translations.test.ts +++ b/src/utils/translations.test.ts @@ -32,7 +32,7 @@ describe("utils/translations.ts", () => { test("returns 'fr' from '/posts/test/index.fr.md'", () => { const lang = translations.getLanguageFromFilename( - "/posts/test/index.fr.md" + "/posts/test/index.fr.md", ); expect(lang).toBe("fr"); }); @@ -42,7 +42,7 @@ describe("utils/translations.ts", () => { test("returns an initial prefix", () => { const expected: Languages = "fr"; const actual = translations.getPrefixLanguageFromPath( - `/${expected}/something/extra/en/fr/hi` + `/${expected}/something/extra/en/fr/hi`, ); expect(actual).toEqual(expected); @@ -51,7 +51,7 @@ describe("utils/translations.ts", () => { test("returns an initial prefix with no preceding slash", () => { const expected: Languages = "fr"; const actual = translations.getPrefixLanguageFromPath( - `${expected}/something/extra/en/fr/hi` + `${expected}/something/extra/en/fr/hi`, ); expect(actual).toEqual(expected); @@ -69,7 +69,7 @@ describe("utils/translations.ts", () => { test("removes an initial prefix", () => { const lang: Languages = "fr"; const actual = translations.removePrefixLanguageFromPath( - `/${lang}/something/extra/hi` + `/${lang}/something/extra/hi`, ); expect(actual).toEqual("/something/extra/hi"); @@ -78,7 +78,7 @@ describe("utils/translations.ts", () => { test("removes an initial prefix with no preceding slash", () => { const lang: Languages = "fr"; const actual = translations.removePrefixLanguageFromPath( - `${lang}/something/extra/hi` + `${lang}/something/extra/hi`, ); expect(actual).toEqual("something/extra/hi"); @@ -94,7 +94,7 @@ describe("utils/translations.ts", () => { test("is not confused by prefixes that appear after the start of the path", () => { const lang: Languages = "en"; const actual = translations.removePrefixLanguageFromPath( - `/${lang}/${lang}/es/fr/something/hi` + `/${lang}/${lang}/es/fr/something/hi`, ); expect(actual).toEqual(`/${lang}/es/fr/something/hi`); diff --git a/src/utils/translations.ts b/src/utils/translations.ts index b85b9e13..98cd151e 100644 --- a/src/utils/translations.ts +++ b/src/utils/translations.ts @@ -14,7 +14,7 @@ function isLanguageKey(str: string): str is Languages { * code handles the parsing and converting of translation formats */ export function fileToOpenGraphConverter( - lang: T + lang: T, ): T extends `${infer Lang}-${infer Region}` ? `${Lang}_${Uppercase}` : T { @@ -89,7 +89,7 @@ export function removePrefixLanguageFromPath(path: string) { */ export function getTranslatedPage( astro: { url: URL }, - glob: MarkdownInstance>[] + glob: MarkdownInstance>[], ): { locales: Languages[]; page: MarkdownInstance>; @@ -98,7 +98,7 @@ export function getTranslatedPage( const lang = getPrefixLanguageFromPath(astro.url.pathname); const matchedResult = globResults.find((md) => - md.file.endsWith(`${lang}.md`) + md.file.endsWith(`${lang}.md`), ); const enResult = globResults.find((md) => md.file.split(".")[1] === "md"); @@ -128,8 +128,8 @@ const i18n: Partial>> = ([file, content]: [string, { default: Record }]) => [ basename(file).split(".")[0], new Map(Object.entries(content.default)), - ] - ) + ], + ), ); // warn about any values that do not have full translations @@ -140,7 +140,7 @@ for (const key of i18n.en?.keys() || []) { if (missing.length) { console.log( - `i18n: key "${key}" is missing from /content/data/i18n for languages: ${missing}` + `i18n: key "${key}" is missing from /content/data/i18n for languages: ${missing}`, ); } } @@ -157,7 +157,7 @@ export function translate(astro: { url: URL }, key: string, ...args: string[]) { if (!value) { console.warn( - `Translation key "${key}" is not specified in /content/data/i18n/${lang}.json` + `Translation key "${key}" is not specified in /content/data/i18n/${lang}.json`, ); value = i18n.en?.get(key); } diff --git a/src/views/about/about.module.scss b/src/views/about/about.module.scss index 55b481a8..2456b881 100644 --- a/src/views/about/about.module.scss +++ b/src/views/about/about.module.scss @@ -28,7 +28,7 @@ margin: var(--spc-2x); - background-color: #FFF; + background-color: #fff; border-radius: var(--corner-radius_s); overflow: hidden; } diff --git a/src/views/about/translations-header/about-us-translations-header.module.scss b/src/views/about/translations-header/about-us-translations-header.module.scss index e2874a2b..1af16845 100644 --- a/src/views/about/translations-header/about-us-translations-header.module.scss +++ b/src/views/about/translations-header/about-us-translations-header.module.scss @@ -1,8 +1,8 @@ .translationContainer { - font-weight: bold; - border: var(--cardOutlineStyle); - border-radius: var(--cardRadius); - padding: 0.75rem; - background: var(--cardActiveBackground); - margin: 1rem 0; + font-weight: bold; + border: var(--cardOutlineStyle); + border-radius: var(--cardRadius); + padding: 0.75rem; + background: var(--cardActiveBackground); + margin: 1rem 0; } diff --git a/src/views/base/translations/translations-header.module.scss b/src/views/base/translations/translations-header.module.scss index a682b269..3f424306 100644 --- a/src/views/base/translations/translations-header.module.scss +++ b/src/views/base/translations/translations-header.module.scss @@ -2,7 +2,7 @@ .text { margin: 0 !important; - margin-left: var(--spc-2x) !important;; + margin-left: var(--spc-2x) !important; } .card { diff --git a/src/views/blog-post/article-nav/article-nav.module.scss b/src/views/blog-post/article-nav/article-nav.module.scss index 4a4f53e2..11a3a5c1 100644 --- a/src/views/blog-post/article-nav/article-nav.module.scss +++ b/src/views/blog-post/article-nav/article-nav.module.scss @@ -15,8 +15,12 @@ --article-nav_item_overline-color: var(--primary_default); --article-nav_item_background-color: var(--transparent); - --article-nav_item_background-color_hovered: var(--surface_primary_emphasis-low); - --article-nav_item_background-color_pressed: var(--surface_primary_emphasis-low); + --article-nav_item_background-color_hovered: var( + --surface_primary_emphasis-low + ); + --article-nav_item_background-color_pressed: var( + --surface_primary_emphasis-low + ); --article-nav_item_background-color_focused: var(--background_focus); --article-nav_item_border_color: var(--surface_primary_emphasis-low); @@ -42,10 +46,12 @@ display: flex; flex-direction: column; gap: var(--article-nav_item_gap); - padding: var(--article-nav_item_padding-vertical) var(--article-nav_item_padding-horizontal); + padding: var(--article-nav_item_padding-vertical) + var(--article-nav_item_padding-horizontal); background-color: var(--article-nav_item_background-color); - border: var(--article-nav_item_border-width) solid var(--article-nav_item_border_color); + border: var(--article-nav_item_border-width) solid + var(--article-nav_item_border_color); border-radius: var(--article-nav_item_corner-radius); @include transition(background-color border-color); diff --git a/src/views/blog-post/article-nav/article-nav.tsx b/src/views/blog-post/article-nav/article-nav.tsx index 5cd0d074..3dc9c85a 100644 --- a/src/views/blog-post/article-nav/article-nav.tsx +++ b/src/views/blog-post/article-nav/article-nav.tsx @@ -16,30 +16,28 @@ function ArticleNavItem({ post, type }: ArticleNavItemProps) { class={`${style.item} ${style[`item--${type}`]}`} data-navigation-path={href} > - { - type === "previous" - ? ( - - - Previous article - - ) - : ( - - Next article - - - ) - } - {getShortTitle(post)} + {type === "previous" ? ( + + + Previous article + + ) : ( + + Next article + + + )} + + {getShortTitle(post)} +
    - ) + ); } export interface ArticleNavProps { @@ -57,5 +55,5 @@ export function ArticleNav({ post, postSeries }: ArticleNavProps) { {prevPost && } {nextPost && }
    - ) + ); } diff --git a/src/views/blog-post/blog-post-layout/blog-post-layout.module.scss b/src/views/blog-post/blog-post-layout/blog-post-layout.module.scss index 6ddc2c09..08e6853b 100644 --- a/src/views/blog-post/blog-post-layout/blog-post-layout.module.scss +++ b/src/views/blog-post/blog-post-layout/blog-post-layout.module.scss @@ -14,7 +14,8 @@ padding: var(--site-spacing); } -.sidebarLeft, .sidebarRight { +.sidebarLeft, +.sidebarRight { flex-basis: 25%; flex-grow: 0; flex-shrink: 0; @@ -42,8 +43,6 @@ @keyframes fadeIn { 0% { opacity: 0; - - } 100% { opacity: 1; diff --git a/src/views/blog-post/post-title-header/post-title-header.module.scss b/src/views/blog-post/post-title-header/post-title-header.module.scss index 3a105d0e..c173f3f3 100644 --- a/src/views/blog-post/post-title-header/post-title-header.module.scss +++ b/src/views/blog-post/post-title-header/post-title-header.module.scss @@ -33,7 +33,8 @@ padding: var(--article-header_details_padding-vertical) 0; - .date, .authors { + .date, + .authors { display: flex; align-items: center; @@ -59,7 +60,7 @@ color: var(--article-header_details_date_edited_color); &::before { - content: '•'; + content: "•"; margin-left: var(--article-header_details_date-gap); padding-right: var(--article-header_details_date-gap); } diff --git a/src/views/blog-post/series/base.ts b/src/views/blog-post/series/base.ts index e7b5b007..3ac1c636 100644 --- a/src/views/blog-post/series/base.ts +++ b/src/views/blog-post/series/base.ts @@ -16,7 +16,7 @@ interface ActivePostMeta extends ExtendedPostInfo { export function findActivePost( post: ExtendedPostInfo, - seriesPosts: ExtendedPostInfo[] + seriesPosts: ExtendedPostInfo[], ) { const newPosts = [...seriesPosts] as ActivePostMeta[]; diff --git a/src/views/blog-post/series/series-toc.module.scss b/src/views/blog-post/series/series-toc.module.scss index 6eb66836..23beec34 100644 --- a/src/views/blog-post/series/series-toc.module.scss +++ b/src/views/blog-post/series/series-toc.module.scss @@ -147,7 +147,6 @@ height: 100%; width: var(--series-nav_chapter-item_border_width); background: var(--series-nav_chapter-item_border_color_selected); - } .navigationItem[data-is-active]::after { diff --git a/src/views/blog-post/table-of-contents/table-of-contents.module.scss b/src/views/blog-post/table-of-contents/table-of-contents.module.scss index b7ae7aa4..35206460 100644 --- a/src/views/blog-post/table-of-contents/table-of-contents.module.scss +++ b/src/views/blog-post/table-of-contents/table-of-contents.module.scss @@ -1,7 +1,6 @@ @import "src/tokens/index"; :root { - --toc_header_padding-top: var(--site-spacing); --toc_header_padding-horizontal: var(--site-spacing); --toc_header_padding-bottom: var(--spc-4x); @@ -63,7 +62,8 @@ } .tocTitle { - margin: var(--toc_header_padding-top) var(--toc_header_padding-horizontal) var(--toc_header_padding-bottom); + margin: var(--toc_header_padding-top) var(--toc_header_padding-horizontal) + var(--toc_header_padding-bottom); } .tableList { @@ -89,7 +89,8 @@ } .tableListItem:not(.depth2) > a { - padding: var(--toc_item_padding-vertical) var(--toc_item_padding-end) var(--toc_item_padding-vertical) var(--toc_item_padding-start); + padding: var(--toc_item_padding-vertical) var(--toc_item_padding-end) + var(--toc_item_padding-vertical) var(--toc_item_padding-start); } .tableListItem:hover > a { @@ -105,7 +106,8 @@ pointer-events: none; } -.tableListItem:hover > a > *, :global(.toc-is-active) .tableListItemLinkInner { +.tableListItem:hover > a > *, +:global(.toc-is-active) .tableListItemLinkInner { color: var(--foreground_emphasis-high); } @@ -113,7 +115,10 @@ } .depth2 > a > * { - margin-left: calc(var(--toc_sub-item_dot_size) + var(--toc_sub-item_dot_margin-end) + var(--toc_sub-item_padding-start)); + margin-left: calc( + var(--toc_sub-item_dot_size) + var(--toc_sub-item_dot_margin-end) + + var(--toc_sub-item_padding-start) + ); position: relative; } @@ -122,41 +127,64 @@ border: none !important; } -.depth2:not(:global(.toc-is-active)):not(:hover):not(:active) > a:not(:focus-visible) > *::before { +.depth2:not(:global(.toc-is-active)):not(:hover):not(:active) + > a:not(:focus-visible) + > *::before { content: " "; background: var(--toc_divider_color); height: 100%; width: 2px; position: absolute; - left: calc(-2px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size) / 2)); + left: calc( + -2px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size) / + 2) + ); top: 0; } /* Extended line */ @supports selector(:has(*)) { - .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not(:has(:focus-visible)) - + .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not(:has(:focus-visible)) - > a > *::before { + .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not( + :has(:focus-visible) + ) + + .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not( + :has(:focus-visible) + ) + > a + > *::before { content: " "; background: var(--toc_divider_color); height: calc(100% + var(--toc_item_min-height)); width: 2px; position: absolute; - left: calc(-2px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size) / 2)); + left: calc( + -2px - var(--toc_sub-item_padding-start) - calc(var( + --toc_sub-item_dot_size + ) / 2) + ); bottom: 0; top: unset; } } @supports not selector(:has(*)) { - .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not(:focus-within) - + .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not(:focus-within) - > a > *::before { + .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not( + :focus-within + ) + + .depth2:not(:global(.toc-is-active)):not(:hover):not(:active):not( + :focus-within + ) + > a + > *::before { content: " "; background: var(--toc_divider_color); height: calc(100% + var(--toc_item_min-height)); width: 2px; position: absolute; - left: calc(-2px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size) / 2)); + left: calc( + -2px - var(--toc_sub-item_padding-start) - calc(var( + --toc_sub-item_dot_size + ) / 2) + ); bottom: 0; top: unset; } @@ -174,7 +202,9 @@ height: 100%; width: var(--toc_sub-item_dot_size); position: absolute; - left: calc(0px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size))); + left: calc( + 0px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size)) + ); top: 0; } @@ -192,7 +222,9 @@ height: 100%; width: var(--toc_sub-item_dot_size); position: absolute; - left: calc(0px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size))); + left: calc( + 0px - var(--toc_sub-item_padding-start) - calc(var(--toc_sub-item_dot_size)) + ); top: 0; } diff --git a/src/views/collections/collection-page.module.scss b/src/views/collections/collection-page.module.scss index a35b1234..68132023 100644 --- a/src/views/collections/collection-page.module.scss +++ b/src/views/collections/collection-page.module.scss @@ -1,277 +1,278 @@ @import "src/tokens/index"; :root { - --collection-page_banner_corner-radius: var(--corner-radius_l); + --collection-page_banner_corner-radius: var(--corner-radius_l); - --collection-page_padding: var(--site-spacing); - --collection-page_gap: var(--site-spacing); + --collection-page_padding: var(--site-spacing); + --collection-page_gap: var(--site-spacing); - --collection-page_content_gap: var(--site-spacing); - --collection-page_content_button-gap: var(--spc-4x); + --collection-page_content_gap: var(--site-spacing); + --collection-page_content_button-gap: var(--spc-4x); - --collection-page_title_padding-top: var(--site-spacing); - --collection-page_title_padding-bottom: var(--spc-2x); + --collection-page_title_padding-top: var(--site-spacing); + --collection-page_title_padding-bottom: var(--spc-2x); - --collection-page_title_color: var(--foreground_emphasis-high); - --collection-page_subtitle_color: var(--foreground_emphasis-medium); - --collection-page_description_color: var(--foreground_emphasis-high); + --collection-page_title_color: var(--foreground_emphasis-high); + --collection-page_subtitle_color: var(--foreground_emphasis-medium); + --collection-page_description_color: var(--foreground_emphasis-high); - // Author section - --collection-page_author_padding: var(--spc-6x); - --collection-page_author_corner-radius: var(--corner-radius_l); - --collection-page_author_avatar_size: 48px; - --collection-page_author_avatar_border-width: var(--border-width_m); - --collection-page_author_details_gap: var(--spc-4x); - --collection-page_author_details_dot_padding-horizontal: var(--spc-1x); - --collection-page_author_description_padding-top: var(--spc-4x); + // Author section + --collection-page_author_padding: var(--spc-6x); + --collection-page_author_corner-radius: var(--corner-radius_l); + --collection-page_author_avatar_size: 48px; + --collection-page_author_avatar_border-width: var(--border-width_m); + --collection-page_author_details_gap: var(--spc-4x); + --collection-page_author_details_dot_padding-horizontal: var(--spc-1x); + --collection-page_author_description_padding-top: var(--spc-4x); - --collection-page_author_name_color: var(--foreground_emphasis-high); - --collection-page_author_count-articles_color: var(--foreground_emphasis-high); - --collection-page_author_count-words_color: var(--foreground_emphasis-medium); - --collection-page_author_dot_color: var(--foreground_emphasis-medium); - --collection-page_author_description_color: var(--foreground_emphasis-high); + --collection-page_author_name_color: var(--foreground_emphasis-high); + --collection-page_author_count-articles_color: var( + --foreground_emphasis-high + ); + --collection-page_author_count-words_color: var(--foreground_emphasis-medium); + --collection-page_author_dot_color: var(--foreground_emphasis-medium); + --collection-page_author_description_color: var(--foreground_emphasis-high); - @include from($tabletSmall) { - --collection-page_banner_max-width: 240px; - --collection-page_title_padding-top: 0px; - } + @include from($tabletSmall) { + --collection-page_banner_max-width: 240px; + --collection-page_title_padding-top: 0px; + } - @include from($tabletLarge) { - --collection-page_banner_max-width: 400px; - } + @include from($tabletLarge) { + --collection-page_banner_max-width: 400px; + } - @include from($desktopSmall) { - --collection-page_banner_corner-radius: var(--corner-radius_xl); - --collection-page_banner_max-width: 480px; - } + @include from($desktopSmall) { + --collection-page_banner_corner-radius: var(--corner-radius_xl); + --collection-page_banner_max-width: 480px; + } } .collectionPageContainer { - padding: var(--collection-page_padding); - max-width: var(--max-width_l); - margin: 0 auto; + padding: var(--collection-page_padding); + max-width: var(--max-width_l); + margin: 0 auto; } .collectionPageInnerContainer { - display: grid; - grid-template-columns: 1fr; - grid-template-rows: repeat(3, min-content); + display: grid; + grid-template-columns: 1fr; + grid-template-rows: repeat(3, min-content); - @include from($tabletSmall) { - grid-template-columns: min-content 1fr; - grid-template-rows: repeat(2, min-content); - grid-column-gap: var(--collection-page_gap); - } + @include from($tabletSmall) { + grid-template-columns: min-content 1fr; + grid-template-rows: repeat(2, min-content); + grid-column-gap: var(--collection-page_gap); + } - @include from($desktopSmall) { - grid-template-columns: min-content 1fr; - grid-template-rows: min-content 1fr; - grid-column-gap: var(--collection-page_gap); - } + @include from($desktopSmall) { + grid-template-columns: min-content 1fr; + grid-template-rows: min-content 1fr; + grid-column-gap: var(--collection-page_gap); + } } .titleAndDescContainer { - @include from($tabletSmall) { - grid-column: 2; - grid-row: 1; - display: flex; - justify-content: center; - flex-direction: column; - } + @include from($tabletSmall) { + grid-column: 2; + grid-row: 1; + display: flex; + justify-content: center; + flex-direction: column; + } - @include from($desktopSmall) { - grid-column: 2; - grid-row: 1; - display: unset; - justify-content: unset; - flex-direction: unset; - } + @include from($desktopSmall) { + grid-column: 2; + grid-row: 1; + display: unset; + justify-content: unset; + flex-direction: unset; + } } .title { - color: var(--collection-page_title_color); - margin: 0; - margin-bottom: var(--collection-page_title_padding-bottom); - margin-top: var(--collection-page_title_padding-top); + color: var(--collection-page_title_color); + margin: 0; + margin-bottom: var(--collection-page_title_padding-bottom); + margin-top: var(--collection-page_title_padding-top); } .description { - color: var(--collection-page_subtitle_color); - margin: 0; + color: var(--collection-page_subtitle_color); + margin: 0; } .contentContainer { - display: flex; - flex-direction: column; - gap: var(--collection-page_content_gap); - margin-top: var(--collection-page_content_gap); + display: flex; + flex-direction: column; + gap: var(--collection-page_content_gap); + margin-top: var(--collection-page_content_gap); + @include from($tabletSmall) { + grid-column: 1 / 3; + grid-row: 2; + } - @include from($tabletSmall) { - grid-column: 1 / 3; - grid-row: 2; - } - - @include from($desktopSmall) { - grid-column: 2; - grid-row: 2; - } + @include from($desktopSmall) { + grid-column: 2; + grid-row: 2; + } } -.content>*:first-child { - margin-top: 0 !important; +.content > *:first-child { + margin-top: 0 !important; } -.content>*:last-child { - margin-bottom: 0 !important; +.content > *:last-child { + margin-bottom: 0 !important; } .coverImage { - @include from($tabletSmall) { - grid-column: 1; - grid-row: 1; - } + @include from($tabletSmall) { + grid-column: 1; + grid-row: 1; + } - @include from($desktopSmall) { - grid-column: 1; - grid-row: 1 / 3; - } + @include from($desktopSmall) { + grid-column: 1; + grid-row: 1 / 3; + } } .coverImage img { - max-width: 368px; - max-height: 552px; - width: 100%; + max-width: 368px; + max-height: 552px; + width: 100%; - border-radius: var(--collection-page_banner_corner-radius); + border-radius: var(--collection-page_banner_corner-radius); - margin: 0 auto; - margin-bottom: var(--collection-page_gap); - display: block; + margin: 0 auto; + margin-bottom: var(--collection-page_gap); + display: block; - @include from($tabletSmall) { - margin: unset; - display: unset; - max-width: unset; - max-height: unset; - width: 240px; - height: 360px; - } + @include from($tabletSmall) { + margin: unset; + display: unset; + max-width: unset; + max-height: unset; + width: 240px; + height: 360px; + } - @include from($desktopSmall) { - height: 720px; - width: 480px; - } + @include from($desktopSmall) { + height: 720px; + width: 480px; + } } .buttonContainer { - display: flex; - flex-direction: row; - gap: var(--collection-page_content_button-gap); + display: flex; + flex-direction: row; + gap: var(--collection-page_content_button-gap); } -.buttonContainer>* { - width: 1px; - flex-grow: 1; +.buttonContainer > * { + width: 1px; + flex-grow: 1; } .authorsList { - list-style: none; - margin: 0; - padding: 0; + list-style: none; + margin: 0; + padding: 0; } .authorContainer { - padding: var(--collection-page_author_padding); - background-color: var(--surface_primary_emphasis-none); - border-radius: var(--collection-page_author_corner-radius); - display: grid; + padding: var(--collection-page_author_padding); + background-color: var(--surface_primary_emphasis-none); + border-radius: var(--collection-page_author_corner-radius); + display: grid; - grid-template-columns: min-content 1fr; - grid-template-rows: repeat(3, min-content); + grid-template-columns: min-content 1fr; + grid-template-rows: repeat(3, min-content); - @include from($tabletSmall) { - grid-template-columns: min-content 1fr min-content; - grid-column-gap: var(--collection-page_description_padding-top); - } + @include from($tabletSmall) { + grid-template-columns: min-content 1fr min-content; + grid-column-gap: var(--collection-page_description_padding-top); + } } .authorImage { - height: var(--collection-page_author_avatar_size); - width: var(--collection-page_author_avatar_size); - align-self: center; - border-radius: 50%; - overflow: hidden; - border-style: solid; - border-width: var(--collection-page_author_avatar_border-width); - margin-right: var(--collection-page_author_details_gap); + height: var(--collection-page_author_avatar_size); + width: var(--collection-page_author_avatar_size); + align-self: center; + border-radius: 50%; + overflow: hidden; + border-style: solid; + border-width: var(--collection-page_author_avatar_border-width); + margin-right: var(--collection-page_author_details_gap); - grid-row: 1; - grid-column: 1; + grid-row: 1; + grid-column: 1; - @include from($tabletSmall) { - grid-row: 1; - grid-column: 1; - } + @include from($tabletSmall) { + grid-row: 1; + grid-column: 1; + } } .authorImage img { - height: 100%; - width: 100%; + height: 100%; + width: 100%; } .authorMetaData { - height: max-content; - align-self: center; + height: max-content; + align-self: center; - grid-row: 1; - grid-column: 2; + grid-row: 1; + grid-column: 2; - @include from($desktopSmall) { - grid-row: 1; - grid-column: 2; - } + @include from($desktopSmall) { + grid-row: 1; + grid-column: 2; + } } .authorName { - margin: 0; - color: var(--collection-page_author_name_color); + margin: 0; + color: var(--collection-page_author_name_color); } .authorArticles { - margin: 0; - color: var(--collection-page_author_count-articles_color); + margin: 0; + color: var(--collection-page_author_count-articles_color); } .authorWordCount, .authorMetaSeperatorDot { - margin: 0; - color: var(--collection-page_author_count-words_color); + margin: 0; + color: var(--collection-page_author_count-words_color); } .viewProfileBtn { - height: fit-content; - align-self: center; + height: fit-content; + align-self: center; - grid-row: 3; - grid-column: 1 / 3; + grid-row: 3; + grid-column: 1 / 3; - @include from($tabletSmall) { - grid-row: 1; - grid-column: 3; - } + @include from($tabletSmall) { + grid-row: 1; + grid-column: 3; + } } .authorDescription { - padding-top: var(--collection-page_author_description_padding-top); - padding-bottom: var(--collection-page_title_padding-bottom); + padding-top: var(--collection-page_author_description_padding-top); + padding-bottom: var(--collection-page_title_padding-bottom); - grid-row: 2; - grid-column: 1 / 3; + grid-row: 2; + grid-column: 1 / 3; - @include from($tabletSmall) { - padding-bottom: unset; - grid-row: 2; - grid-column: 1 / span 3; - } + @include from($tabletSmall) { + padding-bottom: unset; + grid-row: 2; + grid-column: 1 / span 3; + } } diff --git a/src/views/collections/framework-field-guide/components/pricing-card.module.scss b/src/views/collections/framework-field-guide/components/pricing-card.module.scss index e1aa15c8..8dba2908 100644 --- a/src/views/collections/framework-field-guide/components/pricing-card.module.scss +++ b/src/views/collections/framework-field-guide/components/pricing-card.module.scss @@ -1,291 +1,294 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints"; - -.pricingCardContainerLi { - display: block; - padding: var(--section-ver-padding) var(--section-hor-padding); - border-radius: var(--pricing-container-radius); - background: var(--pricing-container_default); - transition: background var(--color-transition-time) - var(--color-transition-ease), - color var(--color-transition-time) var(--color-transition-ease); - position: relative; -} - -.pricingCardContainerLi.highlighted { - background: var(--pricing-container_highlighted); -} - -@include from($desktop) { - .pricingCardContainerLi { - width: calc(100% / 3 - var(--pricing-container-radius)); - } - .pricingCardContainerLi.highlighted { - width: calc(100% / 3); - } -} - -.pricingCardContainer { - display: flex; - flex-direction: column; - gap: var(--section-gap); - text-align: center; -} - -.topTextContainer { - display: flex; - flex-direction: column; - flex-wrap: nowrap; - gap: var(--section-gap); -} - -@include from($tablet) { - .topTextContainer { - flex-direction: row; - } - - .topTextContainer > div { - width: 50%; - } - - .topTextContainer > div:first-child { - text-align: start; - } - - .topTextContainer > div:last-child { - text-align: end; - } -} - -@include from($desktop) { - .topTextContainer { - flex-direction: column; - } - - .topTextContainer > div { - width: 100%; - } - - .topTextContainer > div:first-child, - .topTextContainer > div:last-child { - text-align: center; - } -} - -.saleTag { - position: absolute; - height: var(--sale-badge-size); - width: var(--sale-badge-size); - top: var(--sale-badge-offset); - right: var(--sale-badge-offset); - transform: rotate(var(--sale-badge-rotation)); -} - -.pricingTitle { - color: var(--on-dark-emphasis-high); - margin: 0; - margin-bottom: var(--spc-1x); -} - -.pricingDescription { - color: var(--on-dark-emphasis-medium); - margin: 0; -} - -.pricingPrice { - color: var(--on-dark-emphasis-high); - margin: 0; - margin-bottom: var(--spc-1x); -} - -.enterpriseToggleContainer { - display: grid; - grid-template-rows: 1fr; - grid-template-columns: 1fr auto 1fr; - align-items: center; -} - -.enterpriseToggleText { - margin: 0; - color: var(--slate-300); - padding: 0 var(--spc-2x); -} - -@include from($desktop) { - .enterpriseToggleText { - padding: 0 var(--spc-1x); - } -} - -.enterpriseToggleText { - text-align: right; -} - -.enterpriseToggleText + .enterpriseToggleText { - text-align: left; -} - -.enterpriseToggle:not(:checked) + .enterpriseToggleText { - color: var(--slate-050); -} - -.enterpriseToggle:checked + .enterpriseToggleText + .enterpriseToggleText { - color: var(--slate-050); -} - -.individualText { - order: -1; -} - -input[type="checkbox"].enterpriseToggle { - appearance: none; - width: var(--pricing-toggle-width); - height: var(--pricing-toggle-height); - position: relative; - border-radius: 50px; - box-sizing: content-box; - cursor: pointer; - transition: background 150ms ease-in-out; - background: var(--pricing-toggle-track-color); -} - -input[type="checkbox"].enterpriseToggle:hover { - background: var(--pricing-toggle-track-color_hovered); -} - -input[type="checkbox"].enterpriseToggle:active { - background: var(--pricing-toggle-track-color_pressed); -} - -/* Thumb */ -input[type="checkbox"].enterpriseToggle::before { - top: 50%; - left: var(--pricing-toggle-gap); - transform: translateY(-50%); - transition: left 150ms ease-in-out, background-color 150ms ease-in-out, - height 150ms ease-in-out, width 150ms ease-in-out; - content: " "; - width: var(--pricing-toggle-thumb-size); - height: var(--pricing-toggle-thumb-size); - background: var(--slate-200); - position: absolute; - border-radius: 50px; -} - -input[type="checkbox"].enterpriseToggle:hover::before { - width: var(--pricing-toggle-thumb-size_hovered); - height: var(--pricing-toggle-thumb-size_hovered); -} - -input[type="checkbox"].enterpriseToggle:active::before { - width: var(--pricing-toggle-thumb-size_pressed); - height: var(--pricing-toggle-thumb-size_pressed); -} - -input[type="checkbox"].enterpriseToggle:hover::before { - left: var(--pricing-toggle-gap_hovered); -} - -input[type="checkbox"].enterpriseToggle:active::before { - left: var(--pricing-toggle-gap_pressed); -} - -input[type="checkbox"].enterpriseToggle:checked { - background: var(--slate-500); -} - -input[type="checkbox"].enterpriseToggle:checked::before { - left: calc( - 100% - var(--pricing-toggle-thumb-size) - var(--pricing-toggle-gap) - ); -} - -input[type="checkbox"].enterpriseToggle:checked:hover::before { - left: calc( - 100% - var(--pricing-toggle-thumb-size_hovered) - - var(--pricing-toggle-gap_hovered) - ); -} - -input[type="checkbox"].enterpriseToggle:checked:active::before { - left: calc( - 100% - var(--pricing-toggle-thumb-size_pressed) - - var(--pricing-toggle-gap_pressed) - ); -} - -.pricingEnterpriseExplainer { - color: var(--on-dark-emphasis-medium); - margin: 0; - opacity: 0; - transition: opacity 300ms ease-in-out; -} - -.divider { - display: none; - border: none; - border-top: 2px dotted #607090; -} - -@include from($tablet) { - .divider { - display: block; - } -} - -.listItems { - text-align: start; - display: flex; - flex-direction: column; - flex-wrap: nowrap; - gap: var(--section-gap); -} - -@include from($tablet) { - .listItems { - flex-direction: row; - } - - .listItems > ul { - width: 50%; - } -} - -@include from($desktop) { - .listItems { - flex-direction: column; - } - - .listItems > ul { - width: 100%; - } -} - -.listItemBullet { - height: var(--bullet-list-item-icon-size); - width: var(--bullet-list-item-icon-size); - margin-right: var(--spc-1x); -} - -.starPoints, -.bulletPoints { - list-style: none; - margin: 0; - padding: 0; - display: flex; - flex-direction: column; - flex-wrap: nowrap; - gap: var(--bullet-list-item-gap); -} - -.starPoints > li, -.bulletPoints > li { - display: flex; - align-items: center; -} - -@include until($tablet) { - .removeOnMobile { - display: none; - } -} +@import "../tokens/utils"; +@import "../tokens/breakpoints"; + +.pricingCardContainerLi { + display: block; + padding: var(--section-ver-padding) var(--section-hor-padding); + border-radius: var(--pricing-container-radius); + background: var(--pricing-container_default); + transition: + background var(--color-transition-time) var(--color-transition-ease), + color var(--color-transition-time) var(--color-transition-ease); + position: relative; +} + +.pricingCardContainerLi.highlighted { + background: var(--pricing-container_highlighted); +} + +@include from($desktop) { + .pricingCardContainerLi { + width: calc(100% / 3 - var(--pricing-container-radius)); + } + .pricingCardContainerLi.highlighted { + width: calc(100% / 3); + } +} + +.pricingCardContainer { + display: flex; + flex-direction: column; + gap: var(--section-gap); + text-align: center; +} + +.topTextContainer { + display: flex; + flex-direction: column; + flex-wrap: nowrap; + gap: var(--section-gap); +} + +@include from($tablet) { + .topTextContainer { + flex-direction: row; + } + + .topTextContainer > div { + width: 50%; + } + + .topTextContainer > div:first-child { + text-align: start; + } + + .topTextContainer > div:last-child { + text-align: end; + } +} + +@include from($desktop) { + .topTextContainer { + flex-direction: column; + } + + .topTextContainer > div { + width: 100%; + } + + .topTextContainer > div:first-child, + .topTextContainer > div:last-child { + text-align: center; + } +} + +.saleTag { + position: absolute; + height: var(--sale-badge-size); + width: var(--sale-badge-size); + top: var(--sale-badge-offset); + right: var(--sale-badge-offset); + transform: rotate(var(--sale-badge-rotation)); +} + +.pricingTitle { + color: var(--on-dark-emphasis-high); + margin: 0; + margin-bottom: var(--spc-1x); +} + +.pricingDescription { + color: var(--on-dark-emphasis-medium); + margin: 0; +} + +.pricingPrice { + color: var(--on-dark-emphasis-high); + margin: 0; + margin-bottom: var(--spc-1x); +} + +.enterpriseToggleContainer { + display: grid; + grid-template-rows: 1fr; + grid-template-columns: 1fr auto 1fr; + align-items: center; +} + +.enterpriseToggleText { + margin: 0; + color: var(--slate-300); + padding: 0 var(--spc-2x); +} + +@include from($desktop) { + .enterpriseToggleText { + padding: 0 var(--spc-1x); + } +} + +.enterpriseToggleText { + text-align: right; +} + +.enterpriseToggleText + .enterpriseToggleText { + text-align: left; +} + +.enterpriseToggle:not(:checked) + .enterpriseToggleText { + color: var(--slate-050); +} + +.enterpriseToggle:checked + .enterpriseToggleText + .enterpriseToggleText { + color: var(--slate-050); +} + +.individualText { + order: -1; +} + +input[type="checkbox"].enterpriseToggle { + appearance: none; + width: var(--pricing-toggle-width); + height: var(--pricing-toggle-height); + position: relative; + border-radius: 50px; + box-sizing: content-box; + cursor: pointer; + transition: background 150ms ease-in-out; + background: var(--pricing-toggle-track-color); +} + +input[type="checkbox"].enterpriseToggle:hover { + background: var(--pricing-toggle-track-color_hovered); +} + +input[type="checkbox"].enterpriseToggle:active { + background: var(--pricing-toggle-track-color_pressed); +} + +/* Thumb */ +input[type="checkbox"].enterpriseToggle::before { + top: 50%; + left: var(--pricing-toggle-gap); + transform: translateY(-50%); + transition: + left 150ms ease-in-out, + background-color 150ms ease-in-out, + height 150ms ease-in-out, + width 150ms ease-in-out; + content: " "; + width: var(--pricing-toggle-thumb-size); + height: var(--pricing-toggle-thumb-size); + background: var(--slate-200); + position: absolute; + border-radius: 50px; +} + +input[type="checkbox"].enterpriseToggle:hover::before { + width: var(--pricing-toggle-thumb-size_hovered); + height: var(--pricing-toggle-thumb-size_hovered); +} + +input[type="checkbox"].enterpriseToggle:active::before { + width: var(--pricing-toggle-thumb-size_pressed); + height: var(--pricing-toggle-thumb-size_pressed); +} + +input[type="checkbox"].enterpriseToggle:hover::before { + left: var(--pricing-toggle-gap_hovered); +} + +input[type="checkbox"].enterpriseToggle:active::before { + left: var(--pricing-toggle-gap_pressed); +} + +input[type="checkbox"].enterpriseToggle:checked { + background: var(--slate-500); +} + +input[type="checkbox"].enterpriseToggle:checked::before { + left: calc( + 100% - var(--pricing-toggle-thumb-size) - var(--pricing-toggle-gap) + ); +} + +input[type="checkbox"].enterpriseToggle:checked:hover::before { + left: calc( + 100% - var(--pricing-toggle-thumb-size_hovered) - + var(--pricing-toggle-gap_hovered) + ); +} + +input[type="checkbox"].enterpriseToggle:checked:active::before { + left: calc( + 100% - var(--pricing-toggle-thumb-size_pressed) - + var(--pricing-toggle-gap_pressed) + ); +} + +.pricingEnterpriseExplainer { + color: var(--on-dark-emphasis-medium); + margin: 0; + opacity: 0; + transition: opacity 300ms ease-in-out; +} + +.divider { + display: none; + border: none; + border-top: 2px dotted #607090; +} + +@include from($tablet) { + .divider { + display: block; + } +} + +.listItems { + text-align: start; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + gap: var(--section-gap); +} + +@include from($tablet) { + .listItems { + flex-direction: row; + } + + .listItems > ul { + width: 50%; + } +} + +@include from($desktop) { + .listItems { + flex-direction: column; + } + + .listItems > ul { + width: 100%; + } +} + +.listItemBullet { + height: var(--bullet-list-item-icon-size); + width: var(--bullet-list-item-icon-size); + margin-right: var(--spc-1x); +} + +.starPoints, +.bulletPoints { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + flex-wrap: nowrap; + gap: var(--bullet-list-item-gap); +} + +.starPoints > li, +.bulletPoints > li { + display: flex; + align-items: center; +} + +@include until($tablet) { + .removeOnMobile { + display: none; + } +} diff --git a/src/views/collections/framework-field-guide/components/prominent-quote.module.scss b/src/views/collections/framework-field-guide/components/prominent-quote.module.scss index c842d69f..f6308a11 100644 --- a/src/views/collections/framework-field-guide/components/prominent-quote.module.scss +++ b/src/views/collections/framework-field-guide/components/prominent-quote.module.scss @@ -1,77 +1,76 @@ -.quoteContainer { - padding: var(--section-ver-padding) var(--section-hor-padding); - text-align: center; - position: relative; - z-index: 1; - margin: 0; -} - -.quoteText { - margin: 0; - position: relative; -} - -.quoteText::after, -.quoteText::before { - content: " "; - position: absolute; - height: var(--quote-marks-height_prominent); - aspect-ratio: var(--quote-mark-aspect-ratio); - background-image: url("../icons/big_quotation_mark.svg"); - background-repeat: no-repeat; - background-size: contain; - z-index: -1; - opacity: var(--quote-mark-opacity); -} - -// Top right corner quote -.quoteText::after { - top: calc(0px - var(--quote-mark-offset_prominent)); - right: calc(0px - var(--quote-mark-offset_prominent)); -} - -// Bottom left corner quote -.quoteText::before { - bottom: calc(0px - var(--quote-mark-offset_prominent)); - left: calc(0px - var(--quote-mark-offset_prominent)); - transform: rotate(180deg); -} - -.quoteAvatar { - margin-top: var(--section-gap); - margin-bottom: var(--spc-1x); - margin-left: auto; - margin-right: auto; - height: var(--quote-avatar-size_prominent); - width: var(--quote-avatar-size_prominent); - border-radius: var(--corner-radius-circular); -} - -.quotePersonName { - margin: 0; - color: var(--on-dark-emphasis-high); - text-decoration-line: underline !important; - text-decoration-color: var(--quote-arrow-link-color) !important; - text-decoration-thickness: 1.5px !important; - position: relative; - display: inline-block; -} - -.quotePersonName::before { - content: " "; - position: absolute; - right: calc(-4px - 0.5rem); - top: 50%; - transform: translateY(-50%); - height: 0.5rem; - width: 0.5rem; - background-image: url("../icons/link_arrow.svg"); - background-repeat: no-repeat; -} - - -.quotePersonTitle { - margin-top: 4px; - margin-bottom: 0; - color: var(--on-dark-emphasis-medium); -} +.quoteContainer { + padding: var(--section-ver-padding) var(--section-hor-padding); + text-align: center; + position: relative; + z-index: 1; + margin: 0; +} + +.quoteText { + margin: 0; + position: relative; +} + +.quoteText::after, +.quoteText::before { + content: " "; + position: absolute; + height: var(--quote-marks-height_prominent); + aspect-ratio: var(--quote-mark-aspect-ratio); + background-image: url("../icons/big_quotation_mark.svg"); + background-repeat: no-repeat; + background-size: contain; + z-index: -1; + opacity: var(--quote-mark-opacity); +} + +// Top right corner quote +.quoteText::after { + top: calc(0px - var(--quote-mark-offset_prominent)); + right: calc(0px - var(--quote-mark-offset_prominent)); +} + +// Bottom left corner quote +.quoteText::before { + bottom: calc(0px - var(--quote-mark-offset_prominent)); + left: calc(0px - var(--quote-mark-offset_prominent)); + transform: rotate(180deg); +} + +.quoteAvatar { + margin-top: var(--section-gap); + margin-bottom: var(--spc-1x); + margin-left: auto; + margin-right: auto; + height: var(--quote-avatar-size_prominent); + width: var(--quote-avatar-size_prominent); + border-radius: var(--corner-radius-circular); +} + +.quotePersonName { + margin: 0; + color: var(--on-dark-emphasis-high); + text-decoration-line: underline !important; + text-decoration-color: var(--quote-arrow-link-color) !important; + text-decoration-thickness: 1.5px !important; + position: relative; + display: inline-block; +} + +.quotePersonName::before { + content: " "; + position: absolute; + right: calc(-4px - 0.5rem); + top: 50%; + transform: translateY(-50%); + height: 0.5rem; + width: 0.5rem; + background-image: url("../icons/link_arrow.svg"); + background-repeat: no-repeat; +} + +.quotePersonTitle { + margin-top: 4px; + margin-bottom: 0; + color: var(--on-dark-emphasis-medium); +} diff --git a/src/views/collections/framework-field-guide/components/quote-card.module.scss b/src/views/collections/framework-field-guide/components/quote-card.module.scss index 173d5a5a..2784759f 100644 --- a/src/views/collections/framework-field-guide/components/quote-card.module.scss +++ b/src/views/collections/framework-field-guide/components/quote-card.module.scss @@ -1,84 +1,84 @@ -.quoteCardContainerLi { - display: block; -} - -.quoteCardContainer { - display: flex; - flex-direction: column; - gap: var(--quote-spacing); - padding: var(--quote-spacing); - position: relative; - overflow: hidden; - z-index: 1; - background: var(--slate-800); - transition: background var(--color-transition-time) - var(--color-transition-ease); - border-radius: var(--quote-corner-radius); -} - -// Top right corner quote -.quoteCardContainer::after { - content: " "; - position: absolute; - height: var(--quote-marks-height_contained); - aspect-ratio: var(--quote-mark-aspect-ratio); - background-image: url("../icons/big_quotation_mark.svg"); - background-repeat: no-repeat; - background-size: contain; - z-index: -1; - opacity: var(--quote-mark-opacity); - top: calc(0px - var(--quote-mark-offset)); - right: calc(0px - var(--quote-mark-offset)); -} - -.quoteText { - margin: 0; -} - -.personDetailsContainer picture { - height: var(--quote-avatar-size); - width: var(--quote-avatar-size); -} - -.personAvatar { - height: var(--quote-avatar-size); - width: var(--quote-avatar-size); - border-radius: var(--corner-radius-circular); -} - -.personDetailsContainer { - display: flex; - flex-wrap: nowrap; - gap: var(--spc-2x); - align-items: center; -} - -.personTextContainer { -} - -.personName { - margin: 0; - text-decoration-line: underline !important; - text-decoration-color: var(--quote-arrow-link-color) !important; - text-decoration-thickness: 1.5px !important; - position: relative; - width: fit-content; - color: var(--on-dark-emphasis-high); -} - -.personName::before { - content: " "; - position: absolute; - right: calc(-4px - 0.5rem); - top: 50%; - transform: translateY(-50%); - height: 0.5rem; - width: 0.5rem; - background-image: url("../icons/link_arrow.svg"); - background-repeat: no-repeat; -} - -.personTitle { - margin: 0; - color: var(--on-dark-emphasis-medium); -} +.quoteCardContainerLi { + display: block; +} + +.quoteCardContainer { + display: flex; + flex-direction: column; + gap: var(--quote-spacing); + padding: var(--quote-spacing); + position: relative; + overflow: hidden; + z-index: 1; + background: var(--slate-800); + transition: background var(--color-transition-time) + var(--color-transition-ease); + border-radius: var(--quote-corner-radius); +} + +// Top right corner quote +.quoteCardContainer::after { + content: " "; + position: absolute; + height: var(--quote-marks-height_contained); + aspect-ratio: var(--quote-mark-aspect-ratio); + background-image: url("../icons/big_quotation_mark.svg"); + background-repeat: no-repeat; + background-size: contain; + z-index: -1; + opacity: var(--quote-mark-opacity); + top: calc(0px - var(--quote-mark-offset)); + right: calc(0px - var(--quote-mark-offset)); +} + +.quoteText { + margin: 0; +} + +.personDetailsContainer picture { + height: var(--quote-avatar-size); + width: var(--quote-avatar-size); +} + +.personAvatar { + height: var(--quote-avatar-size); + width: var(--quote-avatar-size); + border-radius: var(--corner-radius-circular); +} + +.personDetailsContainer { + display: flex; + flex-wrap: nowrap; + gap: var(--spc-2x); + align-items: center; +} + +.personTextContainer { +} + +.personName { + margin: 0; + text-decoration-line: underline !important; + text-decoration-color: var(--quote-arrow-link-color) !important; + text-decoration-thickness: 1.5px !important; + position: relative; + width: fit-content; + color: var(--on-dark-emphasis-high); +} + +.personName::before { + content: " "; + position: absolute; + right: calc(-4px - 0.5rem); + top: 50%; + transform: translateY(-50%); + height: 0.5rem; + width: 0.5rem; + background-image: url("../icons/link_arrow.svg"); + background-repeat: no-repeat; +} + +.personTitle { + margin: 0; + color: var(--on-dark-emphasis-medium); +} diff --git a/src/views/collections/framework-field-guide/components/quotes-container.module.scss b/src/views/collections/framework-field-guide/components/quotes-container.module.scss index 1378440e..71e85c07 100644 --- a/src/views/collections/framework-field-guide/components/quotes-container.module.scss +++ b/src/views/collections/framework-field-guide/components/quotes-container.module.scss @@ -1,72 +1,74 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -.quotesContainer { - column-count: 1; - column-gap: var(--quote-grid-gap); - margin: 0; - padding: 0; - list-style: none; - margin-bottom: 5rem; -} - -.quotesContainer > * { - break-inside: avoid; - margin-bottom: var(--quote-grid-gap); -} - -@include from($tablet) { - .quotesContainer { - column-count: 2; - } -} - -@include from($desktop) { - .quotesContainer { - column-count: 3; - } -} - -.quotesAndButtonsContainer { - position: relative; - display: flex; - flex-direction: column; -} - -.showMoreLessContainer { - order: -1; - flex-grow: 0; - position: sticky; - z-index: 2; - top: 100vh; - pointer-events: none; -} - -.fullHeightSizer { - position: absolute; - top: -100vh; - left: 0; - height: 100vh; - width: 100%; - pointer-events: none; -} - -.showMoreButton, .showLessButton { - position: absolute !important; - bottom: 1rem; - left: 50%; - transform: translateX(-50%); - pointer-events: all; -} - -.quotesScrim { - background: var(--section-background); - transition: background var(--color-transition-time) var(--color-transition-ease); - height: 100%; - position: absolute; - inset: 0; - z-index: 1; - mask-image: linear-gradient(0deg, black 0%, transparent 50%); - -webkit-mask-image: linear-gradient(0deg, black 0%, transparent 50%); - pointer-events: none; -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +.quotesContainer { + column-count: 1; + column-gap: var(--quote-grid-gap); + margin: 0; + padding: 0; + list-style: none; + margin-bottom: 5rem; +} + +.quotesContainer > * { + break-inside: avoid; + margin-bottom: var(--quote-grid-gap); +} + +@include from($tablet) { + .quotesContainer { + column-count: 2; + } +} + +@include from($desktop) { + .quotesContainer { + column-count: 3; + } +} + +.quotesAndButtonsContainer { + position: relative; + display: flex; + flex-direction: column; +} + +.showMoreLessContainer { + order: -1; + flex-grow: 0; + position: sticky; + z-index: 2; + top: 100vh; + pointer-events: none; +} + +.fullHeightSizer { + position: absolute; + top: -100vh; + left: 0; + height: 100vh; + width: 100%; + pointer-events: none; +} + +.showMoreButton, +.showLessButton { + position: absolute !important; + bottom: 1rem; + left: 50%; + transform: translateX(-50%); + pointer-events: all; +} + +.quotesScrim { + background: var(--section-background); + transition: background var(--color-transition-time) + var(--color-transition-ease); + height: 100%; + position: absolute; + inset: 0; + z-index: 1; + mask-image: linear-gradient(0deg, black 0%, transparent 50%); + -webkit-mask-image: linear-gradient(0deg, black 0%, transparent 50%); + pointer-events: none; +} diff --git a/src/views/collections/framework-field-guide/components/shared-section-styling.scss b/src/views/collections/framework-field-guide/components/shared-section-styling.scss index cd44efc5..47fd01e0 100644 --- a/src/views/collections/framework-field-guide/components/shared-section-styling.scss +++ b/src/views/collections/framework-field-guide/components/shared-section-styling.scss @@ -1,105 +1,108 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints"; - -.book-section { - padding: var(--section-ver-padding) 0; - text-align: center; - transition: background-color var(--color-transition-time) var(--color-transition-ease); - will-change: transition; -} - -.book-section > :not([data-no-horiz-pad]) { - padding: 0 var(--section-ver-padding); -} - -.book-section > :not([data-no-max-width]) { - max-width: var(--max-width_small); - margin-left: auto; - margin-right: auto; -} - -.book-title { - background: var(--text-gradient); - transition: background var(--color-transition-time) var(--color-transition-ease); - will-change: transition; - -webkit-background-clip: text; - background-clip: text; - color: transparent; - margin: 0 auto; - line-height: normal !important; -} - -.book-subtitle { - color: var(--on-dark-emphasis-medium); - margin: var(--section-gap) 0; -} - -.book-bio { - color: var(--on-dark-emphasis-high) -} - -.book-ctas { - display: grid; - grid-template-columns: repeat(auto-fit, 100%); - justify-content: center; - gap: var(--section-gap); - margin-left: auto; - margin-right: auto; - margin-top: var(--spc-6x); - margin-bottom: var(--section-gap); - @include from($tablet) { - grid-template-columns: repeat(auto-fit, minmax(min-content, 280px)); - } -} - -.book-coming-soon { - color: var(--on-dark-emphasis-medium); -} - -.section-metrics-main-container { - display: flex; - justify-content: space-around; -} - -.section-metric-container { - padding: var(--spc-2x) var(--spc-1x); - @include from($desktop) { - padding: var(--spc-4x) var(--spc-2x); - } -} - -.section-metric-text { - margin: 0; -} - -.text-style-main-text-only, .section-metric-asterisk { - background: var(--text-gradient); - -webkit-background-clip: text; - background-clip: text; - color: transparent; -} - -.section-metric-subtitle { - color: var(--on-dark-emphasis-medium); - display: block; -} - -.text-style-main-text { - position: relative; - display: inline-block; -} - -.section-metric-asterisk { - position: absolute; - left: 100%; - top: calc(0px - var(--spc-1x)); -} - -.section-chip-group-container { - margin: var(--section-gap) auto; -} - -.section-disclaimer { - margin: 0; - color: var(--on-dark-emphasis-medium); -} +@import "../tokens/utils"; +@import "../tokens/breakpoints"; + +.book-section { + padding: var(--section-ver-padding) 0; + text-align: center; + transition: background-color var(--color-transition-time) + var(--color-transition-ease); + will-change: transition; +} + +.book-section > :not([data-no-horiz-pad]) { + padding: 0 var(--section-ver-padding); +} + +.book-section > :not([data-no-max-width]) { + max-width: var(--max-width_small); + margin-left: auto; + margin-right: auto; +} + +.book-title { + background: var(--text-gradient); + transition: background var(--color-transition-time) + var(--color-transition-ease); + will-change: transition; + -webkit-background-clip: text; + background-clip: text; + color: transparent; + margin: 0 auto; + line-height: normal !important; +} + +.book-subtitle { + color: var(--on-dark-emphasis-medium); + margin: var(--section-gap) 0; +} + +.book-bio { + color: var(--on-dark-emphasis-high); +} + +.book-ctas { + display: grid; + grid-template-columns: repeat(auto-fit, 100%); + justify-content: center; + gap: var(--section-gap); + margin-left: auto; + margin-right: auto; + margin-top: var(--spc-6x); + margin-bottom: var(--section-gap); + @include from($tablet) { + grid-template-columns: repeat(auto-fit, minmax(min-content, 280px)); + } +} + +.book-coming-soon { + color: var(--on-dark-emphasis-medium); +} + +.section-metrics-main-container { + display: flex; + justify-content: space-around; +} + +.section-metric-container { + padding: var(--spc-2x) var(--spc-1x); + @include from($desktop) { + padding: var(--spc-4x) var(--spc-2x); + } +} + +.section-metric-text { + margin: 0; +} + +.text-style-main-text-only, +.section-metric-asterisk { + background: var(--text-gradient); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + +.section-metric-subtitle { + color: var(--on-dark-emphasis-medium); + display: block; +} + +.text-style-main-text { + position: relative; + display: inline-block; +} + +.section-metric-asterisk { + position: absolute; + left: 100%; + top: calc(0px - var(--spc-1x)); +} + +.section-chip-group-container { + margin: var(--section-gap) auto; +} + +.section-disclaimer { + margin: 0; + color: var(--on-dark-emphasis-medium); +} diff --git a/src/views/collections/framework-field-guide/components/signup-form.module.scss b/src/views/collections/framework-field-guide/components/signup-form.module.scss index d3d1051c..4f431edb 100644 --- a/src/views/collections/framework-field-guide/components/signup-form.module.scss +++ b/src/views/collections/framework-field-guide/components/signup-form.module.scss @@ -1,86 +1,88 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints"; - -.signUpFormContainer { - display: flex; - flex-direction: column; - gap: 24px; -} - -@include from($desktop) { - .signUpFormContainer { - flex-direction: row; - align-items: flex-end; - gap: 0; - } -} - -.inputContainer { - display: inline-block; - text-align: start; -} - -@include from($desktop) { - .inputContainer { - flex-basis: 100%; - } -} - -.emailInput { -} - -@include from($desktop) { - .emailInput { - margin-left: var(--section-gap); - margin-right: var(--sign-up-btn-gap); - } -} - -.inputLabel { - margin-left: var(--spc-2x); - margin-bottom: var(--spc-1x); - display: block; -} - -.input { - box-sizing: border-box; - width: 100%; - border-style: solid; - border-radius: var(--form-border-radius); - border-width: var(--form-border-width); - border-color: var(--outline); - background: transparent; - color: white; - padding: var(--form-padding-vertical) 0 var(--form-padding-vertical) - var(--form-padding-horizontal); - transition: background var(--btn-state-transition-duration) - var(--btn-state-transition-easing), border-color var(--btn-state-transition-duration) - var(--btn-state-transition-easing); -} - -.input:hover { - background: var(--slate-800); -} - -.input:focus { - background: var(--slate-700); - border-color: var(--outline-focused); -} - -@include until($desktop) { - .input { - line-height: 1.5rem !important; - } -} - -.signUpButton { - flex-shrink: 0; - border-radius: var(--form-border-radius) !important; - height: fit-content; -} - -@include from($desktop) { - .hideOnDesktop { - display: none; - } -} +@import "../tokens/utils"; +@import "../tokens/breakpoints"; + +.signUpFormContainer { + display: flex; + flex-direction: column; + gap: 24px; +} + +@include from($desktop) { + .signUpFormContainer { + flex-direction: row; + align-items: flex-end; + gap: 0; + } +} + +.inputContainer { + display: inline-block; + text-align: start; +} + +@include from($desktop) { + .inputContainer { + flex-basis: 100%; + } +} + +.emailInput { +} + +@include from($desktop) { + .emailInput { + margin-left: var(--section-gap); + margin-right: var(--sign-up-btn-gap); + } +} + +.inputLabel { + margin-left: var(--spc-2x); + margin-bottom: var(--spc-1x); + display: block; +} + +.input { + box-sizing: border-box; + width: 100%; + border-style: solid; + border-radius: var(--form-border-radius); + border-width: var(--form-border-width); + border-color: var(--outline); + background: transparent; + color: white; + padding: var(--form-padding-vertical) 0 var(--form-padding-vertical) + var(--form-padding-horizontal); + transition: + background var(--btn-state-transition-duration) + var(--btn-state-transition-easing), + border-color var(--btn-state-transition-duration) + var(--btn-state-transition-easing); +} + +.input:hover { + background: var(--slate-800); +} + +.input:focus { + background: var(--slate-700); + border-color: var(--outline-focused); +} + +@include until($desktop) { + .input { + line-height: 1.5rem !important; + } +} + +.signUpButton { + flex-shrink: 0; + border-radius: var(--form-border-radius) !important; + height: fit-content; +} + +@include from($desktop) { + .hideOnDesktop { + display: none; + } +} diff --git a/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_background.tsx b/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_background.tsx index 24d6f603..ac4faecf 100644 --- a/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_background.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_background.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const ForestBackground = () => { - const forestBackgroundColor = useCSSPropertyValue('--ecos-700', "#366E47"); - - const svg = useMemo(() => { - return `` - }, [forestBackgroundColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const ForestBackground = () => { + const forestBackgroundColor = useCSSPropertyValue("--ecos-700", "#366E47"); + + const svg = useMemo(() => { + return ``; + }, [forestBackgroundColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_foreground.tsx b/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_foreground.tsx index cdc9d4c2..cfac71c3 100644 --- a/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_foreground.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_foreground.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const ForestForeground = () => { - const forestForegroundColor = useCSSPropertyValue('--ecos-900', "#153D29"); - - const svg = useMemo(() => { - return `` - }, [forestForegroundColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const ForestForeground = () => { + const forestForegroundColor = useCSSPropertyValue("--ecos-900", "#153D29"); + + const svg = useMemo(() => { + return ``; + }, [forestForegroundColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_middleground.tsx b/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_middleground.tsx index d76c0d32..59ba7bfc 100644 --- a/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_middleground.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/ecosystem/forest_middleground.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const ForestMiddleground = () => { - const forestMiddlegroundColor = useCSSPropertyValue('--ecos-800', "#245538"); - - const svg = useMemo(() => { - return `` - }, [forestMiddlegroundColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const ForestMiddleground = () => { + const forestMiddlegroundColor = useCSSPropertyValue("--ecos-800", "#245538"); + + const svg = useMemo(() => { + return ``; + }, [forestMiddlegroundColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/fundamentals/background_repeat.tsx b/src/views/collections/framework-field-guide/cover-layers/fundamentals/background_repeat.tsx index 9d988c1d..f945eb28 100644 --- a/src/views/collections/framework-field-guide/cover-layers/fundamentals/background_repeat.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/fundamentals/background_repeat.tsx @@ -1,16 +1,22 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const BackgroundRepeat = () => { - const groundColor = useCSSPropertyValue('--fund-900', "#17383F"); - - const svg = useMemo(() => { - return `` - }, [groundColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const BackgroundRepeat = () => { + const groundColor = useCSSPropertyValue("--fund-900", "#17383F"); + + const svg = useMemo(() => { + return ``; + }, [groundColor]); + + return ( + + ); +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/fundamentals/ground_and_man.tsx b/src/views/collections/framework-field-guide/cover-layers/fundamentals/ground_and_man.tsx index 760bb84b..29fa7ba6 100644 --- a/src/views/collections/framework-field-guide/cover-layers/fundamentals/ground_and_man.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/fundamentals/ground_and_man.tsx @@ -1,6 +1,11 @@ export const GroundAndManSvg = () => { return ( - + { - const mountainColor = useCSSPropertyValue('--fund-300', "#94CEDB"); - - const svg = useMemo(() => { - return `` - }, [mountainColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const Mountains = () => { + const mountainColor = useCSSPropertyValue("--fund-300", "#94CEDB"); + + const svg = useMemo(() => { + return ``; + }, [mountainColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/fundamentals/sign_ground_reflection.tsx b/src/views/collections/framework-field-guide/cover-layers/fundamentals/sign_ground_reflection.tsx index 3cd16dea..4b1e7af7 100644 --- a/src/views/collections/framework-field-guide/cover-layers/fundamentals/sign_ground_reflection.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/fundamentals/sign_ground_reflection.tsx @@ -1,6 +1,11 @@ export const SignGroundReflection = () => { return ( - + { - const treeBackgroundColor = useCSSPropertyValue("--fund-400", "#74B3C0"); - const treeForegroundColor = useCSSPropertyValue("--fund-600", "#45818E"); - const waterColor = useCSSPropertyValue("--fund-100", "#D2F7FF"); - const treeReflectionColor = useCSSPropertyValue("--fund-300", "#94CEDB"); - - const svg = useMemo(() => { - return ``; - }, [ - treeBackgroundColor, - treeForegroundColor, - waterColor, - treeReflectionColor, - ]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const Trees = () => { + const treeBackgroundColor = useCSSPropertyValue("--fund-400", "#74B3C0"); + const treeForegroundColor = useCSSPropertyValue("--fund-600", "#45818E"); + const waterColor = useCSSPropertyValue("--fund-100", "#D2F7FF"); + const treeReflectionColor = useCSSPropertyValue("--fund-300", "#94CEDB"); + + const svg = useMemo(() => { + return ``; + }, [ + treeBackgroundColor, + treeForegroundColor, + waterColor, + treeReflectionColor, + ]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/bear_center.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/bear_center.tsx index 14e1625f..c161d1a9 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/bear_center.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/bear_center.tsx @@ -1,14 +1,23 @@ -export const BearCenter = () => { - return ( - - - - - - - ); -}; +export const BearCenter = () => { + return ( + + + + + + + ); +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_first_layer.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_first_layer.tsx index 77a7d342..f02dab47 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_first_layer.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_first_layer.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const CloudsFirstLayer = () => { - const cloudFirstColor = useCSSPropertyValue("--inter-400", "%23A473BB"); - - const svg = useMemo(() => { - return ``; - }, [cloudFirstColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const CloudsFirstLayer = () => { + const cloudFirstColor = useCSSPropertyValue("--inter-400", "%23A473BB"); + + const svg = useMemo(() => { + return ``; + }, [cloudFirstColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_fourth_layer.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_fourth_layer.tsx index 646066a4..22d8c984 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_fourth_layer.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_fourth_layer.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const CloudsFourthLayer = () => { - const cloudFourthColor = useCSSPropertyValue('--inter-800', "#261456"); - - const svg = useMemo(() => { - return `` - }, [cloudFourthColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const CloudsFourthLayer = () => { + const cloudFourthColor = useCSSPropertyValue("--inter-800", "#261456"); + + const svg = useMemo(() => { + return ``; + }, [cloudFourthColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_second_layer.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_second_layer.tsx index a2532b14..2fb6b3dc 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_second_layer.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_second_layer.tsx @@ -1,14 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const CloudsSecondLayer = () => { - const cloudSecondColor = useCSSPropertyValue('--inter-500', "#38154A3"); - - const svg = useMemo(() => { - return `` - }, [cloudSecondColor]); - - return ; -}; - +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const CloudsSecondLayer = () => { + const cloudSecondColor = useCSSPropertyValue("--inter-500", "#38154A3"); + + const svg = useMemo(() => { + return ``; + }, [cloudSecondColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_third_layer.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_third_layer.tsx index c6833a53..11803d9e 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/clouds_third_layer.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/clouds_third_layer.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const CloudsThirdLayer = () => { - const cloudThirdColor = useCSSPropertyValue('--inter-700', "#422474"); - - const svg = useMemo(() => { - return `` - }, [cloudThirdColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const CloudsThirdLayer = () => { + const cloudThirdColor = useCSSPropertyValue("--inter-700", "#422474"); + + const svg = useMemo(() => { + return ``; + }, [cloudThirdColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/ground_repeat.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/ground_repeat.tsx index 1d8f74dd..0f4b9297 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/ground_repeat.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/ground_repeat.tsx @@ -1,13 +1,13 @@ -import { useMemo } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const GroundRepeat = () => { - const groundColor = useCSSPropertyValue("--inter-900", "#110A33"); - - const svg = useMemo(() => { - return ``; - }, [groundColor]); - - return ; -}; +import { useMemo } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const GroundRepeat = () => { + const groundColor = useCSSPropertyValue("--inter-900", "#110A33"); + + const svg = useMemo(() => { + return ``; + }, [groundColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/internals/trees.tsx b/src/views/collections/framework-field-guide/cover-layers/internals/trees.tsx index 9f12ffbd..cfd02e7d 100644 --- a/src/views/collections/framework-field-guide/cover-layers/internals/trees.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/internals/trees.tsx @@ -1,14 +1,14 @@ -import { useMemo, useState } from "preact/hooks"; -import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; -import { RepeatBackground } from "../shared/repeat-background"; - -export const Trees = () => { - const treeBackgroundColor = useCSSPropertyValue("--inter-500", "#8154A3"); - const treeForegroundColor = useCSSPropertyValue("--inter-700", "#422474"); - - const svg = useMemo(() => { - return ``; - }, [treeBackgroundColor, treeForegroundColor]); - - return ; -}; +import { useMemo, useState } from "preact/hooks"; +import { useCSSPropertyValue } from "../../hooks/use-css-property-value"; +import { RepeatBackground } from "../shared/repeat-background"; + +export const Trees = () => { + const treeBackgroundColor = useCSSPropertyValue("--inter-500", "#8154A3"); + const treeForegroundColor = useCSSPropertyValue("--inter-700", "#422474"); + + const svg = useMemo(() => { + return ``; + }, [treeBackgroundColor, treeForegroundColor]); + + return ; +}; diff --git a/src/views/collections/framework-field-guide/cover-layers/shared/repeat-background.tsx b/src/views/collections/framework-field-guide/cover-layers/shared/repeat-background.tsx index 55a301cf..e0e735ec 100644 --- a/src/views/collections/framework-field-guide/cover-layers/shared/repeat-background.tsx +++ b/src/views/collections/framework-field-guide/cover-layers/shared/repeat-background.tsx @@ -1,88 +1,91 @@ -import { JSX } from "preact"; -import { - useCallback, - useLayoutEffect, - useMemo, - useRef, - useState, -} from "preact/hooks"; - -interface RepeatBackgroundProps { - svg: string; - fallbackStyle?: Omit["style"], string>; - javascriptEnabledStyle?: Omit["style"], string>; - aspectRatio: string; -} - -export const RepeatBackground = ({ - svg, - fallbackStyle = {}, - javascriptEnabledStyle = {}, - aspectRatio, -}: RepeatBackgroundProps) => { - const [repeat, setRepeat] = useState(1); - const [hasSet, setHasSet] = useState(false); - - const elRef = useRef(); - - const checkEl = useCallback((el) => { - if (hasSet || !el) return; - setHasSet(true); - const repeatLocal = Math.ceil( - window.innerWidth / el.getBoundingClientRect().width - ); - setRepeat(repeatLocal); - }, []); - - useLayoutEffect(() => { - const fn = () => checkEl(elRef.current); - window.addEventListener("resize", fn); - fn(); - return () => window.removeEventListener("resize", fn); - }, [checkEl]); - - const arraySizeOfRepeat = useMemo(() => { - return Array.from({ length: repeat }, (_, i) => i); - }, [repeat]); - - // Client-only - if (typeof globalThis.window !== "undefined") { - return ( -
    - {arraySizeOfRepeat.map((_) => ( -
    { - if (!el) return; - checkEl(el); - elRef.current = el; - }} - dangerouslySetInnerHTML={{ __html: svg }} - >
    - ))} -
    - ); - } - - return ( -
    - ); -}; +import { JSX } from "preact"; +import { + useCallback, + useLayoutEffect, + useMemo, + useRef, + useState, +} from "preact/hooks"; + +interface RepeatBackgroundProps { + svg: string; + fallbackStyle?: Omit["style"], string>; + javascriptEnabledStyle?: Omit< + JSX.HTMLAttributes["style"], + string + >; + aspectRatio: string; +} + +export const RepeatBackground = ({ + svg, + fallbackStyle = {}, + javascriptEnabledStyle = {}, + aspectRatio, +}: RepeatBackgroundProps) => { + const [repeat, setRepeat] = useState(1); + const [hasSet, setHasSet] = useState(false); + + const elRef = useRef(); + + const checkEl = useCallback((el) => { + if (hasSet || !el) return; + setHasSet(true); + const repeatLocal = Math.ceil( + window.innerWidth / el.getBoundingClientRect().width, + ); + setRepeat(repeatLocal); + }, []); + + useLayoutEffect(() => { + const fn = () => checkEl(elRef.current); + window.addEventListener("resize", fn); + fn(); + return () => window.removeEventListener("resize", fn); + }, [checkEl]); + + const arraySizeOfRepeat = useMemo(() => { + return Array.from({ length: repeat }, (_, i) => i); + }, [repeat]); + + // Client-only + if (typeof globalThis.window !== "undefined") { + return ( +
    + {arraySizeOfRepeat.map((_) => ( +
    { + if (!el) return; + checkEl(el); + elRef.current = el; + }} + dangerouslySetInnerHTML={{ __html: svg }} + >
    + ))} +
    + ); + } + + return ( +
    + ); +}; diff --git a/src/views/collections/framework-field-guide/fonts/changa-one.css b/src/views/collections/framework-field-guide/fonts/changa-one.css index 30a9ad5e..c7a7c4e9 100644 --- a/src/views/collections/framework-field-guide/fonts/changa-one.css +++ b/src/views/collections/framework-field-guide/fonts/changa-one.css @@ -1,20 +1,21 @@ -@font-face { - font-family: "Changa One"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("/fonts/Changa_One/ChangaOne-Regular.woff2") format("woff2"), - url("/fonts/Changa_One/ChangaOne-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Changa One-fallback"; - size-adjust: 101.20000000000005%; - src: local("Arial"); -} - -@font-face { - font-family: "Changa One-fallback2"; - size-adjust: 101%; - src: local("Roboto"); -} \ No newline at end of file +@font-face { + font-family: "Changa One"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + url("/fonts/Changa_One/ChangaOne-Regular.woff2") format("woff2"), + url("/fonts/Changa_One/ChangaOne-Regular.ttf") format("truetype"); +} + +@font-face { + font-family: "Changa One-fallback"; + size-adjust: 101.20000000000005%; + src: local("Arial"); +} + +@font-face { + font-family: "Changa One-fallback2"; + size-adjust: 101%; + src: local("Roboto"); +} diff --git a/src/views/collections/framework-field-guide/fonts/fira-code.css b/src/views/collections/framework-field-guide/fonts/fira-code.css index 84bae143..348d801b 100644 --- a/src/views/collections/framework-field-guide/fonts/fira-code.css +++ b/src/views/collections/framework-field-guide/fonts/fira-code.css @@ -1,8 +1,9 @@ -@font-face { - font-family: "Fira Code"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("/fonts/Fira_Code/FiraCode-Regular.woff2") format("woff2"), - url("/fonts/Fira_Code/FiraCode-Regular.ttf") format("truetype"); -} +@font-face { + font-family: "Fira Code"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + url("/fonts/Fira_Code/FiraCode-Regular.woff2") format("woff2"), + url("/fonts/Fira_Code/FiraCode-Regular.ttf") format("truetype"); +} diff --git a/src/views/collections/framework-field-guide/fonts/plus-jakarta-sans.css b/src/views/collections/framework-field-guide/fonts/plus-jakarta-sans.css index ac8a1ab1..9972b06a 100644 --- a/src/views/collections/framework-field-guide/fonts/plus-jakarta-sans.css +++ b/src/views/collections/framework-field-guide/fonts/plus-jakarta-sans.css @@ -1,61 +1,68 @@ -@font-face { - font-family: "Plus Jakarta Sans"; - font-style: normal; - font-weight: 400; - font-display: swap; - src: url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Regular.woff2") - format("woff2"), - url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Plus Jakarta Sans"; - font-style: normal; - font-weight: 500; - font-display: swap; - src: url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Medium.woff2") - format("woff2"), - url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Medium.ttf") format("truetype"); -} - -@font-face { - font-family: "Plus Jakarta Sans"; - font-style: normal; - font-weight: 600; - font-display: swap; - src: url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-SemiBold.woff2") - format("woff2"), - url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-SemiBold.ttf") format("truetype"); -} - -@font-face { - font-family: "Plus Jakarta Sans"; - font-style: normal; - font-weight: 700; - font-display: swap; - src: url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Bold.woff2") - format("woff2"), - url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Bold.ttf") format("truetype"); -} - -@font-face { - font-family: "Plus Jakarta Sans"; - font-style: normal; - font-weight: 800; - font-display: swap; - src: url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-ExtraBold.woff2") - format("woff2"), - url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-ExtraBold.ttf") format("truetype"); -} - -@font-face { - font-family: "Plus Jakarta Sans-fallback"; - size-adjust: 102.89999999999995%; - src: local("Arial"); -} - -@font-face { - font-family: "Plus Jakarta Sans-fallback2"; - size-adjust: 102.9%; - src: local("Roboto"); -} \ No newline at end of file +@font-face { + font-family: "Plus Jakarta Sans"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Regular.woff2") + format("woff2"), + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Regular.ttf") + format("truetype"); +} + +@font-face { + font-family: "Plus Jakarta Sans"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Medium.woff2") format("woff2"), + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Medium.ttf") + format("truetype"); +} + +@font-face { + font-family: "Plus Jakarta Sans"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-SemiBold.woff2") + format("woff2"), + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-SemiBold.ttf") + format("truetype"); +} + +@font-face { + font-family: "Plus Jakarta Sans"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Bold.woff2") format("woff2"), + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-Bold.ttf") format("truetype"); +} + +@font-face { + font-family: "Plus Jakarta Sans"; + font-style: normal; + font-weight: 800; + font-display: swap; + src: + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-ExtraBold.woff2") + format("woff2"), + url("/fonts/Plus_Jakarta_Sans/PlusJakartaSans-ExtraBold.ttf") + format("truetype"); +} + +@font-face { + font-family: "Plus Jakarta Sans-fallback"; + size-adjust: 102.89999999999995%; + src: local("Arial"); +} + +@font-face { + font-family: "Plus Jakarta Sans-fallback2"; + size-adjust: 102.9%; + src: local("Roboto"); +} diff --git a/src/views/collections/framework-field-guide/scripts/color-change-listener.ts b/src/views/collections/framework-field-guide/scripts/color-change-listener.ts index 17f5d150..4f3bcff1 100644 --- a/src/views/collections/framework-field-guide/scripts/color-change-listener.ts +++ b/src/views/collections/framework-field-guide/scripts/color-change-listener.ts @@ -13,7 +13,7 @@ function throttle(callback, limit) { export const enableColorChangeListeners = () => { const colorContainers: HTMLElement[] = Array.from( - document.querySelectorAll("[data-change-color-to]") + document.querySelectorAll("[data-change-color-to]"), ); const containerPairs = colorContainers; @@ -62,16 +62,16 @@ export const enableColorChangeListeners = () => { const computedStyle = window.getComputedStyle(document.documentElement); const initialInterTokenValues = interTokens.map((token) => - computedStyle.getPropertyValue(token) + computedStyle.getPropertyValue(token), ); const initialEcosTokenValues = ecosTokens.map((token) => - computedStyle.getPropertyValue(token) + computedStyle.getPropertyValue(token), ); const initialFundTokenValues = fundTokens.map((token) => - computedStyle.getPropertyValue(token) + computedStyle.getPropertyValue(token), ); const initialSlateTokenValues = slateTokens.map((token) => - computedStyle.getPropertyValue(token) + computedStyle.getPropertyValue(token), ); let windowsInnerHeight = window.innerHeight; @@ -81,32 +81,32 @@ export const enableColorChangeListeners = () => { }); function changeColorSetTo( - colorSetToChangeTo: "fund" | "ecos" | "slate" | "inter" + colorSetToChangeTo: "fund" | "ecos" | "slate" | "inter", ) { switch (colorSetToChangeTo) { case "fund": { fundTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialFundTokenValues[index] + initialFundTokenValues[index], ); }); interTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialFundTokenValues[index] + initialFundTokenValues[index], ); }); ecosTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialFundTokenValues[index] + initialFundTokenValues[index], ); }); slateTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialFundTokenValues[index] + initialFundTokenValues[index], ); }); break; @@ -115,25 +115,25 @@ export const enableColorChangeListeners = () => { ecosTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialEcosTokenValues[index] + initialEcosTokenValues[index], ); }); interTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialEcosTokenValues[index] + initialEcosTokenValues[index], ); }); fundTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialEcosTokenValues[index] + initialEcosTokenValues[index], ); }); slateTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialEcosTokenValues[index] + initialEcosTokenValues[index], ); }); break; @@ -142,25 +142,25 @@ export const enableColorChangeListeners = () => { interTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialInterTokenValues[index] + initialInterTokenValues[index], ); }); ecosTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialInterTokenValues[index] + initialInterTokenValues[index], ); }); fundTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialInterTokenValues[index] + initialInterTokenValues[index], ); }); slateTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialInterTokenValues[index] + initialInterTokenValues[index], ); }); break; @@ -170,25 +170,25 @@ export const enableColorChangeListeners = () => { slateTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialSlateTokenValues[index] + initialSlateTokenValues[index], ); }); ecosTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialSlateTokenValues[index] + initialSlateTokenValues[index], ); }); fundTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialSlateTokenValues[index] + initialSlateTokenValues[index], ); }); interTokens.forEach((tokenName, index) => { document.documentElement.style.setProperty( tokenName, - initialSlateTokenValues[index] + initialSlateTokenValues[index], ); }); break; @@ -221,7 +221,7 @@ export const enableColorChangeListeners = () => { const throttledPassiveScrollColorChange = throttle( checkPassiveScrollPositionAndColor, - 20 + 20, ); function onResize() { @@ -243,7 +243,7 @@ export const enableColorChangeListeners = () => { window.removeEventListener("scroll", throttledPassiveScrollColorChange); window.removeEventListener( "touchmove", - throttledPassiveScrollColorChange + throttledPassiveScrollColorChange, ); window.removeEventListener("resize", onResize); } else { diff --git a/src/views/collections/framework-field-guide/scripts/parallax-scrolling.ts b/src/views/collections/framework-field-guide/scripts/parallax-scrolling.ts index 9cb8b3e6..6315a8cb 100644 --- a/src/views/collections/framework-field-guide/scripts/parallax-scrolling.ts +++ b/src/views/collections/framework-field-guide/scripts/parallax-scrolling.ts @@ -26,7 +26,7 @@ function easeOutExpo(x: number): number { export const enableParallaxScrolling = () => { const els = Array.from( - document.querySelectorAll("[data-move-on-scroll-by]") + document.querySelectorAll("[data-move-on-scroll-by]"), ) as HTMLElement[]; const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)"); diff --git a/src/views/collections/framework-field-guide/segments/adventure-continues.module.scss b/src/views/collections/framework-field-guide/segments/adventure-continues.module.scss index fe1763be..2b6342b4 100644 --- a/src/views/collections/framework-field-guide/segments/adventure-continues.module.scss +++ b/src/views/collections/framework-field-guide/segments/adventure-continues.module.scss @@ -2,63 +2,65 @@ @import "../tokens/breakpoints.scss"; .adventureContinuesContainer { - padding: var(--section-ver-padding) var(--section-hor-padding); - text-align: center; - max-width: var(--max-width_large); - margin: 0 auto; + padding: var(--section-ver-padding) var(--section-hor-padding); + text-align: center; + max-width: var(--max-width_large); + margin: 0 auto; } .title { - margin: 0; + margin: 0; } .subtitle { - margin: var(--spc-1x) 0 calc(var(--section-ver-padding) * 2) 0; - color: var(--on-dark-emphasis-medium); + margin: var(--spc-1x) 0 calc(var(--section-ver-padding) * 2) 0; + color: var(--on-dark-emphasis-medium); } .gridItems { - margin: 0; - padding: 0; - list-style: none; - display: grid; - grid-template-columns: repeat(2, 1fr); - gap: var(--grid-gap); + margin: 0; + padding: 0; + list-style: none; + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: var(--grid-gap); - .gridItem:last-child { - grid-column: span 2 - } + .gridItem:last-child { + grid-column: span 2; + } - @include from($desktop) { - grid-template-columns: repeat(3, 1fr); + @include from($desktop) { + grid-template-columns: repeat(3, 1fr); - .gridItem:last-child { - grid-column: unset; - } - } + .gridItem:last-child { + grid-column: unset; + } + } } .gridItem { - display: flex; - flex-direction: column; - justify-content: center; - position: relative; - border-style: solid; - border-color: var(--outline); - border-width: var(--grid-item-border-width); - border-radius: var(--grid-item-corner-radius); - padding: var(--grid-item-padding_top) var(--grid-item-padding_horizontal) var(--grid-item-padding_bottom); + display: flex; + flex-direction: column; + justify-content: center; + position: relative; + border-style: solid; + border-color: var(--outline); + border-width: var(--grid-item-border-width); + border-radius: var(--grid-item-corner-radius); + padding: var(--grid-item-padding_top) var(--grid-item-padding_horizontal) + var(--grid-item-padding_bottom); } .gridItem svg { - position: absolute; - left: 50%; - background: var(--section-background); - transition: background var(--color-transition-time) var(--color-transition-ease); - padding-left: var(--grid-icon-padding); - padding-right: var(--grid-icon-padding); - height: var(--grid-icon-size) !important; - width: var(--grid-icon-size) !important; - transform: translateX(-50%); - top: calc(0px - (var(--grid-icon-size) / 2)); + position: absolute; + left: 50%; + background: var(--section-background); + transition: background var(--color-transition-time) + var(--color-transition-ease); + padding-left: var(--grid-icon-padding); + padding-right: var(--grid-icon-padding); + height: var(--grid-icon-size) !important; + width: var(--grid-icon-size) !important; + transform: translateX(-50%); + top: calc(0px - (var(--grid-icon-size) / 2)); } diff --git a/src/views/collections/framework-field-guide/segments/code-block.module.scss b/src/views/collections/framework-field-guide/segments/code-block.module.scss index 97d169de..1da7b43f 100644 --- a/src/views/collections/framework-field-guide/segments/code-block.module.scss +++ b/src/views/collections/framework-field-guide/segments/code-block.module.scss @@ -1,17 +1,17 @@ -.blockContainer { - max-width: var(--max-width_small); - margin: 0 auto; - padding: var(--section-ver-padding) var(--section-hor-padding); -} - -.sectionTitle { - text-align: center; - margin: 0; - color: var(--on-dark-emphasis-high); -} - -.sectionContent { - text-align: center; - margin: var(--spc-1x) 0 var(--section-gap) 0; - color: var(--on-dark-emphasis-medium); -} +.blockContainer { + max-width: var(--max-width_small); + margin: 0 auto; + padding: var(--section-ver-padding) var(--section-hor-padding); +} + +.sectionTitle { + text-align: center; + margin: 0; + color: var(--on-dark-emphasis-high); +} + +.sectionContent { + text-align: center; + margin: var(--spc-1x) 0 var(--section-gap) 0; + color: var(--on-dark-emphasis-medium); +} diff --git a/src/views/collections/framework-field-guide/segments/code-block.scss b/src/views/collections/framework-field-guide/segments/code-block.scss index 13204774..b7141d4a 100644 --- a/src/views/collections/framework-field-guide/segments/code-block.scss +++ b/src/views/collections/framework-field-guide/segments/code-block.scss @@ -1,142 +1,143 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -pre { - margin: 0; - border: none !important; -} - -code .line::before { - color: var(--code-block-text_secondary) !important; - font-family: "Fira Code", monospace; - font-style: normal; - font-weight: 400; - font-size: 1rem; - line-height: 1.5rem; -} - -pre code { - font-family: "Fira Code", monospace; - font-style: normal; - font-weight: 400; - font-size: 1rem; - line-height: 1.5rem; -} - -.tabs { - border-radius: var(--code-block-corner-radius_outer); - padding: var(--code-block-padding); - background: var(--code-block-container_outer); - transition: background var(--color-transition-time) - var(--color-transition-ease); -} - -.tabs__tab-list { - padding: 0; - margin: 0; - display: flex; -} - -/* Chrome only for now */ -ul.tabs__tab-list:has(> .tabs__tab:first-child:not([aria-selected="true"])) - ~ .tabs__tab-panel { - border-radius: var(--code-block-corner-radius_inner); -} - -ul.tabs__tab-list:has(> .tabs__tab:first-child[aria-selected="true"]) - ~ .tabs__tab-panel { - border-radius: 0 var(--code-block-corner-radius_inner) - var(--code-block-corner-radius_inner); -} - -@include until($tablet) { - ul.tabs__tab-list:has(> .tabs__tab:last-child[aria-selected="true"]) - ~ .tabs__tab-panel { - border-radius: var(--code-block-corner-radius_inner) 0 - var(--code-block-corner-radius_inner); - } -} - -.tabs__tab { - list-style: none; - margin: 0; - display: inline-block; - position: relative; - cursor: pointer; - color: var(--on-dark-emphasis-high); - min-width: var(--code-block-tab-min-size); - border-radius: var(--code-block-corner-radius_inner) - var(--code-block-corner-radius_inner) 0 0; - background: var(--code-block-container_outer); - transition: background var(--btn-state-transition-duration) - var(--btn-state-transition-easing), - color var(--btn-state-transition-duration) - var(--btn-state-transition-easing); - text-align: center; - padding: var(--code-block-spacing); - width: calc(100% / 3); - - /* .text-style-body-medium-bold */ - font-size: 0.875rem; - font-family: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", - "Plus Jakarta Sans-fallback2", sans-serif; - font-weight: 700; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - - @include from($tablet) { - width: unset; - - /* .text-style-body-medium-bold */ - font-size: 1rem; - font-family: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", - "Plus Jakarta Sans-fallback2", sans-serif; - font-weight: 700; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } -} - -:not([aria-selected="true"]) + .tabs__tab::before { - position: absolute; - content: " "; - display: block; - left: 0; - top: 12px; - height: calc(100% - 24px); - width: 2px; - border-radius: 99px; - background: var(--code-block-container_inner); -} - -.tabs__tab:not([aria-selected="true"]):hover { - background: var(--code-block-tab-inative_hovered); -} - -.tabs__tab:not([aria-selected="true"]):active { - background: var(--code-block-tab-inactive_pressed); -} - -.tabs__tab[aria-selected="true"] { - background: var(--code-block-container_inner); -} - -.tabs__tab-panel { - border-radius: 0 0 var(--code-block-corner-radius_inner) - var(--code-block-corner-radius_inner); - background: var(--code-block-container_inner); - padding: var(--code-block-spacing); - position: relative; - transition: background var(--color-transition-time) - var(--color-transition-ease); -} - -.tabs__tab-panel[aria-hidden="true"] { - display: none; -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +pre { + margin: 0; + border: none !important; +} + +code .line::before { + color: var(--code-block-text_secondary) !important; + font-family: "Fira Code", monospace; + font-style: normal; + font-weight: 400; + font-size: 1rem; + line-height: 1.5rem; +} + +pre code { + font-family: "Fira Code", monospace; + font-style: normal; + font-weight: 400; + font-size: 1rem; + line-height: 1.5rem; +} + +.tabs { + border-radius: var(--code-block-corner-radius_outer); + padding: var(--code-block-padding); + background: var(--code-block-container_outer); + transition: background var(--color-transition-time) + var(--color-transition-ease); +} + +.tabs__tab-list { + padding: 0; + margin: 0; + display: flex; +} + +/* Chrome only for now */ +ul.tabs__tab-list:has(> .tabs__tab:first-child:not([aria-selected="true"])) + ~ .tabs__tab-panel { + border-radius: var(--code-block-corner-radius_inner); +} + +ul.tabs__tab-list:has(> .tabs__tab:first-child[aria-selected="true"]) + ~ .tabs__tab-panel { + border-radius: 0 var(--code-block-corner-radius_inner) + var(--code-block-corner-radius_inner); +} + +@include until($tablet) { + ul.tabs__tab-list:has(> .tabs__tab:last-child[aria-selected="true"]) + ~ .tabs__tab-panel { + border-radius: var(--code-block-corner-radius_inner) 0 + var(--code-block-corner-radius_inner); + } +} + +.tabs__tab { + list-style: none; + margin: 0; + display: inline-block; + position: relative; + cursor: pointer; + color: var(--on-dark-emphasis-high); + min-width: var(--code-block-tab-min-size); + border-radius: var(--code-block-corner-radius_inner) + var(--code-block-corner-radius_inner) 0 0; + background: var(--code-block-container_outer); + transition: + background var(--btn-state-transition-duration) + var(--btn-state-transition-easing), + color var(--btn-state-transition-duration) + var(--btn-state-transition-easing); + text-align: center; + padding: var(--code-block-spacing); + width: calc(100% / 3); + + /* .text-style-body-medium-bold */ + font-size: 0.875rem; + font-family: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", + "Plus Jakarta Sans-fallback2", sans-serif; + font-weight: 700; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + + @include from($tablet) { + width: unset; + + /* .text-style-body-medium-bold */ + font-size: 1rem; + font-family: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", + "Plus Jakarta Sans-fallback2", sans-serif; + font-weight: 700; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } +} + +:not([aria-selected="true"]) + .tabs__tab::before { + position: absolute; + content: " "; + display: block; + left: 0; + top: 12px; + height: calc(100% - 24px); + width: 2px; + border-radius: 99px; + background: var(--code-block-container_inner); +} + +.tabs__tab:not([aria-selected="true"]):hover { + background: var(--code-block-tab-inative_hovered); +} + +.tabs__tab:not([aria-selected="true"]):active { + background: var(--code-block-tab-inactive_pressed); +} + +.tabs__tab[aria-selected="true"] { + background: var(--code-block-container_inner); +} + +.tabs__tab-panel { + border-radius: 0 0 var(--code-block-corner-radius_inner) + var(--code-block-corner-radius_inner); + background: var(--code-block-container_inner); + padding: var(--code-block-spacing); + position: relative; + transition: background var(--color-transition-time) + var(--color-transition-ease); +} + +.tabs__tab-panel[aria-hidden="true"] { + display: none; +} diff --git a/src/views/collections/framework-field-guide/segments/hero.module.scss b/src/views/collections/framework-field-guide/segments/hero.module.scss index 0e79bf57..1a9250f5 100644 --- a/src/views/collections/framework-field-guide/segments/hero.module.scss +++ b/src/views/collections/framework-field-guide/segments/hero.module.scss @@ -1,184 +1,184 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -body { - --backgroundColor: var(--fund-200) !important; -} - -.sunContainerContainer { - position: relative; - z-index: -1; - transition: transform 1ms; -} - -.sunContainerContainer > div { - position: relative; -} - -.sunContainerContainer > div > svg { - position: absolute; - left: -30%; - top: -100px; - z-index: -1; - - transition: all 300ms ease-in-out; - - height: 320px; - width: 320px; - - @include from($tablet) { - left: -40%; - height: 480px; - width: 480px; - } - - @include from($desktop) { - left: -40%; - height: 560px; - width: 560px; - } -} - -.heroContainer { - padding: var(--spc-6x) var(--section-hor-padding); - text-align: center; -} - -.titleContainer { - display: flex; - flex-wrap: nowrap; - align-items: center; - - display: grid; - position: relative; - grid-template-columns: 1fr auto auto auto 1fr; - grid-template-rows: 1fr; -} - -.sparkContainer { - height: 100%; - box-sizing: border-box; - padding: 1rem; -} - -.sparkContainer > svg { - height: 100%; - width: 100%; - fill: var(--outline) !important; -} - -.introducing { - letter-spacing: 0.25em !important; - text-transform: uppercase !important; - color: var(--on-light-emphasis-high); -} - -.seriesTitle { - margin-top: var(--spc-2x); - margin-bottom: var(--spc-3x); - color: var(--on-light-emphasis-high); -} - -.booksContainer { - margin: var(--spc-6x) 0; - list-style: none; - padding: 0; - display: grid; - - grid-template-columns: repeat(2, 1fr); - grid-template-rows: repeat(2, 1fr); - - .bookItemContainer:first-child { - grid-column: span 2; - } - - .heroLine { - position: absolute; - left: 50%; - transform: translateX(-50%); - z-index: -2; - height: calc(100%); - width: 100%; - top: 0.75rem; - border-radius: var(--corner-radius-2x); - box-sizing: border-box; - border: 2px dotted var(--outline); - } - - .heroLineBottomHider { - position: relative; - left: -50%; - height: 1rem; - background: var(--fund-200); - z-index: -1; - top: 0; - position: absolute; - width: 100%; - } - - @include from($tablet) { - grid-template-columns: repeat(3, 1fr); - grid-template-rows: 1fr; - - .bookItemContainer:first-child { - grid-column: unset; - } - - .heroLine { - all: unset; - width: 200%; - position: absolute; - top: 0.75rem; - height: 0px; - border-bottom: 2px dotted var(--outline); - z-index: -1; - } - - .heroLineBottomHider { - all: unset; - } - } -} - -.bookItemContainer { - position: relative; -} - -.explainer { - color: var(--on-light-emphasis-medium); -} - -.frameworkName { - color: var(--on-light-emphasis-high); -} - -.readyToStart { - color: var(--on-light-emphasis-high); -} - -.bookPart { - text-transform: uppercase !important; - display: inline-block; - border-radius: var(--corner-radius-circular); - padding: 0 var(--spc-2x); - background: var(--fund-200); - color: var(--on-light-emphasis-low); - margin: 0; -} - -.bookPartName { - color: var(--on-light-emphasis-high); - - margin-top: 0; - margin-bottom: var(--spc-2x); - - @include from($desktop) { - margin-top: var(--spc-1x); - margin-bottom: var(--spc-4x); - } -} - -.bookPartBottomText { - margin-top: var(--spc-1x); - color: var(--on-light-emphasis-medium); -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +body { + --backgroundColor: var(--fund-200) !important; +} + +.sunContainerContainer { + position: relative; + z-index: -1; + transition: transform 1ms; +} + +.sunContainerContainer > div { + position: relative; +} + +.sunContainerContainer > div > svg { + position: absolute; + left: -30%; + top: -100px; + z-index: -1; + + transition: all 300ms ease-in-out; + + height: 320px; + width: 320px; + + @include from($tablet) { + left: -40%; + height: 480px; + width: 480px; + } + + @include from($desktop) { + left: -40%; + height: 560px; + width: 560px; + } +} + +.heroContainer { + padding: var(--spc-6x) var(--section-hor-padding); + text-align: center; +} + +.titleContainer { + display: flex; + flex-wrap: nowrap; + align-items: center; + + display: grid; + position: relative; + grid-template-columns: 1fr auto auto auto 1fr; + grid-template-rows: 1fr; +} + +.sparkContainer { + height: 100%; + box-sizing: border-box; + padding: 1rem; +} + +.sparkContainer > svg { + height: 100%; + width: 100%; + fill: var(--outline) !important; +} + +.introducing { + letter-spacing: 0.25em !important; + text-transform: uppercase !important; + color: var(--on-light-emphasis-high); +} + +.seriesTitle { + margin-top: var(--spc-2x); + margin-bottom: var(--spc-3x); + color: var(--on-light-emphasis-high); +} + +.booksContainer { + margin: var(--spc-6x) 0; + list-style: none; + padding: 0; + display: grid; + + grid-template-columns: repeat(2, 1fr); + grid-template-rows: repeat(2, 1fr); + + .bookItemContainer:first-child { + grid-column: span 2; + } + + .heroLine { + position: absolute; + left: 50%; + transform: translateX(-50%); + z-index: -2; + height: calc(100%); + width: 100%; + top: 0.75rem; + border-radius: var(--corner-radius-2x); + box-sizing: border-box; + border: 2px dotted var(--outline); + } + + .heroLineBottomHider { + position: relative; + left: -50%; + height: 1rem; + background: var(--fund-200); + z-index: -1; + top: 0; + position: absolute; + width: 100%; + } + + @include from($tablet) { + grid-template-columns: repeat(3, 1fr); + grid-template-rows: 1fr; + + .bookItemContainer:first-child { + grid-column: unset; + } + + .heroLine { + all: unset; + width: 200%; + position: absolute; + top: 0.75rem; + height: 0px; + border-bottom: 2px dotted var(--outline); + z-index: -1; + } + + .heroLineBottomHider { + all: unset; + } + } +} + +.bookItemContainer { + position: relative; +} + +.explainer { + color: var(--on-light-emphasis-medium); +} + +.frameworkName { + color: var(--on-light-emphasis-high); +} + +.readyToStart { + color: var(--on-light-emphasis-high); +} + +.bookPart { + text-transform: uppercase !important; + display: inline-block; + border-radius: var(--corner-radius-circular); + padding: 0 var(--spc-2x); + background: var(--fund-200); + color: var(--on-light-emphasis-low); + margin: 0; +} + +.bookPartName { + color: var(--on-light-emphasis-high); + + margin-top: 0; + margin-bottom: var(--spc-2x); + + @include from($desktop) { + margin-top: var(--spc-1x); + margin-bottom: var(--spc-4x); + } +} + +.bookPartBottomText { + margin-top: var(--spc-1x); + color: var(--on-light-emphasis-medium); +} diff --git a/src/views/collections/framework-field-guide/segments/pricing.module.scss b/src/views/collections/framework-field-guide/segments/pricing.module.scss index d6536d24..c42c676f 100644 --- a/src/views/collections/framework-field-guide/segments/pricing.module.scss +++ b/src/views/collections/framework-field-guide/segments/pricing.module.scss @@ -1,73 +1,73 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -.pricingContainer { - padding: var(--section-ver-padding) var(--section-hor-padding); - max-width: var(--max-width_large); - margin: 0 auto; - text-align: center; - display: flex; - flex-direction: column; - gap: var(--spc-1x); -} - -.pricingTitle { - color: var(--on-dark-emphasis-high); - margin: 0; -} - -.pricingSubtitle { - color: var(--on-dark-emphasis-medium); - margin: 0; -} - -.pricingSubsubtitle { - color: var(--on-dark-emphasis-low); - margin: 0; -} - -.pricingCardContainer { - margin: 0; - padding: 0; - list-style: none; - margin-top: var(--spc-3x); - display: flex; - flex-direction: column; - gap: var(--section-hor-padding); -} - -.fundamentalsPricingCard { -} - -.ecosystemPricingCard { -} - -.internalsPricingCard { -} - -@include from($desktop) { - .pricingCardContainer { - gap: 0; - flex-direction: row; - flex-wrap: nowrap; - align-items: center; - margin-top: var(--spc-6x) - } - - .fundamentalsPricingCard { - order: 2; - z-index: 1; - } - - .ecosystemPricingCard { - order: 1; - margin-right: calc(0px - var(--pricing-container-radius)); - height: fit-content; - } - - .internalsPricingCard { - order: 3; - margin-left: calc(0px - var(--pricing-container-radius)); - height: fit-content; - } -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +.pricingContainer { + padding: var(--section-ver-padding) var(--section-hor-padding); + max-width: var(--max-width_large); + margin: 0 auto; + text-align: center; + display: flex; + flex-direction: column; + gap: var(--spc-1x); +} + +.pricingTitle { + color: var(--on-dark-emphasis-high); + margin: 0; +} + +.pricingSubtitle { + color: var(--on-dark-emphasis-medium); + margin: 0; +} + +.pricingSubsubtitle { + color: var(--on-dark-emphasis-low); + margin: 0; +} + +.pricingCardContainer { + margin: 0; + padding: 0; + list-style: none; + margin-top: var(--spc-3x); + display: flex; + flex-direction: column; + gap: var(--section-hor-padding); +} + +.fundamentalsPricingCard { +} + +.ecosystemPricingCard { +} + +.internalsPricingCard { +} + +@include from($desktop) { + .pricingCardContainer { + gap: 0; + flex-direction: row; + flex-wrap: nowrap; + align-items: center; + margin-top: var(--spc-6x); + } + + .fundamentalsPricingCard { + order: 2; + z-index: 1; + } + + .ecosystemPricingCard { + order: 1; + margin-right: calc(0px - var(--pricing-container-radius)); + height: fit-content; + } + + .internalsPricingCard { + order: 3; + margin-left: calc(0px - var(--pricing-container-radius)); + height: fit-content; + } +} diff --git a/src/views/collections/framework-field-guide/segments/quotes.module.scss b/src/views/collections/framework-field-guide/segments/quotes.module.scss index 9787165e..2b989b55 100644 --- a/src/views/collections/framework-field-guide/segments/quotes.module.scss +++ b/src/views/collections/framework-field-guide/segments/quotes.module.scss @@ -1,40 +1,40 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -.fullQuotesContainer { - max-width: var(--max-width_large); - margin: 0 auto; - display: flex; - flex-direction: column; - gap: var(--section-gap); - padding: var(--section-ver-padding) var(--section-hor-padding); - color: var(--on-dark-emphasis_high); - transition: color var(--color-transition-time) var(--color-transition-ease); - will-change: transition; -} - -.quotesHeaderContainer { - max-width: var(--max-width_small); - margin: 0 auto; - display: flex; - flex-direction: column; - gap: var(--section-gap); -} - -.quoteHeaderTitle { - text-align: center; - margin: 0; -} - -.hideUntilFocused:not(:focus) { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; - padding: 0; -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +.fullQuotesContainer { + max-width: var(--max-width_large); + margin: 0 auto; + display: flex; + flex-direction: column; + gap: var(--section-gap); + padding: var(--section-ver-padding) var(--section-hor-padding); + color: var(--on-dark-emphasis_high); + transition: color var(--color-transition-time) var(--color-transition-ease); + will-change: transition; +} + +.quotesHeaderContainer { + max-width: var(--max-width_small); + margin: 0 auto; + display: flex; + flex-direction: column; + gap: var(--section-gap); +} + +.quoteHeaderTitle { + text-align: center; + margin: 0; +} + +.hideUntilFocused:not(:focus) { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; + padding: 0; +} diff --git a/src/views/collections/framework-field-guide/segments/sign-up.module.scss b/src/views/collections/framework-field-guide/segments/sign-up.module.scss index d0a52982..4e7666a6 100644 --- a/src/views/collections/framework-field-guide/segments/sign-up.module.scss +++ b/src/views/collections/framework-field-guide/segments/sign-up.module.scss @@ -1,159 +1,159 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -.signUpContainer { - text-align: center; - color: var(--on-dark-emphasis-high); - max-width: var(--max-width_small); - margin: 0 auto; - padding: var(--section-ver-padding) var(--section-hor-padding) 96px; -} - -.signUpFormContainer { - position: relative; - border-style: solid; - padding: 0 var(--section-hor-padding) var(--section-ver-padding); - border-width: var(--border-2x); - border-color: var(--outline); - border-radius: var(--outline-corner-radius); -} - -.signUpFormContainer > picture:first-child { - display: block; - height: var(--avatar-size_large); - width: var(--avatar-size_large); - position: relative; - top: calc(var(--avatar-size_large) / -2); - padding-right: var(--outline-gap); - padding-left: var(--outline-gap); - background: var(--section-background); - margin: 0 auto calc(var(--avatar-size_large) / -2); - transition: background var(--animStyle) var(--animSpeed); - will-change: transition; -} - -.avatar { - height: var(--avatar-size_large); - width: var(--avatar-size_large); - border-radius: var(--corner-radius-circle); -} - -.thankYouForCheckingOut { - letter-spacing: 0.25em !important; - text-transform: uppercase !important; - display: block; -} - -.seriesTitleContainer { - display: block; - margin-top: var(--spc-1x); - margin-bottom: calc(var(--section-gap) + calc(var(--avatar-size_large) / 2)); -} - -.seriesTitle { - background: var(--gradient-ffg); - -webkit-background-clip: text; - background-clip: text; - color: transparent; -} - -.signUpForUpdates { - margin: var(--section-gap) 0 0; -} - -.signUpInstructions { - color: var(--on-dark-emphasis-medium); - margin: 0 0 var(--section-gap); -} - -.signUpDisclaimer { - margin-top: var(--spc-2x); - margin-bottom: var(--section-gap); - color: var(--on-dark-emphasis-medium); -} - -.getInvolvedContainer { - padding: var(--section-gap) 0; -} - -.getInvolvedHeader { - margin: 0; -} - -.getInvolvedExplainer { - margin: 0; - color: var(--on-dark-emphasis-medium); -} - -.signUpInstructions, -.getInvolvedExplainer { - margin-top: var(--spc-1x); -} - -.buttonContainer { - position: absolute; - bottom: calc(var(--social-btn-height) / -2); - left: 50%; - transform: translateX(-50%); - height: var(--social-btn-height); - width: calc(100% - (var(--section-hor-padding) * 2)); - background: var(--section-background); - display: flex; - gap: var(--outline-gap); - padding: 0 var(--outline-gap); - transition: background var(--animStyle) var(--animSpeed); - will-change: transition; -} - -@include from($desktop) { - .buttonContainer { - width: 50%; - } -} - -.twitterButton, -.discordButton { - display: inline-flex !important; - border: none !important; - justify-content: center; - align-items: center; - flex-basis: 100%; -} - -.twitterButton > svg, -.discordButton > svg { - height: var(--social-btn-icon-size); - width: var(--social-btn-icon-size); -} - -.twitterButton { - --twitter-btn-color: #1da1f2; - --twitter-btn-color_hovered: #068eef; - --twitter-btn-color_pressed: #0079db; - background: var(--twitter-btn-color); - height: 100%; -} - -.twitterButton:hover { - background: var(--twitter-btn-color_hovered); -} - -.twitterButton:active { - background: var(--twitter-btn-color_pressed); -} - -.discordButton { - --discord-btn-color: #5865f2; - --discord-btn-color_hovered: #4956df; - --discord-btn-color_pressed: #3945c6; - background: var(--discord-btn-color); - height: 100%; -} - -.discordButton:hover { - background: var(--discord-btn-color_hovered); -} - -.discordButton:active { - background: var(--discord-btn-color_pressed); -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +.signUpContainer { + text-align: center; + color: var(--on-dark-emphasis-high); + max-width: var(--max-width_small); + margin: 0 auto; + padding: var(--section-ver-padding) var(--section-hor-padding) 96px; +} + +.signUpFormContainer { + position: relative; + border-style: solid; + padding: 0 var(--section-hor-padding) var(--section-ver-padding); + border-width: var(--border-2x); + border-color: var(--outline); + border-radius: var(--outline-corner-radius); +} + +.signUpFormContainer > picture:first-child { + display: block; + height: var(--avatar-size_large); + width: var(--avatar-size_large); + position: relative; + top: calc(var(--avatar-size_large) / -2); + padding-right: var(--outline-gap); + padding-left: var(--outline-gap); + background: var(--section-background); + margin: 0 auto calc(var(--avatar-size_large) / -2); + transition: background var(--animStyle) var(--animSpeed); + will-change: transition; +} + +.avatar { + height: var(--avatar-size_large); + width: var(--avatar-size_large); + border-radius: var(--corner-radius-circle); +} + +.thankYouForCheckingOut { + letter-spacing: 0.25em !important; + text-transform: uppercase !important; + display: block; +} + +.seriesTitleContainer { + display: block; + margin-top: var(--spc-1x); + margin-bottom: calc(var(--section-gap) + calc(var(--avatar-size_large) / 2)); +} + +.seriesTitle { + background: var(--gradient-ffg); + -webkit-background-clip: text; + background-clip: text; + color: transparent; +} + +.signUpForUpdates { + margin: var(--section-gap) 0 0; +} + +.signUpInstructions { + color: var(--on-dark-emphasis-medium); + margin: 0 0 var(--section-gap); +} + +.signUpDisclaimer { + margin-top: var(--spc-2x); + margin-bottom: var(--section-gap); + color: var(--on-dark-emphasis-medium); +} + +.getInvolvedContainer { + padding: var(--section-gap) 0; +} + +.getInvolvedHeader { + margin: 0; +} + +.getInvolvedExplainer { + margin: 0; + color: var(--on-dark-emphasis-medium); +} + +.signUpInstructions, +.getInvolvedExplainer { + margin-top: var(--spc-1x); +} + +.buttonContainer { + position: absolute; + bottom: calc(var(--social-btn-height) / -2); + left: 50%; + transform: translateX(-50%); + height: var(--social-btn-height); + width: calc(100% - (var(--section-hor-padding) * 2)); + background: var(--section-background); + display: flex; + gap: var(--outline-gap); + padding: 0 var(--outline-gap); + transition: background var(--animStyle) var(--animSpeed); + will-change: transition; +} + +@include from($desktop) { + .buttonContainer { + width: 50%; + } +} + +.twitterButton, +.discordButton { + display: inline-flex !important; + border: none !important; + justify-content: center; + align-items: center; + flex-basis: 100%; +} + +.twitterButton > svg, +.discordButton > svg { + height: var(--social-btn-icon-size); + width: var(--social-btn-icon-size); +} + +.twitterButton { + --twitter-btn-color: #1da1f2; + --twitter-btn-color_hovered: #068eef; + --twitter-btn-color_pressed: #0079db; + background: var(--twitter-btn-color); + height: 100%; +} + +.twitterButton:hover { + background: var(--twitter-btn-color_hovered); +} + +.twitterButton:active { + background: var(--twitter-btn-color_pressed); +} + +.discordButton { + --discord-btn-color: #5865f2; + --discord-btn-color_hovered: #4956df; + --discord-btn-color_pressed: #3945c6; + background: var(--discord-btn-color); + height: 100%; +} + +.discordButton:hover { + background: var(--discord-btn-color_hovered); +} + +.discordButton:active { + background: var(--discord-btn-color_pressed); +} diff --git a/src/views/collections/framework-field-guide/segments/the-rest-container.module.scss b/src/views/collections/framework-field-guide/segments/the-rest-container.module.scss index ea85fd09..01005f6d 100644 --- a/src/views/collections/framework-field-guide/segments/the-rest-container.module.scss +++ b/src/views/collections/framework-field-guide/segments/the-rest-container.module.scss @@ -1,8 +1,10 @@ .theRestContainer { - padding: var(--spc-6x) 0; - background: var(--section-background); - color: var(--on-dark-emphasis-high); - transition: background var(--color-transition-time) var(--color-transition-ease), color var(--color-transition-time) var(--color-transition-ease); - will-change: transition; - margin-top: -4px; -} \ No newline at end of file + padding: var(--spc-6x) 0; + background: var(--section-background); + color: var(--on-dark-emphasis-high); + transition: + background var(--color-transition-time) var(--color-transition-ease), + color var(--color-transition-time) var(--color-transition-ease); + will-change: transition; + margin-top: -4px; +} diff --git a/src/views/collections/framework-field-guide/segments/your-guide.module.scss b/src/views/collections/framework-field-guide/segments/your-guide.module.scss index 14bb7c3e..d7f21819 100644 --- a/src/views/collections/framework-field-guide/segments/your-guide.module.scss +++ b/src/views/collections/framework-field-guide/segments/your-guide.module.scss @@ -1,118 +1,118 @@ -@import "../tokens/utils"; -@import "../tokens/breakpoints.scss"; - -.guideContainer { - padding: var(--section-ver-padding) var(--section-hor-padding); - max-width: var(--max-width_small); - width: 100%; - margin: 0 auto; - text-align: center; - box-sizing: border-box; -} - -.sectionTitle { - color: var(--on-dark-emphasis-high); - margin: 0; -} - -.authorIntro { - color: var(--on-dark-emphasis-high); - margin: 0; -} - -.authorName { - background: var(--gradient-corbin); - -webkit-background-clip: text; - background-clip: text; - color: transparent; - margin: 0; -} - -.seriesName { - background: var(--gradient-ffg); - -webkit-background-clip: text; - background-clip: text; - color: transparent; - margin: 0; -} - -img.guidePicture, -.guidePicture img { - height: var(--avatar-size_large); - width: var(--avatar-size_large); - border-radius: var(--corner-radius-circular); - margin: var(--spc-6x) auto var(--section-gap); - - @include from($desktop) { - height: var(--avatar-size_huge); - width: var(--avatar-size_huge); - } -} - -.guideText { - color: var(--on-dark-emphasis-medium); - margin: var(--section-gap) 0; -} - -.metricsContainer { - display: grid; - gap: var(--section-gap); - margin: 0; - padding: 0; - list-style-type: none; - grid-template-columns: repeat(3, 1fr); - grid-template-rows: repeat(2, 1fr); - - @include from($desktop) { - grid-template-columns: repeat(6, 1fr); - grid-template-rows: repeat(1, 1fr); - } -} - -.metricNumber, -.metricNumberInfinityContainer { - position: relative; - display: inline-block; - height: 1.75rem; - @include from($desktop) { - height: 2.75rem; - } -} - -.metricNumberInfinityContainer { - width: 100%; -} - -.metricNumber, -.metricNumberInfinity { - background: var(--gradient-ffg); - -webkit-background-clip: text; - background-clip: text; - color: transparent; - margin: 0; - display: inline-block; - overflow: hidden; -} - -.metricNumberInfinity { - position: absolute; - top: calc(50% + -0.5rem); - left: 50%; - transform: translate(-50%, -50%); - font-family: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", - "Plus Jakarta Sans-fallback2", sans-serif; - font-style: normal; - font-weight: 500; - font-size: 2.5rem; - line-height: 1; - // This solves a weird issue where the infinity symbol has a weird line off to the right on Safari - letter-spacing: 0.1px; - - @include from($desktop) { - font-size: 4.5rem; - } -} - -.metricName { - margin: 0; -} +@import "../tokens/utils"; +@import "../tokens/breakpoints.scss"; + +.guideContainer { + padding: var(--section-ver-padding) var(--section-hor-padding); + max-width: var(--max-width_small); + width: 100%; + margin: 0 auto; + text-align: center; + box-sizing: border-box; +} + +.sectionTitle { + color: var(--on-dark-emphasis-high); + margin: 0; +} + +.authorIntro { + color: var(--on-dark-emphasis-high); + margin: 0; +} + +.authorName { + background: var(--gradient-corbin); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + margin: 0; +} + +.seriesName { + background: var(--gradient-ffg); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + margin: 0; +} + +img.guidePicture, +.guidePicture img { + height: var(--avatar-size_large); + width: var(--avatar-size_large); + border-radius: var(--corner-radius-circular); + margin: var(--spc-6x) auto var(--section-gap); + + @include from($desktop) { + height: var(--avatar-size_huge); + width: var(--avatar-size_huge); + } +} + +.guideText { + color: var(--on-dark-emphasis-medium); + margin: var(--section-gap) 0; +} + +.metricsContainer { + display: grid; + gap: var(--section-gap); + margin: 0; + padding: 0; + list-style-type: none; + grid-template-columns: repeat(3, 1fr); + grid-template-rows: repeat(2, 1fr); + + @include from($desktop) { + grid-template-columns: repeat(6, 1fr); + grid-template-rows: repeat(1, 1fr); + } +} + +.metricNumber, +.metricNumberInfinityContainer { + position: relative; + display: inline-block; + height: 1.75rem; + @include from($desktop) { + height: 2.75rem; + } +} + +.metricNumberInfinityContainer { + width: 100%; +} + +.metricNumber, +.metricNumberInfinity { + background: var(--gradient-ffg); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + margin: 0; + display: inline-block; + overflow: hidden; +} + +.metricNumberInfinity { + position: absolute; + top: calc(50% + -0.5rem); + left: 50%; + transform: translate(-50%, -50%); + font-family: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", + "Plus Jakarta Sans-fallback2", sans-serif; + font-style: normal; + font-weight: 500; + font-size: 2.5rem; + line-height: 1; + // This solves a weird issue where the infinity symbol has a weird line off to the right on Safari + letter-spacing: 0.1px; + + @include from($desktop) { + font-size: 4.5rem; + } +} + +.metricName { + margin: 0; +} diff --git a/src/views/collections/framework-field-guide/styles/buttons.css b/src/views/collections/framework-field-guide/styles/buttons.css index 8ec26f4b..3e5d86fd 100644 --- a/src/views/collections/framework-field-guide/styles/buttons.css +++ b/src/views/collections/framework-field-guide/styles/buttons.css @@ -1,50 +1,51 @@ -.ffg-button-base { - border-radius: var(--btn-corner-radius); - position: relative; - user-select: none; - -webkit-user-select: none; - display: inline-block; - border-style: solid; - transition: color var(--btn-state-transition-duration) - var(--btn-state-transition-easing), - background var(--btn-state-transition-duration) - var(--btn-state-transition-easing); -} - -.ffg-big-button { - padding: var(--btn-ver-padding_large) var(--btn-hor-padding_large); - border-width: var(--btn-border-width_large); -} - -.ffg-small-button { - padding: var(--btn-ver-padding_small) var(--btn-hor-padding_small); - border-width: var(--btn-border-width_small); -} - -.ffg-outlined-button { - background: transparent; - color: var(--btn-foreground_outlined); - border-color: var(--btn-border); -} - -.ffg-outlined-button:hover { - background: var(--btn-state-hovered_outlined); -} - -.ffg-outlined-button:active { - background: var(--btn-state-pressed_outlined); -} - -.ffg-filled-button { - background: var(--btn-background_filled); - color: var(--btn-foreground_filled); - border-color: transparent; -} - -.ffg-filled-button:hover { - background: var(--btn-state-hovered_filled); -} - -.ffg-filled-button:active { - background: var(--btn-state-pressed_filled); -} +.ffg-button-base { + border-radius: var(--btn-corner-radius); + position: relative; + user-select: none; + -webkit-user-select: none; + display: inline-block; + border-style: solid; + transition: + color var(--btn-state-transition-duration) + var(--btn-state-transition-easing), + background var(--btn-state-transition-duration) + var(--btn-state-transition-easing); +} + +.ffg-big-button { + padding: var(--btn-ver-padding_large) var(--btn-hor-padding_large); + border-width: var(--btn-border-width_large); +} + +.ffg-small-button { + padding: var(--btn-ver-padding_small) var(--btn-hor-padding_small); + border-width: var(--btn-border-width_small); +} + +.ffg-outlined-button { + background: transparent; + color: var(--btn-foreground_outlined); + border-color: var(--btn-border); +} + +.ffg-outlined-button:hover { + background: var(--btn-state-hovered_outlined); +} + +.ffg-outlined-button:active { + background: var(--btn-state-pressed_outlined); +} + +.ffg-filled-button { + background: var(--btn-background_filled); + color: var(--btn-foreground_filled); + border-color: transparent; +} + +.ffg-filled-button:hover { + background: var(--btn-state-hovered_filled); +} + +.ffg-filled-button:active { + background: var(--btn-state-pressed_filled); +} diff --git a/src/views/collections/framework-field-guide/styles/focus.css b/src/views/collections/framework-field-guide/styles/focus.css index 072ced1d..d29a83b2 100644 --- a/src/views/collections/framework-field-guide/styles/focus.css +++ b/src/views/collections/framework-field-guide/styles/focus.css @@ -1,33 +1,33 @@ -*:focus-visible { - outline: none; -} - -*:focus-visible::after { - content: " "; - position: absolute; - box-sizing: content-box; - height: 100%; - width: 100%; - padding: var(--focus-border_gap); - top: 50%; - left: 50%; - transform: translateX(-50%) translateY(-50%); - border-width: inherit; - border-style: solid; - border-color: transparent; - border-radius: inherit; - outline: var(--focus-border_width) solid var(--outline_focused); - z-index: 9; -} - -.srOnly { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -} +*:focus-visible { + outline: none; +} + +*:focus-visible::after { + content: " "; + position: absolute; + box-sizing: content-box; + height: 100%; + width: 100%; + padding: var(--focus-border_gap); + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + border-width: inherit; + border-style: solid; + border-color: transparent; + border-radius: inherit; + outline: var(--focus-border_width) solid var(--outline_focused); + z-index: 9; +} + +.srOnly { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} diff --git a/src/views/collections/framework-field-guide/styles/global-ffg.css b/src/views/collections/framework-field-guide/styles/global-ffg.css index 18e59d4a..60ad7dba 100644 --- a/src/views/collections/framework-field-guide/styles/global-ffg.css +++ b/src/views/collections/framework-field-guide/styles/global-ffg.css @@ -1,54 +1,55 @@ -body { - background: var(--backgroundColor); - margin: 0; - padding: 0; -} - -/* Borrowed from FFG's global styling */ - -:root { - --animSpeed: 200ms; - --animStyle: ease-in-out; - --darkPrimary: #153e67; - --cardRadius: 8px; - --cardActiveBackground: #ebf6fc; - --cardActiveBoxShadow: 0px 2px 4px rgba(11, 37, 104, 0.27), - inset 0px 1px 0px #ffffff; -} - -.baseBtn { - cursor: pointer; -} - -.baseBtn, -.btnLike { - appearance: none; - text-decoration: none; - background: none; - border: none; - transition: background var(--animSpeed) var(--animStyle), - box-shadow var(--animSpeed) var(--animStyle), - border-color var(--animSpeed) var(--animStyle), - color var(--animStyle) var(--animSpeed); - display: flex; - justify-content: center; - align-items: center; - flex-shrink: 0; - border-radius: var(--cardRadius); - font-size: 1rem; - padding: 4px 8px; - color: var(--darkPrimary); -} - -.baseBtn:hover { - background: var(--cardActiveBackground); - border-color: transparent; - box-shadow: var(--cardActiveBoxShadow); -} - -.baseBtn svg, -.btnLike svg { - height: 32px; - width: 32px; - flex-shrink: 0; -} +body { + background: var(--backgroundColor); + margin: 0; + padding: 0; +} + +/* Borrowed from FFG's global styling */ + +:root { + --animSpeed: 200ms; + --animStyle: ease-in-out; + --darkPrimary: #153e67; + --cardRadius: 8px; + --cardActiveBackground: #ebf6fc; + --cardActiveBoxShadow: 0px 2px 4px rgba(11, 37, 104, 0.27), + inset 0px 1px 0px #ffffff; +} + +.baseBtn { + cursor: pointer; +} + +.baseBtn, +.btnLike { + appearance: none; + text-decoration: none; + background: none; + border: none; + transition: + background var(--animSpeed) var(--animStyle), + box-shadow var(--animSpeed) var(--animStyle), + border-color var(--animSpeed) var(--animStyle), + color var(--animStyle) var(--animSpeed); + display: flex; + justify-content: center; + align-items: center; + flex-shrink: 0; + border-radius: var(--cardRadius); + font-size: 1rem; + padding: 4px 8px; + color: var(--darkPrimary); +} + +.baseBtn:hover { + background: var(--cardActiveBackground); + border-color: transparent; + box-shadow: var(--cardActiveBoxShadow); +} + +.baseBtn svg, +.btnLike svg { + height: 32px; + width: 32px; + flex-shrink: 0; +} diff --git a/src/views/collections/framework-field-guide/styles/shiki.scss b/src/views/collections/framework-field-guide/styles/shiki.scss index 884406a0..d86e833f 100644 --- a/src/views/collections/framework-field-guide/styles/shiki.scss +++ b/src/views/collections/framework-field-guide/styles/shiki.scss @@ -1,42 +1,42 @@ -/* - * This code handles line of code counting - */ -code { - counter-reset: step; - counter-increment: step 0; -} - -code .line::before { - content: counter(step); - counter-increment: step; - width: 1rem; - margin-right: 1.5rem; - display: inline-block; - text-align: right; - color: rgba(115, 138, 148, 0.4); -} - -:root, -.darkTheme { - --cardActiveBackground: #163954; - --white: black; - --textColor: var(--on-dark-emphasis-medium); - --stringColor: #7ee2c4; - --keywordColor: #b5ea94; - --operatorColor: #935c25; - --punctuationColor: var(--on-dark-emphasis-medium); - --constantColor: #cf8ae1; - --functionColor: #c1c3ff; - --selectionColor: #cfe0ec; - --commentColor: #c7d5d7; - --propColor: #8a8a0f; - --varColor: #88c1e2; - --shiki-color-background: var(--white); - --shiki-token-function: var(--functionColor); - --shiki-color-text: var(--punctuationColor); - --shiki-token-string: var(--stringColor); - --shiki-token-keyword: var(--keywordColor); - --shiki-string-expression: var(--operatorColor); - --shiki-token-constant: var(--varColor); - --shiki-token-comment: var(--commentColor); -} +/* + * This code handles line of code counting + */ +code { + counter-reset: step; + counter-increment: step 0; +} + +code .line::before { + content: counter(step); + counter-increment: step; + width: 1rem; + margin-right: 1.5rem; + display: inline-block; + text-align: right; + color: rgba(115, 138, 148, 0.4); +} + +:root, +.darkTheme { + --cardActiveBackground: #163954; + --white: black; + --textColor: var(--on-dark-emphasis-medium); + --stringColor: #7ee2c4; + --keywordColor: #b5ea94; + --operatorColor: #935c25; + --punctuationColor: var(--on-dark-emphasis-medium); + --constantColor: #cf8ae1; + --functionColor: #c1c3ff; + --selectionColor: #cfe0ec; + --commentColor: #c7d5d7; + --propColor: #8a8a0f; + --varColor: #88c1e2; + --shiki-color-background: var(--white); + --shiki-token-function: var(--functionColor); + --shiki-color-text: var(--punctuationColor); + --shiki-token-string: var(--stringColor); + --shiki-token-keyword: var(--keywordColor); + --shiki-string-expression: var(--operatorColor); + --shiki-token-constant: var(--varColor); + --shiki-token-comment: var(--commentColor); +} diff --git a/src/views/collections/framework-field-guide/styles/svg-layers.css b/src/views/collections/framework-field-guide/styles/svg-layers.css index acf410e0..85b0f465 100644 --- a/src/views/collections/framework-field-guide/styles/svg-layers.css +++ b/src/views/collections/framework-field-guide/styles/svg-layers.css @@ -1,22 +1,22 @@ -[data-move-on-scroll-by] { - will-change: transform; -} - -.repeat-background-container { - width: 100%; - overflow: hidden; - display: flex; - flex-wrap: nowrap; - height: 100%; -} - -.repeat-background-svg-container { - height: 100%; - aspect-ratio: var(--svgAspectRatio); -} - -.repeat-background-svg-container > svg *, -svg.colorTransitionSVG * { - transition: fill var(--color-transition-time) var(--color-transition-ease); - will-change: transition; -} \ No newline at end of file +[data-move-on-scroll-by] { + will-change: transform; +} + +.repeat-background-container { + width: 100%; + overflow: hidden; + display: flex; + flex-wrap: nowrap; + height: 100%; +} + +.repeat-background-svg-container { + height: 100%; + aspect-ratio: var(--svgAspectRatio); +} + +.repeat-background-svg-container > svg *, +svg.colorTransitionSVG * { + transition: fill var(--color-transition-time) var(--color-transition-ease); + will-change: transition; +} diff --git a/src/views/collections/framework-field-guide/tokens/_utils.scss b/src/views/collections/framework-field-guide/tokens/_utils.scss index d93c168e..070100ab 100644 --- a/src/views/collections/framework-field-guide/tokens/_utils.scss +++ b/src/views/collections/framework-field-guide/tokens/_utils.scss @@ -1,11 +1,11 @@ @mixin until($breakpoint) { - @media screen and (max-width: $breakpoint) { - @content; - } + @media screen and (max-width: $breakpoint) { + @content; + } } @mixin from($breakpoint) { - @media screen and (min-width: $breakpoint) { - @content; - } + @media screen and (min-width: $breakpoint) { + @content; + } } diff --git a/src/views/collections/framework-field-guide/tokens/adventure.scss b/src/views/collections/framework-field-guide/tokens/adventure.scss index 89f70a8e..07b5d9b2 100644 --- a/src/views/collections/framework-field-guide/tokens/adventure.scss +++ b/src/views/collections/framework-field-guide/tokens/adventure.scss @@ -2,29 +2,26 @@ @import "./utils"; :root { + --grid-item-border-width: var(--border-1x); + --grid-item-corner-radius: var(--corner-radius-2x); + --grid-item-padding_top: var(--spc-3x); + --grid-item-padding_bottom: var(--spc-3x); + --grid-item-padding_horizontal: var(--spc-2x); - --grid-item-border-width: var(--border-1x); - --grid-item-corner-radius: var(--corner-radius-2x); - --grid-item-padding_top: var(--spc-3x); - --grid-item-padding_bottom: var(--spc-3x); - --grid-item-padding_horizontal: var(--spc-2x); - - --grid-icon-size: 24px; - --grid-icon-padding: var(--spc-1x); - --grid-gap: var(--spc-3x); - + --grid-icon-size: 24px; + --grid-icon-padding: var(--spc-1x); + --grid-gap: var(--spc-3x); } @include from($desktop) { + :root { + --grid-item-corner-radius: var(--corner-radius-3x); + --grid-item-padding_top: var(--spc-5x); + --grid-item-padding_bottom: var(--spc-4x); + --grid-item-padding_horizontal: var(--spc-4x); - :root { - --grid-item-corner-radius: var(--corner-radius-3x); - --grid-item-padding_top: var(--spc-5x); - --grid-item-padding_bottom: var(--spc-4x); - --grid-item-padding_horizontal: var(--spc-4x); - - --grid-icon-size: 48px; - --grid-icon-padding: var(--spc-2x); - --grid-gap: var(--spc-6x); - } + --grid-icon-size: 48px; + --grid-icon-padding: var(--spc-2x); + --grid-gap: var(--spc-6x); + } } diff --git a/src/views/collections/framework-field-guide/tokens/book-sections.scss b/src/views/collections/framework-field-guide/tokens/book-sections.scss index b852458b..313174f5 100644 --- a/src/views/collections/framework-field-guide/tokens/book-sections.scss +++ b/src/views/collections/framework-field-guide/tokens/book-sections.scss @@ -1,52 +1,52 @@ -@import "./breakpoints"; -@import "./utils"; - -:root { - // Sections - - --section-ver-padding: var(--spc-3x); - --section-hor-padding: var(--spc-3x); - --section-gap: var(--spc-3x); - - // Book metrics - - --metric-book-ver-padding: var(--spc-2x); - --metric-book-hor-padding: var(--spc-1x); - - // Chips - - --chip-ver-padding: var(--spc-1x); - --chip-hor-padding: var(--spc-2x); - --chip-group-gap: var(--spc-1x); - - --chip-corner-radius: var(--corner-radius-circular); -} - -@include from($tablet) { - :root { - // Sections - - --section-ver-padding: var(--spc-6x); - --section-hor-padding: var(--spc-6x); - } -} - -@include from($desktop) { - :root { - // Sections - - --section-ver-padding: var(--spc-6x); - --section-hor-padding: var(--spc-6x); - - // Book metrics - - --metric-book-ver-padding: var(--spc-4x); - --metric-book-hor-padding: var(--spc-2x); - - // Chips - - --chip-ver-padding: var(--spc-2x); - --chip-hor-padding: var(--spc-4x); - --chip-group-gap: var(--spc-2x); - } -} +@import "./breakpoints"; +@import "./utils"; + +:root { + // Sections + + --section-ver-padding: var(--spc-3x); + --section-hor-padding: var(--spc-3x); + --section-gap: var(--spc-3x); + + // Book metrics + + --metric-book-ver-padding: var(--spc-2x); + --metric-book-hor-padding: var(--spc-1x); + + // Chips + + --chip-ver-padding: var(--spc-1x); + --chip-hor-padding: var(--spc-2x); + --chip-group-gap: var(--spc-1x); + + --chip-corner-radius: var(--corner-radius-circular); +} + +@include from($tablet) { + :root { + // Sections + + --section-ver-padding: var(--spc-6x); + --section-hor-padding: var(--spc-6x); + } +} + +@include from($desktop) { + :root { + // Sections + + --section-ver-padding: var(--spc-6x); + --section-hor-padding: var(--spc-6x); + + // Book metrics + + --metric-book-ver-padding: var(--spc-4x); + --metric-book-hor-padding: var(--spc-2x); + + // Chips + + --chip-ver-padding: var(--spc-2x); + --chip-hor-padding: var(--spc-4x); + --chip-group-gap: var(--spc-2x); + } +} diff --git a/src/views/collections/framework-field-guide/tokens/breakpoints.scss b/src/views/collections/framework-field-guide/tokens/breakpoints.scss index fbef737f..d89d2077 100644 --- a/src/views/collections/framework-field-guide/tokens/breakpoints.scss +++ b/src/views/collections/framework-field-guide/tokens/breakpoints.scss @@ -1,2 +1,2 @@ -$desktop: 960px; -$tablet: 600px; +$desktop: 960px; +$tablet: 600px; diff --git a/src/views/collections/framework-field-guide/tokens/buttons.scss b/src/views/collections/framework-field-guide/tokens/buttons.scss index 3871adb1..8373e562 100644 --- a/src/views/collections/framework-field-guide/tokens/buttons.scss +++ b/src/views/collections/framework-field-guide/tokens/buttons.scss @@ -1,43 +1,43 @@ -@import "./breakpoints"; -@import "./utils"; - -:root, -.book-section { - // Buttons - - --btn-state-transition-duration: 150ms; - --btn-state-transition-easing: ease-out; - - --btn-ver-padding_small: var(--spc-1x); - --btn-hor-padding_small: var(--spc-3x); - --btn-ver-padding_large: var(--spc-2x); - --btn-hor-padding_large: var(--spc-4x); - --btn-border-width_small: var(--border-2x); - --btn-border-width_large: var(--border-2x); - --btn-border-width_disabled: var(--border-1x); - - --btn-corner-radius: var(--corner-radius-circular); - - --btn-border: var(--outline); - --btn-foreground_outlined: var(--on-dark-emphasis-high); - --btn-state-hovered_outlined: rgba(var(--state-overlay), 0.16); - --btn-state-pressed_outlined: rgba(var(--state-overlay), 0.32); - --btn-foreground_filled: var(--cta-foreground); - --btn-background_filled: var(--cta-background); - --btn-state-hovered_filled: var(--cta-background_hovered); - --btn-state-pressed_filled: var(--cta-background_pressed); -} - -@include from($desktop) { - :root, - .book-section { - // Buttons - - --btn-ver-padding_small: var(--spc-2x); - --btn-hor-padding_small: var(--spc-4x); - --btn-ver-padding_large: var(--spc-3x); - --btn-hor-padding_large: var(--spc-6x); - --btn-border-width_small: var(--border-2x); - --btn-border-width_large: var(--border-3x); - } -} +@import "./breakpoints"; +@import "./utils"; + +:root, +.book-section { + // Buttons + + --btn-state-transition-duration: 150ms; + --btn-state-transition-easing: ease-out; + + --btn-ver-padding_small: var(--spc-1x); + --btn-hor-padding_small: var(--spc-3x); + --btn-ver-padding_large: var(--spc-2x); + --btn-hor-padding_large: var(--spc-4x); + --btn-border-width_small: var(--border-2x); + --btn-border-width_large: var(--border-2x); + --btn-border-width_disabled: var(--border-1x); + + --btn-corner-radius: var(--corner-radius-circular); + + --btn-border: var(--outline); + --btn-foreground_outlined: var(--on-dark-emphasis-high); + --btn-state-hovered_outlined: rgba(var(--state-overlay), 0.16); + --btn-state-pressed_outlined: rgba(var(--state-overlay), 0.32); + --btn-foreground_filled: var(--cta-foreground); + --btn-background_filled: var(--cta-background); + --btn-state-hovered_filled: var(--cta-background_hovered); + --btn-state-pressed_filled: var(--cta-background_pressed); +} + +@include from($desktop) { + :root, + .book-section { + // Buttons + + --btn-ver-padding_small: var(--spc-2x); + --btn-hor-padding_small: var(--spc-4x); + --btn-ver-padding_large: var(--spc-3x); + --btn-hor-padding_large: var(--spc-6x); + --btn-border-width_small: var(--border-2x); + --btn-border-width_large: var(--border-3x); + } +} diff --git a/src/views/collections/framework-field-guide/tokens/code-block.scss b/src/views/collections/framework-field-guide/tokens/code-block.scss index d2745af5..a019e56e 100644 --- a/src/views/collections/framework-field-guide/tokens/code-block.scss +++ b/src/views/collections/framework-field-guide/tokens/code-block.scss @@ -1,28 +1,28 @@ -@import "./breakpoints"; -@import "./utils"; - -:root { - --code-block-corner-radius_outer: var(--corner-radius-2x); - --code-block-corner-radius_inner: calc( - var(--code-block-corner-radius_outer) - var(--code-block-padding) - ); - --code-block-padding: 4px; - - --code-block-tab-min-size: var(--spc-6x); - --code-block-tab-inative_hovered: rgba(var(--state-overlay), 0.12); - --code-block-tab-inactive_pressed: rgba(var(--state-overlay), 0.24); - - --code-block-spacing: var(--spc-2x); - - --code-block-text_primary: var(--on-dark-emphasis-high); - --code-block-text_secondary: var(--on-dark-emphasis-medium); - - --code-block-container_outer: var(--slate-800); - --code-block-container_inner: var(--slate-700); -} - -@include from($desktop) { - :root { - --code-block-spacing: var(--spc-3x); - } -} +@import "./breakpoints"; +@import "./utils"; + +:root { + --code-block-corner-radius_outer: var(--corner-radius-2x); + --code-block-corner-radius_inner: calc( + var(--code-block-corner-radius_outer) - var(--code-block-padding) + ); + --code-block-padding: 4px; + + --code-block-tab-min-size: var(--spc-6x); + --code-block-tab-inative_hovered: rgba(var(--state-overlay), 0.12); + --code-block-tab-inactive_pressed: rgba(var(--state-overlay), 0.24); + + --code-block-spacing: var(--spc-2x); + + --code-block-text_primary: var(--on-dark-emphasis-high); + --code-block-text_secondary: var(--on-dark-emphasis-medium); + + --code-block-container_outer: var(--slate-800); + --code-block-container_inner: var(--slate-700); +} + +@include from($desktop) { + :root { + --code-block-spacing: var(--spc-3x); + } +} diff --git a/src/views/collections/framework-field-guide/tokens/colors.scss b/src/views/collections/framework-field-guide/tokens/colors.scss index 7591550c..187cf56b 100644 --- a/src/views/collections/framework-field-guide/tokens/colors.scss +++ b/src/views/collections/framework-field-guide/tokens/colors.scss @@ -1,100 +1,100 @@ -:root { - // FFG - - --gradient-ffg: linear-gradient(90deg, #ffaa00 34.58%, #ffd500 83.8%); - - // Corbin - - --gradient-corbin: linear-gradient(90deg, #8077ee 37.76%, #bf49e9 75.83%); - - // Default - --slate-050-base: 246, 249, 254; - --slate-050: rgb(var(--slate-050-base)); - --slate-100-base: 236, 240, 249; - --slate-100: rgb(var(--slate-100-base)); - --slate-200-base: 217, 225, 242; - --slate-200: rgb(var(--slate-200-base)); - --slate-300-base: 184, 197, 224; - --slate-300: rgb(var(--slate-300-base)); - --slate-400-base: 137, 155, 189; - --slate-400: rgb(var(--slate-400-base)); - --slate-500-base: 96, 112, 144; - --slate-500: rgb(var(--slate-500-base)); - --slate-600-base: 63, 79, 110; - --slate-600: rgb(var(--slate-600-base)); - --slate-700-base: 42, 55, 81; - --slate-700: rgb(var(--slate-700-base)); - --slate-800-base: 27, 36, 55; - --slate-800: rgb(var(--slate-800-base)); - --slate-900-base: 18, 25, 38; - --slate-900: rgb(var(--slate-900-base)); - - // Fundamentals - - --fund-050-base: 242, 253, 255; - --fund-050: rgb(var(--fund-050-base)); - --fund-100-base: 210, 247, 255; - --fund-100: rgb(var(--fund-100-base)); - --fund-200-base: 185, 235, 245; - --fund-200: rgb(var(--fund-200-base)); - --fund-300-base: 148, 206, 219; - --fund-300: rgb(var(--fund-300-base)); - --fund-400-base: 116, 179, 192; - --fund-400: rgb(var(--fund-400-base)); - --fund-500-base: 92, 153, 167; - --fund-500: rgb(var(--fund-500-base)); - --fund-600-base: 69, 129, 142; - --fund-600: rgb(var(--fund-600-base)); - --fund-700-base: 52, 103, 113; - --fund-700: rgb(var(--fund-700-base)); - --fund-800-base: 36, 79, 88; - --fund-800: rgb(var(--fund-800-base)); - --fund-900-base: 23, 56, 63; - --fund-900: rgb(var(--fund-900-base)); - - // Ecosystem - - --ecos-050-base: 244, 255, 238; - --ecos-050: rgb(var(--ecos-050-base)); - --ecos-100-base: 226, 246, 218; - --ecos-100: rgb(var(--ecos-100-base)); - --ecos-200-base: 205, 233, 197; - --ecos-200: rgb(var(--ecos-200-base)); - --ecos-300-base: 168, 207, 163; - --ecos-300: rgb(var(--ecos-300-base)); - --ecos-400-base: 132, 182, 130; - --ecos-400: rgb(var(--ecos-400-base)); - --ecos-500-base: 102, 158, 106; - --ecos-500: rgb(var(--ecos-500-base)); - --ecos-600-base: 76, 134, 87; - --ecos-600: rgb(var(--ecos-600-base)); - --ecos-700-base: 54, 110, 71; - --ecos-700: rgb(var(--ecos-700-base)); - --ecos-800-base: 36, 85, 56; - --ecos-800: rgb(var(--ecos-800-base)); - --ecos-900-base: 21, 61, 41; - --ecos-900: rgb(var(--ecos-900-base)); - - // Internals - - --inter-050-base: 255, 242, 255; - --inter-050: rgb(var(--inter-050-base)); - --inter-100-base: 243, 218, 244; - --inter-100: rgb(var(--inter-100-base)); - --inter-200-base: 230, 190, 233; - --inter-200: rgb(var(--inter-200-base)); - --inter-300-base: 203, 153, 214; - --inter-300: rgb(var(--inter-300-base)); - --inter-400-base: 164, 115, 187; - --inter-400: rgb(var(--inter-400-base)); - --inter-500-base: 129, 84, 163; - --inter-500: rgb(var(--inter-500-base)); - --inter-600-base: 96, 57, 141; - --inter-600: rgb(var(--inter-600-base)); - --inter-700-base: 66, 36, 116; - --inter-700: rgb(var(--inter-700-base)); - --inter-800-base: 38, 20, 86; - --inter-800: rgb(var(--inter-800-base)); - --inter-900-base: 17, 10, 51; - --inter-900: rgb(var(--inter-900-base)); -} +:root { + // FFG + + --gradient-ffg: linear-gradient(90deg, #ffaa00 34.58%, #ffd500 83.8%); + + // Corbin + + --gradient-corbin: linear-gradient(90deg, #8077ee 37.76%, #bf49e9 75.83%); + + // Default + --slate-050-base: 246, 249, 254; + --slate-050: rgb(var(--slate-050-base)); + --slate-100-base: 236, 240, 249; + --slate-100: rgb(var(--slate-100-base)); + --slate-200-base: 217, 225, 242; + --slate-200: rgb(var(--slate-200-base)); + --slate-300-base: 184, 197, 224; + --slate-300: rgb(var(--slate-300-base)); + --slate-400-base: 137, 155, 189; + --slate-400: rgb(var(--slate-400-base)); + --slate-500-base: 96, 112, 144; + --slate-500: rgb(var(--slate-500-base)); + --slate-600-base: 63, 79, 110; + --slate-600: rgb(var(--slate-600-base)); + --slate-700-base: 42, 55, 81; + --slate-700: rgb(var(--slate-700-base)); + --slate-800-base: 27, 36, 55; + --slate-800: rgb(var(--slate-800-base)); + --slate-900-base: 18, 25, 38; + --slate-900: rgb(var(--slate-900-base)); + + // Fundamentals + + --fund-050-base: 242, 253, 255; + --fund-050: rgb(var(--fund-050-base)); + --fund-100-base: 210, 247, 255; + --fund-100: rgb(var(--fund-100-base)); + --fund-200-base: 185, 235, 245; + --fund-200: rgb(var(--fund-200-base)); + --fund-300-base: 148, 206, 219; + --fund-300: rgb(var(--fund-300-base)); + --fund-400-base: 116, 179, 192; + --fund-400: rgb(var(--fund-400-base)); + --fund-500-base: 92, 153, 167; + --fund-500: rgb(var(--fund-500-base)); + --fund-600-base: 69, 129, 142; + --fund-600: rgb(var(--fund-600-base)); + --fund-700-base: 52, 103, 113; + --fund-700: rgb(var(--fund-700-base)); + --fund-800-base: 36, 79, 88; + --fund-800: rgb(var(--fund-800-base)); + --fund-900-base: 23, 56, 63; + --fund-900: rgb(var(--fund-900-base)); + + // Ecosystem + + --ecos-050-base: 244, 255, 238; + --ecos-050: rgb(var(--ecos-050-base)); + --ecos-100-base: 226, 246, 218; + --ecos-100: rgb(var(--ecos-100-base)); + --ecos-200-base: 205, 233, 197; + --ecos-200: rgb(var(--ecos-200-base)); + --ecos-300-base: 168, 207, 163; + --ecos-300: rgb(var(--ecos-300-base)); + --ecos-400-base: 132, 182, 130; + --ecos-400: rgb(var(--ecos-400-base)); + --ecos-500-base: 102, 158, 106; + --ecos-500: rgb(var(--ecos-500-base)); + --ecos-600-base: 76, 134, 87; + --ecos-600: rgb(var(--ecos-600-base)); + --ecos-700-base: 54, 110, 71; + --ecos-700: rgb(var(--ecos-700-base)); + --ecos-800-base: 36, 85, 56; + --ecos-800: rgb(var(--ecos-800-base)); + --ecos-900-base: 21, 61, 41; + --ecos-900: rgb(var(--ecos-900-base)); + + // Internals + + --inter-050-base: 255, 242, 255; + --inter-050: rgb(var(--inter-050-base)); + --inter-100-base: 243, 218, 244; + --inter-100: rgb(var(--inter-100-base)); + --inter-200-base: 230, 190, 233; + --inter-200: rgb(var(--inter-200-base)); + --inter-300-base: 203, 153, 214; + --inter-300: rgb(var(--inter-300-base)); + --inter-400-base: 164, 115, 187; + --inter-400: rgb(var(--inter-400-base)); + --inter-500-base: 129, 84, 163; + --inter-500: rgb(var(--inter-500-base)); + --inter-600-base: 96, 57, 141; + --inter-600: rgb(var(--inter-600-base)); + --inter-700-base: 66, 36, 116; + --inter-700: rgb(var(--inter-700-base)); + --inter-800-base: 38, 20, 86; + --inter-800: rgb(var(--inter-800-base)); + --inter-900-base: 17, 10, 51; + --inter-900: rgb(var(--inter-900-base)); +} diff --git a/src/views/collections/framework-field-guide/tokens/dimensions.scss b/src/views/collections/framework-field-guide/tokens/dimensions.scss index 2368a249..83ab3e45 100644 --- a/src/views/collections/framework-field-guide/tokens/dimensions.scss +++ b/src/views/collections/framework-field-guide/tokens/dimensions.scss @@ -1,42 +1,42 @@ -:root { - --spc-1x: 8px; - --spc-2x: 16px; - --spc-3x: 24px; - --spc-4x: 32px; - --spc-5x: 40px; - --spc-6x: 48px; - - /* MAX WIDTHS */ - --max-width_small: 960px; - --max-width_large: 1280px; - - /* BORDER WIDTH */ - - --border-1x: 1px; - --border-2x: 2px; - --border-3x: 3px; - --border-4x: 4px; - - /* AVATARS */ - - --avatar-size_huge: 96px; - --avatar-size_large: 72px; - --avatar-size_medium: 40px; - --avatar-size_small: 24px; - - /* CORNER RADIUS */ - - --corner-radius-1x: 8px; - --corner-radius-2x: 16px; - --corner-radius-3x: 24px; - --corner-radius-4x: 32px; - --corner-radius-5x: 40px; - --corner-radius-6x: 48px; - --corner-radius-circular: 999999px; - --corner-radius-circle: 50%; - - /* FOCUS */ - - --focus-border_gap: 4px; - --focus-border_width: var(--border-4x); -} +:root { + --spc-1x: 8px; + --spc-2x: 16px; + --spc-3x: 24px; + --spc-4x: 32px; + --spc-5x: 40px; + --spc-6x: 48px; + + /* MAX WIDTHS */ + --max-width_small: 960px; + --max-width_large: 1280px; + + /* BORDER WIDTH */ + + --border-1x: 1px; + --border-2x: 2px; + --border-3x: 3px; + --border-4x: 4px; + + /* AVATARS */ + + --avatar-size_huge: 96px; + --avatar-size_large: 72px; + --avatar-size_medium: 40px; + --avatar-size_small: 24px; + + /* CORNER RADIUS */ + + --corner-radius-1x: 8px; + --corner-radius-2x: 16px; + --corner-radius-3x: 24px; + --corner-radius-4x: 32px; + --corner-radius-5x: 40px; + --corner-radius-6x: 48px; + --corner-radius-circular: 999999px; + --corner-radius-circle: 50%; + + /* FOCUS */ + + --focus-border_gap: 4px; + --focus-border_width: var(--border-4x); +} diff --git a/src/views/collections/framework-field-guide/tokens/forms.scss b/src/views/collections/framework-field-guide/tokens/forms.scss index e002579e..0a65b017 100644 --- a/src/views/collections/framework-field-guide/tokens/forms.scss +++ b/src/views/collections/framework-field-guide/tokens/forms.scss @@ -1,17 +1,17 @@ -@import "./breakpoints"; -@import "./utils"; - -:root { - --form-border-radius: 12px; - --form-border-width: var(--border-2x); - - --form-padding-horizontal: var(--spc-2x); - --form-padding-vertical: var(--spc-1x); -} - -@include from($desktop) { - :root { - --form-padding-horizontal: var(--spc-2x); - --form-padding-vertical: var(--spc-2x); - } -} +@import "./breakpoints"; +@import "./utils"; + +:root { + --form-border-radius: 12px; + --form-border-width: var(--border-2x); + + --form-padding-horizontal: var(--spc-2x); + --form-padding-vertical: var(--spc-1x); +} + +@include from($desktop) { + :root { + --form-padding-horizontal: var(--spc-2x); + --form-padding-vertical: var(--spc-2x); + } +} diff --git a/src/views/collections/framework-field-guide/tokens/pricing.scss b/src/views/collections/framework-field-guide/tokens/pricing.scss index 8df5e99a..59f2b6aa 100644 --- a/src/views/collections/framework-field-guide/tokens/pricing.scss +++ b/src/views/collections/framework-field-guide/tokens/pricing.scss @@ -1,36 +1,36 @@ -@import "./breakpoints"; -@import "./utils"; - -:root { - --pricing-container_default: var(--slate-800); - --pricing-container_highlighted: var(--slate-700); - --pricing-container-radius: var(--corner-radius-2x); - --bullet-list-item-gap: 4px; - --bullet-list-item-icon-size: 12px; - --sale-badge-size: 72px; - --sale-badge-offset: -16px; - --sale-badge-rotation: -30deg; - - --pricing-toggle-track-color: rgba(var(--state-overlay), 0.48); - --pricing-toggle-track-color_hovered: rgba(var(--state-overlay), 0.64); - --pricing-toggle-track-color_pressed: rgba(var(--state-overlay), 1); - - --pricing-toggle-width: 56px; - --pricing-toggle-height: 32px; - --pricing-toggle-thumb-size: 20px; - --pricing-toggle-thumb-size_hovered: 24px; - --pricing-toggle-thumb-size_pressed: 28px; - - --pricing-toggle-gap: 6px; - --pricing-toggle-gap_hovered: 4px; - --pricing-toggle-gap_pressed: 2px; -} - -@include from($desktop) { - :root { - --bullet-list-item-icon-size: 16px; - --sale-badge-size: 128px; - --sale-badge-offset: -48px; - --pricing-container-radius: var(--corner-radius-3x); - } -} +@import "./breakpoints"; +@import "./utils"; + +:root { + --pricing-container_default: var(--slate-800); + --pricing-container_highlighted: var(--slate-700); + --pricing-container-radius: var(--corner-radius-2x); + --bullet-list-item-gap: 4px; + --bullet-list-item-icon-size: 12px; + --sale-badge-size: 72px; + --sale-badge-offset: -16px; + --sale-badge-rotation: -30deg; + + --pricing-toggle-track-color: rgba(var(--state-overlay), 0.48); + --pricing-toggle-track-color_hovered: rgba(var(--state-overlay), 0.64); + --pricing-toggle-track-color_pressed: rgba(var(--state-overlay), 1); + + --pricing-toggle-width: 56px; + --pricing-toggle-height: 32px; + --pricing-toggle-thumb-size: 20px; + --pricing-toggle-thumb-size_hovered: 24px; + --pricing-toggle-thumb-size_pressed: 28px; + + --pricing-toggle-gap: 6px; + --pricing-toggle-gap_hovered: 4px; + --pricing-toggle-gap_pressed: 2px; +} + +@include from($desktop) { + :root { + --bullet-list-item-icon-size: 16px; + --sale-badge-size: 128px; + --sale-badge-offset: -48px; + --pricing-container-radius: var(--corner-radius-3x); + } +} diff --git a/src/views/collections/framework-field-guide/tokens/quotes.scss b/src/views/collections/framework-field-guide/tokens/quotes.scss index 883f7b66..4202aebe 100644 --- a/src/views/collections/framework-field-guide/tokens/quotes.scss +++ b/src/views/collections/framework-field-guide/tokens/quotes.scss @@ -1,48 +1,48 @@ -@import "./breakpoints"; -@import "./utils"; - -:root, -.book-section { - --quote-grid-gap: var(--spc-3x); - - --quote-mark-opacity: 0.12; - --quote-mark-offset: 8px; - --quote-mark-offset_prominent: 48px; - - --quote-mark-aspect-ratio: 200 / 160; - --quote-marks-height_contained: 80px; - --quote-marks-height_prominent: 80px; - - --quote-spacing: var(--spc-3x); - --quote-corner-radius: var(--corner-radius-3x); - --quote-avatar-size: var(--avatar-size_medium); - - --quote-avatar-size_prominent: var(--avatar-size_large); - - --quote-arrow-link-color: var(--outline_focused); -} - -@include from($tablet) { - :root, - .book-section { - --quote-grid-gap: var(--spc-6x); - } -} - -@include from($desktop) { - :root, - .book-section { - --quote-grid-gap: var(--spc-6x); - - --quote-mark-offset: 32px; - --quote-mark-offset_prominent: 96px; - - --quote-marks-height_contained: 120px; - --quote-marks-height_prominent: 160px; - - --quote-spacing: var(--spc-4x); - --quote-corner-radius: var(--corner-radius-4x); - - --quote-avatar-size_prominent: var(--avatar-size_huge); - } -} +@import "./breakpoints"; +@import "./utils"; + +:root, +.book-section { + --quote-grid-gap: var(--spc-3x); + + --quote-mark-opacity: 0.12; + --quote-mark-offset: 8px; + --quote-mark-offset_prominent: 48px; + + --quote-mark-aspect-ratio: 200 / 160; + --quote-marks-height_contained: 80px; + --quote-marks-height_prominent: 80px; + + --quote-spacing: var(--spc-3x); + --quote-corner-radius: var(--corner-radius-3x); + --quote-avatar-size: var(--avatar-size_medium); + + --quote-avatar-size_prominent: var(--avatar-size_large); + + --quote-arrow-link-color: var(--outline_focused); +} + +@include from($tablet) { + :root, + .book-section { + --quote-grid-gap: var(--spc-6x); + } +} + +@include from($desktop) { + :root, + .book-section { + --quote-grid-gap: var(--spc-6x); + + --quote-mark-offset: 32px; + --quote-mark-offset_prominent: 96px; + + --quote-marks-height_contained: 120px; + --quote-marks-height_prominent: 160px; + + --quote-spacing: var(--spc-4x); + --quote-corner-radius: var(--corner-radius-4x); + + --quote-avatar-size_prominent: var(--avatar-size_huge); + } +} diff --git a/src/views/collections/framework-field-guide/tokens/sign-up.scss b/src/views/collections/framework-field-guide/tokens/sign-up.scss index e055546c..83753071 100644 --- a/src/views/collections/framework-field-guide/tokens/sign-up.scss +++ b/src/views/collections/framework-field-guide/tokens/sign-up.scss @@ -1,31 +1,31 @@ -@import "./breakpoints"; -@import "./utils"; - -:root { - --sign-up-avatar-size: var(--avatar-size_large); - --sign-up-btn-gap: var(--spc-6x); - - --outline-gap: var(--spc-1x); - --outline-corner-radius: var(--corner-radius-2x); - - --social-btn-icon-size: 24px; - --social-btn-height: 40px; -} - -@include from($tablet) { - :root { - --outline-gap: var(--spc-2x); - } -} - -@include from($desktop) { - :root { - --sign-up-btn-gap: var(--spc-3x); - - --outline-gap: var(--spc-3x); - --outline-corner-radius: var(--corner-radius-3x); - - --social-btn-icon-size: 32px; - --social-btn-height: 64px; - } -} +@import "./breakpoints"; +@import "./utils"; + +:root { + --sign-up-avatar-size: var(--avatar-size_large); + --sign-up-btn-gap: var(--spc-6x); + + --outline-gap: var(--spc-1x); + --outline-corner-radius: var(--corner-radius-2x); + + --social-btn-icon-size: 24px; + --social-btn-height: 40px; +} + +@include from($tablet) { + :root { + --outline-gap: var(--spc-2x); + } +} + +@include from($desktop) { + :root { + --sign-up-btn-gap: var(--spc-3x); + + --outline-gap: var(--spc-3x); + --outline-corner-radius: var(--corner-radius-3x); + + --social-btn-icon-size: 32px; + --social-btn-height: 64px; + } +} diff --git a/src/views/collections/framework-field-guide/tokens/text-styles.scss b/src/views/collections/framework-field-guide/tokens/text-styles.scss index 2fe4b104..724f073d 100644 --- a/src/views/collections/framework-field-guide/tokens/text-styles.scss +++ b/src/views/collections/framework-field-guide/tokens/text-styles.scss @@ -1,312 +1,312 @@ -@import "./breakpoints"; -@import "./utils"; - -$plusJakartaSans: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", - "Plus Jakarta Sans-fallback2", sans-serif; -$changaOne: "Changa One", "Changa One-fallback", "Changa One-fallback2", - sans-serif; - -.text-style-display-1 { - font-size: 2.75rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 100%; - text-decoration: none; - text-transform: none; -} -.text-style-display-2 { - font-size: 4rem; - font-family: $changaOne; - font-weight: 400; - font-style: normal; - line-height: 3.5rem; - text-decoration: none; - text-transform: none; -} -.text-style-headline-1 { - font-size: 2.25rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 2.5rem; - text-decoration: none; - text-transform: none; -} -.text-style-headline-2 { - font-size: 2rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 2.5rem; - text-decoration: none; - text-transform: none; -} -.text-style-headline-3 { - font-size: 1.75rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 2.25rem; - text-decoration: none; - text-transform: none; -} -.text-style-headline-4 { - font-size: 1.5rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.75rem; - text-decoration: none; - text-transform: none; -} -.text-style-headline-5 { - font-size: 1.25rem; - font-family: $plusJakartaSans; - font-weight: 600; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.01em; - text-decoration: none; - text-transform: none; -} -.text-style-headline-6 { - font-size: 1.125rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.03em; - text-decoration: none; - text-transform: none; -} -.text-style-button { - font-size: 0.875rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.01em; - text-decoration: none; - text-transform: none; -} -.text-style-body-large { - font-size: 1rem; - font-family: $plusJakartaSans; - font-weight: 500; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; -} -.text-style-body-large-bold { - font-size: 1rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; -} -.text-style-body-medium { - font-size: 0.875rem; - font-family: $plusJakartaSans; - font-weight: 400; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; -} -.text-style-body-medium-bold { - font-size: 0.875rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; -} -.text-style-body-small { - font-size: 0.75rem; - font-family: $plusJakartaSans; - font-weight: 400; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; -} -.text-style-body-small-bold { - font-size: 0.75rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; -} -.text-style-code { - font-size: 0.75rem; - font-family: "Fira Code"; - line-height: 1rem; - text-decoration: none; - text-transform: none; -} - -@include from($desktop) { - .text-style-display-1 { - font-size: 7rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 7rem; - text-decoration: none; - text-transform: none; - } - .text-style-display-2 { - font-size: 9rem; - font-family: $changaOne; - font-weight: 400; - font-style: normal; - line-height: 8rem; - text-decoration: none; - text-transform: none; - } - .text-style-headline-1 { - font-size: 4.5rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 4.5rem; - text-decoration: none; - text-transform: none; - } - .text-style-headline-2 { - font-size: 3.5rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 4rem; - text-decoration: none; - text-transform: none; - } - .text-style-headline-3 { - font-size: 2.75rem; - font-family: $plusJakartaSans; - font-weight: 800; - font-style: normal; - line-height: 3.5rem; - text-decoration: none; - text-transform: none; - } - .text-style-headline-4 { - font-size: 2.25rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 2.75rem; - text-decoration: none; - text-transform: none; - } - .text-style-headline-5 { - font-size: 1.75rem; - font-family: $plusJakartaSans; - font-weight: 600; - font-style: normal; - line-height: 2.25rem; - letter-spacing: 0.01em; - text-decoration: none; - text-transform: none; - } - .text-style-headline-6 { - font-size: 1.25rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.75rem; - letter-spacing: 0.03em; - text-decoration: none; - text-transform: none; - } - .text-style-button { - font-size: 1.125rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.5rem; - text-decoration: none; - text-transform: none; - } - .text-style-body-large { - font-size: 1.125rem; - font-family: $plusJakartaSans; - font-weight: 500; - font-style: normal; - line-height: 1.75rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } - .text-style-body-large-bold { - font-size: 1.125rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.75rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } - .text-style-body-medium { - font-size: 1rem; - font-family: $plusJakartaSans; - font-weight: 500; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } - .text-style-body-medium-bold { - font-size: 1rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.5rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } - .text-style-body-small { - font-size: 0.875rem; - font-family: $plusJakartaSans; - font-weight: 400; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } - .text-style-body-small-bold { - font-size: 0.875rem; - font-family: $plusJakartaSans; - font-weight: 700; - font-style: normal; - line-height: 1.25rem; - letter-spacing: 0.02em; - text-decoration: none; - text-transform: none; - } - .text-style-code { - font-size: 1rem; - font-family: "Fira Code", monospace; - line-height: 1.5rem; - text-decoration: none; - text-transform: none; - } -} +@import "./breakpoints"; +@import "./utils"; + +$plusJakartaSans: "Plus Jakarta Sans", "Plus Jakarta Sans-fallback", + "Plus Jakarta Sans-fallback2", sans-serif; +$changaOne: "Changa One", "Changa One-fallback", "Changa One-fallback2", + sans-serif; + +.text-style-display-1 { + font-size: 2.75rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 100%; + text-decoration: none; + text-transform: none; +} +.text-style-display-2 { + font-size: 4rem; + font-family: $changaOne; + font-weight: 400; + font-style: normal; + line-height: 3.5rem; + text-decoration: none; + text-transform: none; +} +.text-style-headline-1 { + font-size: 2.25rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 2.5rem; + text-decoration: none; + text-transform: none; +} +.text-style-headline-2 { + font-size: 2rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 2.5rem; + text-decoration: none; + text-transform: none; +} +.text-style-headline-3 { + font-size: 1.75rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 2.25rem; + text-decoration: none; + text-transform: none; +} +.text-style-headline-4 { + font-size: 1.5rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.75rem; + text-decoration: none; + text-transform: none; +} +.text-style-headline-5 { + font-size: 1.25rem; + font-family: $plusJakartaSans; + font-weight: 600; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.01em; + text-decoration: none; + text-transform: none; +} +.text-style-headline-6 { + font-size: 1.125rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.03em; + text-decoration: none; + text-transform: none; +} +.text-style-button { + font-size: 0.875rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.01em; + text-decoration: none; + text-transform: none; +} +.text-style-body-large { + font-size: 1rem; + font-family: $plusJakartaSans; + font-weight: 500; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; +} +.text-style-body-large-bold { + font-size: 1rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; +} +.text-style-body-medium { + font-size: 0.875rem; + font-family: $plusJakartaSans; + font-weight: 400; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; +} +.text-style-body-medium-bold { + font-size: 0.875rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; +} +.text-style-body-small { + font-size: 0.75rem; + font-family: $plusJakartaSans; + font-weight: 400; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; +} +.text-style-body-small-bold { + font-size: 0.75rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; +} +.text-style-code { + font-size: 0.75rem; + font-family: "Fira Code"; + line-height: 1rem; + text-decoration: none; + text-transform: none; +} + +@include from($desktop) { + .text-style-display-1 { + font-size: 7rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 7rem; + text-decoration: none; + text-transform: none; + } + .text-style-display-2 { + font-size: 9rem; + font-family: $changaOne; + font-weight: 400; + font-style: normal; + line-height: 8rem; + text-decoration: none; + text-transform: none; + } + .text-style-headline-1 { + font-size: 4.5rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 4.5rem; + text-decoration: none; + text-transform: none; + } + .text-style-headline-2 { + font-size: 3.5rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 4rem; + text-decoration: none; + text-transform: none; + } + .text-style-headline-3 { + font-size: 2.75rem; + font-family: $plusJakartaSans; + font-weight: 800; + font-style: normal; + line-height: 3.5rem; + text-decoration: none; + text-transform: none; + } + .text-style-headline-4 { + font-size: 2.25rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 2.75rem; + text-decoration: none; + text-transform: none; + } + .text-style-headline-5 { + font-size: 1.75rem; + font-family: $plusJakartaSans; + font-weight: 600; + font-style: normal; + line-height: 2.25rem; + letter-spacing: 0.01em; + text-decoration: none; + text-transform: none; + } + .text-style-headline-6 { + font-size: 1.25rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.75rem; + letter-spacing: 0.03em; + text-decoration: none; + text-transform: none; + } + .text-style-button { + font-size: 1.125rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.5rem; + text-decoration: none; + text-transform: none; + } + .text-style-body-large { + font-size: 1.125rem; + font-family: $plusJakartaSans; + font-weight: 500; + font-style: normal; + line-height: 1.75rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } + .text-style-body-large-bold { + font-size: 1.125rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.75rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } + .text-style-body-medium { + font-size: 1rem; + font-family: $plusJakartaSans; + font-weight: 500; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } + .text-style-body-medium-bold { + font-size: 1rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.5rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } + .text-style-body-small { + font-size: 0.875rem; + font-family: $plusJakartaSans; + font-weight: 400; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } + .text-style-body-small-bold { + font-size: 0.875rem; + font-family: $plusJakartaSans; + font-weight: 700; + font-style: normal; + line-height: 1.25rem; + letter-spacing: 0.02em; + text-decoration: none; + text-transform: none; + } + .text-style-code { + font-size: 1rem; + font-family: "Fira Code", monospace; + line-height: 1.5rem; + text-decoration: none; + text-transform: none; + } +} diff --git a/src/views/collections/framework-field-guide/tokens/themes.scss b/src/views/collections/framework-field-guide/tokens/themes.scss index f9c81163..9bccbc44 100644 --- a/src/views/collections/framework-field-guide/tokens/themes.scss +++ b/src/views/collections/framework-field-guide/tokens/themes.scss @@ -1,127 +1,127 @@ -:root { - --section-background: var(--slate-900); - - --on-light-emphasis-high: var(--slate-900); - --on-light-emphasis-medium: var(--slate-700); - --on-light-emphasis-low: var(--slate-500); - - --on-dark-emphasis-high: var(--slate-050); - --on-dark-emphasis-medium: var(--slate-300); - --on-dark-emphasis-low: var(--slate-500); - - --outline: var(--slate-500); - --outline_focused: var(--slate-300); - --state-overlay: var(--slate-500-base); - - --text-gradient-start: var(--slate-050); - --text-gradient-end: var(--slate-200); - - --cta-foreground: var(--slate-900); - --cta-background: var(--slate-050); - --cta-background_hovered: var(--slate-200); - --cta-background_pressed: var(--slate-400); -} - -.class-book-1 { - --section-background: var(--fund-900); - - --on-light-emphasis-high: var(--fund-900); - --on-light-emphasis-medium: var(--fund-700); - --on-light-emphasis-low: var(--fund-500); - - --on-dark-emphasis-high: var(--fund-050); - --on-dark-emphasis-medium: var(--fund-300); - --on-dark-emphasis-low: var(--fund-500); - - --outline: var(--fund-500); - --outline_focused: var(--fund-300); - --state-overlay: var(--fund-500-base); - - --text-gradient-start: var(--fund-050); - --text-gradient-end: var(--fund-200); - - --cta-foreground: var(--fund-900); - --cta-background: var(--fund-050); - - --chip-foreground: var(--fund-100); - --chip-background: var(--fund-800); - --cta-background_hovered: var(--fund-200); - --cta-background_pressed: var(--fund-400); -} - -.class-book-hero { - --outline: var(--fund-500); - --outline_focused: var(--fund-700); - --state-overlay: var(--fund-500-base); - - --cta-foreground: var(--fund-050); - --cta-background: var(--fund-900); - --cta-background_hovered: var(--fund-800); - --cta-background_pressed: var(--fund-700); - - .book-section { - --btn-foreground_outlined: var(--on-light-emphasis-high); - } -} - -.class-book-2 { - --section-background: var(--ecos-900); - - --on-light-emphasis-high: var(--ecos-900); - --on-light-emphasis-medium: var(--ecos-700); - --on-light-emphasis-low: var(--ecos-500); - - --on-dark-emphasis-high: var(--ecos-050); - --on-dark-emphasis-medium: var(--ecos-300); - --on-dark-emphasis-low: var(--ecos-500); - - --outline: var(--ecos-500); - --outline_focused: var(--ecos-300); - --state-overlay: var(--ecos-500-base); - - --text-gradient-start: var(--ecos-050); - --text-gradient-end: var(--ecos-200); - - --cta-foreground: var(--ecos-900); - --cta-background: var(--ecos-050); - --cta-background_hovered: var(--ecos-200); - --cta-background_pressed: var(--ecos-400); - - --chip-foreground: var(--ecos-100); - --chip-background: var(--ecos-800); -} - -.class-book-3 { - --section-background: var(--inter-900); - - --on-light-emphasis-high: var(--inter-900); - --on-light-emphasis-medium: var(--inter-700); - --on-light-emphasis-low: var(--inter-500); - - --on-dark-emphasis-high: var(--inter-050); - --on-dark-emphasis-medium: var(--inter-300); - --on-dark-emphasis-low: var(--inter-500); - - --outline: var(--inter-500); - --outline_focused: var(--inter-300); - --state-overlay: var(--inter-500-base); - - --text-gradient-start: var(--inter-050); - --text-gradient-end: var(--inter-200); - - --cta-foreground: var(--inter-900); - --cta-background: var(--inter-050); - --cta-background_hovered: var(--inter-200); - --cta-background_pressed: var(--inter-400); - - --chip-foreground: var(--inter-100); - --chip-background: var(--inter-800); -} - -.book-section { - --text-gradient: linear-gradient( - 180deg, - var(--text-gradient-start), - var(--text-gradient-end) - ); -} +:root { + --section-background: var(--slate-900); + + --on-light-emphasis-high: var(--slate-900); + --on-light-emphasis-medium: var(--slate-700); + --on-light-emphasis-low: var(--slate-500); + + --on-dark-emphasis-high: var(--slate-050); + --on-dark-emphasis-medium: var(--slate-300); + --on-dark-emphasis-low: var(--slate-500); + + --outline: var(--slate-500); + --outline_focused: var(--slate-300); + --state-overlay: var(--slate-500-base); + + --text-gradient-start: var(--slate-050); + --text-gradient-end: var(--slate-200); + + --cta-foreground: var(--slate-900); + --cta-background: var(--slate-050); + --cta-background_hovered: var(--slate-200); + --cta-background_pressed: var(--slate-400); +} + +.class-book-1 { + --section-background: var(--fund-900); + + --on-light-emphasis-high: var(--fund-900); + --on-light-emphasis-medium: var(--fund-700); + --on-light-emphasis-low: var(--fund-500); + + --on-dark-emphasis-high: var(--fund-050); + --on-dark-emphasis-medium: var(--fund-300); + --on-dark-emphasis-low: var(--fund-500); + + --outline: var(--fund-500); + --outline_focused: var(--fund-300); + --state-overlay: var(--fund-500-base); + + --text-gradient-start: var(--fund-050); + --text-gradient-end: var(--fund-200); + + --cta-foreground: var(--fund-900); + --cta-background: var(--fund-050); + + --chip-foreground: var(--fund-100); + --chip-background: var(--fund-800); + --cta-background_hovered: var(--fund-200); + --cta-background_pressed: var(--fund-400); +} + +.class-book-hero { + --outline: var(--fund-500); + --outline_focused: var(--fund-700); + --state-overlay: var(--fund-500-base); + + --cta-foreground: var(--fund-050); + --cta-background: var(--fund-900); + --cta-background_hovered: var(--fund-800); + --cta-background_pressed: var(--fund-700); + + .book-section { + --btn-foreground_outlined: var(--on-light-emphasis-high); + } +} + +.class-book-2 { + --section-background: var(--ecos-900); + + --on-light-emphasis-high: var(--ecos-900); + --on-light-emphasis-medium: var(--ecos-700); + --on-light-emphasis-low: var(--ecos-500); + + --on-dark-emphasis-high: var(--ecos-050); + --on-dark-emphasis-medium: var(--ecos-300); + --on-dark-emphasis-low: var(--ecos-500); + + --outline: var(--ecos-500); + --outline_focused: var(--ecos-300); + --state-overlay: var(--ecos-500-base); + + --text-gradient-start: var(--ecos-050); + --text-gradient-end: var(--ecos-200); + + --cta-foreground: var(--ecos-900); + --cta-background: var(--ecos-050); + --cta-background_hovered: var(--ecos-200); + --cta-background_pressed: var(--ecos-400); + + --chip-foreground: var(--ecos-100); + --chip-background: var(--ecos-800); +} + +.class-book-3 { + --section-background: var(--inter-900); + + --on-light-emphasis-high: var(--inter-900); + --on-light-emphasis-medium: var(--inter-700); + --on-light-emphasis-low: var(--inter-500); + + --on-dark-emphasis-high: var(--inter-050); + --on-dark-emphasis-medium: var(--inter-300); + --on-dark-emphasis-low: var(--inter-500); + + --outline: var(--inter-500); + --outline_focused: var(--inter-300); + --state-overlay: var(--inter-500-base); + + --text-gradient-start: var(--inter-050); + --text-gradient-end: var(--inter-200); + + --cta-foreground: var(--inter-900); + --cta-background: var(--inter-050); + --cta-background_hovered: var(--inter-200); + --cta-background_pressed: var(--inter-400); + + --chip-foreground: var(--inter-100); + --chip-background: var(--inter-800); +} + +.book-section { + --text-gradient: linear-gradient( + 180deg, + var(--text-gradient-start), + var(--text-gradient-end) + ); +} diff --git a/src/views/collections/framework-field-guide/tokens/transition-timer.scss b/src/views/collections/framework-field-guide/tokens/transition-timer.scss index 27e8bf8e..41f8633a 100644 --- a/src/views/collections/framework-field-guide/tokens/transition-timer.scss +++ b/src/views/collections/framework-field-guide/tokens/transition-timer.scss @@ -1,4 +1,4 @@ -:root { - --color-transition-time: 500ms; - --color-transition-ease: ease-in-out; -} \ No newline at end of file +:root { + --color-transition-time: 500ms; + --color-transition-ease: ease-in-out; +} diff --git a/src/views/search/components/search-topbar.tsx b/src/views/search/components/search-topbar.tsx index c96c5668..941746a0 100644 --- a/src/views/search/components/search-topbar.tsx +++ b/src/views/search/components/search-topbar.tsx @@ -90,27 +90,28 @@ export const SearchTopbar = ({
    -
    -
    - - -
    +
    +
    + + +
    diff --git a/tsconfig.script.json b/tsconfig.script.json index 91f46af7..a8bc3f6c 100644 --- a/tsconfig.script.json +++ b/tsconfig.script.json @@ -5,7 +5,5 @@ "jsxImportSource": "preact", "outDir": "build-scripts/social-previews/dist" }, - "include": [ - "build-scripts/social-previews/layouts/*.tsx" - ] + "include": ["build-scripts/social-previews/layouts/*.tsx"] } diff --git a/vercel.json b/vercel.json index 0ef9a038..c05c6e35 100644 --- a/vercel.json +++ b/vercel.json @@ -31,7 +31,10 @@ { "source": "/(.*).(ttf|woff2)", "headers": [ - {"key": "Cache-Control", "value": "public, max-age=31536000, immutable"} + { + "key": "Cache-Control", + "value": "public, max-age=31536000, immutable" + } ] } ]