diff --git a/.gitignore b/.gitignore index 16d54bb..f94ca52 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,6 @@ pnpm-debug.log* # jetbrains setting folder .idea/ + +# vercel build output (generated by the adapter) +.vercel/ diff --git a/.vercel/output/_functions/chunks/_virtual_astro_server-island-manifest_C1Q2srgE.mjs b/.vercel/output/_functions/chunks/_virtual_astro_server-island-manifest_C1Q2srgE.mjs deleted file mode 100644 index 40da8ab..0000000 --- a/.vercel/output/_functions/chunks/_virtual_astro_server-island-manifest_C1Q2srgE.mjs +++ /dev/null @@ -1,5 +0,0 @@ -//#region \0virtual:astro:server-island-manifest -var serverIslandMap = /* @__PURE__ */ new Map([]); -var serverIslandNameMap = /* @__PURE__ */ new Map([]); -//#endregion -export { serverIslandMap, serverIslandNameMap }; diff --git a/.vercel/output/_functions/chunks/_virtual_astro_session-driver_C-PI1Pas.mjs b/.vercel/output/_functions/chunks/_virtual_astro_session-driver_C-PI1Pas.mjs deleted file mode 100644 index f90803a..0000000 --- a/.vercel/output/_functions/chunks/_virtual_astro_session-driver_C-PI1Pas.mjs +++ /dev/null @@ -1,4 +0,0 @@ -//#region \0virtual:astro:session-driver -var _virtual_astro_session_driver_default = null; -//#endregion -export { _virtual_astro_session_driver_default as default }; diff --git a/.vercel/output/_functions/chunks/compiler_DiXpMM4i.mjs b/.vercel/output/_functions/chunks/compiler_DiXpMM4i.mjs deleted file mode 100644 index fcb57df..0000000 --- a/.vercel/output/_functions/chunks/compiler_DiXpMM4i.mjs +++ /dev/null @@ -1,47 +0,0 @@ -import { Z as AstroError, y as InvalidComponentArgs } from "./errors-data_zYnyWRO_.mjs"; -import "./jsx-runtime_DseUv9uh.mjs"; -//#region \0rolldown/runtime.js -var __defProp = Object.defineProperty; -var __exportAll = (all, no_symbols) => { - let target = {}; - for (var name in all) __defProp(target, name, { - get: all[name], - enumerable: true - }); - if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" }); - return target; -}; -//#endregion -//#region node_modules/astro/dist/runtime/server/astro-component.js -function validateArgs(args) { - if (args.length !== 3) return false; - if (!args[0] || typeof args[0] !== "object") return false; - return true; -} -function baseCreateComponent(cb, moduleId, propagation) { - const name = moduleId?.split("/").pop()?.replace(".astro", "") ?? ""; - const fn = (...args) => { - if (!validateArgs(args)) throw new AstroError({ - ...InvalidComponentArgs, - message: InvalidComponentArgs.message(name) - }); - return cb(...args); - }; - Object.defineProperty(fn, "name", { - value: name, - writable: false - }); - fn.isAstroComponentFactory = true; - fn.moduleId = moduleId; - fn.propagation = propagation; - return fn; -} -function createComponentWithOptions(opts) { - return baseCreateComponent(opts.factory, opts.moduleId, opts.propagation); -} -function createComponent(arg1, moduleId, propagation) { - if (typeof arg1 === "function") return baseCreateComponent(arg1, moduleId, propagation); - else return createComponentWithOptions(arg1); -} -//#endregion -export { __exportAll as n, createComponent as t }; diff --git a/.vercel/output/_functions/chunks/errors-data_zYnyWRO_.mjs b/.vercel/output/_functions/chunks/errors-data_zYnyWRO_.mjs deleted file mode 100644 index eb1f995..0000000 --- a/.vercel/output/_functions/chunks/errors-data_zYnyWRO_.mjs +++ /dev/null @@ -1,386 +0,0 @@ -//#region node_modules/astro/dist/core/errors/utils.js -function normalizeLF(code) { - return code.replace(/\r\n|\r(?!\n)|\n/g, "\n"); -} -//#endregion -//#region node_modules/astro/dist/core/errors/printer.js -function codeFrame(src, loc) { - if (!loc || loc.line === void 0 || loc.column === void 0) return ""; - const lines = normalizeLF(src).split("\n").map((ln) => ln.replace(/\t/g, " ")); - const visibleLines = []; - for (let n = -2; n <= 2; n++) if (lines[loc.line + n]) visibleLines.push(loc.line + n); - let gutterWidth = 0; - for (const lineNo of visibleLines) { - let w = `> ${lineNo}`; - if (w.length > gutterWidth) gutterWidth = w.length; - } - let output = ""; - for (const lineNo of visibleLines) { - const isFocusedLine = lineNo === loc.line - 1; - output += isFocusedLine ? "> " : " "; - output += `${lineNo + 1} | ${lines[lineNo]} -`; - if (isFocusedLine) output += `${Array.from({ length: gutterWidth }).join(" ")} | ${Array.from({ length: loc.column }).join(" ")}^ -`; - } - return output; -} -//#endregion -//#region node_modules/astro/dist/core/errors/errors.js -function isAstroError(e) { - return e != null && (e instanceof AstroError || AstroError.is(e)); -} -var AstroError = class extends Error { - loc; - title; - hint; - frame; - type = "AstroError"; - constructor(props, options) { - const { name, title, message, stack, location, hint, frame } = props; - super(message, options); - this.title = title; - this.name = name; - if (message) this.message = message; - this.stack = stack ? stack : this.stack; - this.loc = location; - this.hint = hint; - this.frame = frame; - } - setLocation(location) { - this.loc = location; - } - setName(name) { - this.name = name; - } - setMessage(message) { - this.message = message; - } - setHint(hint) { - this.hint = hint; - } - setFrame(source, location) { - this.frame = codeFrame(source, location); - } - static is(err) { - return err?.type === "AstroError"; - } -}; -var AstroUserError = class extends Error { - type = "AstroUserError"; - /** - * A message that explains to the user how they can fix the error. - */ - hint; - name = "AstroUserError"; - constructor(message, hint) { - super(); - this.message = message; - this.hint = hint; - } - static is(err) { - return err?.type === "AstroUserError"; - } -}; -//#endregion -//#region node_modules/astro/dist/core/errors/errors-data.js -var ClientAddressNotAvailable = { - name: "ClientAddressNotAvailable", - title: "`Astro.clientAddress` is not available in current adapter.", - message: (adapterName) => `\`Astro.clientAddress\` is not available in the \`${adapterName}\` adapter. File an issue with the adapter to add support.` -}; -var PrerenderClientAddressNotAvailable = { - name: "PrerenderClientAddressNotAvailable", - title: "`Astro.clientAddress` cannot be used inside prerendered routes.", - message: (name) => `\`Astro.clientAddress\` cannot be used inside prerendered route ${name}.` -}; -var StaticClientAddressNotAvailable = { - name: "StaticClientAddressNotAvailable", - title: "`Astro.clientAddress` is not available in prerendered pages.", - message: "`Astro.clientAddress` is only available on pages that are server-rendered.", - hint: "See https://docs.astro.build/en/guides/on-demand-rendering/ for more information on how to enable SSR." -}; -var NoMatchingStaticPathFound = { - name: "NoMatchingStaticPathFound", - title: "No static path found for requested path.", - message: (pathName) => `A \`getStaticPaths()\` route pattern was matched, but no matching static path was found for requested path \`${pathName}\`.`, - hint: (possibleRoutes) => `Possible dynamic routes being matched: ${possibleRoutes.join(", ")}.` -}; -var OnlyResponseCanBeReturned = { - name: "OnlyResponseCanBeReturned", - title: "Invalid type returned by Astro page.", - message: (route, returnedValue) => `Route \`${route ? route : ""}\` returned a \`${returnedValue}\`. Only a [Response](https://developer.mozilla.org/en-US/docs/Web/API/Response) can be returned from Astro files.`, - hint: "See https://docs.astro.build/en/guides/on-demand-rendering/#response for more information." -}; -var MissingMediaQueryDirective = { - name: "MissingMediaQueryDirective", - title: "Missing value for `client:media` directive.", - message: "Media query not provided for `client:media` directive. A media query similar to `client:media=\"(max-width: 600px)\"` must be provided." -}; -var NoMatchingRenderer = { - name: "NoMatchingRenderer", - title: "No matching renderer found.", - message: (componentName, componentExtension, plural, validRenderersCount) => `Unable to render \`${componentName}\`. - -${validRenderersCount > 0 ? `There ${plural ? "are" : "is"} ${validRenderersCount} renderer${plural ? "s" : ""} configured in your \`astro.config.mjs\` file, -but ${plural ? "none were" : "it was not"} able to server-side render \`${componentName}\`.` : `No valid renderer was found ${componentExtension ? `for the \`.${componentExtension}\` file extension.` : `for this file extension.`}`}`, - hint: (probableRenderers) => `Did you mean to enable the ${probableRenderers} integration? - -See https://docs.astro.build/en/guides/framework-components/ for more information on how to install and configure integrations.` -}; -var NoClientOnlyHint = { - name: "NoClientOnlyHint", - title: "Missing hint on client:only directive.", - message: (componentName) => `Unable to render \`${componentName}\`. When using the \`client:only\` hydration strategy, Astro needs a hint to use the correct renderer.`, - hint: (probableRenderers) => `Did you mean to pass \`client:only="${probableRenderers}"\`? See https://docs.astro.build/en/reference/directives-reference/#clientonly for more information on \`client:only\`.` -}; -var InvalidGetStaticPathsEntry = { - name: "InvalidGetStaticPathsEntry", - title: "Invalid entry inside `getStaticPaths()`'s return value.", - message: (entryType) => `Invalid entry returned by \`getStaticPaths()\`. Expected an object, got \`${entryType}\`.`, - hint: "If you're using a `.map` call, you might be looking for `.flatMap()` instead. See https://docs.astro.build/en/reference/routing-reference/#getstaticpaths for more information on `getStaticPaths()`." -}; -var InvalidGetStaticPathsReturn = { - name: "InvalidGetStaticPathsReturn", - title: "Invalid value returned by `getStaticPaths()`.", - message: (returnType) => `Invalid type returned by \`getStaticPaths()\`. Expected an \`array\`, got \`${returnType}\`.`, - hint: "See https://docs.astro.build/en/reference/routing-reference/#getstaticpaths for more information on `getStaticPaths()`." -}; -var GetStaticPathsExpectedParams = { - name: "GetStaticPathsExpectedParams", - title: "Missing params property on `getStaticPaths()` route.", - message: "Missing or empty required `params` property on `getStaticPaths()` route.", - hint: "See https://docs.astro.build/en/reference/routing-reference/#getstaticpaths for more information on `getStaticPaths()`." -}; -var GetStaticPathsInvalidRouteParam = { - name: "GetStaticPathsInvalidRouteParam", - title: "Invalid route parameter returned by `getStaticPaths()`.", - message: (key, value, valueType) => `Invalid \`getStaticPaths()\` route parameter for \`${key}\`. Expected a string or undefined, received \`${valueType}\` (\`${value}\`).`, - hint: "See https://docs.astro.build/en/reference/routing-reference/#getstaticpaths for more information on `getStaticPaths()`." -}; -var GetStaticPathsRequired = { - name: "GetStaticPathsRequired", - title: "`getStaticPaths()` function required for dynamic routes.", - message: "`getStaticPaths()` function is required for dynamic routes. Make sure that you `export` a `getStaticPaths()` function from your dynamic route.", - hint: `See https://docs.astro.build/en/guides/routing/#dynamic-routes for more information on dynamic routes. - - If you meant for this route to be server-rendered, set \`export const prerender = false;\` in the page.` -}; -var ReservedSlotName = { - name: "ReservedSlotName", - title: "Invalid slot name.", - message: (slotName) => `Unable to create a slot named \`${slotName}\`. \`${slotName}\` is a reserved slot name. Please update the name of this slot.` -}; -var NoMatchingImport = { - name: "NoMatchingImport", - title: "No import found for component.", - message: (componentName) => `Could not render \`${componentName}\`. No matching import has been found for \`${componentName}\`.`, - hint: "Please make sure the component is properly imported." -}; -var InvalidComponentArgs = { - name: "InvalidComponentArgs", - title: "Invalid component arguments.", - message: (name) => `Invalid arguments passed to${name ? ` <${name}>` : ""} component.`, - hint: "Astro components cannot be rendered directly via function call, such as `Component()` or `{items.map(Component)}`." -}; -var PageNumberParamNotFound = { - name: "PageNumberParamNotFound", - title: "Page number param not found.", - message: (paramName) => `[paginate()] page number param \`${paramName}\` not found in your filepath.`, - hint: "Rename your file to `[page].astro` or `[...page].astro`." -}; -var ImageMissingAlt = { - name: "ImageMissingAlt", - title: "Image missing required \"alt\" property.", - message: "Image missing \"alt\" property. \"alt\" text is required to describe important images on the page.", - hint: "Use an empty string (\"\") for decorative images." -}; -var InvalidImageService = { - name: "InvalidImageService", - title: "Error while loading image service.", - message: "There was an error loading the configured image service. Please see the stack trace for more information." -}; -var MissingImageDimension = { - name: "MissingImageDimension", - title: "Missing image dimensions.", - message: (missingDimension, imageURL) => `Missing ${missingDimension === "both" ? "width and height attributes" : `${missingDimension} attribute`} for ${imageURL}. When using remote images, both dimensions are required in order to avoid CLS.`, - hint: "If your image is inside your `src` folder, you probably meant to import it instead. See [the Imports guide for more information](https://docs.astro.build/en/guides/imports/#other-assets). You can also use `inferSize={true}` for remote images to get the original dimensions." -}; -var FailedToFetchRemoteImageDimensions = { - name: "FailedToFetchRemoteImageDimensions", - title: "Failed to retrieve remote image dimensions.", - message: (imageURL) => `Failed to get the dimensions for ${imageURL}.`, - hint: "Verify your remote image URL is accurate, and that you are not using `inferSize` with a file located in your `public/` folder." -}; -var RemoteImageNotAllowed = { - name: "RemoteImageNotAllowed", - title: "Remote image is not allowed.", - message: (imageURL) => `Remote image ${imageURL} is not allowed by your image configuration.`, - hint: "Update `image.domains` or `image.remotePatterns`, or remove `inferSize` for this image." -}; -var UnsupportedImageFormat = { - name: "UnsupportedImageFormat", - title: "Unsupported image format.", - message: (format, imagePath, supportedFormats) => `Received unsupported format \`${format}\` from \`${imagePath}\`. Currently only ${supportedFormats.join(", ")} are supported by our image services.`, - hint: "Using an `img` tag directly instead of the `Image` component might be what you're looking for." -}; -var UnsupportedImageConversion = { - name: "UnsupportedImageConversion", - title: "Unsupported image conversion.", - message: "Converting between vector (such as SVGs) and raster (such as PNGs and JPEGs) images is not currently supported." -}; -var PrerenderDynamicEndpointPathCollide = { - name: "PrerenderDynamicEndpointPathCollide", - title: "Prerendered dynamic endpoint has path collision.", - message: (pathname) => `Could not render \`${pathname}\` with an \`undefined\` param as the generated path will collide during prerendering. Prevent passing \`undefined\` as \`params\` for the endpoint's \`getStaticPaths()\` function, or add an additional extension to the endpoint's filename.`, - hint: (filename) => `Rename \`${filename}\` to \`${filename.replace(/\.(?:js|ts)/, (m) => `.json` + m)}\`` -}; -var ExpectedImage = { - name: "ExpectedImage", - title: "Expected src to be an image.", - message: (src, typeofOptions, fullOptions) => `Expected \`src\` property for \`getImage\` or \`\` to be either an ESM imported image or a string with the path of a remote image. Received \`${src}\` (type: \`${typeofOptions}\`). - -Full serialized options received: \`${fullOptions}\`.`, - hint: "This error can often happen because of a wrong path. Make sure the path to your image is correct. If you're passing an async function, make sure to call and await it." -}; -var ExpectedImageOptions = { - name: "ExpectedImageOptions", - title: "Expected image options.", - message: (options) => `Expected \`getImage()\` parameter to be an object. Received \`${options}\`.` -}; -var ExpectedNotESMImage = { - name: "ExpectedNotESMImage", - title: "Expected image options, not an ESM-imported image.", - message: "An ESM-imported image cannot be passed directly to `getImage()`. Instead, pass an object with the image in the `src` property.", - hint: "Try changing `getImage(myImage)` to `getImage({ src: myImage })`" -}; -var IncompatibleDescriptorOptions = { - name: "IncompatibleDescriptorOptions", - title: "Cannot set both `densities` and `widths`.", - message: "Only one of `densities` or `widths` can be specified. In most cases, you'll probably want to use only `widths` if you require specific widths.", - hint: "Those attributes are used to construct a `srcset` attribute, which cannot have both `x` and `w` descriptors." -}; -var NoImageMetadata = { - name: "NoImageMetadata", - title: "Could not process image metadata.", - message: (imagePath) => `Could not process image metadata${imagePath ? ` for \`${imagePath}\`` : ""}.`, - hint: "This is often caused by a corrupted or malformed image. Re-exporting the image from your image editor may fix this issue." -}; -var ResponseSentError = { - name: "ResponseSentError", - title: "Unable to set response.", - message: "The response has already been sent to the browser and cannot be altered." -}; -var MiddlewareNoDataOrNextCalled = { - name: "MiddlewareNoDataOrNextCalled", - title: "The middleware didn't return a `Response`.", - message: "Make sure your middleware returns a `Response` object, either directly or by returning the `Response` from calling the `next` function." -}; -var MiddlewareNotAResponse = { - name: "MiddlewareNotAResponse", - title: "The middleware returned something that is not a `Response` object.", - message: "Any data returned from middleware must be a valid `Response` object." -}; -var EndpointDidNotReturnAResponse = { - name: "EndpointDidNotReturnAResponse", - title: "The endpoint did not return a `Response`.", - message: "An endpoint must return either a `Response`, or a `Promise` that resolves with a `Response`." -}; -var LocalsNotAnObject = { - name: "LocalsNotAnObject", - title: "Value assigned to `locals` is not accepted.", - message: "`locals` can only be assigned to an object. Other values like numbers, strings, etc. are not accepted.", - hint: "If you tried to remove some information from the `locals` object, try to use `delete` or set the property to `undefined`." -}; -var LocalsReassigned = { - name: "LocalsReassigned", - title: "`locals` must not be reassigned.", - message: "`locals` cannot be assigned directly.", - hint: "Set a `locals` property instead." -}; -var AstroResponseHeadersReassigned = { - name: "AstroResponseHeadersReassigned", - title: "`Astro.response.headers` must not be reassigned.", - message: "Individual headers can be added to and removed from `Astro.response.headers`, but it must not be replaced with another instance of `Headers` altogether.", - hint: "Consider using `Astro.response.headers.add()`, and `Astro.response.headers.delete()`." -}; -var LocalImageUsedWrongly = { - name: "LocalImageUsedWrongly", - title: "Local images must be imported.", - message: (imageFilePath) => `\`Image\`'s and \`getImage\`'s \`src\` parameter must be an imported image or a URL, it cannot be a string filepath. Received \`${imageFilePath}\`.`, - hint: "If you want to use an image from your `src` folder, you need to either import it or if the image is coming from a content collection, use the [image() schema helper](https://docs.astro.build/en/guides/images/#images-in-content-collections). See https://docs.astro.build/en/reference/modules/astro-assets/#src-required for more information on the `src` property." -}; -var MissingSharp = { - name: "MissingSharp", - title: "Could not find Sharp.", - message: "Could not find Sharp. Please install Sharp (`sharp`) manually into your project or migrate to another image service.", - hint: "See Sharp's installation instructions for more information: https://sharp.pixelplumbing.com/install. If you are not relying on `astro:assets` to optimize, transform, or process any images, you can configure a passthrough image service instead of installing Sharp. See https://docs.astro.build/en/reference/errors/missing-sharp for more information.\n\nSee https://docs.astro.build/en/guides/images/#default-image-service for more information on how to migrate to another image service." -}; -var i18nNoLocaleFoundInPath = { - name: "i18nNoLocaleFoundInPath", - title: "The path doesn't contain any locale.", - message: "You tried to use an i18n utility on a path that doesn't contain any locale. You can use `pathHasLocale` first to determine if the path has a locale." -}; -var RewriteWithBodyUsed = { - name: "RewriteWithBodyUsed", - title: "Cannot use `Astro.rewrite()` after the request body has been read.", - message: "`Astro.rewrite()` cannot be used if the request body has already been read. If you need to read the body, first clone the request." -}; -var ForbiddenRewrite = { - name: "ForbiddenRewrite", - title: "Forbidden rewrite to a static route.", - message: (from, to, component) => `You tried to rewrite the on-demand route '${from}' with the static route '${to}', when using the 'server' output. - -The static route '${to}' is rendered by the component -'${component}', which is marked as prerendered. This is a forbidden operation because during the build, the component '${component}' is compiled to an -HTML file, which can't be retrieved at runtime by Astro.`, - hint: (component) => `Add \`export const prerender = false\` to the component '${component}', or use \`Astro.redirect()\`.` -}; -var FontFamilyNotFound = { - name: "FontFamilyNotFound", - title: "Font family not found.", - message: (family) => `No data was found for the \`"${family}"\` family passed to the \`\` component.`, - hint: "This is often caused by a typo. Check that the `` component is using a `cssVariable` specified in your config." -}; -var FontFileUrlNotFound = { - name: "FontFileUrlNotFound", - title: "Font file URL not found.", - message: (url) => `The \`"${url}"\` URL passed to the \`experimental_getFontFileURL()\` function is invalid.`, - hint: "Make sure you pass a valid URL, obtained via the `fontData` object." -}; -var MissingGetFontFileRequestUrl = { - name: "MissingGetFontFileRequestUrl", - title: "`experimental_getFontFileURL()` requires the request URL with on-demand rendering.", - hint: "Pass the request URL as the 2nd argument, for example `Astro.url`." -}; -var UnavailableAstroGlobal = { - name: "UnavailableAstroGlobal", - title: "Unavailable Astro global in `getStaticPaths()`.", - message: (name) => `The Astro global is not available in this scope. Please remove \`Astro.${name}\` from your \`getStaticPaths()\` function.` -}; -var NoManifestAvailable = { - name: "NoManifestAvailableError", - title: "No manifest available.", - message: "`new FetchState(request)` was called outside of an Astro server, so no manifest is available.", - hint: "Make sure this code runs as part of your Astro app, such as its fetch entrypoint. If this error occurred inside an Astro-built server, please open an issue at https://github.com/withastro/astro/issues." -}; -var ActionsReturnedInvalidDataError = { - name: "ActionsReturnedInvalidDataError", - title: "Action handler returned invalid data.", - message: (error) => `Action handler returned invalid data. Handlers should return serializable data types like objects, arrays, strings, and numbers. Parse error: ${error}`, - hint: "See the devalue library for all supported types: https://github.com/rich-harris/devalue" -}; -var ActionNotFoundError = { - name: "ActionNotFoundError", - title: "Action not found.", - message: (actionName) => `The server received a request for an action named \`${actionName}\` but could not find a match. If you renamed an action, check that you've updated your \`actions/index\` file and your calling code to match.`, - hint: "You can run `astro check` to detect type errors caused by mismatched action names." -}; -var CacheNotEnabled = { - name: "CacheNotEnabled", - title: "Cache is not enabled.", - message: "`Astro.cache` is not available because the cache feature is not enabled. To use caching, configure a cache provider in your Astro config under `cache`.", - hint: "Use an adapter that provides a default cache provider, or set one explicitly: `cache: { provider: \"...\" }`. See https://docs.astro.build/en/guides/caching/." -}; -//#endregion -export { isAstroError as $, MissingMediaQueryDirective as A, PrerenderClientAddressNotAvailable as B, LocalImageUsedWrongly as C, MiddlewareNotAResponse as D, MiddlewareNoDataOrNextCalled as E, NoMatchingImport as F, RewriteWithBodyUsed as G, RemoteImageNotAllowed as H, NoMatchingRenderer as I, UnsupportedImageConversion as J, StaticClientAddressNotAvailable as K, NoMatchingStaticPathFound as L, NoClientOnlyHint as M, NoImageMetadata as N, MissingGetFontFileRequestUrl as O, NoManifestAvailable as P, AstroUserError as Q, OnlyResponseCanBeReturned as R, InvalidImageService as S, LocalsReassigned as T, ReservedSlotName as U, PrerenderDynamicEndpointPathCollide as V, ResponseSentError as W, i18nNoLocaleFoundInPath as X, UnsupportedImageFormat as Y, AstroError as Z, ImageMissingAlt as _, ClientAddressNotAvailable as a, InvalidGetStaticPathsEntry as b, ExpectedImageOptions as c, FontFamilyNotFound as d, FontFileUrlNotFound as f, GetStaticPathsRequired as g, GetStaticPathsInvalidRouteParam as h, CacheNotEnabled as i, MissingSharp as j, MissingImageDimension as k, ExpectedNotESMImage as l, GetStaticPathsExpectedParams as m, ActionsReturnedInvalidDataError as n, EndpointDidNotReturnAResponse as o, ForbiddenRewrite as p, UnavailableAstroGlobal as q, AstroResponseHeadersReassigned as r, ExpectedImage as s, ActionNotFoundError as t, FailedToFetchRemoteImageDimensions as u, IncompatibleDescriptorOptions as v, LocalsNotAnObject as w, InvalidGetStaticPathsReturn as x, InvalidComponentArgs as y, PageNumberParamNotFound as z }; diff --git a/.vercel/output/_functions/chunks/generic_DKF9tBMu.mjs b/.vercel/output/_functions/chunks/generic_DKF9tBMu.mjs deleted file mode 100644 index e2804bc..0000000 --- a/.vercel/output/_functions/chunks/generic_DKF9tBMu.mjs +++ /dev/null @@ -1,720 +0,0 @@ -import { n as __exportAll, t as createComponent } from "./compiler_DiXpMM4i.mjs"; -import { C as LocalImageUsedWrongly, H as RemoteImageNotAllowed, J as UnsupportedImageConversion, O as MissingGetFontFileRequestUrl, S as InvalidImageService, Y as UnsupportedImageFormat, Z as AstroError, _ as ImageMissingAlt, c as ExpectedImageOptions, d as FontFamilyNotFound, k as MissingImageDimension, l as ExpectedNotESMImage, s as ExpectedImage, v as IncompatibleDescriptorOptions } from "./errors-data_zYnyWRO_.mjs"; -import { _ as inferRemoteSize$1, b as isRemoteAllowed, c as isRemotePath, f as removeQueryString, l as joinPaths, v as fetchWithRedirects } from "./path_BQC-SKOp.mjs"; -import { S as unescapeHTML, _ as addAttribute, h as maybeRenderHead, m as renderTemplate, r as spreadAttributes, w as createAstro } from "./jsx-runtime_DseUv9uh.mjs"; -import * as mime from "mrmime"; -//#region node_modules/astro/dist/assets/utils/imageKind.js -function isESMImportedImage(src) { - return typeof src === "object" || typeof src === "function" && "src" in src; -} -function isRemoteImage(src) { - return typeof src === "string"; -} -async function resolveSrc(src) { - if (typeof src === "object" && "then" in src) { - const resource = await src; - return resource.default ?? resource; - } - return src; -} -var VALID_SUPPORTED_FORMATS = [ - "jpeg", - "jpg", - "png", - "tiff", - "webp", - "gif", - "svg", - "avif" -]; -var DEFAULT_OUTPUT_FORMAT = "webp"; -var DEFAULT_HASH_PROPS = [ - "src", - "width", - "height", - "format", - "quality", - "fit", - "position", - "background" -]; -//#endregion -//#region node_modules/astro/dist/assets/layout.js -var DEFAULT_RESOLUTIONS = [ - 640, - 750, - 828, - 960, - 1080, - 1280, - 1668, - 1920, - 2048, - 2560, - 3200, - 3840, - 4480, - 5120, - 6016 -]; -var LIMITED_RESOLUTIONS = [ - 640, - 750, - 828, - 1080, - 1280, - 1668, - 2048, - 2560 -]; -var getWidths = ({ width, layout, breakpoints = DEFAULT_RESOLUTIONS, originalWidth }) => { - const smallerThanOriginal = (w) => !originalWidth || w <= originalWidth; - if (layout === "full-width") return breakpoints.filter(smallerThanOriginal); - if (!width) return []; - const doubleWidth = width * 2; - const maxSize = originalWidth ? Math.min(doubleWidth, originalWidth) : doubleWidth; - if (layout === "fixed") return originalWidth && width > originalWidth ? [originalWidth] : [width, maxSize]; - if (layout === "constrained") return [ - width, - doubleWidth, - ...breakpoints - ].filter((w) => w <= maxSize).sort((a, b) => a - b); - return []; -}; -var getSizesAttribute = ({ width, layout }) => { - if (!width || !layout) return; - switch (layout) { - case "constrained": return `(min-width: ${width}px) ${width}px, 100vw`; - case "fixed": return `${width}px`; - case "full-width": return `100vw`; - default: return; - } -}; -//#endregion -//#region node_modules/astro/dist/assets/utils/inferSourceFormat.js -var DATA_PREFIX = "data:"; -function inferSourceFormat(src) { - if (src.startsWith(DATA_PREFIX)) { - const sepIndex = src.indexOf(";"); - const commaIndex = src.indexOf(","); - const mimeEnd = sepIndex === -1 ? commaIndex : commaIndex === -1 ? sepIndex : Math.min(sepIndex, commaIndex); - if (mimeEnd === -1) return void 0; - const mime = src.slice(5, mimeEnd); - if (mime === "image/svg+xml") return "svg"; - return mime.split("/")[1] || void 0; - } - try { - const cleanSrc = removeQueryString(src).split("#")[0]; - const lastSlash = cleanSrc.lastIndexOf("/"); - const basename = lastSlash === -1 ? cleanSrc : cleanSrc.slice(lastSlash + 1); - const lastDot = basename.lastIndexOf("."); - if (lastDot === -1) return void 0; - return basename.slice(lastDot + 1).toLowerCase(); - } catch { - return; - } -} -function resolveDefaultOutputFormat(sourceFormat) { - return sourceFormat === "svg" ? "svg" : DEFAULT_OUTPUT_FORMAT; -} -//#endregion -//#region node_modules/astro/dist/assets/services/service.js -function isLocalService(service) { - if (!service) return false; - return "transform" in service; -} -function parseQuality(quality) { - let result = Number.parseInt(quality); - if (Number.isNaN(result)) return quality; - return result; -} -var sortNumeric = (a, b) => a - b; -function verifyOptions(options) { - if (!options.src || !isRemoteImage(options.src) && !isESMImportedImage(options.src)) throw new AstroError({ - ...ExpectedImage, - message: ExpectedImage.message(JSON.stringify(options.src), typeof options.src, JSON.stringify(options, (_, v) => v === void 0 ? null : v)) - }); - if (!isESMImportedImage(options.src)) { - if (options.src.startsWith("/@fs/") || !isRemotePath(options.src) && !options.src.startsWith("/")) throw new AstroError({ - ...LocalImageUsedWrongly, - message: LocalImageUsedWrongly.message(options.src) - }); - let missingDimension; - if (!options.width && !options.height) missingDimension = "both"; - else if (!options.width && options.height) missingDimension = "width"; - else if (options.width && !options.height) missingDimension = "height"; - if (missingDimension) throw new AstroError({ - ...MissingImageDimension, - message: MissingImageDimension.message(missingDimension, options.src) - }); - } else { - if (!VALID_SUPPORTED_FORMATS.includes(options.src.format)) throw new AstroError({ - ...UnsupportedImageFormat, - message: UnsupportedImageFormat.message(options.src.format, options.src.src, VALID_SUPPORTED_FORMATS) - }); - if (options.widths && options.densities) throw new AstroError(IncompatibleDescriptorOptions); - if (options.src.format !== "svg" && options.format === "svg") throw new AstroError(UnsupportedImageConversion); - } -} -var baseService = { - propertiesToHash: DEFAULT_HASH_PROPS, - validateOptions(options) { - verifyOptions(options); - if (!options.format) { - if (isESMImportedImage(options.src)) options.format = resolveDefaultOutputFormat(options.src.format); - else { - const inferred = inferSourceFormat(options.src); - if (inferred) options.format = resolveDefaultOutputFormat(inferred); - } - } - if (options.width) options.width = Math.round(options.width); - if (options.height) options.height = Math.round(options.height); - if (options.layout) delete options.layout; - if (options.fit === "none") delete options.fit; - return options; - }, - getHTMLAttributes(options) { - const { targetWidth, targetHeight } = getTargetDimensions(options); - const { src, width, height, format, quality, densities, widths, formats, layout, priority, fit, position, background, ...attributes } = options; - return { - ...attributes, - width: targetWidth, - height: targetHeight, - loading: attributes.loading ?? "lazy", - decoding: attributes.decoding ?? "async" - }; - }, - getSrcSet(options) { - const { targetWidth, targetHeight } = getTargetDimensions(options); - const aspectRatio = targetWidth / targetHeight; - const { widths, densities } = options; - const targetFormat = options.format; - let transformedWidths = (widths ?? []).sort(sortNumeric); - let imageWidth = options.width; - let maxWidth = Number.POSITIVE_INFINITY; - if (isESMImportedImage(options.src)) { - imageWidth = options.src.width; - maxWidth = imageWidth; - if (transformedWidths.length > 0 && transformedWidths.at(-1) > maxWidth) { - transformedWidths = transformedWidths.filter((width) => width <= maxWidth); - transformedWidths.push(maxWidth); - } - } - transformedWidths = Array.from(new Set(transformedWidths)); - const { width: transformWidth, height: transformHeight, ...transformWithoutDimensions } = options; - let allWidths = []; - if (densities) { - const densityValues = densities.map((density) => { - if (typeof density === "number") return density; - else return Number.parseFloat(density); - }); - allWidths = densityValues.sort(sortNumeric).map((density) => Math.round(targetWidth * density)).map((width, index) => ({ - width, - descriptor: `${densityValues[index]}x` - })); - } else if (transformedWidths.length > 0) allWidths = transformedWidths.map((width) => ({ - width, - descriptor: `${width}w` - })); - return allWidths.map(({ width, descriptor }) => { - const height = Math.round(width / aspectRatio); - return { - transform: { - ...transformWithoutDimensions, - width, - height - }, - descriptor, - attributes: targetFormat ? { type: `image/${targetFormat}` } : {} - }; - }); - }, - getURL(options, imageConfig) { - const searchParams = new URLSearchParams(); - if (isESMImportedImage(options.src)) searchParams.append("href", options.src.src); - else if (isRemoteAllowed(options.src, imageConfig)) searchParams.append("href", options.src); - else return options.src; - Object.entries({ - w: "width", - h: "height", - q: "quality", - f: "format", - fit: "fit", - position: "position", - background: "background" - }).forEach(([param, key]) => { - options[key] && searchParams.append(param, options[key].toString()); - }); - let url = `${joinPaths("/", imageConfig.endpoint.route)}?${searchParams}`; - if (imageConfig.assetQueryParams) { - const assetQueryString = imageConfig.assetQueryParams.toString(); - if (assetQueryString) url += "&" + assetQueryString; - } - return url; - }, - parseURL(url) { - const params = url.searchParams; - if (!params.has("href")) return; - return { - src: params.get("href"), - width: params.has("w") ? Number.parseInt(params.get("w")) : void 0, - height: params.has("h") ? Number.parseInt(params.get("h")) : void 0, - format: params.has("f") ? params.get("f") : void 0, - quality: params.get("q"), - fit: params.get("fit"), - position: params.get("position") ?? void 0, - background: params.get("background") ?? void 0 - }; - }, - getRemoteSize(url, imageConfig) { - return inferRemoteSize$1(url, imageConfig); - } -}; -function getTargetDimensions(options) { - let targetWidth = options.width; - let targetHeight = options.height; - if (isESMImportedImage(options.src)) { - const aspectRatio = options.src.width / options.src.height; - if (targetHeight && !targetWidth) targetWidth = Math.round(targetHeight * aspectRatio); - else if (targetWidth && !targetHeight) targetHeight = Math.round(targetWidth / aspectRatio); - else if (!targetWidth && !targetHeight) { - targetWidth = options.src.width; - targetHeight = options.src.height; - } - } - return { - targetWidth, - targetHeight - }; -} -//#endregion -//#region node_modules/astro/dist/assets/types.js -function isImageMetadata(src) { - return src.fsPath && !("fsPath" in src); -} -//#endregion -//#region node_modules/astro/dist/assets/utils/url.js -var PLACEHOLDER_BASE = "astro://placeholder"; -function createPlaceholderURL(pathOrUrl) { - return new URL(pathOrUrl, PLACEHOLDER_BASE); -} -function stringifyPlaceholderURL(url) { - return url.href.replace(PLACEHOLDER_BASE, ""); -} -//#endregion -//#region node_modules/astro/dist/assets/internal.js -var cssFitValues = [ - "fill", - "contain", - "cover", - "scale-down" -]; -async function getConfiguredImageService() { - if (!globalThis?.astroAsset?.imageService) { - const { default: service } = await import("./sharp_BQ57rSWH.mjs").catch((e) => { - const error = new AstroError(InvalidImageService); - error.cause = e; - throw error; - }); - if (!globalThis.astroAsset) globalThis.astroAsset = {}; - globalThis.astroAsset.imageService = service; - return service; - } - return globalThis.astroAsset.imageService; -} -async function getImage$1(options, imageConfig) { - if (!options || typeof options !== "object") throw new AstroError({ - ...ExpectedImageOptions, - message: ExpectedImageOptions.message(JSON.stringify(options)) - }); - if (typeof options.src === "undefined") throw new AstroError({ - ...ExpectedImage, - message: ExpectedImage.message(options.src, "undefined", JSON.stringify(options)) - }); - if (isImageMetadata(options)) throw new AstroError(ExpectedNotESMImage); - const service = await getConfiguredImageService(); - const resolvedOptions = { - ...options, - src: await resolveSrc(options.src) - }; - let originalWidth; - let originalHeight; - if (resolvedOptions.inferSize) { - delete resolvedOptions.inferSize; - if (isRemoteImage(resolvedOptions.src) && isRemotePath(resolvedOptions.src)) { - if (!isRemoteAllowed(resolvedOptions.src, imageConfig)) throw new AstroError({ - ...RemoteImageNotAllowed, - message: RemoteImageNotAllowed.message(resolvedOptions.src) - }); - const getRemoteSize = (url) => service.getRemoteSize?.(url, imageConfig) ?? inferRemoteSize$1(url, imageConfig); - const result = await getRemoteSize(resolvedOptions.src); - resolvedOptions.width ??= result.width; - resolvedOptions.height ??= result.height; - if (result.format) resolvedOptions.format ??= resolveDefaultOutputFormat(result.format); - originalWidth = result.width; - originalHeight = result.height; - } - } - const originalFilePath = isESMImportedImage(resolvedOptions.src) ? resolvedOptions.src.fsPath : void 0; - const clonedSrc = isESMImportedImage(resolvedOptions.src) ? resolvedOptions.src.clone ?? resolvedOptions.src : resolvedOptions.src; - if (isESMImportedImage(clonedSrc)) { - originalWidth = clonedSrc.width; - originalHeight = clonedSrc.height; - } - if (originalWidth && originalHeight) { - const aspectRatio = originalWidth / originalHeight; - if (resolvedOptions.height && !resolvedOptions.width) resolvedOptions.width = Math.round(resolvedOptions.height * aspectRatio); - else if (resolvedOptions.width && !resolvedOptions.height) resolvedOptions.height = Math.round(resolvedOptions.width / aspectRatio); - else if (!resolvedOptions.width && !resolvedOptions.height) { - resolvedOptions.width = originalWidth; - resolvedOptions.height = originalHeight; - } - } - resolvedOptions.src = clonedSrc; - const layout = options.layout ?? imageConfig.layout ?? "none"; - if (resolvedOptions.priority) { - resolvedOptions.loading ??= "eager"; - resolvedOptions.decoding ??= "sync"; - resolvedOptions.fetchpriority ??= "high"; - delete resolvedOptions.priority; - } else { - resolvedOptions.loading ??= "lazy"; - resolvedOptions.decoding ??= "async"; - resolvedOptions.fetchpriority ??= void 0; - } - if (layout !== "none") { - resolvedOptions.widths ||= getWidths({ - width: resolvedOptions.width, - layout, - originalWidth, - breakpoints: imageConfig.breakpoints?.length ? imageConfig.breakpoints : isLocalService(service) ? LIMITED_RESOLUTIONS : DEFAULT_RESOLUTIONS - }); - resolvedOptions.sizes ||= getSizesAttribute({ - width: resolvedOptions.width, - layout - }); - delete resolvedOptions.densities; - resolvedOptions["data-astro-image"] = layout; - if (resolvedOptions.fit && cssFitValues.includes(resolvedOptions.fit)) resolvedOptions["data-astro-image-fit"] = resolvedOptions.fit; - resolvedOptions["data-astro-image-pos"] = (resolvedOptions.position || "center").replace(/\s+/g, "-"); - } - const validatedOptions = service.validateOptions ? await service.validateOptions(resolvedOptions, imageConfig) : resolvedOptions; - validatedOptions.format ??= await peekRemoteFormatForStaticEmit(validatedOptions, imageConfig, service); - const srcSetTransforms = service.getSrcSet ? await service.getSrcSet(validatedOptions, imageConfig) : []; - const lazyImageURLFactory = (getValue) => { - let cached = null; - return () => cached ??= getValue(); - }; - const initialImageURL = await service.getURL(validatedOptions, imageConfig); - let lazyImageURL = lazyImageURLFactory(() => initialImageURL); - const matchesValidatedTransform = (transform) => transform.width === validatedOptions.width && transform.height === validatedOptions.height && transform.format === validatedOptions.format; - let srcSets = await Promise.all(srcSetTransforms.map(async (srcSet) => { - return { - transform: srcSet.transform, - url: matchesValidatedTransform(srcSet.transform) ? initialImageURL : await service.getURL(srcSet.transform, imageConfig), - descriptor: srcSet.descriptor, - attributes: srcSet.attributes - }; - })); - if (isLocalService(service) && globalThis.astroAsset.addStaticImage && !(isRemoteImage(validatedOptions.src) && initialImageURL === validatedOptions.src)) { - const propsToHash = service.propertiesToHash ?? DEFAULT_HASH_PROPS; - lazyImageURL = lazyImageURLFactory(() => globalThis.astroAsset.addStaticImage(validatedOptions, propsToHash, originalFilePath)); - srcSets = srcSetTransforms.map((srcSet) => { - return { - transform: srcSet.transform, - url: matchesValidatedTransform(srcSet.transform) ? lazyImageURL() : globalThis.astroAsset.addStaticImage(srcSet.transform, propsToHash, originalFilePath), - descriptor: srcSet.descriptor, - attributes: srcSet.attributes - }; - }); - } else if (imageConfig.assetQueryParams) { - const imageURLObj = createPlaceholderURL(initialImageURL); - imageConfig.assetQueryParams.forEach((value, key) => { - imageURLObj.searchParams.set(key, value); - }); - lazyImageURL = lazyImageURLFactory(() => stringifyPlaceholderURL(imageURLObj)); - srcSets = srcSets.map((srcSet) => { - const urlObj = createPlaceholderURL(srcSet.url); - imageConfig.assetQueryParams.forEach((value, key) => { - urlObj.searchParams.set(key, value); - }); - return { - ...srcSet, - url: stringifyPlaceholderURL(urlObj) - }; - }); - } - return { - rawOptions: resolvedOptions, - options: validatedOptions, - get src() { - return lazyImageURL(); - }, - srcSet: { - values: srcSets, - attribute: srcSets.map((srcSet) => `${srcSet.url} ${srcSet.descriptor}`).join(", ") - }, - attributes: service.getHTMLAttributes !== void 0 ? await service.getHTMLAttributes(validatedOptions, imageConfig) : {} - }; -} -async function peekRemoteFormatForStaticEmit(options, imageConfig, service) { - if (!isRemoteImage(options.src) || !isRemoteAllowed(options.src, imageConfig) || !globalThis.astroAsset?.addStaticImage || !isLocalService(service) || !service.getRemoteSize) return; - try { - return resolveDefaultOutputFormat((await service.getRemoteSize(options.src, imageConfig)).format); - } catch { - return; - } -} -Function.prototype.toString.call(Object); -//#endregion -//#region node_modules/astro/components/Image.astro -createAstro("https://gabeefran.co"); -var $$Image = createComponent(async ($$result, $$props, $$slots) => { - const Astro2 = $$result.createAstro($$props, $$slots); - Astro2.self = $$Image; - const props = Astro2.props; - if (props.alt === void 0 || props.alt === null) throw new AstroError(ImageMissingAlt); - if (typeof props.width === "string") props.width = Number.parseInt(props.width); - if (typeof props.height === "string") props.height = Number.parseInt(props.height); - if ((props.layout ?? imageConfig.layout ?? "none") !== "none") { - props.layout ??= imageConfig.layout; - props.fit ??= imageConfig.objectFit ?? "cover"; - props.position ??= imageConfig.objectPosition ?? "center"; - } else if (imageConfig.objectFit || imageConfig.objectPosition) { - props.fit ??= imageConfig.objectFit; - props.position ??= imageConfig.objectPosition; - } - const image = await getImage(props); - const additionalAttributes = {}; - if (image.srcSet.values.length > 0) additionalAttributes.srcset = image.srcSet.attribute; - const { class: className, ...attributes } = { - ...additionalAttributes, - ...image.attributes - }; - return renderTemplate`${maybeRenderHead($$result)}`; -}, "/home/gabe/src/gabeefran.co-blog/node_modules/astro/components/Image.astro", void 0); -//#endregion -//#region node_modules/astro/components/Picture.astro -createAstro("https://gabeefran.co"); -var $$Picture = createComponent(async ($$result, $$props, $$slots) => { - const Astro2 = $$result.createAstro($$props, $$slots); - Astro2.self = $$Picture; - const defaultFormats = ["webp"]; - const defaultFallbackFormat = "png"; - const specialFormatsFallback = [ - "gif", - "svg", - "jpg", - "jpeg" - ]; - const { formats = defaultFormats, pictureAttributes = {}, fallbackFormat, ...props } = Astro2.props; - if (props.alt === void 0 || props.alt === null) throw new AstroError(ImageMissingAlt); - const scopedStyleClass = props.class?.match(/\bastro-\w{8}\b/)?.[0]; - if (scopedStyleClass) { - if (pictureAttributes.class) pictureAttributes.class = `${pictureAttributes.class} ${scopedStyleClass}`; - else pictureAttributes.class = scopedStyleClass; - } - const useResponsive = (props.layout ?? imageConfig.layout ?? "none") !== "none"; - if (useResponsive) { - props.layout ??= imageConfig.layout; - props.fit ??= imageConfig.objectFit ?? "cover"; - props.position ??= imageConfig.objectPosition ?? "center"; - } else if (imageConfig.objectFit || imageConfig.objectPosition) { - props.fit ??= imageConfig.objectFit; - props.position ??= imageConfig.objectPosition; - } - for (const key in props) if (key.startsWith("data-astro-cid")) pictureAttributes[key] = props[key]; - const originalSrc = await resolveSrc(props.src); - if (props.inferSize && isRemoteImage(originalSrc)) { - const remoteSize = await inferRemoteSize(originalSrc); - delete props.inferSize; - props.width ??= remoteSize.width; - props.height ??= remoteSize.height; - } - const optimizedImages = await Promise.all(formats.map(async (format) => await getImage({ - ...props, - src: originalSrc, - format, - widths: props.widths, - densities: props.densities - }))); - const clonedSrc = isESMImportedImage(originalSrc) ? originalSrc.clone ?? originalSrc : originalSrc; - let resultFallbackFormat = fallbackFormat ?? defaultFallbackFormat; - if (!fallbackFormat && isESMImportedImage(clonedSrc) && specialFormatsFallback.includes(clonedSrc.format)) resultFallbackFormat = clonedSrc.format; - const fallbackImage = await getImage({ - ...props, - format: resultFallbackFormat, - widths: props.widths, - densities: props.densities - }); - const imgAdditionalAttributes = {}; - const sourceAdditionalAttributes = {}; - if (props.sizes) sourceAdditionalAttributes.sizes = props.sizes; - if (fallbackImage.srcSet.values.length > 0) imgAdditionalAttributes.srcset = fallbackImage.srcSet.attribute; - const { class: className, ...attributes } = { - ...imgAdditionalAttributes, - ...fallbackImage.attributes - }; - return renderTemplate`${maybeRenderHead($$result)}${Object.entries(optimizedImages).map(([_, image]) => { - const srcsetAttribute = props.densities || !props.densities && !props.widths && !useResponsive ? `${image.src}${image.srcSet.values.length > 0 ? ", " + image.srcSet.attribute : ""}` : image.srcSet.attribute; - return renderTemplate``; - })}`; -}, "/home/gabe/src/gabeefran.co-blog/node_modules/astro/components/Picture.astro", void 0); -//#endregion -//#region \0virtual:astro:assets/fonts/internal -var componentDataByCssVariable = /* @__PURE__ */ new Map([]); -//#endregion -//#region node_modules/astro/dist/assets/fonts/core/filter-preloads.js -function filterPreloads(data, preload) { - if (!preload) return null; - if (preload === true) return data; - return data.filter(({ weight, style, subset }) => preload.some((p) => { - if (p.weight !== void 0 && weight !== void 0 && !checkWeight(p.weight.toString(), weight)) return false; - if (p.style !== void 0 && p.style !== style) return false; - if (p.subset !== void 0 && p.subset !== subset) return false; - return true; - })); -} -function checkWeight(input, target) { - const trimmedInput = input.trim(); - if (trimmedInput.includes(" ")) return trimmedInput === target; - if (target.includes(" ")) { - const [a, b] = target.split(" "); - const parsedInput = Number.parseInt(input); - return parsedInput >= Number.parseInt(a) && parsedInput <= Number.parseInt(b); - } - return input === target; -} -//#endregion -//#region node_modules/astro/components/Font.astro -createAstro("https://gabeefran.co"); -var $$Font = createComponent(($$result, $$props, $$slots) => { - const Astro = $$result.createAstro($$props, $$slots); - Astro.self = $$Font; - const { cssVariable, preload = false } = Astro.props; - const data = componentDataByCssVariable.get(cssVariable); - if (!data) throw new AstroError({ - ...FontFamilyNotFound, - message: FontFamilyNotFound.message(cssVariable) - }); - const filteredPreloadData = filterPreloads(data.preloads, preload); - return renderTemplate`${filteredPreloadData?.map(({ url, type }) => renderTemplate``)}`; -}, "/home/gabe/src/gabeefran.co-blog/node_modules/astro/components/Font.astro", void 0); -//#endregion -//#region node_modules/astro/dist/assets/fonts/infra/ssr-runtime-font-file-url-resolver.js -var SsrRuntimeFontFileUrlResolver = class { - #urls; - constructor({ urls }) { - this.#urls = urls; - } - resolve(url, requestUrl) { - if (!this.#urls.has(url)) return null; - if (!url.startsWith("/")) return url; - if (!requestUrl) throw new AstroError(MissingGetFontFileRequestUrl); - return `${requestUrl.origin}${url}`; - } -}; -new SsrRuntimeFontFileUrlResolver({ urls: /* @__PURE__ */ new Set([]) }); -//#endregion -//#region \0astro:assets -var assetQueryParams = void 0; -var imageConfig = { - "endpoint": { "route": "/_image" }, - "service": { - "entrypoint": "astro/assets/services/sharp", - "config": {} - }, - "dangerouslyProcessSVG": false, - "domains": [], - "remotePatterns": [], - "responsiveStyles": false -}; -Object.defineProperty(imageConfig, "assetQueryParams", { - value: assetQueryParams, - enumerable: false, - configurable: true -}); -var inferRemoteSize = async (url) => { - return (await getConfiguredImageService()).getRemoteSize?.(url, imageConfig) ?? inferRemoteSize$1(url, imageConfig); -}; -var getImage = async (options) => await getImage$1(options, imageConfig); -//#endregion -//#region node_modules/astro/dist/assets/utils/etag.js -var fnv1a52 = (str) => { - const len = str.length; - let i = 0, t0 = 0, v0 = 8997, t1 = 0, v1 = 33826, t2 = 0, v2 = 40164, t3 = 0, v3 = 52210; - while (i < len) { - v0 ^= str.charCodeAt(i++); - t0 = v0 * 435; - t1 = v1 * 435; - t2 = v2 * 435; - t3 = v3 * 435; - t2 += v0 << 8; - t3 += v1 << 8; - t1 += t0 >>> 16; - v0 = t0 & 65535; - t2 += t1 >>> 16; - v1 = t1 & 65535; - v3 = t3 + (t2 >>> 16) & 65535; - v2 = t2 & 65535; - } - return (v3 & 15) * 281474976710656 + v2 * 4294967296 + v1 * 65536 + (v0 ^ v3 >> 4); -}; -var etag = (payload, weak = false) => { - return (weak ? "W/\"" : "\"") + fnv1a52(payload).toString(36) + payload.length.toString(36) + "\""; -}; -//#endregion -//#region node_modules/astro/dist/assets/endpoint/loadImage.js -async function loadImage(src, headers, imageConfig, isRemote, fetchFn) { - try { - const res = await fetchWithRedirects({ - url: src, - headers, - imageConfig, - fetchFn - }); - if (isRemote && !isRemoteAllowed(res.url, imageConfig)) return; - if (!res.ok) return; - return await res.arrayBuffer(); - } catch { - return; - } -} -//#endregion -//#region node_modules/astro/dist/assets/endpoint/generic.js -var generic_exports = /* @__PURE__ */ __exportAll({ GET: () => GET }); -var GET = async ({ request }) => { - try { - const imageService = await getConfiguredImageService(); - if (!("transform" in imageService)) throw new Error("Configured image service is not a local service"); - const url = new URL(request.url); - const transform = await imageService.parseURL(url, imageConfig); - if (!transform?.src) throw new Error("Incorrect transform returned by `parseURL`"); - let inputBuffer = void 0; - const isRemoteImage = isRemotePath(transform.src); - if (isRemoteImage && isRemoteAllowed(transform.src, imageConfig) === false) return new Response("Forbidden", { status: 403 }); - const sourceUrl = new URL(transform.src, url.origin); - if (!isRemoteImage && sourceUrl.origin !== url.origin) return new Response("Forbidden", { status: 403 }); - inputBuffer = await loadImage(sourceUrl, isRemoteImage ? new Headers() : request.headers, imageConfig, isRemoteImage); - if (!inputBuffer) return new Response("Not Found", { status: 404 }); - const { data, format } = await imageService.transform(new Uint8Array(inputBuffer), transform, imageConfig); - return new Response(data, { - status: 200, - headers: { - "Content-Type": mime.lookup(format) ?? `image/${format}`, - "Cache-Control": "public, max-age=31536000", - ETag: etag(data.toString()), - Date: (/* @__PURE__ */ new Date()).toUTCString() - } - }); - } catch (err) { - console.error("Could not process image request:", err); - return new Response("Internal Server Error", { status: 500 }); - } -}; -//#endregion -//#region \0virtual:astro:page:node_modules/astro/dist/assets/endpoint/generic@_@js -var generic___js_exports = /* @__PURE__ */ __exportAll({ page: () => page }); -var page = () => generic_exports; -//#endregion -export { resolveDefaultOutputFormat as i, baseService as n, page, parseQuality as r, generic___js_exports as t }; diff --git a/.vercel/output/_functions/chunks/jsx-runtime_DseUv9uh.mjs b/.vercel/output/_functions/chunks/jsx-runtime_DseUv9uh.mjs deleted file mode 100644 index 5b39b05..0000000 --- a/.vercel/output/_functions/chunks/jsx-runtime_DseUv9uh.mjs +++ /dev/null @@ -1,2396 +0,0 @@ -import { A as MissingMediaQueryDirective, F as NoMatchingImport, I as NoMatchingRenderer, M as NoClientOnlyHint, R as OnlyResponseCanBeReturned, W as ResponseSentError, Z as AstroError, o as EndpointDidNotReturnAResponse, q as UnavailableAstroGlobal } from "./errors-data_zYnyWRO_.mjs"; -import { decodeBase64, decodeHex, encodeBase64, encodeHexUpperCase } from "@oslojs/encoding"; -import * as z from "zod/v4"; -import colors from "piccolore"; -import { escape } from "html-escaper"; -import { clsx } from "clsx"; -//#region node_modules/astro/dist/core/csp/config.js -var ALGORITHMS = { - "SHA-256": "sha256-", - "SHA-384": "sha384-", - "SHA-512": "sha512-" -}; -var ALGORITHM_VALUES = Object.values(ALGORITHMS); -z.enum(Object.keys(ALGORITHMS)).optional().default("SHA-256"); -var cspHashSchema = z.custom((value) => { - if (typeof value !== "string") return false; - return ALGORITHM_VALUES.some((allowedValue) => { - return value.startsWith(allowedValue); - }); -}); -var cspKindSchema = z.enum([ - "element", - "attribute", - "default" -]); -var ATTRIBUTE_ALLOWED_RESOURCES = [ - "'none'", - "'unsafe-hashes'", - "'unsafe-inline'", - "'report-sample'" -]; -z.union([z.string(), z.object({ - resource: z.string(), - kind: cspKindSchema -})]).superRefine((value, ctx) => { - const resource = typeof value === "string" ? value : value.resource; - const kind = typeof value === "string" ? "default" : value.kind; - if (kind === "element" && resource === "'unsafe-hashes'") ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: `The source \`'unsafe-hashes'\` is not valid for \`element\` resources (it is rejected by \`script-src-elem\`/\`style-src-elem\`).`, - fatal: true - }); - else if (kind === "attribute" && !ATTRIBUTE_ALLOWED_RESOURCES.includes(resource)) ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: `The source \`${resource}\` is not valid for \`attribute\` resources. \`script-src-attr\`/\`style-src-attr\` only accept: ${ATTRIBUTE_ALLOWED_RESOURCES.join(", ")}.`, - fatal: true - }); -}); -z.union([cspHashSchema, z.object({ - hash: cspHashSchema, - kind: cspKindSchema -})]); -var ALLOWED_DIRECTIVES = [ - "base-uri", - "child-src", - "connect-src", - "default-src", - "fenced-frame-src", - "font-src", - "form-action", - "frame-ancestors", - "frame-src", - "img-src", - "manifest-src", - "media-src", - "object-src", - "referrer", - "report-to", - "report-uri", - "require-trusted-types-for", - "sandbox", - "trusted-types", - "upgrade-insecure-requests", - "worker-src" -]; -z.custom((v) => typeof v === "string").superRefine((value, ctx) => { - if (!ALLOWED_DIRECTIVES.some((allowedValue) => { - return value.startsWith(allowedValue); - })) { - if (value.startsWith("script-src") || value.startsWith("style-src")) ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: `Directives \`script-src\` and \`style-src\` (including their \`-elem\`/\`-attr\` variants) are not allowed in \`security.csp.directives\`. Please use \`security.csp.scriptDirective\` and \`security.csp.styleDirective\` instead, scoping resources/hashes to the more specific directives with the \`kind\` option (\`"element"\` or \`"attribute"\`).`, - fatal: true - }); - else ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: `Invalid directive: "${value}". Allowed directives are: ${ALLOWED_DIRECTIVES.join(", ")}`, - fatal: true - }); - } -}); -//#endregion -//#region node_modules/astro/dist/core/encryption.js -var ALGORITHM = "AES-GCM"; -async function decodeKey(encoded) { - const bytes = decodeBase64(encoded); - return crypto.subtle.importKey("raw", bytes.buffer, ALGORITHM, true, ["encrypt", "decrypt"]); -} -var encoder$1 = new TextEncoder(); -var decoder$1 = new TextDecoder(); -var IV_LENGTH = 24; -async function encryptString(key, raw, additionalData) { - const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH / 2)); - const data = encoder$1.encode(raw); - const params = { - name: ALGORITHM, - iv - }; - if (additionalData) params.additionalData = encoder$1.encode(additionalData); - const buffer = await crypto.subtle.encrypt(params, key, data); - return encodeHexUpperCase(iv) + encodeBase64(new Uint8Array(buffer)); -} -async function decryptString(key, encoded, additionalData) { - const iv = decodeHex(encoded.slice(0, IV_LENGTH)); - const dataArray = decodeBase64(encoded.slice(IV_LENGTH)); - const params = { - name: ALGORITHM, - iv - }; - if (additionalData) params.additionalData = encoder$1.encode(additionalData); - const decryptedBuffer = await crypto.subtle.decrypt(params, key, dataArray); - return decoder$1.decode(decryptedBuffer); -} -async function generateCspDigest(data, algorithm) { - const hashBuffer = await crypto.subtle.digest(algorithm, encoder$1.encode(data)); - const hash = encodeBase64(new Uint8Array(hashBuffer)); - return `${ALGORITHMS[algorithm]}${hash}`; -} -var ASTRO_GENERATOR = `Astro v7.2.10`; -var ASTRO_ERROR_HEADER = "X-Astro-Error"; -var DEFAULT_404_COMPONENT = "astro-default-404.astro"; -var REDIRECT_STATUS_CODES = [ - 301, - 302, - 303, - 307, - 308, - 300, - 304 -]; -var REROUTABLE_STATUS_CODES = [404, 500]; -var clientAddressSymbol = /* @__PURE__ */ Symbol.for("astro.clientAddress"); -var originPathnameSymbol = /* @__PURE__ */ Symbol.for("astro.originPathname"); -var fetchStateSymbol = /* @__PURE__ */ Symbol.for("astro.fetchState"); -var responseSentSymbol = /* @__PURE__ */ Symbol.for("astro.responseSent"); -//#endregion -//#region node_modules/astro/dist/runtime/server/astro-global.js -function createError(name) { - return new AstroError({ - ...UnavailableAstroGlobal, - message: UnavailableAstroGlobal.message(name) - }); -} -function createAstro(site) { - return { - get site() { - console.warn(`Astro.site inside getStaticPaths is deprecated and will be removed in a future major version of Astro. Use import.meta.env.SITE instead`); - return site ? new URL(site) : void 0; - }, - get generator() { - console.warn(`Astro.generator inside getStaticPaths is deprecated and will be removed in a future major version of Astro.`); - return ASTRO_GENERATOR; - }, - get callAction() { - throw createError("callAction"); - }, - get clientAddress() { - throw createError("clientAddress"); - }, - get cookies() { - throw createError("cookies"); - }, - get csp() { - throw createError("csp"); - }, - get currentLocale() { - throw createError("currentLocale"); - }, - get getActionResult() { - throw createError("getActionResult"); - }, - get isPrerendered() { - throw createError("isPrerendered"); - }, - get locals() { - throw createError("locals"); - }, - get originPathname() { - throw createError("originPathname"); - }, - get params() { - throw createError("params"); - }, - get preferredLocale() { - throw createError("preferredLocale"); - }, - get preferredLocaleList() { - throw createError("preferredLocaleList"); - }, - get props() { - throw createError("props"); - }, - get redirect() { - throw createError("redirect"); - }, - get request() { - throw createError("request"); - }, - get response() { - throw createError("response"); - }, - get rewrite() { - throw createError("rewrite"); - }, - get routePattern() { - throw createError("routePattern"); - }, - get self() { - throw createError("self"); - }, - get slots() { - throw createError("slots"); - }, - get url() { - throw createError("url"); - }, - get session() { - throw createError("session"); - }, - get cache() { - throw createError("cache"); - }, - get logger() { - throw createError("logger"); - } - }; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/endpoint.js -async function renderEndpoint(mod, context, isPrerendered, logger, state) { - const { request, url } = context; - const method = request.method.toUpperCase(); - let handler = mod[method] ?? mod["ALL"]; - if (!handler && method === "HEAD" && mod["GET"]) handler = mod["GET"]; - if (isPrerendered && !["GET", "HEAD"].includes(method)) logger.warn("router", `${url.pathname} ${colors.bold(method)} requests are not available in static endpoints. Mark this page as server-rendered (\`export const prerender = false;\`) or update your config to \`output: 'server'\` to make all your pages server-rendered by default.`); - if (handler === void 0) { - logger.warn("router", `No API Route handler exists for the method "${method}" for the route "${url.pathname}". -Found handlers: ${Object.keys(mod).map((exp) => JSON.stringify(exp)).join(", ")} -` + ("all" in mod ? `One of the exported handlers is "all" (lowercase), did you mean to export 'ALL'? -` : "")); - return new Response(null, { status: 404 }); - } - if (typeof handler !== "function") { - logger.error("router", `The route "${url.pathname}" exports a value for the method "${method}", but it is of the type ${typeof handler} instead of a function.`); - return new Response(null, { status: 500 }); - } - let response = await handler.call(mod, context); - if (!response || response instanceof Response === false) throw new AstroError(EndpointDidNotReturnAResponse); - if (state && REROUTABLE_STATUS_CODES.includes(response.status)) state.skipErrorReroute = true; - if (method === "HEAD") return new Response(null, response); - return response; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/util.js -function isPromise(value) { - return !!value && typeof value === "object" && "then" in value && typeof value.then === "function"; -} -async function* streamAsyncIterator(stream) { - const reader = stream.getReader(); - try { - while (true) { - const { done, value } = await reader.read(); - if (done) return; - yield value; - } - } finally { - reader.releaseLock(); - } -} -//#endregion -//#region node_modules/astro/dist/runtime/server/escape.js -var escapeHTML = escape; -function stringifyForScript(value) { - return JSON.stringify(value)?.replace(/ { - if (isHTMLString(value)) return value; - if (typeof value === "string") return new HTMLString(value); - return value; -}; -function isHTMLString(value) { - return !!value?.[htmlStringSymbol]; -} -function markHTMLBytes(bytes) { - return new HTMLBytes(bytes); -} -function hasGetReader(obj) { - return typeof obj.getReader === "function"; -} -async function* unescapeChunksAsync(iterable) { - if (hasGetReader(iterable)) for await (const chunk of streamAsyncIterator(iterable)) yield unescapeHTML(chunk); - else for await (const chunk of iterable) yield unescapeHTML(chunk); -} -function* unescapeChunks(iterable) { - for (const chunk of iterable) yield unescapeHTML(chunk); -} -function unescapeHTML(str) { - if (!!str && typeof str === "object") { - if (str instanceof Uint8Array) return markHTMLBytes(str); - else if (str instanceof Response && str.body) { - const body = str.body; - return unescapeChunksAsync(body); - } else if (typeof str.then === "function") return Promise.resolve(str).then((value) => { - return unescapeHTML(value); - }); - else if (str[/* @__PURE__ */ Symbol.for("astro:slot-string")]) return str; - else if (Symbol.iterator in str) return unescapeChunks(str); - else if (Symbol.asyncIterator in str || hasGetReader(str)) return unescapeChunksAsync(str); - } - return markHTMLString(str); -} -//#endregion -//#region node_modules/astro/dist/core/head-propagation/resolver.js -function isPropagatingHint(hint) { - return hint === "self" || hint === "in-tree"; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/render/astro/factory.js -function isAstroComponentFactory(obj) { - return obj == null ? false : obj.isAstroComponentFactory === true; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/serialize.js -var PROP_TYPE = { - Value: 0, - JSON: 1, - RegExp: 2, - Date: 3, - Map: 4, - Set: 5, - BigInt: 6, - URL: 7, - Uint8Array: 8, - Uint16Array: 9, - Uint32Array: 10, - Infinity: 11 -}; -function serializeArray(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) { - if (parents.has(value)) throw new Error(`Cyclic reference detected while serializing props for <${metadata.displayName} client:${metadata.hydrate}>! - -Cyclic references cannot be safely serialized for client-side usage. Please remove the cyclic reference.`); - parents.add(value); - const serialized = value.map((v) => { - return convertToSerializedForm(v, metadata, parents); - }); - parents.delete(value); - return serialized; -} -function serializeObject(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) { - if (parents.has(value)) throw new Error(`Cyclic reference detected while serializing props for <${metadata.displayName} client:${metadata.hydrate}>! - -Cyclic references cannot be safely serialized for client-side usage. Please remove the cyclic reference.`); - parents.add(value); - const serialized = Object.fromEntries(Object.entries(value).map(([k, v]) => { - return [k, convertToSerializedForm(v, metadata, parents)]; - })); - parents.delete(value); - return serialized; -} -function convertToSerializedForm(value, metadata = {}, parents = /* @__PURE__ */ new WeakSet()) { - switch (Object.prototype.toString.call(value)) { - case "[object Date]": return [PROP_TYPE.Date, value.toISOString()]; - case "[object RegExp]": return [PROP_TYPE.RegExp, value.source]; - case "[object Map]": return [PROP_TYPE.Map, serializeArray(Array.from(value), metadata, parents)]; - case "[object Set]": return [PROP_TYPE.Set, serializeArray(Array.from(value), metadata, parents)]; - case "[object BigInt]": return [PROP_TYPE.BigInt, value.toString()]; - case "[object URL]": return [PROP_TYPE.URL, value.toString()]; - case "[object Array]": return [PROP_TYPE.JSON, serializeArray(value, metadata, parents)]; - case "[object Uint8Array]": return [PROP_TYPE.Uint8Array, Array.from(value)]; - case "[object Uint16Array]": return [PROP_TYPE.Uint16Array, Array.from(value)]; - case "[object Uint32Array]": return [PROP_TYPE.Uint32Array, Array.from(value)]; - default: - if (value !== null && typeof value === "object") return [PROP_TYPE.Value, serializeObject(value, metadata, parents)]; - if (value === Number.POSITIVE_INFINITY) return [PROP_TYPE.Infinity, 1]; - if (value === Number.NEGATIVE_INFINITY) return [PROP_TYPE.Infinity, -1]; - if (value === void 0) return [PROP_TYPE.Value]; - return [PROP_TYPE.Value, value]; - } -} -function serializeProps(props, metadata) { - return JSON.stringify(serializeObject(props, metadata)); -} -//#endregion -//#region node_modules/astro/dist/runtime/server/hydration.js -var transitionDirectivesToCopyOnIsland = Object.freeze([ - "data-astro-transition-scope", - "data-astro-transition-persist", - "data-astro-transition-persist-props" -]); -function extractDirectives(inputProps, clientDirectives) { - let extracted = { - isPage: false, - hydration: null, - props: {}, - propsWithoutTransitionAttributes: {} - }; - for (const [key, value] of Object.entries(inputProps)) { - if (key.startsWith("server:")) { - if (key === "server:root") extracted.isPage = true; - } - if (key.startsWith("client:")) { - if (!extracted.hydration) extracted.hydration = { - directive: "", - value: "", - componentUrl: "", - componentExport: { value: "" } - }; - switch (key) { - case "client:component-path": - extracted.hydration.componentUrl = value; - break; - case "client:component-export": - extracted.hydration.componentExport.value = value; - break; - case "client:component-hydration": break; - case "client:display-name": break; - default: - extracted.hydration.directive = key.split(":")[1]; - extracted.hydration.value = value; - if (!clientDirectives.has(extracted.hydration.directive)) { - const hydrationMethods = Array.from(clientDirectives.keys()).map((d) => `client:${d}`).join(", "); - throw new Error(`Error: invalid hydration directive "${key}". Supported hydration methods: ${hydrationMethods}`); - } - if (extracted.hydration.directive === "media" && typeof extracted.hydration.value !== "string") throw new AstroError(MissingMediaQueryDirective); - } - } else { - extracted.props[key] = value; - if (!transitionDirectivesToCopyOnIsland.includes(key)) extracted.propsWithoutTransitionAttributes[key] = value; - } - } - for (const sym of Object.getOwnPropertySymbols(inputProps)) { - extracted.props[sym] = inputProps[sym]; - extracted.propsWithoutTransitionAttributes[sym] = inputProps[sym]; - } - return extracted; -} -async function generateHydrateScript(scriptOptions, metadata) { - const { renderer, result, astroId, props, attrs } = scriptOptions; - const { hydrate, componentUrl, componentExport } = metadata; - if (!componentExport.value) throw new AstroError({ - ...NoMatchingImport, - message: NoMatchingImport.message(metadata.displayName) - }); - const island = { - children: "", - props: { uid: astroId } - }; - if (attrs) for (const [key, value] of Object.entries(attrs)) island.props[key] = escapeHTML(value); - island.props["component-url"] = await result.resolve(decodeURI(componentUrl)); - if (renderer.clientEntrypoint) { - island.props["component-export"] = componentExport.value; - island.props["renderer-url"] = await result.resolve(decodeURI(renderer.clientEntrypoint.toString())); - island.props["props"] = escapeHTML(serializeProps(props, metadata)); - } - island.props["ssr"] = ""; - island.props["client"] = hydrate; - let beforeHydrationUrl = await result.resolve("astro:scripts/before-hydration.js"); - if (beforeHydrationUrl.length) island.props["before-hydration-url"] = beforeHydrationUrl; - island.props["opts"] = escapeHTML(JSON.stringify({ - name: metadata.displayName, - value: metadata.hydrateArgs || "" - })); - transitionDirectivesToCopyOnIsland.forEach((name) => { - if (typeof props[name] !== "undefined") island.props[name] = escapeHTML(String(props[name])); - }); - return island; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/shorthash.js -/** -* shortdash - https://github.com/bibig/node-shorthash -* -* @license -* -* (The MIT License) -* -* Copyright (c) 2013 Bibig -* -* Permission is hereby granted, free of charge, to any person -* obtaining a copy of this software and associated documentation -* files (the "Software"), to deal in the Software without -* restriction, including without limitation the rights to use, -* copy, modify, merge, publish, distribute, sublicense, and/or sell -* copies of the Software, and to permit persons to whom the -* Software is furnished to do so, subject to the following -* conditions: -* -* The above copyright notice and this permission notice shall be -* included in all copies or substantial portions of the Software. -* -* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -* OTHER DEALINGS IN THE SOFTWARE. -*/ -var dictionary = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY"; -var binary = 61; -function bitwise(str) { - let hash = 0; - if (str.length === 0) return hash; - for (let i = 0; i < str.length; i++) { - const ch = str.charCodeAt(i); - hash = (hash << 5) - hash + ch; - hash = hash & hash; - } - return hash; -} -function shorthash(text) { - let num; - let result = ""; - let integer = bitwise(text); - const sign = integer < 0 ? "Z" : ""; - integer = Math.abs(integer); - while (integer >= binary) { - num = integer % binary; - integer = Math.floor(integer / binary); - result = dictionary[num] + result; - } - if (integer > 0) result = dictionary[integer] + result; - return sign + result; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/render/astro/head-and-content.js -var headAndContentSym = /* @__PURE__ */ Symbol.for("astro.headAndContent"); -function isHeadAndContent(obj) { - return typeof obj === "object" && obj !== null && !!obj[headAndContentSym]; -} -function createThinHead() { - return { [headAndContentSym]: true }; -} -//#endregion -//#region node_modules/astro/dist/runtime/server/astro-island.prebuilt.js -var astro_island_prebuilt_default = `(()=>{var g=Object.defineProperty;var w=(a,s,c)=>s in a?g(a,s,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[s]=c;var l=(a,s,c)=>w(a,typeof s!="symbol"?s+"":s,c);var E=new Set(["__proto__","constructor","prototype"]);{let a={0:t=>y(t),1:t=>c(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(c(t)),5:t=>new Set(c(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in a?a[p](e):void 0},c=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),n={},d=this.querySelectorAll("template[data-astro-template]");for(let o of d){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of r){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n[o.getAttribute("name")||"default"]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let i=this.getAttribute("component-url")||"",v=this.getAttribute("component-export");throw v&&(i+=\` (export \${v})\`),console.error(\`[hydrate] Error parsing props for component \${i}\`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let r=new URL(e,document.baseURI);return r.searchParams.set("astro-retry",Date.now().toString()),r.toString()}async importWithRetry(e){try{return await import(e)}catch(r){return await new Promise(n=>setTimeout(n,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let r=this.getAttribute("component-url"),n=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:r}});this.dispatchEvent(n)&&console.error(\`[astro-island] Error hydrating \${r}\`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro[r]===void 0){window.addEventListener(\`astro:\${r}\`,()=>this.start(),{once:!0});return}try{await Astro[r](async()=>{let n=this.getAttribute("renderer-url");try{let[d,{default:u}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),n?this.importWithRetry(n):Promise.resolve({default:()=>()=>{}})]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=d;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(\`Invalid component export path: \${h}\`);this.Component=this.Component[m]}}else{if(E.has(h))throw new Error(\`Invalid component export path: \${h}\`);this.Component=d[h]}return this.hydrator=u,this.hydrate}catch(d){return this.handleHydrationError(d),()=>{}}},e,this)}catch(n){this.handleHydrationError(n)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();`; -//#endregion -//#region node_modules/astro/dist/runtime/server/astro-island.prebuilt-dev.js -var astro_island_prebuilt_dev_default = `(()=>{var g=Object.defineProperty;var w=(c,s,d)=>s in c?g(c,s,{enumerable:!0,configurable:!0,writable:!0,value:d}):c[s]=d;var l=(c,s,d)=>w(c,typeof s!="symbol"?s+"":s,d);var E=new Set(["__proto__","constructor","prototype"]);{let c={0:t=>y(t),1:t=>d(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(d(t)),5:t=>new Set(d(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in c?c[p](e):void 0},d=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let o of h){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(n[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of r){let a=o.closest(this.tagName);a!=null&&a.isSameNode(this)&&(n[o.getAttribute("name")||"default"]=o.innerHTML)}let m;try{m=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let a=this.getAttribute("component-url")||"",v=this.getAttribute("component-export");throw v&&(a+=\` (export \${v})\`),console.error(\`[hydrate] Error parsing props for component \${a}\`,this.getAttribute("props"),o),o}let i,u=this.hydrator(this);i=performance.now(),await u(this.Component,m,n,{client:this.getAttribute("client")}),i&&this.setAttribute("client-render-time",(performance.now()-i).toString()),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let r=new URL(e,document.baseURI);return r.searchParams.set("astro-retry",Date.now().toString()),r.toString()}async importWithRetry(e){try{return await import(e)}catch(r){return await new Promise(n=>setTimeout(n,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let r=this.getAttribute("component-url"),n=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:r}});this.dispatchEvent(n)&&console.error(\`[astro-island] Error hydrating \${r}\`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro[r]===void 0){window.addEventListener(\`astro:\${r}\`,()=>this.start(),{once:!0});return}try{await Astro[r](async()=>{let n=this.getAttribute("renderer-url");try{let[h,{default:m}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),n?this.importWithRetry(n):Promise.resolve({default:()=>()=>{}})]),i=this.getAttribute("component-export")||"default";if(i.includes(".")){this.Component=h;for(let u of i.split(".")){if(E.has(u)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,u))throw new Error(\`Invalid component export path: \${i}\`);this.Component=this.Component[u]}}else{if(E.has(i))throw new Error(\`Invalid component export path: \${i}\`);this.Component=h[i]}return this.hydrator=m,this.hydrate}catch(h){return this.handleHydrationError(h),()=>{}}},e,this)}catch(n){this.handleHydrationError(n)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();`; -//#endregion -//#region node_modules/astro/dist/runtime/server/astro-island-styles.js -var ISLAND_STYLES = "astro-island,astro-slot,astro-static-slot{display:contents}"; -//#endregion -//#region node_modules/astro/dist/runtime/server/scripts.js -function determineIfNeedsHydrationScript(result) { - if (result._metadata.templateDepth > 0) return !result._metadata.hasHydrationScript; - if (result._metadata.hasHydrationScript) return false; - return result._metadata.hasHydrationScript = true; -} -function determinesIfNeedsDirectiveScript(result, directive) { - if (result._metadata.templateDepth > 0) return !result._metadata.hasDirectives.has(directive); - if (result._metadata.hasDirectives.has(directive)) return false; - result._metadata.hasDirectives.add(directive); - return true; -} -function getDirectiveScriptText(result, directive) { - const clientDirective = result.clientDirectives.get(directive); - if (!clientDirective) throw new Error(`Unknown directive: ${directive}`); - return clientDirective; -} -function getPrescripts(result, type, directive) { - switch (type) { - case "both": return `
gabeefranco
Switch language: Português

