{{ title }}
- {% if pullquote %}{{ pullquote }}
{% endif %} -diff --git a/config/bundles/css.js b/config/bundles/css.js deleted file mode 100644 index a4ced20..0000000 --- a/config/bundles/css.js +++ /dev/null @@ -1,13 +0,0 @@ -import postcss from "postcss"; -import postcssImport from "postcss-import"; - -export default { - transforms: [ - async function (content) { - const css = await postcss([postcssImport]) - .process(content, { from: "src/includes/css/styles.css" }) - .then((result) => result.css); - return css; - }, - ], -}; diff --git a/config/bundles/index.js b/config/bundles/index.js deleted file mode 100644 index 8367564..0000000 --- a/config/bundles/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import css from "./css.js"; - -export default { - css, -}; diff --git a/config/constants/paths.js b/config/constants/paths.js new file mode 100644 index 0000000..84c13ef --- /dev/null +++ b/config/constants/paths.js @@ -0,0 +1 @@ +export const ASSETS_FONTS_PATH = "/assets/fonts"; diff --git a/config/design-tokens/colors.js b/config/design-tokens/colors.js new file mode 100644 index 0000000..73e0695 --- /dev/null +++ b/config/design-tokens/colors.js @@ -0,0 +1,22 @@ +export default { + light: { + primary: "oklch(0.6 0.1025 212.16)", + secondary: "oklch(0.61 0.2232 31.48)", + background: "oklch(0.98 0 0)", + surface: "oklch(0.96 0.0078 207.9)", + border: "oklch(0.87 0.045077 207.8465)", + text: "oklch(0.15 0 0)", + fadeText: "oklch(0.45 0.0214 207.84)", + shadow: "oklch(0.39 0.0688 212.35)", + }, + dark: { + primary: "oklch(0.57 0.0991 213.4)", + secondary: "oklch(0.55 0.1982 31.52)", + background: "oklch(0.2 0 0)", + surface: "oklch(0.26 0.0106 233.21)", + border: "oklch(0.27 0.0238 245.26)", + text: "oklch(0.98 0 0)", + fadeText: "oklch(0.78 0.018 207.85)", + shadow: "oklch(0.39 0.0688 212.35)", + }, +}; diff --git a/config/design-tokens/fonts.js b/config/design-tokens/fonts.js new file mode 100644 index 0000000..036e37b --- /dev/null +++ b/config/design-tokens/fonts.js @@ -0,0 +1,38 @@ +export default { + display: { + family: "Atikinson Hyperlegible Next", + format: "woff2", + styles: { + Regular: { + path: "/hyperlegible/AtkinsonHyperlegibleNextVF-Variable.woff2", + fontStyle: "normal", + fontWeight: "125 950", + fontStretch: "75% 125%", + }, + }, + }, + body: { + family: "Atikinson Hyperlegible Next", + format: "woff2", + styles: { + Regular: { + path: "/hyperlegible/AtkinsonHyperlegibleNextVF-Variable.woff2", + fontStyle: "normal", + fontWeight: "125 950", + fontStretch: "75% 125%", + }, + }, + }, + monospace: { + family: "Atikinson Hyperlegible Mono", + format: "woff2", + styles: { + Regular: { + path: "/hyperlegible-mono/AtkinsonHyperlegibleMonoVF-Variable.woff2", + fontStyle: "normal", + fontWeight: "125 950", + fontStretch: "75% 125%", + }, + }, + }, +}; diff --git a/config/design-tokens/spacing.js b/config/design-tokens/spacing.js new file mode 100644 index 0000000..13f8dbe --- /dev/null +++ b/config/design-tokens/spacing.js @@ -0,0 +1,11 @@ +export default { + 0: 0, + 0.25: 4, + 0.5: 8, + 1: 16, + 1.5: 24, + 2: 32, + 3: 48, + 4: 64, + 5: 80, +}; diff --git a/config/filters/feed.js b/config/filters/feed.js index da82c22..d478b06 100644 --- a/config/filters/feed.js +++ b/config/filters/feed.js @@ -1,15 +1,29 @@ +import { JSDOM } from "jsdom"; + +// From coryd.dev +// https://www.coryd.dev/posts/2025/generating-absolute-urls-in-my-rss-feeds/ const convertRelativeLinks = (htmlContent, url) => { if (!htmlContent || !url) return htmlContent; - const baseUrl = url.replace(/\/$/, ""); + const dom = new JSDOM(htmlContent); + const document = dom.window.document; - return htmlContent.replace( - /(href|src)=(['"])(?![a-z][a-z0-9+.-]*:|\/\/)([^'"]+)\2/gi, - (_, attr, quote, relUrl) => { - const clean = relUrl.replace(/^\//, ""); - return `${attr}=${quote}${baseUrl}/${clean}${quote}`; - }, - ); + document.querySelectorAll("a[href]").forEach((link) => { + let href = link.getAttribute("href"); + + if (href.startsWith("#")) { + link.remove(); + return; + } + + if (!href.startsWith("http://") && !href.startsWith("https://")) + link.setAttribute( + "href", + `${url.replace(/\/$/, "")}/${href.replace(/^\/+/, "")}`, + ); + }); + + return document.body.innerHTML; }; export default { diff --git a/config/filters/index.js b/config/filters/index.js index d8da84b..c1f2b3b 100644 --- a/config/filters/index.js +++ b/config/filters/index.js @@ -2,6 +2,7 @@ import collection from "./collection.js"; import date from "./date.js"; import feed from "./feed.js"; import general from "./general.js"; +import postcss from "./postcss/index.js"; import tag from "./tag.js"; export default { @@ -9,5 +10,6 @@ export default { ...date, ...feed, ...general, + ...postcss, ...tag, }; diff --git a/config/filters/postcss/index.js b/config/filters/postcss/index.js new file mode 100644 index 0000000..92051d3 --- /dev/null +++ b/config/filters/postcss/index.js @@ -0,0 +1,5 @@ +import postcss from "./postcss.js"; + +export default { + ...postcss, +}; diff --git a/config/filters/postcss/postcss.js b/config/filters/postcss/postcss.js new file mode 100644 index 0000000..0fc1a6f --- /dev/null +++ b/config/filters/postcss/postcss.js @@ -0,0 +1,32 @@ +/* + * Implementation sourced from eleventyone starter kit + * https://github.com/philhawksworth/eleventyone + * --- + * https://github.com/philhawksworth/eleventyone/blob/master/src/site/css/styles.11ty.js + */ +import { default as postcssBase } from "postcss"; +import postcssImport from "postcss-import"; +import postcssImportExtGlob from "postcss-import-ext-glob"; +import autoprefixer from "autoprefixer"; +import cssnano from "cssnano"; + +import colors from "./utils/colors.js"; +import fontFamily from "./utils/font-family.js"; +import fontVariables from "./utils/font-variables.js"; +import spacing from "./utils/spacing.js"; + +const postcss = async (rawCss) => { + const css = `${rawCss}${fontFamily}${fontVariables}${colors}${spacing}`; + return await postcssBase([ + postcssImportExtGlob, + postcssImport, + autoprefixer, + cssnano, + ]) + .process(css, { from: "src/includes/css/styles.css" }) + .then((result) => result.css); +}; + +export default { + postcss, +}; diff --git a/config/filters/postcss/utils/colors.js b/config/filters/postcss/utils/colors.js new file mode 100644 index 0000000..2383db2 --- /dev/null +++ b/config/filters/postcss/utils/colors.js @@ -0,0 +1,34 @@ +import colorSchemes from "../../../design-tokens/colors.js"; +import { helperClassesToCss } from "./helper-classes.js"; + +const lightScheme = colorSchemes.light; +const darkScheme = colorSchemes.dark; + +const colorToCss = (key, value) => `--color-${key}: ${value};`; + +const colorSchemeToCss = (scheme) => + Object.entries(scheme).reduce( + (css, [key, value]) => css + colorToCss(key, value), + ``, + ); + +const lightCss = colorSchemeToCss(lightScheme); +const darkCss = colorSchemeToCss(darkScheme); + +const colorSchemeToHelperClassesCss = (scheme, helperClasses) => { + return Object.entries(scheme).reduce((css, [key]) => { + return css + helperClassesToCss(helperClasses, key, `var(--color-${key})`); + }, ``); +}; + +const helperClasses = [ + ["text", ["color"]], + ["bg", ["background-color"]], +]; + +const helperClassesCss = colorSchemeToHelperClassesCss( + lightScheme, + helperClasses, +); + +export default `:root{${lightCss}}${helperClassesCss}@media (prefers-color-scheme: dark) {:root{${darkCss}}}`; diff --git a/config/filters/postcss/utils/font-family.js b/config/filters/postcss/utils/font-family.js new file mode 100644 index 0000000..4facde2 --- /dev/null +++ b/config/filters/postcss/utils/font-family.js @@ -0,0 +1,58 @@ +import path from "path"; + +import fonts from "../../../design-tokens/fonts.js"; + +const getFontUrl = (src) => path.join("/assets/fonts", src); + +const fontsToCss = (fonts) => { + return Object.entries(fonts).reduce((css, [, fontProperties]) => { + const family = fontProperties.family; + const format = fontProperties.format; + const styles = fontProperties.styles; + + return ( + css + + Object.entries(styles).reduce((css, [variant, fontFamily]) => { + const url = getFontUrl(fontFamily.path); + const style = fontFamily.fontStyle; + const weight = fontFamily.fontWeight; + const stretch = fontFamily.fontStretch; + const postScriptName = [family, variant].join("-").replaceAll(" ", ""); + + return ( + css + + fontFamilyToCss( + family, + style, + weight, + stretch, + url, + family, + postScriptName, + format, + ) + ); + }, ``) + ); + }, ``); +}; + +const fontFamilyToCss = ( + family, + style, + weight, + stretch, + url, + localName, + postScriptName, + format, +) => `@font-face { + font-family: ${family}; + font-style: ${style}; + font-weight: ${weight}; + font-stretch: ${stretch}; + font-display: swap; + src: local("${localName}"), local("${postScriptName}"), url("${url}") format("${format}") +}\n`; + +export default fontsToCss(fonts); diff --git a/config/filters/postcss/utils/font-variables.js b/config/filters/postcss/utils/font-variables.js new file mode 100644 index 0000000..fcb3586 --- /dev/null +++ b/config/filters/postcss/utils/font-variables.js @@ -0,0 +1,57 @@ +/* + * Fallbacks from Modern Font Stacks. + * https://modernfontstacks.com/ + */ + +import fonts from "../../../design-tokens/fonts.js"; + +const displayFallbacks = [ + "ui-monospace", + "Cascadia Code", + "Source Code Pro", + "Menlo", + "Consolas", + "DejaVu Sans Mono", + "monospace", +]; + +const bodyFallbacks = [ + "ui-monospace", + "Cascadia Code", + "Source Code Pro", + "Menlo", + "Consolas", + "DejaVu Sans Mono", + "monospace", +]; + +const monoFallbacks = [ + "ui-monospace", + "Cascadia Code", + "Source Code Pro", + "Menlo", + "Consolas", + "DejaVu Sans Mono", + "monospace", +]; + +const fallbacks = { + display: displayFallbacks, + body: bodyFallbacks, + monospace: monoFallbacks, +}; + +const fontsToCss = (fonts) => { + return Object.entries(fonts).reduce((css, [fontType, fontProperties]) => { + const family = fontProperties.family; + + const fontTypeCss = fontFamilyToCss(fontType, family); + + return css + fontTypeCss; + }, ``); +}; + +const fontFamilyToCss = (type, value) => + `--font-family-${type}: ${value},${fallbacks[type].join(",")};`; + +export default `:root{${fontsToCss(fonts)}}`; diff --git a/config/filters/postcss/utils/helper-classes.js b/config/filters/postcss/utils/helper-classes.js new file mode 100644 index 0000000..08871ad --- /dev/null +++ b/config/filters/postcss/utils/helper-classes.js @@ -0,0 +1,43 @@ +/** + * Given an array of CSS properties, output css properties + * with each property equal to `value` + */ +export const cssPropertiesToCss = (cssProperties, value) => { + return cssProperties.reduce((css, cssProp) => { + return css + `${cssProp}:${value};`; + }, ``); +}; + +/** + * Given a helperClass (string) and array of cssProperties, + * will generate a css class named helperClass that has + * all cssProperties mapped to value. + */ +export const helperClassToCss = (helperClass, cssProperties, value) => { + const cssProps = cssPropertiesToCss(cssProperties, value); + return `.${helperClass}{${cssProps}}`; +}; + +/** + * Given an array of helperClasses that map to cssProperties, + * output a string of CSS that maps the helperClass (with variant modifier) + * to the array of css properties with each css property equal to + * value + * + * e.g. + * helperClasses = [["text", ["color"]]], + * variant = "primary", + * value = "#000" + * + * Will output the following: + * .text-primary { + * color: #000; + * } + */ +export const helperClassesToCss = (helperClasses, variant, value) => { + return helperClasses.reduce((css, [helperClass, cssProperties]) => { + return ( + css + helperClassToCss(`${helperClass}-${variant}`, cssProperties, value) + ); + }, ``); +}; diff --git a/config/filters/postcss/utils/spacing.js b/config/filters/postcss/utils/spacing.js new file mode 100644 index 0000000..22ae220 --- /dev/null +++ b/config/filters/postcss/utils/spacing.js @@ -0,0 +1,51 @@ +import spacing from "../../../design-tokens/spacing.js"; +import { helperClassesToCss } from "./helper-classes.js"; + +const spacingToCss = (variant, value) => + `--spacing-${variant.replace(".", "\\.")}: ${value}px;`; + +const spacingToHelperClassesCss = (spacingValues, helperClasses) => { + return Object.entries(spacingValues).reduce((css, [spacingVariant]) => { + const variant = spacingVariant.replace(".", "\\."); + return ( + css + + helperClassesToCss(helperClasses, variant, `var(--spacing-${variant})`) + ); + }, ``); +}; + +const helperClasses = [ + ["m", ["margin"]], + ["my", ["margin-block-start", "margin-block-end"]], + ["mx", ["margin-inline-start", "margin-inline-end"]], + ["ml", ["margin-inline-start"]], + ["mr", ["margin-inline-start"]], + ["mt", ["margin-block-start"]], + ["mb", ["margin-block-end"]], + ["p", ["padding"]], + ["py", ["padding-block-start", "padding-block-end"]], + ["px", ["padding-inline-start", "padding-inline-end"]], + ["pl", ["padding-inline-start"]], + ["pr", ["padding-inline-start"]], + ["pt", ["padding-block-start"]], + ["pb", ["padding-block-end"]], + ["w", ["width"]], + ["h", ["height"]], + ["size", ["width", "height"]], + ["radius", ["border-radius"]], + ["gap", ["gap"]], + ["row-gap", ["row-gap"]], + ["column-gap", ["column-gap"]], + ["flow-space", ["--flow-space"]], +]; + +const spacingVariablesCss = Object.entries(spacing).reduce( + (css, [variant, value]) => css + spacingToCss(variant, value), + ``, +); + +const helperCss = spacingToHelperClassesCss(spacing, helperClasses); + +const css = `:root{${spacingVariablesCss}}${helperCss}`; + +export default css; diff --git a/config/transforms/index.js b/config/transforms/index.js index ee66425..769f3b9 100644 --- a/config/transforms/index.js +++ b/config/transforms/index.js @@ -1,3 +1,4 @@ import htmlConfigTransform from "./html-config.js"; +import xmlConfigTransform from "./xml-config.js"; -export default { htmlConfigTransform }; +export default { htmlConfigTransform, xmlConfigTransform }; diff --git a/config/transforms/xml-config.js b/config/transforms/xml-config.js new file mode 100644 index 0000000..e4e6d4e --- /dev/null +++ b/config/transforms/xml-config.js @@ -0,0 +1,12 @@ +import minifyXML from "minify-xml"; + +export default function (eleventyConfig) { + eleventyConfig.addTransform("xml-minify", (content, path) => { + if (path && path.endsWith(".xml")) { + return minifyXML(content, { + shortenNamespaces: false, + }); + } + return content; + }); +} diff --git a/eleventy.config.js b/eleventy.config.js index 6c23efc..2ff0db7 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -1,13 +1,15 @@ import { eleventyImageTransformPlugin } from "@11ty/eleventy-img"; import { collectionByTag } from "./config/collections/index.js"; -import bundles from "./config/bundles/index.js"; import filters from "./config/filters/index.js"; import markdown from "./config/plugins/markdown.js"; import shortcodes from "./config/shortcodes/index.js"; import transforms from "./config/transforms/index.js"; export default function (eleventyConfig) { + // --------------------- Watch Targets ----------------------- + eleventyConfig.addWatchTarget("./src/includes/css"); + // --------------------- Passthrough File Copy ----------------------- ["src/assets/fonts/", "src/assets/images"].forEach((path) => eleventyConfig.addPassthroughCopy(path), @@ -16,11 +18,6 @@ export default function (eleventyConfig) { // --------------------- Markdown ----------------------- eleventyConfig.setLibrary("md", markdown); - // --------------------- Bundles ----------------------- - Object.keys(bundles).forEach((bundleName) => { - eleventyConfig.addBundle(bundleName, bundles[bundleName]); - }); - // --------------------- Collections ----------------------- eleventyConfig.addCollection("postsByTag", (collection) => collectionByTag(collection, "post"), diff --git a/package-lock.json b/package-lock.json index 4ab24ed..b035bf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "dayjs": "^1.11.10", "dotenv": "^16.4.5", "html-minifier-terser": "^7.2.0", + "jsdom": "^26.0.0", "markdown-it": "^14.0.0", "markdown-it-abbr": "^2.0.0", "markdown-it-anchor": "^8.6.7", @@ -25,9 +26,11 @@ "markdown-it-footnote": "^4.0.0", "markdown-it-image-figures": "^2.1.1", "markdown-it-prism": "^2.3.0", + "minify-xml": "^4.5.2", "pluralize": "^8.0.0", "postcss": "^8.5.3", "postcss-import": "^16.1.0", + "postcss-import-ext-glob": "^2.1.1", "upload-to-bunny": "^1.4.0" } }, @@ -299,6 +302,135 @@ "node": ">=18" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.1.tgz", + "integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", + "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", + "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@emnapi/runtime": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.0.tgz", @@ -907,6 +1039,16 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1483,6 +1625,13 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, "node_modules/css-declaration-sorter": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz", @@ -1699,6 +1848,71 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true }, + "node_modules/cssstyle": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.0.tgz", + "integrity": "sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.1.1", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz", + "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -1723,6 +1937,13 @@ } } }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true, + "license": "MIT" + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -1868,6 +2089,19 @@ "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", "dev": true }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1905,6 +2139,16 @@ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1994,6 +2238,16 @@ "dev": true, "license": "MIT" }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/esm-import-transformer": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.3.tgz", @@ -2072,6 +2326,13 @@ "node": ">=8.6.0" } }, + "node_modules/fast-sort": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/fast-sort/-/fast-sort-3.4.1.tgz", + "integrity": "sha512-76uvGPsF6So53sZAqenP9UVT3p5l7cyTHkLWVCMinh41Y8NDrK1IYXJgaBMfc1gk7nJiSRZp676kddFG2Aa5+A==", + "dev": true, + "license": "MIT" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -2405,6 +2666,19 @@ "node": ">= 0.4" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/html-minifier-terser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", @@ -2484,6 +2758,34 @@ "node": ">= 0.8" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -2638,6 +2940,20 @@ "node": ">=0.12.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, "node_modules/iso-639-1": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.5.tgz", @@ -2660,6 +2976,84 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", + "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz", + "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/junk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", @@ -2755,6 +3149,12 @@ "tslib": "^2.0.3" } }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -2879,6 +3279,19 @@ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2937,6 +3350,24 @@ "node": ">= 0.6" } }, + "node_modules/minify-xml": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/minify-xml/-/minify-xml-4.5.2.tgz", + "integrity": "sha512-iPNfX4n7pgJc3VFcf/Fbuzxdh2V8zNc8pLezVTLWJVxk8G/qmMijtgr7OkT5VAAGhWeIxpVH+WwgvigfF/6bZQ==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "meow": "^13.2.0", + "pumpify": "^2.0.1", + "replacestream": "^4.0.3" + }, + "bin": { + "minify-xml": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3099,6 +3530,23 @@ "node": ">= 6" } }, + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3112,6 +3560,15 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -3467,6 +3924,21 @@ "postcss": "^8.0.0" } }, + "node_modules/postcss-import-ext-glob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-import-ext-glob/-/postcss-import-ext-glob-2.1.1.tgz", + "integrity": "sha512-qd4ELOx2G0hyjgtmLnf/fSVJXXPhkcxcxhLT1y1mAnk53JYbMLoGg+AFtnJowOSvnv4CvjPAzpLpAcfWeofP5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.12", + "fast-sort": "^3.2.0", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.0" + } + }, "node_modules/postcss-merge-longhand": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz", @@ -3854,6 +4326,13 @@ "node": ">=6" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -3868,6 +4347,39 @@ "dev": true, "license": "MIT" }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", @@ -3926,6 +4438,21 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3947,6 +4474,51 @@ "node": ">= 0.10" } }, + "node_modules/replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/replacestream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/replacestream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/replacestream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -3974,6 +4546,13 @@ "node": ">=0.10.0" } }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3997,6 +4576,27 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -4004,6 +4604,19 @@ "dev": true, "license": "MIT" }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -4215,6 +4828,23 @@ "node": ">= 0.8" } }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -4286,6 +4916,13 @@ "node": ">= 10" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, "node_modules/terser": { "version": "5.28.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", @@ -4355,6 +4992,26 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tldts": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz", + "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.85" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz", + "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==", + "dev": true, + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4377,6 +5034,19 @@ "node": ">=0.6" } }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -4477,6 +5147,19 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -4500,6 +5183,12 @@ "node": ">=18" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, "node_modules/ws": { "version": "8.18.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", @@ -4522,6 +5211,23 @@ } } }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, "node_modules/yocto-queue": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", @@ -4717,6 +5423,55 @@ "slash": "^3.0.0" } }, + "@asamuzakjp/css-color": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.1.tgz", + "integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==", + "dev": true, + "requires": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true + }, + "@csstools/css-calc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", + "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "dev": true, + "requires": {} + }, + "@csstools/css-color-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", + "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "dev": true, + "requires": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + } + }, + "@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true + }, "@emnapi/runtime": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.0.tgz", @@ -5061,6 +5816,12 @@ "acorn": "^8.11.0" } }, + "agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -5468,6 +6229,12 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, "css-declaration-sorter": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.1.1.tgz", @@ -5624,6 +6391,53 @@ } } }, + "cssstyle": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.0.tgz", + "integrity": "sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==", + "dev": true, + "requires": { + "@asamuzakjp/css-color": "^3.1.1", + "rrweb-cssom": "^0.8.0" + } + }, + "data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "requires": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "dependencies": { + "tr46": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz", + "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "requires": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -5639,6 +6453,12 @@ "ms": "^2.1.3" } }, + "decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -5741,6 +6561,18 @@ "integrity": "sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", "dev": true }, + "duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dev": true, + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5769,6 +6601,15 @@ "whatwg-encoding": "^3.1.1" } }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -5829,6 +6670,12 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, "esm-import-transformer": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/esm-import-transformer/-/esm-import-transformer-3.0.3.tgz", @@ -5884,6 +6731,12 @@ "micromatch": "^4.0.8" } }, + "fast-sort": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/fast-sort/-/fast-sort-3.4.1.tgz", + "integrity": "sha512-76uvGPsF6So53sZAqenP9UVT3p5l7cyTHkLWVCMinh41Y8NDrK1IYXJgaBMfc1gk7nJiSRZp676kddFG2Aa5+A==", + "dev": true + }, "fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -6111,6 +6964,15 @@ "function-bind": "^1.1.2" } }, + "html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^3.1.1" + } + }, "html-minifier-terser": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", @@ -6165,6 +7027,26 @@ "toidentifier": "1.0.1" } }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -6274,6 +7156,18 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "iso-639-1": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/iso-639-1/-/iso-639-1-3.1.5.tgz", @@ -6289,6 +7183,62 @@ "argparse": "^2.0.1" } }, + "jsdom": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", + "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", + "dev": true, + "requires": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.0.0", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.0", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz", + "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "requires": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "junk": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", @@ -6358,6 +7308,12 @@ "tslib": "^2.0.3" } }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, "luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -6450,6 +7406,12 @@ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, + "meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true + }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -6487,6 +7449,17 @@ "mime-db": "1.52.0" } }, + "minify-xml": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/minify-xml/-/minify-xml-4.5.2.tgz", + "integrity": "sha512-iPNfX4n7pgJc3VFcf/Fbuzxdh2V8zNc8pLezVTLWJVxk8G/qmMijtgr7OkT5VAAGhWeIxpVH+WwgvigfF/6bZQ==", + "dev": true, + "requires": { + "meow": "^13.2.0", + "pumpify": "^2.0.1", + "replacestream": "^4.0.3" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6599,6 +7572,18 @@ } } }, + "nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -6608,6 +7593,15 @@ "ee-first": "1.1.1" } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -6840,6 +7834,17 @@ "resolve": "^1.1.7" } }, + "postcss-import-ext-glob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-import-ext-glob/-/postcss-import-ext-glob-2.1.1.tgz", + "integrity": "sha512-qd4ELOx2G0hyjgtmLnf/fSVJXXPhkcxcxhLT1y1mAnk53JYbMLoGg+AFtnJowOSvnv4CvjPAzpLpAcfWeofP5g==", + "dev": true, + "requires": { + "fast-glob": "^3.2.12", + "fast-sort": "^3.2.0", + "postcss-value-parser": "^4.2.0" + } + }, "postcss-merge-longhand": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz", @@ -7087,6 +8092,12 @@ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", "dev": true }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -7099,6 +8110,33 @@ "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, + "pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", + "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", + "dev": true, + "requires": { + "duplexify": "^4.1.1", + "inherits": "^2.0.3", + "pump": "^3.0.0" + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, "punycode.js": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", @@ -7135,6 +8173,17 @@ "pify": "^2.3.0" } }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7150,6 +8199,49 @@ "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true }, + "replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -7167,6 +8259,12 @@ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, + "rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true + }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -7176,12 +8274,27 @@ "queue-microtask": "^1.2.2" } }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, "section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -7340,6 +8453,21 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, + "stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -7385,6 +8513,12 @@ } } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "terser": { "version": "5.28.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", @@ -7430,6 +8564,21 @@ } } }, + "tldts": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz", + "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==", + "dev": true, + "requires": { + "tldts-core": "^6.1.85" + } + }, + "tldts-core": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz", + "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7445,6 +8594,15 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, + "tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "requires": { + "tldts": "^6.1.32" + } + }, "tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -7508,6 +8666,15 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, + "w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "requires": { + "xml-name-validator": "^5.0.0" + } + }, "whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -7523,6 +8690,12 @@ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, "ws": { "version": "8.18.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", @@ -7530,6 +8703,18 @@ "dev": true, "requires": {} }, + "xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, "yocto-queue": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", diff --git a/package.json b/package.json index 680ca3c..a3e76e8 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "dayjs": "^1.11.10", "dotenv": "^16.4.5", "html-minifier-terser": "^7.2.0", + "jsdom": "^26.0.0", "markdown-it": "^14.0.0", "markdown-it-abbr": "^2.0.0", "markdown-it-anchor": "^8.6.7", @@ -30,9 +31,11 @@ "markdown-it-footnote": "^4.0.0", "markdown-it-image-figures": "^2.1.1", "markdown-it-prism": "^2.3.0", + "minify-xml": "^4.5.2", "pluralize": "^8.0.0", "postcss": "^8.5.3", "postcss-import": "^16.1.0", + "postcss-import-ext-glob": "^2.1.1", "upload-to-bunny": "^1.4.0" } } diff --git a/src/content/posts/2024-03-02-version-3.md b/src/content/posts/2024-03-02-version-3.md index 232b36c..2358900 100644 --- a/src/content/posts/2024-03-02-version-3.md +++ b/src/content/posts/2024-03-02-version-3.md @@ -296,7 +296,7 @@ module.exports = { linkTitle: "View book details", eleventyComputed: { tertiary: (data) => - `
by ${data.author}
`, + `by ${data.author}
`, }, }; ``` @@ -476,7 +476,7 @@ box-shadow: 1px 1px 0px var(--color-shadow), 2px 2px 0 var(--color-shadow); -border-radius: var(--spacing-1); +border-radius: var(--spacing-0\.25); border: 1px solid var(--color-shadow); transition: diff --git a/src/data/preloads.js b/src/data/preloads.js index b99e741..7243e0b 100644 --- a/src/data/preloads.js +++ b/src/data/preloads.js @@ -1,12 +1,24 @@ +import path from "path"; + +import { ASSETS_FONTS_PATH } from "../../config/constants/paths.js"; +import fonts from "../../config/design-tokens/fonts.js"; + +const getFontUrl = (src) => path.join(ASSETS_FONTS_PATH, src); + const preloads = [ { as: "font", - href: "/assets/fonts/hyperlegible/AtkinsonHyperlegibleNextVF-Variable.woff2", + href: getFontUrl(fonts.display.styles.Regular.path), crossorigin: true, }, { as: "font", - href: "/assets/fonts/hyperlegible-mono/AtkinsonHyperlegibleMonoVF-Variable.woff2", + href: getFontUrl(fonts.body.styles.Regular.path), + crossorigin: true, + }, + { + as: "font", + href: getFontUrl(fonts.monospace.styles.Regular.path), crossorigin: true, }, ]; diff --git a/src/includes/css/blocks/button.css b/src/includes/css/blocks/button.css index 67a33f6..d18d7aa 100644 --- a/src/includes/css/blocks/button.css +++ b/src/includes/css/blocks/button.css @@ -2,8 +2,8 @@ align-items: center; color: var(--color-text); display: inline-flex; - gap: var(--spacing-2); - padding: var(--spacing-2) var(--spacing-4); + gap: var(--spacing-0\.5); + padding: var(--spacing-0\.5) var(--spacing-1); position: relative; text-decoration: none; transition: transform 0.3s var(--transition-bounce); @@ -11,7 +11,7 @@ &::before, &::after { - border-radius: var(--spacing-2); + border-radius: var(--spacing-0\.5); position: absolute; inset: 0; content: ""; diff --git a/src/includes/css/blocks/card.css b/src/includes/css/blocks/card.css index 13b8e7c..072c592 100644 --- a/src/includes/css/blocks/card.css +++ b/src/includes/css/blocks/card.css @@ -1,7 +1,7 @@ .card { - border-radius: var(--spacing-2); - padding: var(--spacing-4); - background-color: var(--color-surface); + border: 1px solid var(--color-shadow); + border-radius: var(--spacing-0\.5); + padding: var(--spacing-1); } .card--secondary { diff --git a/src/includes/css/blocks/media-display.css b/src/includes/css/blocks/media-display.css index a109ca0..2926f62 100644 --- a/src/includes/css/blocks/media-display.css +++ b/src/includes/css/blocks/media-display.css @@ -1,30 +1,38 @@ -.media-metadata-grid { - display: grid; - gap: var(--spacing-4); - - @container (min-width: 48rem) { - grid-template-columns: 200px 1fr; - } -} - -.media-metadata { - display: grid; - grid-template-columns: 150px 1fr; - row-gap: var(--spacing-1); -} - .media-image { --aspect-ratio: 0.8; + border: 1px solid var(--color-shadow); + border-radius: var(--spacing-0\.5); + overflow: hidden; + source, img { aspect-ratio: var(--aspect-ratio); height: auto; object-fit: cover; - border-radius: var(--spacing-1); } } .media-image--tall { --aspect-ratio: 0.67; } + +.media-meta-grid { + display: grid; + grid-template-columns: 225px 1fr; +} + +.meta-grid--full { + grid-column: 1/3; +} + +.media-meta { + display: grid; + grid-template-columns: 1fr 1fr; +} + +@container (max-width: 36rem) { + .media-meta-grid { + grid-template-columns: 1fr; + } +} diff --git a/src/includes/css/blocks/media-grid.css b/src/includes/css/blocks/media-grid.css index 238b55d..e9cff48 100644 --- a/src/includes/css/blocks/media-grid.css +++ b/src/includes/css/blocks/media-grid.css @@ -4,7 +4,7 @@ display: grid; grid-template-columns: repeat(var(--column-count), minmax(0, 1fr)); - grid-gap: var(--spacing-2); + grid-gap: var(--spacing-0\.5); li { border: 1px solid var(--color-shadow); @@ -15,7 +15,6 @@ color: var(--color-white); picture { - border-radius: 0; height: 100%; img { @@ -63,7 +62,7 @@ .meta-text { transition-delay: 0.05s; - transform: translateY(var(--spacing-4)); + transform: translateY(var(--spacing-1)); } } } diff --git a/src/includes/css/blocks/pill.css b/src/includes/css/blocks/pill.css index 32634c0..e549622 100644 --- a/src/includes/css/blocks/pill.css +++ b/src/includes/css/blocks/pill.css @@ -7,7 +7,7 @@ font-family: var(--font-family-body); font-weight: var(--font-weight-body-regular); line-height: 0.8rem; - padding-inline: var(--spacing-2); - padding-block: var(--spacing-1); - border-radius: var(--spacing-2); + padding-inline: var(--spacing-0\.5); + padding-block: var(--spacing-0\.25); + border-radius: var(--spacing-0\.5); } diff --git a/src/includes/css/compositions/cluster.css b/src/includes/css/compositions/cluster.css index b9d0205..a5258ac 100644 --- a/src/includes/css/compositions/cluster.css +++ b/src/includes/css/compositions/cluster.css @@ -6,10 +6,10 @@ spacing, regardless of their size */ .cluster { - --gap: var(--spacing-2); + --gap: var(--spacing-1); display: flex; flex-wrap: wrap; - gap: var(--gap, --spacing-2); + gap: var(--gap, --spacing-1); justify-content: flex-start; align-items: center; } diff --git a/src/includes/css/compositions/repel.css b/src/includes/css/compositions/repel.css index f332549..b5ad18e 100644 --- a/src/includes/css/compositions/repel.css +++ b/src/includes/css/compositions/repel.css @@ -8,7 +8,7 @@ there is space in the viewport and stacks on small viewports flex-wrap: wrap; justify-content: space-between; align-items: center; - gap: var(--spacing-2); + gap: var(--spacing-0\.5); } .repel[data-nowrap] { diff --git a/src/includes/css/global/global-styles.css b/src/includes/css/global/global-styles.css index 3e2b1fd..1756ccc 100644 --- a/src/includes/css/global/global-styles.css +++ b/src/includes/css/global/global-styles.css @@ -11,8 +11,6 @@ html { scrollbar-color: var(--color-primary) var(--color-surface); - scrollbar-gutter: stable; - scrollbar-width: thin; } body { @@ -105,9 +103,9 @@ blockquote { border-inline-start: 2px solid var(--color-primary); margin-inline-start: 0; margin-inline-end: 0; - padding: var(--spacing-4); + padding: var(--spacing-1); background-color: var(--color-surface); - border-radius: var(--spacing-2); + border-radius: var(--spacing-0\.5); } blockquote > * + * { @@ -140,7 +138,7 @@ code { :not(pre) > code { background-color: var(--color-surface); - border-radius: var(--spacing-1); + border-radius: var(--spacing-0\.25); padding-block: 0.15em; padding-inline: 0.25em; } @@ -155,7 +153,7 @@ picture { flex-direction: column; align-items: center; margin-inline: 0; - border-radius: var(--spacing-2); + border-radius: var(--spacing-0\.5); overflow: hidden; } @@ -174,20 +172,20 @@ picture img { aside { background-color: var(--color-surface); - padding: var(--spacing-4); - border-radius: var(--spacing-2); - margin-inline: calc(-1 * var(--spacing-4)); + padding: var(--spacing-1); + border-radius: var(--spacing-0\.5); + margin-inline: calc(-1 * var(--spacing-1)); } mark { background-color: var(--color-border); color: var(--color-text); - padding-block: var(--spacing-1); + padding-block: var(--spacing-0\.25); } [href="#main"] { background-color: var(--color-background); - margin-inline: var(--spacing-4); + margin-inline: var(--spacing-1); } [href="#main"]:not(:focus) { @@ -204,7 +202,7 @@ mark { table { border: 1px solid var(--color-border); - border-radius: var(--spacing-2); + border-radius: var(--spacing-0\.5); border-spacing: 0; overflow: hidden; width: 100%; @@ -220,8 +218,8 @@ table thead th { table th, table td { - padding-block: var(--spacing-2); - padding-inline: var(--spacing-4); + padding-block: var(--spacing-0\.5); + padding-inline: var(--spacing-1); } table tbody tr:first-child td { @@ -232,10 +230,6 @@ table tbody tr:not(:last-child) td { border-bottom: 1px solid var(--color-border); } -dd { - margin-inline-start: 0; -} - /* * Snippet from: * https://nerdy.dev/6-css-snippets-every-front-end-developer-should-know-in-2025#transition-animation-for-%3Cdetails%3E diff --git a/src/includes/css/global/lilypad.css b/src/includes/css/global/lilypad.css deleted file mode 100644 index f365180..0000000 --- a/src/includes/css/global/lilypad.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-display:swap;font-family:Atikinson Hyperlegible Next;font-stretch:75% 125%;font-style:normal;font-weight:125 950;src:local("Atikinson Hyperlegible Next"),local("AtikinsonHyperlegibleNext-Regular"),url(/assets/fonts/hyperlegible/AtkinsonHyperlegibleNextVF-Variable.woff2) format("woff2")}@font-face{font-display:swap;font-family:Atikinson Hyperlegible Mono;font-stretch:75% 125%;font-style:normal;font-weight:125 950;src:local("Atikinson Hyperlegible Mono"),local("AtikinsonHyperlegibleMono-Regular"),url(/assets/fonts/hyperlegible-mono/AtkinsonHyperlegibleMonoVF-Variable.woff2) format("woff2")}:root{--font-family-display:Atikinson Hyperlegible Next,ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,DejaVu Sans Mono,monospace;--font-family-body:Atikinson Hyperlegible Next,ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,DejaVu Sans Mono,monospace;--font-family-monospace:Atikinson Hyperlegible Mono,ui-monospace,Cascadia Code,Source Code Pro,Menlo,Consolas,DejaVu Sans Mono,monospace;--color-primary:oklch(0.6 0.1025 212.16);--color-secondary:oklch(0.61 0.2232 31.48);--color-background:oklch(0.98 0 0);--color-surface:oklch(0.96 0.0078 207.9);--color-border:oklch(0.87 0.045077 207.8465);--color-text:oklch(0.15 0 0);--color-fadeText:oklch(0.45 0.0214 207.84);--color-shadow:oklch(0.39 0.0688 212.35)}.text-primary{color:var(--color-primary)}.bg-primary{background-color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.bg-secondary{background-color:var(--color-secondary)}.text-background{color:var(--color-background)}.bg-background{background-color:var(--color-background)}.text-surface{color:var(--color-surface)}.bg-surface{background-color:var(--color-surface)}.text-border{color:var(--color-border)}.bg-border{background-color:var(--color-border)}.text-text{color:var(--color-text)}.bg-text{background-color:var(--color-text)}.text-fadeText{color:var(--color-fadeText)}.bg-fadeText{background-color:var(--color-fadeText)}.text-shadow{color:var(--color-shadow)}.bg-shadow{background-color:var(--color-shadow)}@media (prefers-color-scheme:dark){:root{--color-primary:oklch(0.57 0.0991 213.4);--color-secondary:oklch(0.55 0.1982 31.52);--color-background:oklch(0.2 0 0);--color-surface:oklch(0.26 0.0106 233.21);--color-border:oklch(0.27 0.0238 245.26);--color-text:oklch(0.98 0 0);--color-fadeText:oklch(0.78 0.018 207.85);--color-shadow:oklch(0.39 0.0688 212.35)}}:root{--spacing-0:0px;--spacing-1:4px;--spacing-2:8px;--spacing-3:12px;--spacing-4:16px;--spacing-5:20px;--spacing-6:24px;--spacing-7:28px;--spacing-8:32px;--spacing-9:36px;--spacing-10:40px}.m-0{margin:var(--spacing-0)}.my-0{margin-block-end:var(--spacing-0);margin-block-start:var(--spacing-0)}.mx-0{margin-inline-end:var(--spacing-0)}.ml-0,.mr-0,.mx-0{margin-inline-start:var(--spacing-0)}.mt-0{margin-block-start:var(--spacing-0)}.mb-0{margin-block-end:var(--spacing-0)}.p-0{padding:var(--spacing-0)}.py-0{padding-block-end:var(--spacing-0);padding-block-start:var(--spacing-0)}.px-0{padding-inline-end:var(--spacing-0)}.pl-0,.pr-0,.px-0{padding-inline-start:var(--spacing-0)}.pt-0{padding-block-start:var(--spacing-0)}.pb-0{padding-block-end:var(--spacing-0)}.w-0{width:var(--spacing-0)}.h-0,.size-0{height:var(--spacing-0)}.size-0{width:var(--spacing-0)}.radius-0{border-radius:var(--spacing-0)}.gap-0{gap:var(--spacing-0)}.row-gap-0{row-gap:var(--spacing-0)}.column-gap-0{column-gap:var(--spacing-0)}.flow-space-0{--flow-space:var(--spacing-0)}.m-1{margin:var(--spacing-1)}.my-1{margin-block-end:var(--spacing-1);margin-block-start:var(--spacing-1)}.mx-1{margin-inline-end:var(--spacing-1)}.ml-1,.mr-1,.mx-1{margin-inline-start:var(--spacing-1)}.mt-1{margin-block-start:var(--spacing-1)}.mb-1{margin-block-end:var(--spacing-1)}.p-1{padding:var(--spacing-1)}.py-1{padding-block-end:var(--spacing-1);padding-block-start:var(--spacing-1)}.px-1{padding-inline-end:var(--spacing-1)}.pl-1,.pr-1,.px-1{padding-inline-start:var(--spacing-1)}.pt-1{padding-block-start:var(--spacing-1)}.pb-1{padding-block-end:var(--spacing-1)}.w-1{width:var(--spacing-1)}.h-1,.size-1{height:var(--spacing-1)}.size-1{width:var(--spacing-1)}.radius-1{border-radius:var(--spacing-1)}.gap-1{gap:var(--spacing-1)}.row-gap-1{row-gap:var(--spacing-1)}.column-gap-1{column-gap:var(--spacing-1)}.flow-space-1{--flow-space:var(--spacing-1)}.m-2{margin:var(--spacing-2)}.my-2{margin-block-end:var(--spacing-2);margin-block-start:var(--spacing-2)}.mx-2{margin-inline-end:var(--spacing-2)}.ml-2,.mr-2,.mx-2{margin-inline-start:var(--spacing-2)}.mt-2{margin-block-start:var(--spacing-2)}.mb-2{margin-block-end:var(--spacing-2)}.p-2{padding:var(--spacing-2)}.py-2{padding-block-end:var(--spacing-2);padding-block-start:var(--spacing-2)}.px-2{padding-inline-end:var(--spacing-2)}.pl-2,.pr-2,.px-2{padding-inline-start:var(--spacing-2)}.pt-2{padding-block-start:var(--spacing-2)}.pb-2{padding-block-end:var(--spacing-2)}.w-2{width:var(--spacing-2)}.h-2,.size-2{height:var(--spacing-2)}.size-2{width:var(--spacing-2)}.radius-2{border-radius:var(--spacing-2)}.gap-2{gap:var(--spacing-2)}.row-gap-2{row-gap:var(--spacing-2)}.column-gap-2{column-gap:var(--spacing-2)}.flow-space-2{--flow-space:var(--spacing-2)}.m-3{margin:var(--spacing-3)}.my-3{margin-block-end:var(--spacing-3);margin-block-start:var(--spacing-3)}.mx-3{margin-inline-end:var(--spacing-3)}.ml-3,.mr-3,.mx-3{margin-inline-start:var(--spacing-3)}.mt-3{margin-block-start:var(--spacing-3)}.mb-3{margin-block-end:var(--spacing-3)}.p-3{padding:var(--spacing-3)}.py-3{padding-block-end:var(--spacing-3);padding-block-start:var(--spacing-3)}.px-3{padding-inline-end:var(--spacing-3)}.pl-3,.pr-3,.px-3{padding-inline-start:var(--spacing-3)}.pt-3{padding-block-start:var(--spacing-3)}.pb-3{padding-block-end:var(--spacing-3)}.w-3{width:var(--spacing-3)}.h-3,.size-3{height:var(--spacing-3)}.size-3{width:var(--spacing-3)}.radius-3{border-radius:var(--spacing-3)}.gap-3{gap:var(--spacing-3)}.row-gap-3{row-gap:var(--spacing-3)}.column-gap-3{column-gap:var(--spacing-3)}.flow-space-3{--flow-space:var(--spacing-3)}.m-4{margin:var(--spacing-4)}.my-4{margin-block-end:var(--spacing-4);margin-block-start:var(--spacing-4)}.mx-4{margin-inline-end:var(--spacing-4)}.ml-4,.mr-4,.mx-4{margin-inline-start:var(--spacing-4)}.mt-4{margin-block-start:var(--spacing-4)}.mb-4{margin-block-end:var(--spacing-4)}.p-4{padding:var(--spacing-4)}.py-4{padding-block-end:var(--spacing-4);padding-block-start:var(--spacing-4)}.px-4{padding-inline-end:var(--spacing-4)}.pl-4,.pr-4,.px-4{padding-inline-start:var(--spacing-4)}.pt-4{padding-block-start:var(--spacing-4)}.pb-4{padding-block-end:var(--spacing-4)}.w-4{width:var(--spacing-4)}.h-4,.size-4{height:var(--spacing-4)}.size-4{width:var(--spacing-4)}.radius-4{border-radius:var(--spacing-4)}.gap-4{gap:var(--spacing-4)}.row-gap-4{row-gap:var(--spacing-4)}.column-gap-4{column-gap:var(--spacing-4)}.flow-space-4{--flow-space:var(--spacing-4)}.m-5{margin:var(--spacing-5)}.my-5{margin-block-end:var(--spacing-5);margin-block-start:var(--spacing-5)}.mx-5{margin-inline-end:var(--spacing-5)}.ml-5,.mr-5,.mx-5{margin-inline-start:var(--spacing-5)}.mt-5{margin-block-start:var(--spacing-5)}.mb-5{margin-block-end:var(--spacing-5)}.p-5{padding:var(--spacing-5)}.py-5{padding-block-end:var(--spacing-5);padding-block-start:var(--spacing-5)}.px-5{padding-inline-end:var(--spacing-5)}.pl-5,.pr-5,.px-5{padding-inline-start:var(--spacing-5)}.pt-5{padding-block-start:var(--spacing-5)}.pb-5{padding-block-end:var(--spacing-5)}.w-5{width:var(--spacing-5)}.h-5,.size-5{height:var(--spacing-5)}.size-5{width:var(--spacing-5)}.radius-5{border-radius:var(--spacing-5)}.gap-5{gap:var(--spacing-5)}.row-gap-5{row-gap:var(--spacing-5)}.column-gap-5{column-gap:var(--spacing-5)}.flow-space-5{--flow-space:var(--spacing-5)}.m-6{margin:var(--spacing-6)}.my-6{margin-block-end:var(--spacing-6);margin-block-start:var(--spacing-6)}.mx-6{margin-inline-end:var(--spacing-6)}.ml-6,.mr-6,.mx-6{margin-inline-start:var(--spacing-6)}.mt-6{margin-block-start:var(--spacing-6)}.mb-6{margin-block-end:var(--spacing-6)}.p-6{padding:var(--spacing-6)}.py-6{padding-block-end:var(--spacing-6);padding-block-start:var(--spacing-6)}.px-6{padding-inline-end:var(--spacing-6)}.pl-6,.pr-6,.px-6{padding-inline-start:var(--spacing-6)}.pt-6{padding-block-start:var(--spacing-6)}.pb-6{padding-block-end:var(--spacing-6)}.w-6{width:var(--spacing-6)}.h-6,.size-6{height:var(--spacing-6)}.size-6{width:var(--spacing-6)}.radius-6{border-radius:var(--spacing-6)}.gap-6{gap:var(--spacing-6)}.row-gap-6{row-gap:var(--spacing-6)}.column-gap-6{column-gap:var(--spacing-6)}.flow-space-6{--flow-space:var(--spacing-6)}.m-7{margin:var(--spacing-7)}.my-7{margin-block-end:var(--spacing-7);margin-block-start:var(--spacing-7)}.mx-7{margin-inline-end:var(--spacing-7)}.ml-7,.mr-7,.mx-7{margin-inline-start:var(--spacing-7)}.mt-7{margin-block-start:var(--spacing-7)}.mb-7{margin-block-end:var(--spacing-7)}.p-7{padding:var(--spacing-7)}.py-7{padding-block-end:var(--spacing-7);padding-block-start:var(--spacing-7)}.px-7{padding-inline-end:var(--spacing-7)}.pl-7,.pr-7,.px-7{padding-inline-start:var(--spacing-7)}.pt-7{padding-block-start:var(--spacing-7)}.pb-7{padding-block-end:var(--spacing-7)}.w-7{width:var(--spacing-7)}.h-7,.size-7{height:var(--spacing-7)}.size-7{width:var(--spacing-7)}.radius-7{border-radius:var(--spacing-7)}.gap-7{gap:var(--spacing-7)}.row-gap-7{row-gap:var(--spacing-7)}.column-gap-7{column-gap:var(--spacing-7)}.flow-space-7{--flow-space:var(--spacing-7)}.m-8{margin:var(--spacing-8)}.my-8{margin-block-end:var(--spacing-8);margin-block-start:var(--spacing-8)}.mx-8{margin-inline-end:var(--spacing-8)}.ml-8,.mr-8,.mx-8{margin-inline-start:var(--spacing-8)}.mt-8{margin-block-start:var(--spacing-8)}.mb-8{margin-block-end:var(--spacing-8)}.p-8{padding:var(--spacing-8)}.py-8{padding-block-end:var(--spacing-8);padding-block-start:var(--spacing-8)}.px-8{padding-inline-end:var(--spacing-8)}.pl-8,.pr-8,.px-8{padding-inline-start:var(--spacing-8)}.pt-8{padding-block-start:var(--spacing-8)}.pb-8{padding-block-end:var(--spacing-8)}.w-8{width:var(--spacing-8)}.h-8,.size-8{height:var(--spacing-8)}.size-8{width:var(--spacing-8)}.radius-8{border-radius:var(--spacing-8)}.gap-8{gap:var(--spacing-8)}.row-gap-8{row-gap:var(--spacing-8)}.column-gap-8{column-gap:var(--spacing-8)}.flow-space-8{--flow-space:var(--spacing-8)}.m-9{margin:var(--spacing-9)}.my-9{margin-block-end:var(--spacing-9);margin-block-start:var(--spacing-9)}.mx-9{margin-inline-end:var(--spacing-9)}.ml-9,.mr-9,.mx-9{margin-inline-start:var(--spacing-9)}.mt-9{margin-block-start:var(--spacing-9)}.mb-9{margin-block-end:var(--spacing-9)}.p-9{padding:var(--spacing-9)}.py-9{padding-block-end:var(--spacing-9);padding-block-start:var(--spacing-9)}.px-9{padding-inline-end:var(--spacing-9)}.pl-9,.pr-9,.px-9{padding-inline-start:var(--spacing-9)}.pt-9{padding-block-start:var(--spacing-9)}.pb-9{padding-block-end:var(--spacing-9)}.w-9{width:var(--spacing-9)}.h-9,.size-9{height:var(--spacing-9)}.size-9{width:var(--spacing-9)}.radius-9{border-radius:var(--spacing-9)}.gap-9{gap:var(--spacing-9)}.row-gap-9{row-gap:var(--spacing-9)}.column-gap-9{column-gap:var(--spacing-9)}.flow-space-9{--flow-space:var(--spacing-9)}.m-10{margin:var(--spacing-10)}.my-10{margin-block-end:var(--spacing-10);margin-block-start:var(--spacing-10)}.mx-10{margin-inline-end:var(--spacing-10)}.ml-10,.mr-10,.mx-10{margin-inline-start:var(--spacing-10)}.mt-10{margin-block-start:var(--spacing-10)}.mb-10{margin-block-end:var(--spacing-10)}.p-10{padding:var(--spacing-10)}.py-10{padding-block-end:var(--spacing-10);padding-block-start:var(--spacing-10)}.px-10{padding-inline-end:var(--spacing-10)}.pl-10,.pr-10,.px-10{padding-inline-start:var(--spacing-10)}.pt-10{padding-block-start:var(--spacing-10)}.pb-10{padding-block-end:var(--spacing-10)}.w-10{width:var(--spacing-10)}.h-10,.size-10{height:var(--spacing-10)}.size-10{width:var(--spacing-10)}.radius-10{border-radius:var(--spacing-10)}.gap-10{gap:var(--spacing-10)}.row-gap-10{row-gap:var(--spacing-10)}.column-gap-10{column-gap:var(--spacing-10)}.flow-space-10{--flow-space:var(--spacing-10)}.w-full{width:100%}.h-full{height:100%}.w-fit{width:fit-content}.w-max{width:max-content}.w-min{width:min-content}.flex{display:flex}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-end{align-items:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.flex-1{flex:1}.flow>*+*{margin-block-start:var(--flow-space,1em)}.flow-space-default{--flow-space:1em}.list-none{list-style-type:none}.list-disc{list-style-type:disc}.list-decimal{list-style-type:decimal}.visually-hidden{border:0;clip:rect(0 0 0 0);height:0;margin:0;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px} diff --git a/src/includes/css/styles.css b/src/includes/css/styles.css index 182c864..526d45b 100644 --- a/src/includes/css/styles.css +++ b/src/includes/css/styles.css @@ -1,22 +1,8 @@ @import "global/reset.css"; @import "global/variables.css"; + @import "global/global-styles.css"; -@import "blocks/button.css"; -@import "blocks/card.css"; -@import "blocks/media-display.css"; -@import "blocks/media-grid.css"; -@import "blocks/pill.css"; -@import "blocks/posts.css"; -@import "blocks/prism.css"; -@import "blocks/site-header.css"; -@import "blocks/site-logo.css"; -@import "blocks/stars.css"; - -@import "compositions/cluster.css"; -@import "compositions/repel.css"; - -@import "utilities/fonts.css"; -@import "utilities/image.css"; -@import "utilities/table.css"; -@import "utilities/wrapper.css"; +@import-glob "blocks/*.css"; +@import-glob "compositions/*.css"; +@import-glob "utilities/*.css"; diff --git a/src/includes/css/utilities/flex.css b/src/includes/css/utilities/flex.css new file mode 100644 index 0000000..8c28f8c --- /dev/null +++ b/src/includes/css/utilities/flex.css @@ -0,0 +1,32 @@ +.flex { + display: flex; +} + +.flex-col { + display: flex; + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.items-end { + align-items: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-1 { + flex: 1; +} diff --git a/src/includes/css/utilities/flow.css b/src/includes/css/utilities/flow.css new file mode 100644 index 0000000..23bdc32 --- /dev/null +++ b/src/includes/css/utilities/flow.css @@ -0,0 +1,8 @@ +/* + * FLOW UTILITY + * Like the Every Layout stack: https://every-layout.dev/layouts/stack/ + * Info about this implementation: https://piccalil.li/quick-tip/flow-utility/ + */ +.flow > * + * { + margin-block-start: var(--flow-space, 1em); +} diff --git a/src/includes/css/utilities/fonts.css b/src/includes/css/utilities/fonts.css index c5c5d4f..fdc2576 100644 --- a/src/includes/css/utilities/fonts.css +++ b/src/includes/css/utilities/fonts.css @@ -2,6 +2,22 @@ font-size: 1rem; } +.font-size-m { + font-size: 1.125rem; +} + +.font-size-l { + font-size: 1.5rem; +} + +.font-size-xl { + font-size: 2rem; +} + +.font-size-2xl { + font-size: 3rem; +} + .line-height-s { line-height: 0.8rem; } @@ -13,3 +29,7 @@ .line-height-l { line-height: 1.5rem; } + +.line-height-xl { + line-height: 2rem; +} diff --git a/src/includes/css/utilities/image.css b/src/includes/css/utilities/image.css index c740465..cde6df8 100644 --- a/src/includes/css/utilities/image.css +++ b/src/includes/css/utilities/image.css @@ -1,11 +1,11 @@ .image-shrink { max-width: 50%; - border-radius: var(--spacing-2); + border-radius: var(--spacing-0\.5); overflow: hidden; } .image-tiny { max-width: 25%; - border-radius: var(--spacing-2); + border-radius: var(--spacing-0\.5); overflow: hidden; } diff --git a/src/includes/css/utilities/list.css b/src/includes/css/utilities/list.css new file mode 100644 index 0000000..f7845a7 --- /dev/null +++ b/src/includes/css/utilities/list.css @@ -0,0 +1,11 @@ +.list-none { + list-style-type: none; +} + +.list-disc { + list-style-type: disc; +} + +.list-decimal { + list-style-type: decimal; +} diff --git a/src/includes/css/utilities/visually-hidden.css b/src/includes/css/utilities/visually-hidden.css new file mode 100644 index 0000000..6a63f69 --- /dev/null +++ b/src/includes/css/utilities/visually-hidden.css @@ -0,0 +1,15 @@ +/* + * VISUALLY HIDDEN UTILITY + * Info: https://piccalil.li/quick-tip/visually-hidden/ + */ +.visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: 0; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} diff --git a/src/includes/layouts/base.html b/src/includes/layouts/base.html index 07cd978..2f2357f 100644 --- a/src/includes/layouts/base.html +++ b/src/includes/layouts/base.html @@ -20,13 +20,12 @@ {% endif %} - - {% css %} + {% set css %} {% include "css/styles.css" %} - {% endcss %} - + {% endset %} + - + {% include "partials/header.html" %}{{ pullquote }}
{% endif %} -{{ pullquote }}
{% endif %} +{{ pullquote }}
{% endif %} -