404

Page not found

There’s nothing here. Let’s get you back home.

Back to home

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/_astro/BaseLayout.z2Ysa6px.css b/.vercel/output/static/_astro/BaseLayout.z2Ysa6px.css deleted file mode 100644 index 77f9840..0000000 --- a/.vercel/output/static/_astro/BaseLayout.z2Ysa6px.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-content:""}}}@layer theme{:root,:host{--color-amber-50:oklch(98.7% .022 95.277);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-800:oklch(47.3% .137 46.201);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-700:oklch(37.4% .01 67.558);--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-xl:.75rem;--drop-shadow-sm:0 1px 2px #00000026;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Inter", ui-sans-serif, system-ui, sans-serif;--default-mono-font-family:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--color-bg:var(--bg);--color-text:var(--text);--color-primary:var(--primary)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:0}.z-40{z-index:40}.mx-10{margin-inline:calc(var(--spacing) * 10)}.mx-auto{margin-inline:auto}.my-6{margin-block:calc(var(--spacing) * 6)}.my-10{margin-block:calc(var(--spacing) * 10)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-10{margin-left:calc(var(--spacing) * 10)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-4{height:calc(var(--spacing) * 4)}.min-h-screen{min-height:100vh}.w-40{width:calc(var(--spacing) * 40)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-fit{max-width:fit-content}.max-w-none{max-width:none}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:0}.flex-1{flex:1}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-amber-300\/50{border-color:#ffd23680}@supports (color:color-mix(in lab, red, red)){.border-amber-300\/50{border-color:color-mix(in oklab, var(--color-amber-300) 50%, transparent)}}.border-border,.border-border\/80{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/80{border-color:color-mix(in oklab, var(--border) 80%, transparent)}}.bg-amber-50{background-color:var(--color-amber-50)}.bg-bg,.bg-bg\/85{background-color:var(--bg)}@supports (color:color-mix(in lab, red, red)){.bg-bg\/85{background-color:color-mix(in oklab, var(--bg) 85%, transparent)}}.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.bg-text\/5{background-color:var(--text)}@supports (color:color-mix(in lab, red, red)){.bg-text\/5{background-color:color-mix(in oklab, var(--text) 5%, transparent)}}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}.font-sans{font-family:Inter,ui-sans-serif,system-ui,sans-serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[15px\]{font-size:15px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.text-accent{color:var(--accent)}.text-amber-600{color:var(--color-amber-600)}.text-amber-800{color:var(--color-amber-800)}.text-primary{color:var(--primary)}.text-stone-700{color:var(--color-stone-700)}.text-text{color:var(--text)}.text-text-muted{color:var(--text-muted)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--drop-shadow-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.prose-neutral{--tw-prose-body:oklch(37.1% 0 none);--tw-prose-headings:oklch(20.5% 0 none);--tw-prose-lead:oklch(43.9% 0 none);--tw-prose-links:oklch(20.5% 0 none);--tw-prose-bold:oklch(20.5% 0 none);--tw-prose-counters:oklch(55.6% 0 none);--tw-prose-bullets:oklch(87% 0 none);--tw-prose-hr:oklch(92.2% 0 none);--tw-prose-quotes:oklch(20.5% 0 none);--tw-prose-quote-borders:oklch(92.2% 0 none);--tw-prose-captions:oklch(55.6% 0 none);--tw-prose-kbd:oklch(20.5% 0 none);--tw-prose-kbd-shadows:oklab(20.5% 0 0/.1);--tw-prose-code:oklch(20.5% 0 none);--tw-prose-pre-code:oklch(92.2% 0 none);--tw-prose-pre-bg:oklch(26.9% 0 none);--tw-prose-th-borders:oklch(87% 0 none);--tw-prose-td-borders:oklch(92.2% 0 none);--tw-prose-invert-body:oklch(87% 0 none);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.8% 0 none);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.8% 0 none);--tw-prose-invert-bullets:oklch(43.9% 0 none);--tw-prose-invert-hr:oklch(37.1% 0 none);--tw-prose-invert-quotes:oklch(97% 0 none);--tw-prose-invert-quote-borders:oklch(37.1% 0 none);--tw-prose-invert-captions:oklch(70.8% 0 none);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87% 0 none);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(43.9% 0 none);--tw-prose-invert-td-borders:oklch(37.1% 0 none)}@media (hover:hover){.group-hover\:text-primary:is(:where(.group):hover *){color:var(--primary)}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}}.selection\:bg-primary ::selection,.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-white ::selection,.selection\:text-white::selection{color:var(--color-white)}.first\:pt-0:first-child{padding-top:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:cursor-pointer:hover{cursor:pointer}.hover\:text-accent:hover{color:var(--accent)}.hover\:text-accent-deep:hover{color:var(--accent-deep)}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-primary-hover:hover{color:var(--primary-hover)}.hover\:text-text:hover{color:var(--text)}.hover\:underline:hover{text-decoration-line:underline}}@media (width>=40rem){.sm\:ml-2{margin-left:calc(var(--spacing) * 2)}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:w-52{width:calc(var(--spacing) * 52)}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:pt-20{padding-top:calc(var(--spacing) * 20)}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:border-amber-400\/25:where(.dark,.dark *){border-color:#fcbb0040}@supports (color:color-mix(in lab, red, red)){.dark\:border-amber-400\/25:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-amber-400) 25%, transparent)}}.dark\:bg-amber-400\/10:where(.dark,.dark *){background-color:#fcbb001a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-400\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-400) 10%, transparent)}}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-stone-200:where(.dark,.dark *){color:var(--color-stone-200)}.dark\:prose-invert:where(.dark,.dark *){--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-kbd:var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows:var(--tw-prose-invert-kbd-shadows);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.prose-headings\:font-semibold :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose-headings\:tracking-tight :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose-a\:text-primary :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--primary)}.prose-a\:no-underline :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}@media (hover:hover){.hover\:prose-a\:underline:hover :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:underline}}.prose-code\:before\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-code\:after\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:var(--tw-content);--tw-content:none;content:none}.prose-img\:rounded-xl :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:var(--radius-xl)}.\[\&_a\]\:text-primary a{color:var(--primary)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_p\+p\]\:mt-2 p+p{margin-top:calc(var(--spacing) * 2)}}:root{--bg:#fbf9f6;--surface:#fff;--surface-alt:#f3ede3;--border:#e7dfd0;--text:#201a14;--text-muted:#6b5f52;--primary:#e8590c;--primary-hover:#c2410c;--accent:#c77d00;--accent-deep:#7a1204}.dark{--bg:#15110d;--surface:#1d1712;--surface-alt:#241c15;--border:#392c20;--text:#f3ece2;--text-muted:#b6a996;--primary:#ff7a3d;--primary-hover:#ff9a63;--accent:#ffc24c;--accent-deep:#ff8a63}html{color-scheme:light}html.dark{color-scheme:dark}body{background-color:var(--color-bg);color:var(--color-text)}::selection{background-color:var(--color-primary);color:#fff}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""} diff --git a/.vercel/output/static/_astro/client.B3v6l__6.js b/.vercel/output/static/_astro/client.B3v6l__6.js deleted file mode 100644 index c635fef..0000000 --- a/.vercel/output/static/_astro/client.B3v6l__6.js +++ /dev/null @@ -1,9 +0,0 @@ -var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),t=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var ee=Array.isArray;function te(){}var S={H:null,A:null,T:null,S:null},ne=Object.prototype.hasOwnProperty;function re(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ie(e,t){return re(e.type,t,e.props)}function C(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function ae(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var oe=/\/+/g;function se(e,t){return typeof e==`object`&&e&&e.key!=null?ae(``+e.key):t.toString(36)}function ce(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(te,te):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function le(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,le(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+se(e,0):a,ee(o)?(i=``,c!=null&&(i=c.replace(oe,`$&/`)+`/`),le(o,r,i,``,function(e){return e})):o!=null&&(C(o)&&(o=ie(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(oe,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(ee(e))for(var u=0;u{n.exports=t()})),r=e((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,ee||(ee=!0,C());else{var t=n(l);t!==null&&se(x,t.startTime-e)}}}var ee=!1,te=-1,S=5,ne=-1;function re(){return g?!0:!(e.unstable_now()-net&&re());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&se(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?C():ee=!1}}}var C;if(typeof y==`function`)C=function(){y(ie)};else if(typeof MessageChannel<`u`){var ae=new MessageChannel,oe=ae.port2;ae.port1.onmessage=ie,C=function(){oe.postMessage(null)}}else C=function(){_(ie,0)};function se(t,n){te=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(te),te=-1):h=!0,se(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,ee||(ee=!0,C()))),r},e.unstable_shouldYield=re,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),i=e(((e,t)=>{t.exports=r()})),a=e((e=>{var t=n();function r(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=a()})),s=e((e=>{var t=i(),r=n(),a=o();function s(e){var t=`https://react.dev/errors/`+e;if(1me||(e.current=pe[me],pe[me]=null,me--)}function D(e,t){me++,pe[me]=e.current,e.current=t}var ge=he(null),_e=he(null),ve=he(null),ye=he(null);function be(e,t){switch(D(ve,t),D(_e,e),D(ge,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}E(ge),D(ge,e)}function xe(){E(ge),E(_e),E(ve)}function Se(e){e.memoizedState!==null&&D(ye,e);var t=ge.current,n=Hd(t,e.type);t!==n&&(D(_e,e),D(ge,n))}function Ce(e){_e.current===e&&(E(ge),E(_e)),ye.current===e&&(E(ye),Qf._currentValue=fe)}var we,Te;function Ee(e){if(we===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);we=t&&t[1]||``,Te=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{De=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ee(n):``}function ke(e,t){switch(e.tag){case 26:case 27:case 5:return Ee(e.type);case 16:return Ee(`Lazy`);case 13:return e.child!==t&&t!==null?Ee(`Suspense Fallback`):Ee(`Suspense`);case 19:return Ee(`SuspenseList`);case 0:case 15:return Oe(e.type,!1);case 11:return Oe(e.type.render,!1);case 1:return Oe(e.type,!0);case 31:return Ee(`Activity`);default:return``}}function Ae(e){try{var t=``,n=null;do t+=ke(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var je=Object.prototype.hasOwnProperty,Me=t.unstable_scheduleCallback,Ne=t.unstable_cancelCallback,Pe=t.unstable_shouldYield,Fe=t.unstable_requestPaint,Ie=t.unstable_now,Le=t.unstable_getCurrentPriorityLevel,Re=t.unstable_ImmediatePriority,ze=t.unstable_UserBlockingPriority,Be=t.unstable_NormalPriority,Ve=t.unstable_LowPriority,He=t.unstable_IdlePriority,Ue=t.log,We=t.unstable_setDisableYieldValue,Ge=null,Ke=null;function qe(e){if(typeof Ue==`function`&&We(e),Ke&&typeof Ke.setStrictMode==`function`)try{Ke.setStrictMode(Ge,e)}catch{}}var Je=Math.clz32?Math.clz32:Ze,Ye=Math.log,Xe=Math.LN2;function Ze(e){return e>>>=0,e===0?32:31-(Ye(e)/Xe|0)|0}var Qe=256,$e=262144,et=4194304;function tt(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function nt(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=tt(n))):i=tt(o):i=tt(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=tt(n))):i=tt(o)):i=tt(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function rt(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function it(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function at(){var e=et;return et<<=1,!(et&62914560)&&(et=4194304),e}function ot(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function st(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function ct(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),bn=!1;if(yn)try{var xn={};Object.defineProperty(xn,"passive",{get:function(){bn=!0}}),window.addEventListener(`test`,xn,xn),window.removeEventListener(`test`,xn,xn)}catch{bn=!1}var Sn=null,Cn=null,wn=null;function Tn(){if(wn)return wn;var e,t=Cn,n=t.length,r,i=`value`in Sn?Sn.value:Sn.textContent,a=i.length;for(e=0;e=rr),or=` `,sr=!1;function cr(e,t){switch(e){case`keyup`:return tr.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function lr(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var ur=!1;function dr(e,t){switch(e){case`compositionend`:return lr(t);case`keypress`:return t.which===32?(sr=!0,or):null;case`textInput`:return e=t.data,e===or&&sr?null:e;default:return null}}function fr(e,t){if(ur)return e===`compositionend`||!nr&&cr(e,t)?(e=Tn(),wn=Cn=Sn=null,ur=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Pr(n)}}function Ir(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Ir(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Lr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Kt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Kt(e.document)}return t}function Rr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var zr=yn&&`documentMode`in document&&11>=document.documentMode,Br=null,Vr=null,Hr=null,Ur=!1;function Wr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ur||Br==null||Br!==Kt(r)||(r=Br,`selectionStart`in r&&Rr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Hr&&Nr(Hr,r)||(Hr=r,r=Ed(Vr,`onSelect`),0>=o,i-=o,Ii=1<<32-Je(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),o=a(_,o,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),A&&Ri(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(i,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(i,h),o=a(y,o,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(i,h),A&&Ri(i,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(i,v.value,l),v!==null&&(o=a(v,o,g),d===null?u=v:d.sibling=v,d=v);return A&&Ri(i,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,i,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),o=a(v,o,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(i,e)}),A&&Ri(i,g),u}function b(e,r,a,c){if(typeof a==`object`&&a&&a.type===y&&a.key===null&&(a=a.props.children),typeof a==`object`&&a){switch(a.$$typeof){case _:a:{for(var l=a.key;r!==null;){if(r.key===l){if(l=a.type,l===y){if(r.tag===7){n(e,r.sibling),c=i(r,a.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===C&&Fa(l)===r.type){n(e,r.sibling),c=i(r,a.props),Ha(c,a),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}a.type===y?(c=Ci(a.props.children,e.mode,c,a.key),c.return=e,e=c):(c=Si(a.type,a.key,a.props,null,e.mode,c),Ha(c,a),c.return=e,e=c)}return o(e);case v:a:{for(l=a.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),c=i(r,a.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=Ei(a,e.mode,c),c.return=e,e=c}return o(e);case C:return a=Fa(a),b(e,r,a,c)}if(de(a))return h(e,r,a,c);if(ce(a)){if(l=ce(a),typeof l!=`function`)throw Error(s(150));return a=l.call(a),g(e,r,a,c)}if(typeof a.then==`function`)return b(e,r,Va(a),c);if(a.$$typeof===te)return b(e,r,ua(e,a),c);Ua(e,a)}return typeof a==`string`&&a!==``||typeof a==`number`||typeof a==`bigint`?(a=``+a,r!==null&&r.tag===6?(n(e,r.sibling),c=i(r,a),c.return=e,e=c):(n(e,r),c=wi(a,e.mode,c),c.return=e,e=c),o(e)):n(e,r)}return function(e,t,n,r){try{Ba=0;var i=b(e,t,n,r);return za=null,i}catch(t){if(t===ka||t===ja)throw t;var a=vi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ga=Wa(!0),Ka=Wa(!1),qa=!1;function Ja(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ya(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Xa(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Za(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,W&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=hi(e),mi(e,null,n),t}return di(e,r,t,n),hi(e)}function Qa(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ut(e,n)}}function $a(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var eo=!1;function to(){if(eo){var e=ba;if(e!==null)throw e}}function no(e,t,n,r){eo=!1;var i=e.updateQueue;qa=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(q&f)===f:(r&f)===f){f!==0&&f===ya&&(eo=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:qa=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Kl|=o,e.lanes=o,e.memoizedState=d}}function ro(e,t){if(typeof e!=`function`)throw Error(s(191,e));e.call(t)}function io(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=w.T,s={};w.T=s,zs(e,!1,t,n);try{var c=i(),l=w.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Rs(e,t,Ca(c,r),pu(e)):Rs(e,t,r,pu(e))}catch(n){Rs(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{T.p=a,o!==null&&s.types!==null&&(o.types=s.types),w.T=o}}function Os(){}function ks(e,t,n,r){if(e.tag!==5)throw Error(s(476));var i=As(e).queue;Ds(e,i,t,fe,n===null?Os:function(){return js(e),n(r)})}function As(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:fe,baseState:fe,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Bo,lastRenderedState:fe},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Bo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function js(e){var t=As(e);t.next===null&&(t=e.alternate.memoizedState),Rs(e,t.next.queue,{},pu())}function Ms(){return j(Qf)}function Ns(){return R().memoizedState}function Ps(){return R().memoizedState}function Fs(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Xa(n);var r=Za(t,e,n);r!==null&&(hu(r,t,n),Qa(r,t,n)),t={cache:ha()},e.payload=t;return}t=t.return}}function Is(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Bs(e)?Vs(t,n):(n=fi(e,t,n,r),n!==null&&(hu(n,e,r),Hs(n,t,r)))}function Ls(e,t,n){Rs(e,t,n,pu())}function Rs(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Bs(e))Vs(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Mr(s,o))return di(e,t,i,0),G===null&&ui(),!1}catch{}if(n=fi(e,t,i,r),n!==null)return hu(n,e,r),Hs(n,t,r),!0}return!1}function zs(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Bs(e)){if(t)throw Error(s(479))}else t=fi(e,n,r,2),t!==null&&hu(t,e,2)}function Bs(e){var t=e.alternate;return e===P||t!==null&&t===P}function Vs(e,t){xo=bo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Hs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ut(e,n)}}var Us={readContext:j,use:Ro,useCallback:L,useContext:L,useEffect:L,useImperativeHandle:L,useLayoutEffect:L,useInsertionEffect:L,useMemo:L,useReducer:L,useRef:L,useState:L,useDebugValue:L,useDeferredValue:L,useTransition:L,useSyncExternalStore:L,useId:L,useHostTransitionStatus:L,useFormState:L,useActionState:L,useOptimistic:L,useMemoCache:L,useCacheRefresh:L};Us.useEffectEvent=L;var Ws={readContext:j,use:Ro,useCallback:function(e,t){return Fo().memoizedState=[e,t===void 0?null:t],e},useContext:j,useEffect:ms,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),fs(4194308,4,bs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return fs(4194308,4,e,t)},useInsertionEffect:function(e,t){fs(4,2,e,t)},useMemo:function(e,t){var n=Fo();t=t===void 0?null:t;var r=e();if(So){qe(!0);try{e()}finally{qe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Fo();if(n!==void 0){var i=n(t);if(So){qe(!0);try{n(t)}finally{qe(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Is.bind(null,P,e),[r.memoizedState,e]},useRef:function(e){var t=Fo();return e={current:e},t.memoizedState=e},useState:function(e){e=Xo(e);var t=e.queue,n=Ls.bind(null,P,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:Ss,useDeferredValue:function(e,t){return Ts(Fo(),e,t)},useTransition:function(){var e=Xo(!1);return e=Ds.bind(null,P,e.queue,!0,!1),Fo().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=P,i=Fo();if(A){if(n===void 0)throw Error(s(407));n=n()}else{if(n=t(),G===null)throw Error(s(349));q&127||Go(r,t,n)}i.memoizedState=n;var a={value:n,getSnapshot:t};return i.queue=a,ms(qo.bind(null,r,a,e),[e]),r.flags|=2048,us(9,{destroy:void 0},Ko.bind(null,r,a,n,t),null),n},useId:function(){var e=Fo(),t=G.identifierPrefix;if(A){var n=Li,r=Ii;n=(r&~(1<<32-Je(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=Co++,0<\/script>`,a=a.removeChild(a.firstChild);break;case`select`:a=typeof r.is==`string`?o.createElement(`select`,{is:r.is}):o.createElement(`select`),r.multiple?a.multiple=!0:r.size&&(a.size=r.size);break;default:a=typeof r.is==`string`?o.createElement(i,{is:r.is}):o.createElement(i)}}a[_t]=t,a[vt]=r;a:for(o=t.child;o!==null;){if(o.tag===5||o.tag===6)a.appendChild(o.stateNode);else if(o.tag!==4&&o.tag!==27&&o.child!==null){o.child.return=o,o=o.child;continue}if(o===t)break a;for(;o.sibling===null;){if(o.return===null||o.return===t)break a;o=o.return}o.sibling.return=o.return,o=o.sibling}t.stateNode=a;a:switch(Pd(a,i,r),i){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Lc(t)}}return B(t),Rc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Lc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(s(166));if(e=ve.current,Xi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,i=Ui,i!==null)switch(i.tag){case 27:case 5:r=i.memoizedProps}e[_t]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||qi(t,!0)}else e=Bd(e).createTextNode(r),e[_t]=t,t.stateNode=e}return B(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Xi(t),n!==null){if(e===null){if(!r)throw Error(s(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(s(557));e[_t]=t}else Zi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;B(t),e=!1}else n=Qi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(_o(t),t):(_o(t),null);if(t.flags&128)throw Error(s(558))}return B(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(i=Xi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!i)throw Error(s(318));if(i=t.memoizedState,i=i===null?null:i.dehydrated,!i)throw Error(s(317));i[_t]=t}else Zi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;B(t),i=!1}else i=Qi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=i),i=!0;if(!i)return t.flags&256?(_o(t),t):(_o(t),null)}return _o(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,i=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(i=r.alternate.memoizedState.cachePool.pool),a=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(a=r.memoizedState.cachePool.pool),a!==i&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Bc(t,t.updateQueue),B(t),null);case 4:return xe(),e===null&&Sd(t.stateNode.containerInfo),B(t),null;case 10:return ia(t.type),B(t),null;case 19:if(E(N),r=t.memoizedState,r===null)return B(t),null;if(i=!!(t.flags&128),a=r.rendering,a===null){if(i)Vc(r,!1);else{if(Y!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(a=vo(e),a!==null){for(t.flags|=128,Vc(r,!1),e=a.updateQueue,t.updateQueue=e,Bc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)xi(n,e),n=n.sibling;return D(N,N.current&1|2),A&&Ri(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ie()>nu&&(t.flags|=128,i=!0,Vc(r,!1),t.lanes=4194304)}}else{if(!i){if(e=vo(a),e!==null){if(t.flags|=128,i=!0,e=e.updateQueue,t.updateQueue=e,Bc(t,e),Vc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!a.alternate&&!A)return B(t),null}else 2*Ie()-r.renderingStartTime>nu&&n!==536870912&&(t.flags|=128,i=!0,Vc(r,!1),t.lanes=4194304)}r.isBackwards?(a.sibling=t.child,t.child=a):(e=r.last,e===null?t.child=a:e.sibling=a,r.last=a)}return r.tail===null?(B(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ie(),e.sibling=null,n=N.current,D(N,i?n&1|2:n&1),A&&Ri(t,r.treeForkCount),e);case 22:case 23:return _o(t),lo(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(B(t),t.subtreeFlags&6&&(t.flags|=8192)):B(t),n=t.updateQueue,n!==null&&Bc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&E(Ta),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ia(M),B(t),null;case 25:return null;case 30:return null}throw Error(s(156,t.tag))}function Uc(e,t){switch(Vi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ia(M),xe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return Ce(t),null;case 31:if(t.memoizedState!==null){if(_o(t),t.alternate===null)throw Error(s(340));Zi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(_o(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(s(340));Zi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return E(N),null;case 4:return xe(),null;case 10:return ia(t.type),null;case 22:case 23:return _o(t),lo(),e!==null&&E(Ta),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ia(M),null;case 25:return null;default:return null}}function Wc(e,t){switch(Vi(t),t.tag){case 3:ia(M),xe();break;case 26:case 27:case 5:Ce(t);break;case 4:xe();break;case 31:t.memoizedState!==null&&_o(t);break;case 13:_o(t);break;case 19:E(N);break;case 10:ia(t.type);break;case 22:case 23:_o(t),lo(),e!==null&&E(Ta);break;case 24:ia(M)}}function Gc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Kc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function qc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{io(t,n)}catch(t){Z(e,e.return,t)}}}function Jc(e,t,n){n.props=Zs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function Yc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function Xc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}}function Zc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Qc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[vt]=t}catch(t){Z(e,e.return,t)}}function $c(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function el(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||$c(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function tl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=un));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(tl(e,t,n),e=e.sibling;e!==null;)tl(e,t,n),e=e.sibling}function nl(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(nl(e,t,n),e=e.sibling;e!==null;)nl(e,t,n),e=e.sibling}function rl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[_t]=e,t[vt]=n}catch(t){Z(e,e.return,t)}}var il=!1,V=!1,al=!1,ol=typeof WeakSet==`function`?WeakSet:Set,H=null;function sl(e,t){if(e=e.containerInfo,Rd=sp,e=Lr(e),Rr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var i=r.anchorOffset,a=r.focusNode;r=r.focusOffset;try{n.nodeType,a.nodeType}catch{n=null;break a}var o=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||i!==0&&f.nodeType!==3||(c=o+i),f!==a||r!==0&&f.nodeType!==3||(l=o+r),f.nodeType===3&&(o+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===i&&(c=o),p===a&&++d===r&&(l=o),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,H=t;H!==null;)if(t=H,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,H=e;else for(;H!==null;){switch(t=H,a=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(a,r,n),a[_t]=e,O(a),r=a;break a;case`link`:var o=Vf(`link`,`href`,i).get(r+(n.href||``));if(o){for(var c=0;cg&&(o=g,g=h,h=o);var _=Fr(s,h),v=Fr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,w.T=null,n=lu,lu=null;var a=au,o=su;if(X=0,ou=au=null,su=0,W&6)throw Error(s(331));var c=W;if(W|=4,Il(a.current),Ol(a,a.current,o,n),W=c,id(0,!1),Ke&&typeof Ke.onPostCommitFiberRoot==`function`)try{Ke.onPostCommitFiberRoot(Ge,a)}catch{}return!0}finally{T.p=i,w.T=r,Vu(e,t)}}function Wu(e,t,n){t=Oi(n,t),t=rc(e.stateNode,t,2),e=Za(e,t,2),e!==null&&(st(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(iu===null||!iu.has(r))){e=Oi(n,e),n=ic(2),r=Za(t,n,2),r!==null&&(ac(n,r,t,e),st(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Wl=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,G===e&&(q&n)===n&&(Y===4||Y===3&&(q&62914560)===q&&300>Ie()-eu?!(W&2)&&Su(e,0):Jl|=n,Xl===q&&(Xl=0)),rd(e)}function qu(e,t){t===0&&(t=at()),e=pi(e,t),e!==null&&(st(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,i=e.memoizedState;i!==null&&(n=i.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(s(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return Me(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Je(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=q,a=nt(r,r===G?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||rt(r,a)||(n=!0,ld(r,a))}r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Ie(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}X!==0&&X!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Jt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),O(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Jt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Jt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Jt(n.imageSizes)+`"]`)):i+=`[href="`+Jt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),O(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Jt(r)+`"][href="`+Jt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=h({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),O(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=kt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);O(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=kt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=h({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),O(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=kt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),O(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var i=(i=ve.current)?gf(i):null;if(!i)throw Error(s(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=kt(i).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var a=kt(i).hoistableStyles,o=a.get(e);if(o||(i=i.ownerDocument||i,o={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},a.set(e,o),(a=i.querySelector(jf(e)))&&!a._p&&(o.instance=a,o.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),a||Nf(i,e,n,o.state))),t&&r===null)throw Error(s(528,``));return o}if(t&&r!==null)throw Error(s(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=kt(i).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(s(444,e))}}function Af(e){return`href="`+Jt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),O(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Jt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Jt(n.href)+`"]`);if(r)return t.instance=r,O(r),r;var i=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),O(r),Pd(r,`style`,i),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:i=Af(n.href);var a=e.querySelector(jf(i));if(a)return t.state.loading|=4,t.instance=a,O(a),a;r=Mf(n),(i=mf.get(i))&&Rf(r,i),a=(e.ownerDocument||e).createElement(`link`),O(a);var o=a;return o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),t.state.loading|=4,Lf(a,n.precedence,e),t.instance=a;case`script`:return a=Pf(n.src),(i=e.querySelector(Ff(a)))?(t.instance=i,O(i),i):(r=n,(i=mf.get(a))&&(r=h({},n),zf(r,i)),e=e.ownerDocument||e,i=e.createElement(`script`),O(i),Pd(i,`link`,r),e.head.appendChild(i),t.instance=i);case`void`:return null;default:throw Error(s(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,O(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),O(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=s()}))(),l=n(),u=(0,l.memo)(({value:e,name:t,hydrate:n=!0})=>e==null||e.trim()===``?null:(0,l.createElement)(n?`astro-slot`:`astro-static-slot`,{name:t,suppressHydrationWarning:!0,dangerouslySetInnerHTML:{__html:e}}),()=>!0);function d(e){for(let t in e)if(t.startsWith(`__reactContainer`))return t}var f={class:`className`,for:`htmlFor`},p=0;function m(e,t,n){t===void 0&&(p+=1,t=p,n=0);let r={};for(let t of e.attributes){let e=f[t.name]||t.name;r[e]=t.value}if(r.key=`${t}-${n}`,e.firstChild===null)return(0,l.createElement)(e.localName,r);let i=0;return(0,l.createElement)(e.localName,r,Array.from(e.childNodes).map(e=>{if(e.nodeType===Node.TEXT_NODE)return e.data;if(e.nodeType===Node.ELEMENT_NODE)return i+=1,m(e,t,i)}).filter(e=>!!e))}function h(e,t){if(t&&e){let t=[],n=document.createElement(`template`);n.innerHTML=e;for(let e of n.content.children)t.push(m(e));return t}if(e)return(0,l.createElement)(u,{value:e})}var g=new WeakMap,_=(e,t)=>{let n=g.get(e);return n||(n=t(),g.set(e,n)),n},v=e=>(t,n,{default:r,...i},{client:a})=>{if(!e.hasAttribute(`ssr`))return;let o=e.getAttribute(`data-action-key`),s=e.getAttribute(`data-action-name`),f=e.getAttribute(`data-action-result`),p=o&&s&&f?[JSON.parse(f),o,s]:void 0,m={identifierPrefix:e.getAttribute(`prefix`),formState:p};for(let[e,t]of Object.entries(i))n[e]=(0,l.createElement)(u,{value:t,name:e});let g=(0,l.createElement)(t,n,h(r,e.hasAttribute(`data-react-children`))),v=d(e);if(v&&delete e[v],a===`only`)return(0,l.startTransition)(()=>{_(e,()=>{let t=(0,c.createRoot)(e);return e.addEventListener(`astro:unmount`,()=>t.unmount(),{once:!0}),t}).render(g)});(0,l.startTransition)(()=>{_(e,()=>{let t=(0,c.hydrateRoot)(e,g,m);return e.addEventListener(`astro:unmount`,()=>t.unmount(),{once:!0}),t}).render(g)})};export{v as default}; \ No newline at end of file diff --git a/.vercel/output/static/about/index.html b/.vercel/output/static/about/index.html deleted file mode 100644 index 9390175..0000000 --- a/.vercel/output/static/about/index.html +++ /dev/null @@ -1,15 +0,0 @@ -About — gabeefranco
gabeefranco
Switch language: Português

About

Hi, I'm Gabe — Gabriel Franco. I'm a computer science student at PUCRS (Pontifícia Universidade Católica do Rio Grande do Sul), and this blog is where I write down the things I'm learning and thinking about along the way.

I care a lot about computer science as a field, not just as a set of tools to ship products with. I have a fairly specific way of doing things: I'd rather understand a system properly than memorize the steps to make it work, and I tend to slow down on purpose to figure out what's actually happening under the hood — in a compiler, an operating system, a language runtime, whatever it is. That habit shapes most of what ends up on this blog.

I'm also genuinely interested in the history of the open source movement: the people, the arguments, and the decisions that shaped the software we all rely on. Figures like Linus Torvalds and projects like GNU come up often in what I read and write about, not as trivia, but because understanding where a tool came from usually explains a lot about how and why it works the way it does today.

This site is bilingual, in English and in Portuguese, and every post exists in both languages. Thanks for stopping by.

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/apple-touch-icon.png b/.vercel/output/static/apple-touch-icon.png deleted file mode 100644 index bf0be33..0000000 Binary files a/.vercel/output/static/apple-touch-icon.png and /dev/null differ diff --git a/.vercel/output/static/favicon.ico b/.vercel/output/static/favicon.ico deleted file mode 100644 index 49bf411..0000000 Binary files a/.vercel/output/static/favicon.ico and /dev/null differ diff --git a/.vercel/output/static/favicon.svg b/.vercel/output/static/favicon.svg deleted file mode 100644 index c870eb2..0000000 --- a/.vercel/output/static/favicon.svg +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.vercel/output/static/index.html b/.vercel/output/static/index.html deleted file mode 100644 index d265345..0000000 --- a/.vercel/output/static/index.html +++ /dev/null @@ -1,15 +0,0 @@ -gabeefranco — Gabriel Franco's notes
gabeefranco
Switch language: Português

Building things, and figuring out how they work.

Notes on computer science, systems, and the open source projects that shaped how I think about software. I'm Gabriel Franco — welcome.

Recent posts

The latest things I’ve written down.

View all posts →

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/logo.png b/.vercel/output/static/logo.png deleted file mode 100644 index eccace2..0000000 Binary files a/.vercel/output/static/logo.png and /dev/null differ diff --git a/.vercel/output/static/posts/hello-world/index.html b/.vercel/output/static/posts/hello-world/index.html deleted file mode 100644 index f377a7b..0000000 --- a/.vercel/output/static/posts/hello-world/index.html +++ /dev/null @@ -1,19 +0,0 @@ -This blog's Hello World (or whatever you want to call this site) — gabeefranco
gabeefranco
Switch language: Português
Back to posts
2 min read

This blog's Hello World (or whatever you want to call this site)

A short note on why this exists and what I plan to write about here.

I’ve always had a creative side, as anyone who knows me can tell you. Sometimes it gets tucked away somewhere obscure, in the back of a drawer, waiting years to be used. And sometimes I make really good use of it. -I’ve always loved writing, and I’ve wanted a place of my own to publish my thoughts for a long time. Only the ones I’d want to be public, of course. Nobody wants to hand over the entire inner workings of their brain just like that, for free. Still, I think some of my intellectual adventures deserve a bit of exposure, especially since, without someone to judge them, I’ll never know if they were worth it.

-

One of my inspirations for creating a site/blog was Fábio Akita. I’ve been following him for a long time, and it was through the videos on his YouTube channel that I started studying computer science, before I even got into college. Even though the videos are genuinely great, teaching things that are hard to learn any other way, after a while of binge-watching them I found his blog, akitaonrails.com. I thought it was super cool, and I liked the idea of having a personal place to share your opinions and the things you’ve learned.

-

Akita is a seasoned guy who’s been in the industry for years. Me? Just a student slightly ahead of the material in my CS program. To people my age, this whole writing thing, having a blog, sounds like something old people do. But, like I said in my last post, I like the idea of doing things the old-fashioned way every now and then. The word “Blog” sounds so 2010, but I don’t know what else I’d call this crappy site you’re reading. I guess “blog” it is. Good thing I’ve been practicing caring less about what other people think, and look at that: it’s working!

-

Anyway, call it whatever you want, I think it’s worth posting something here every now and then. Even if nobody’s interested, whatever! Then let it just be my public folder of notes. Just the fact that I opened the drawer and pulled my creativity out from the back of it already makes it all worth it.

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/posts/index.html b/.vercel/output/static/posts/index.html deleted file mode 100644 index 26430a9..0000000 --- a/.vercel/output/static/posts/index.html +++ /dev/null @@ -1,15 +0,0 @@ -All posts — gabeefranco
gabeefranco
Switch language: Português

All posts

Everything I’ve written, oldest to newest below, newest on top.

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/posts/spotify-complaining/index.html b/.vercel/output/static/posts/spotify-complaining/index.html deleted file mode 100644 index 0646f46..0000000 --- a/.vercel/output/static/posts/spotify-complaining/index.html +++ /dev/null @@ -1,28 +0,0 @@ -Spotify's Time Capsule Change and the Enshittification of Software — gabeefranco
gabeefranco
Switch language: Português
Back to posts
3 min read

Spotify's Time Capsule Change and the Enshittification of Software

Spotify just removed one of its best features. Beyond a bit of complaining, I want to open a debate about what software is turning into.

There I was, the other day, listening to music on Spotify. I usually listen to other things, but at that moment my queue was full of American pop, one of my momentary hyperfixations. So I decided to open the time capsule in the app to find out exactly how many hours I’d spent listening to Justin Bieber and Taylor Swift. That’s when I saw something had changed after the app’s latest update: the “Time Capsule” section had been replaced by a new feature called “Music Stats.”

-

What it used to be

-

The Time Capsule was amazing. You could see the songs you’d listened to most that month, the artists who’d been with you the most, and a few fun facts, like “you listened to The Fate of Ophelia 5 times on such-and-such day.” It was really good, and one of the best parts was posting a card Spotify gave you to Instagram at the end of every month, showing off that info.

-

It was perfect. Not too bloated, not too minimal either. You could even look back through a history of every previous month.

-

What it became

-

Instead of being broken down by month, the section is now broken down by week. Sounds like a small detail, but it just ruins the whole experience. Not only can I no longer see previous months, it also makes for a terrible Instagram recap. But there’s something worse: they also threw in a USELESS feature to invite friends into a group so everyone can see what everyone else is listening to. Nothing but bloat.

-

Why are they doing this?

-

Honestly, this kind of update seems to be a trend across platforms and SaaS products in general. They cram in a feature absolutely nobody asked for, and users just end up adapting. It seems to come from some need to make everything feel cooler, more practical, more intuitive. But it ends up having the opposite effect. Some things should just embrace minimalism. It’s better for everyone, you know?

-

Alternatives?

-

For a while now I’ve been following a kind of “de-modernization” movement, a return to the roots. There seem to be people out there willing to drop all these trends and go back to a time when everything felt better. What about actually owning your music instead of renting it, using platforms like Tidal or Qobuz, for example? Going back to organizing MP3s into folders, scraping album covers yourself… it does sound interesting, I won’t lie. It’s something I’m considering doing.

-

Piracy is also an option. For a long time, people downloaded their music from shady sites. I won’t get too much into it, but anyone who lived through that era must remember how much better things were. Unfortunately, I’m too young to have had experiences like that.

-

Anyway…

-

They could have just left it as it was, or added this new update as a separate section. That way we’d at least have had the option to say no. But what can you do, right? I think it’s fair to be disappointed with the direction we’re heading in, and to look for a different stance to take.

-

Do whatever you want!

I’m just giving my opinion, you’re under no obligation to agree.

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/pt/about/index.html b/.vercel/output/static/pt/about/index.html deleted file mode 100644 index b61a8d6..0000000 --- a/.vercel/output/static/pt/about/index.html +++ /dev/null @@ -1,15 +0,0 @@ -Sobre — gabeefranco
gabeefranco
Mudar idioma: English

Sobre

Olá, eu sou o Gabe — Gabriel Franco. Sou estudante de ciência da computação na PUCRS (Pontifícia Universidade Católica do Rio Grande do Sul), e este blog é onde registro as coisas que vou aprendendo e pensando pelo caminho.

Eu me importo bastante com ciência da computação como área, não só como um conjunto de ferramentas para lançar produtos. Tenho um jeito bem específico de fazer as coisas: prefiro entender um sistema de verdade a decorar os passos para fazê-lo funcionar, e costumo desacelerar de propósito para descobrir o que realmente está acontecendo por baixo dos panos — em um compilador, em um sistema operacional, no runtime de uma linguagem, seja lá o que for. Esse hábito molda a maior parte do que acaba virando post aqui.

Também tenho um interesse genuíno pela história do movimento open source: as pessoas, os debates e as decisões que moldaram o software do qual todos dependemos. Figuras como Linus Torvalds e projetos como o GNU aparecem com frequência no que leio e escrevo, não como curiosidade, mas porque entender de onde uma ferramenta veio costuma explicar bastante sobre como e por que ela funciona do jeito que funciona hoje.

Este site é bilíngue, em inglês e em português, e todo post existe nos dois idiomas. Obrigado pela visita.

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/index.html b/.vercel/output/static/pt/index.html deleted file mode 100644 index 2c27ba7..0000000 --- a/.vercel/output/static/pt/index.html +++ /dev/null @@ -1,15 +0,0 @@ -gabeefranco — Anotações do Gabriel Franco
gabeefranco
Mudar idioma: English

Construindo coisas e entendendo como elas funcionam.

Notas sobre ciência da computação, sistemas e os projetos open source que moldaram a forma como penso sobre software. Eu sou o Gabriel Franco — seja bem-vindo.

Posts recentes

As últimas coisas que escrevi.

Ver todos os posts →

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/posts/hello-world/index.html b/.vercel/output/static/pt/posts/hello-world/index.html deleted file mode 100644 index e940be7..0000000 --- a/.vercel/output/static/pt/posts/hello-world/index.html +++ /dev/null @@ -1,19 +0,0 @@ -O Hello World desse blog (ou seja lá como você queira chamar esse site) — gabeefranco
gabeefranco
Mudar idioma: English
Voltar para os posts
2 min de leitura

O Hello World desse blog (ou seja lá como você queira chamar esse site)

Uma nota curta sobre por que isso existe e sobre o que pretendo escrever aqui.

Eu sempre tive um lado criativo, quem me conhece sabe. Às vezes ele fica guardado em algum lugar obscuro, no fundo da gaveta, esperando anos pra ser utilizado. E às vezes eu me aproveito dele muito bem. -Sempre gostei muito de escrever, e faz tempo que queria ter um lugar só meu pra publicar meus pensamentos. Mas só aqueles que eu gostaria que fossem públicos, claro. Ninguém quer entregar todo o funcionamento interno do seu cérebro assim, de graça. Ainda assim, acho que algumas das minhas aventuras intelectuais merecem um pouco de exposição, até porque, sem alguém pra julgar, nunca saberei se valeram a pena.

-

Uma das minhas inspirações pra criar um site/blog foi o Fábio Akita. Eu acompanho ele há muito tempo, e foi por meio dos vídeos do canal do YouTube dele que eu comecei a estudar sobre computação, antes de entrar na faculdade. Apesar dos vídeos serem realmente muito bons, fornecendo aprendizados difíceis de obter de outra forma, depois de um tempo maratonando os vídeos eu descobri o blog dele, akitaonrails.com. Eu achei muito massa, e gostei da ideia de se ter um lugar pessoal onde se expõem opiniões e aprendizados.

-

O Akita é um cara com experiência, que vive há anos na indústria. Eu, um mero estudante levemente adiantado no conteúdo da faculdade de computação. Esse negócio de escrever, ter um blog, parece coisa de gente velha pras pessoas da minha geração. Mas, como falei no último post, eu gosto da ideia de fazer coisas à moda antiga de vez em quando. O termo “Blog” soa muito 2010, mas não sei que outro nome daria a esta porcaria deste site que você está lendo. Acho que vai ser “blog” mesmo. Bem que eu tenho treinado pra ligar menos pra opinião dos outros, e olha só: tá funcionando!

-

Enfim, chame como você quiser, eu acho que vale a pena publicar algo de vez em quando por aqui. Mesmo que ninguém esteja interessado, tanto faz! Que seja apenas a minha pasta pública de notas, então. Só de eu ter aberto a gaveta e tirado de lá do fundo a minha criatividade, considero que já valeu a pena.

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/posts/index.html b/.vercel/output/static/pt/posts/index.html deleted file mode 100644 index 82d850e..0000000 --- a/.vercel/output/static/pt/posts/index.html +++ /dev/null @@ -1,15 +0,0 @@ -Todos os posts — gabeefranco
gabeefranco
Mudar idioma: English

Todos os posts

Tudo que já escrevi, do mais recente para o mais antigo.

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/posts/spotify-complaining/index.html b/.vercel/output/static/pt/posts/spotify-complaining/index.html deleted file mode 100644 index 7267def..0000000 --- a/.vercel/output/static/pt/posts/spotify-complaining/index.html +++ /dev/null @@ -1,28 +0,0 @@ -A mudança na cápsula do tempo do Spotify e a bostificação do software — gabeefranco
gabeefranco
Mudar idioma: English
Voltar para os posts
3 min de leitura

A mudança na cápsula do tempo do Spotify e a bostificação do software

Spotify simplesmente removeu uma das suas melhores funcionalidades. Além de reclamar um pouco, quero abrir um debate sobre o que os softwares estão se tornando.

Estava eu, esses dias, ouvindo música no Spotify. Normalmente escuto outras coisas, mas naquele momento só tinha música pop estadunidense na fila, um dos meus hiperfocos momentâneos. Então, decidi abrir a cápsula do tempo no aplicativo para saber de verdade quantas horas eu tinha passado escutando Justin Bieber e Taylor Swift. Foi aí que eu vi algo tinha mudado depois da última atualização do app: a seção “cápsula do tempo” foi trocada por uma nova funcionalidade chamada “estatísticas musicais”.

-

O que era

-

A cápsula do tempo era incrível. Dava pra ver as músicas que eu mas tinha escutado no mês, os artistas que mais estiveram junto comigo, e algumas curiosidades, tipo “você escutou The Fate of Ophelia 5 vezes dia tal”. Era muito bom, e uma das melhores coisas era publicar no Instagram, todo final do mês, um card disponibilizado pelo Spotify mostrando essas informações.

-

Era perfeito. Nem muito bloat, nem minimalista demais. Até dava pra ver um histórico de como foram todos os meses anteriores.

-

O que virou

-

Ao invés de ser dividida por mês, agora essa seção é por semana. Parece um detalhe bobo, mas simplesmente estraga toda a experiência. Além de eu não conseguir mais ver os meses anteriores, fica péssimo de postar como retrospectiva no Instagram. Mas tem algo pior: ainda adicionaram uma função INÚTIL de convidar amigos pra um grupo e cada um ver o que o outro está escutando. Nada mais do que bloat.

-

Por que estão fazendo isso?

-

Na verdade esse tipo de atualização parece ser uma tendência no mundo das plataformas e e dos SaaS. Enfiam uma feature que absolutamente ninguém queria goela abaixo, e os usuários acabam se adaptando. Parece uma necessidade de deixar tudo mais cool, mais prático, mais intuitivo. Mas acaba tendo o resultado contrário. Algumas coisas têm que simplesmente abraçar o minimalismo. É melhor pra todos, sabe?

-

Alternativas?

-

Há algum tempo eu venho acompanhando um movimento de “desmodernização”, de volta às origens. Parece que existem pessoas dispostas a parar com todas essas trends e voltar aos tempos onde tudo parecia ser melhor. Que tal ter controle de verdade sobre suas músicas, ao invés de alugá-las, usando plataformas como Tidal ou Qobuz, por exemplo? Voltar a organizar os MP3s em pastas, fazer scraping das capas dos álbuns… parece ser interessante, não vou negar. É algo que estou considerando fazer.

-

Existe pirataria também. Por muito tempo as pessoas fizeram download das suas músicas de sites obscuros. Não vou falar muito sobre, mas quem viveu essa época deve lembrar do quão melhor as coisas eram. Infelizmente sou novo demais pra ter tido experiências como essas.

-

Enfim…

-

Podiam ter simplesmente deixado como estava, ou ter colocado essa nova atualização como uma seção separada. Assim pelo menos poderíamos ter a opção de dizer não. Mas, fazer o que, né? Acho que é justo estar desapontado com o rumo que estamos tomando, e procurar assumir outra postura.

-

Faça o que você quiser!

Só estou dando minha opinião, você não tem obrigação nenhuma de concordar.

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/tags/blogging/index.html b/.vercel/output/static/pt/tags/blogging/index.html deleted file mode 100644 index 3a6c25f..0000000 --- a/.vercel/output/static/pt/tags/blogging/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#blogging — gabeefranco
gabeefranco
Mudar idioma: English

Posts com a tag

#blogging

Limpar filtro

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/tags/life/index.html b/.vercel/output/static/pt/tags/life/index.html deleted file mode 100644 index e33a278..0000000 --- a/.vercel/output/static/pt/tags/life/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#life — gabeefranco
gabeefranco
Mudar idioma: English

Posts com a tag

#life

Limpar filtro

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/tags/meta/index.html b/.vercel/output/static/pt/tags/meta/index.html deleted file mode 100644 index 673268b..0000000 --- a/.vercel/output/static/pt/tags/meta/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#meta — gabeefranco
gabeefranco
Mudar idioma: English

Posts com a tag

#meta

Limpar filtro

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/pt/tags/software/index.html b/.vercel/output/static/pt/tags/software/index.html deleted file mode 100644 index c068d28..0000000 --- a/.vercel/output/static/pt/tags/software/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#software — gabeefranco
gabeefranco
Mudar idioma: English

Posts com a tag

#software

Limpar filtro

© 2026 gabeefranco · Todos os direitos reservados.

GitHubCódigo-fonte
\ No newline at end of file diff --git a/.vercel/output/static/social-cards/en/hello-world.png b/.vercel/output/static/social-cards/en/hello-world.png deleted file mode 100644 index 07a14e5..0000000 Binary files a/.vercel/output/static/social-cards/en/hello-world.png and /dev/null differ diff --git a/.vercel/output/static/social-cards/en/spotify-complaining.png b/.vercel/output/static/social-cards/en/spotify-complaining.png deleted file mode 100644 index c183b91..0000000 Binary files a/.vercel/output/static/social-cards/en/spotify-complaining.png and /dev/null differ diff --git a/.vercel/output/static/social-cards/pt/hello-world.png b/.vercel/output/static/social-cards/pt/hello-world.png deleted file mode 100644 index a7f38c3..0000000 Binary files a/.vercel/output/static/social-cards/pt/hello-world.png and /dev/null differ diff --git a/.vercel/output/static/social-cards/pt/spotify-complaining.png b/.vercel/output/static/social-cards/pt/spotify-complaining.png deleted file mode 100644 index 97c011f..0000000 Binary files a/.vercel/output/static/social-cards/pt/spotify-complaining.png and /dev/null differ diff --git a/.vercel/output/static/tags/blogging/index.html b/.vercel/output/static/tags/blogging/index.html deleted file mode 100644 index e8c7716..0000000 --- a/.vercel/output/static/tags/blogging/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#blogging — gabeefranco
gabeefranco
Switch language: Português

Posts tagged

#blogging

Clear filter

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/tags/life/index.html b/.vercel/output/static/tags/life/index.html deleted file mode 100644 index 31df316..0000000 --- a/.vercel/output/static/tags/life/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#life — gabeefranco
gabeefranco
Switch language: Português

Posts tagged

#life

Clear filter

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/tags/meta/index.html b/.vercel/output/static/tags/meta/index.html deleted file mode 100644 index f609c1e..0000000 --- a/.vercel/output/static/tags/meta/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#meta — gabeefranco
gabeefranco
Switch language: Português

Posts tagged

#meta

Clear filter

© 2026 gabeefranco · All rights reserved.

GitHubSource
\ No newline at end of file diff --git a/.vercel/output/static/tags/software/index.html b/.vercel/output/static/tags/software/index.html deleted file mode 100644 index 38adf92..0000000 --- a/.vercel/output/static/tags/software/index.html +++ /dev/null @@ -1,15 +0,0 @@ -#software — gabeefranco
gabeefranco
Switch language: Português

Posts tagged

#software

Clear filter
\ No newline at end of file diff --git a/public/social-cards/en/hello-world.png b/public/social-cards/en/hello-world.png index 07a14e5..9d7acb4 100644 Binary files a/public/social-cards/en/hello-world.png and b/public/social-cards/en/hello-world.png differ