diff --git a/.gitignore b/.gitignore
index 6d4c0aa..50c7030 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,5 @@ pnpm-debug.log*
# macOS-specific files
.DS_Store
+
+.contentlayer/
\ No newline at end of file
diff --git a/app/components/ErrorBoundary.tsx b/app/components/ErrorBoundary.tsx
new file mode 100644
index 0000000..17a921c
--- /dev/null
+++ b/app/components/ErrorBoundary.tsx
@@ -0,0 +1,111 @@
+import { isRouteErrorResponse, useRouteError } from "@remix-run/react";
+import { RootLayout } from "./layouts/RootLayout";
+
+export function ErrorBoundary() {
+ const error = useRouteError();
+
+ if (isRouteErrorResponse(error)) {
+ switch (error.status) {
+ case 404:
+ return (
+
+
+
+
Page Not Found
+
+ The page you're looking for doesn't exist. Please check the
+ URL and try again.
+
+
+
+ ← Go back home
+
+
+
+
+
+ );
+ case 401:
+ return (
+
+
+
+
Unauthorized
+
+ You don't have permission to access this page. Please log in
+ and try again.
+
+
+
+ ← Go back home
+
+
+
+
+
+ );
+ default:
+ return (
+
+
+
+
Error
+
+ Something went wrong. Please try again later. If the problem
+ persists, please contact support.
+
+
+
+ ← Go back home
+
+
+ {process.env.NODE_ENV === "development" && (
+
+ {error.data.message || JSON.stringify(error.data, null, 2)}
+
+ )}
+
+
+
+ );
+ }
+ }
+
+ return (
+
+
+
+
Error
+
+ Something went wrong. Please try again later. If the problem
+ persists, please contact support.
+
+
+
+ ← Go back home
+
+
+ {process.env.NODE_ENV === "development" && (
+
+ {error instanceof Error
+ ? error.message
+ : "Unknown error occurred"}
+
+ )}
+
+
+
+ );
+}
diff --git a/app/components/Footer.tsx b/app/components/Footer.tsx
new file mode 100644
index 0000000..3523b98
--- /dev/null
+++ b/app/components/Footer.tsx
@@ -0,0 +1,32 @@
+import { Link } from "@remix-run/react";
+import { SocialLinks } from "./SocialLinks";
+
+const footerLinks = [
+ { name: "Colophon", href: "/colophon" },
+ { name: "Privacy Policy", href: "/privacy-policy" },
+ { name: "Imprint", href: "/imprint" },
+] as const;
+
+export function Footer() {
+ return (
+
+
+
+
+
+ {footerLinks.map((link) => (
+
+
+ {link.name}
+
+
+ ))}
+
+
+
+
+ );
+}
diff --git a/app/components/Header.tsx b/app/components/Header.tsx
new file mode 100644
index 0000000..1cd6d10
--- /dev/null
+++ b/app/components/Header.tsx
@@ -0,0 +1,74 @@
+import { Link, useLocation } from "@remix-run/react";
+import { type ActiveTabType, navigationLinks } from "~/utils/navigation";
+import { SocialLinks } from "./SocialLinks";
+import clsx from "clsx";
+
+interface HeaderProps {
+ activeTab?: ActiveTabType;
+}
+
+export function Header({ activeTab }: HeaderProps) {
+ const location = useLocation();
+
+ return (
+
+
+
+
+
+
+
+
+ {navigationLinks.map((link) => {
+ const isActive = activeTab
+ ? activeTab === link.href
+ : location.pathname === link.href;
+
+ return (
+
+
+
+ /
+
+
+ {link.name}
+
+
+
+ );
+ })}
+
+
+
+ );
+}
diff --git a/app/components/Particles.tsx b/app/components/Particles.tsx
new file mode 100644
index 0000000..5966cc1
--- /dev/null
+++ b/app/components/Particles.tsx
@@ -0,0 +1,85 @@
+import { useCallback } from "react";
+import type { Container, Engine } from "tsparticles-engine";
+import { loadFull } from "tsparticles";
+import Particles from "react-tsparticles";
+
+export function Particles({ className }: { className?: string }) {
+ const particlesInit = useCallback(async (engine: Engine) => {
+ await loadFull(engine);
+ }, []);
+
+ const particlesLoaded = useCallback(
+ async (container: Container | undefined) => {
+ await container?.refresh();
+ },
+ [],
+ );
+
+ return (
+
+ );
+}
diff --git a/app/components/RelatedContent.tsx b/app/components/RelatedContent.tsx
new file mode 100644
index 0000000..118e993
--- /dev/null
+++ b/app/components/RelatedContent.tsx
@@ -0,0 +1,55 @@
+import { Link } from "@remix-run/react";
+
+interface RelatedContentItem {
+ title: string;
+ description: string;
+ slug: string;
+ type: "article" | "book" | "project";
+ tags: string[];
+}
+
+interface RelatedContentProps {
+ items: RelatedContentItem[];
+ title?: string;
+}
+
+export function RelatedContent({
+ items,
+ title = "Related Content",
+}: RelatedContentProps) {
+ if (items.length === 0) return null;
+
+ return (
+
+ );
+}
diff --git a/app/components/SocialIcon.tsx b/app/components/SocialIcon.tsx
new file mode 100644
index 0000000..3fc50c9
--- /dev/null
+++ b/app/components/SocialIcon.tsx
@@ -0,0 +1,69 @@
+import { type SocialType } from "~/data/socials";
+import clsx from "clsx";
+
+interface SocialIconProps {
+ type: SocialType;
+ size: number;
+ className?: string;
+}
+
+export function SocialIcon({ type, size, className }: SocialIconProps) {
+ const iconProps = {
+ className: clsx("lucide", `lucide-${type}`, className),
+ xmlns: "http://www.w3.org/2000/svg",
+ width: size,
+ height: size,
+ viewBox: "0 0 24 24",
+ fill: "none",
+ stroke: "currentColor",
+ strokeWidth: "2",
+ strokeLinecap: "round",
+ strokeLinejoin: "round",
+ };
+
+ switch (type) {
+ case "github":
+ return (
+
+
+
+
+ );
+
+ case "twitter":
+ return (
+
+
+
+ );
+
+ case "linkedin":
+ return (
+
+
+
+
+
+ );
+
+ case "youtube":
+ return (
+
+
+
+
+ );
+
+ case "instagram":
+ return (
+
+
+
+
+
+ );
+
+ default:
+ return null;
+ }
+}
diff --git a/app/components/SocialLinks.tsx b/app/components/SocialLinks.tsx
new file mode 100644
index 0000000..d177570
--- /dev/null
+++ b/app/components/SocialLinks.tsx
@@ -0,0 +1,33 @@
+import { socialLinks } from "~/data/socials";
+import { SocialIcon } from "./SocialIcon";
+import clsx from "clsx";
+
+interface SocialLinksProps {
+ size?: number;
+ className?: string;
+}
+
+export function SocialLinks({ size = 16, className }: SocialLinksProps) {
+ return (
+
+ {socialLinks.map((link) => (
+
+
+
+
+
+ ))}
+
+ );
+}
diff --git a/app/components/Toast.tsx b/app/components/Toast.tsx
new file mode 100644
index 0000000..a6a4906
--- /dev/null
+++ b/app/components/Toast.tsx
@@ -0,0 +1,113 @@
+import { useEffect, useState } from "react";
+
+interface ToastProps {
+ message: string;
+ type?: "success" | "error" | "info";
+ duration?: number;
+ onClose?: () => void;
+}
+
+export function Toast({
+ message,
+ type = "info",
+ duration = 3000,
+ onClose,
+}: ToastProps) {
+ const [isVisible, setIsVisible] = useState(true);
+
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ setIsVisible(false);
+ onClose?.();
+ }, duration);
+
+ return () => clearTimeout(timer);
+ }, [duration, onClose]);
+
+ if (!isVisible) return null;
+
+ const bgColor = {
+ success: "bg-green-500",
+ error: "bg-red-500",
+ info: "bg-blue-500",
+ }[type];
+
+ return (
+
+
+
{message}
+
{
+ setIsVisible(false);
+ onClose?.();
+ }}
+ className="ml-2 rounded-full p-1 hover:bg-white/10"
+ aria-label="Close notification"
+ >
+
+
+
+
+
+
+ );
+}
+
+interface ToastManagerProps {
+ children: React.ReactNode;
+}
+
+interface ToastState {
+ id: number;
+ message: string;
+ type?: "success" | "error" | "info";
+ duration?: number;
+}
+
+export function ToastManager({ children }: ToastManagerProps) {
+ const [toasts, setToasts] = useState([]);
+
+ const addToast = (
+ message: string,
+ type: "success" | "error" | "info" = "info",
+ duration = 3000,
+ ) => {
+ const id = Date.now();
+ setToasts((prev) => [...prev, { id, message, type, duration }]);
+ };
+
+ const removeToast = (id: number) => {
+ setToasts((prev) => prev.filter((toast) => toast.id !== id));
+ };
+
+ return (
+ <>
+ {children}
+
+ {toasts.map((toast) => (
+ removeToast(toast.id)}
+ />
+ ))}
+
+ >
+ );
+}
diff --git a/app/components/embeds/EmbedOverlay.tsx b/app/components/embeds/EmbedOverlay.tsx
new file mode 100644
index 0000000..39a90d6
--- /dev/null
+++ b/app/components/embeds/EmbedOverlay.tsx
@@ -0,0 +1,57 @@
+import { useFetcher } from "@remix-run/react";
+import { type EmbedType } from "~/utils/embed-consent";
+import clsx from "clsx";
+
+interface EmbedOverlayProps {
+ type: EmbedType;
+ title: string;
+ description: string;
+ hasConsent: boolean;
+ children: React.ReactNode;
+}
+
+export function EmbedOverlay({
+ type,
+ title,
+ description,
+ hasConsent,
+ children,
+}: EmbedOverlayProps) {
+ const fetcher = useFetcher();
+ const isLoading = fetcher.state !== "idle";
+
+ if (hasConsent) {
+ return <>{children}>;
+ }
+
+ return (
+
+
+
{title}
+
{description}
+
+
+
+
+
+
+ {isLoading ? "Loading..." : "Load Embed"}
+
+
+
+
+ By clicking "Load Embed", you consent to loading content from{" "}
+ {type} . This setting
+ will be remembered for future embeds.
+
+
+ );
+}
diff --git a/app/components/embeds/InstagramEmbed.tsx b/app/components/embeds/InstagramEmbed.tsx
new file mode 100644
index 0000000..5fc93f4
--- /dev/null
+++ b/app/components/embeds/InstagramEmbed.tsx
@@ -0,0 +1,83 @@
+import { useEffect, useRef } from "react";
+import { EmbedOverlay } from "./EmbedOverlay";
+
+interface InstagramEmbedProps {
+ postId: string;
+ hasConsent: boolean;
+}
+
+declare global {
+ interface Window {
+ instgrm?: {
+ Embeds: {
+ process: () => void;
+ };
+ };
+ }
+}
+
+export function InstagramEmbed({ postId, hasConsent }: InstagramEmbedProps) {
+ const containerRef = useRef(null);
+
+ useEffect(() => {
+ if (!hasConsent) return;
+
+ // Load Instagram embed script if not already loaded
+ if (!window.instgrm) {
+ const script = document.createElement("script");
+ script.src = "//www.instagram.com/embed.js";
+ script.async = true;
+ document.body.appendChild(script);
+ } else {
+ // If script is already loaded, process the embed
+ window.instgrm.Embeds.process();
+ }
+ }, [hasConsent]);
+
+ return (
+
+
+
+ );
+}
diff --git a/app/components/embeds/RedditEmbed.tsx b/app/components/embeds/RedditEmbed.tsx
new file mode 100644
index 0000000..15817d1
--- /dev/null
+++ b/app/components/embeds/RedditEmbed.tsx
@@ -0,0 +1,49 @@
+import { useEffect, useRef } from "react";
+import { EmbedOverlay } from "./EmbedOverlay";
+
+interface RedditEmbedProps {
+ postUrl: string;
+ hasConsent: boolean;
+}
+
+declare global {
+ interface Window {
+ rembeddit?: {
+ init: () => void;
+ };
+ }
+}
+
+export function RedditEmbed({ postUrl, hasConsent }: RedditEmbedProps) {
+ const containerRef = useRef(null);
+
+ useEffect(() => {
+ if (!hasConsent) return;
+
+ // Load Reddit embed script if not already loaded
+ if (!window.rembeddit) {
+ const script = document.createElement("script");
+ script.src = "https://embed.reddit.com/widgets.js";
+ script.async = true;
+ document.body.appendChild(script);
+ } else {
+ // If script is already loaded, initialize the embed
+ window.rembeddit.init();
+ }
+ }, [hasConsent]);
+
+ return (
+
+
+
+ );
+}
diff --git a/app/components/embeds/TwitterEmbed.tsx b/app/components/embeds/TwitterEmbed.tsx
new file mode 100644
index 0000000..240c421
--- /dev/null
+++ b/app/components/embeds/TwitterEmbed.tsx
@@ -0,0 +1,58 @@
+import { useEffect, useRef } from "react";
+import { EmbedOverlay } from "./EmbedOverlay";
+
+interface TwitterEmbedProps {
+ tweetId: string;
+ hasConsent: boolean;
+}
+
+declare global {
+ interface Window {
+ twttr?: {
+ widgets: {
+ load: (element?: HTMLElement) => void;
+ };
+ };
+ }
+}
+
+export function TwitterEmbed({ tweetId, hasConsent }: TwitterEmbedProps) {
+ const containerRef = useRef(null);
+
+ useEffect(() => {
+ if (!hasConsent) return;
+
+ // Load Twitter widget script if not already loaded
+ if (!window.twttr) {
+ const script = document.createElement("script");
+ script.src = "https://platform.twitter.com/widgets.js";
+ script.async = true;
+ document.body.appendChild(script);
+ } else {
+ // If script is already loaded, render the tweet
+ window.twttr.widgets.load(containerRef.current);
+ }
+ }, [hasConsent]);
+
+ return (
+
+
+
+ );
+}
diff --git a/app/components/embeds/YouTubeEmbed.tsx b/app/components/embeds/YouTubeEmbed.tsx
new file mode 100644
index 0000000..26d9838
--- /dev/null
+++ b/app/components/embeds/YouTubeEmbed.tsx
@@ -0,0 +1,32 @@
+import { EmbedOverlay } from "./EmbedOverlay";
+
+interface YouTubeEmbedProps {
+ videoId: string;
+ hasConsent: boolean;
+ title?: string;
+}
+
+export function YouTubeEmbed({
+ videoId,
+ hasConsent,
+ title,
+}: YouTubeEmbedProps) {
+ return (
+
+
+ VIDEO
+
+
+ );
+}
diff --git a/app/components/embeds/index.ts b/app/components/embeds/index.ts
new file mode 100644
index 0000000..55314e4
--- /dev/null
+++ b/app/components/embeds/index.ts
@@ -0,0 +1,4 @@
+export { YouTubeEmbed } from "./YouTubeEmbed";
+export { TwitterEmbed } from "./TwitterEmbed";
+export { InstagramEmbed } from "./InstagramEmbed";
+export { RedditEmbed } from "./RedditEmbed";
diff --git a/app/components/layouts/ArticleLayout.tsx b/app/components/layouts/ArticleLayout.tsx
new file mode 100644
index 0000000..904865f
--- /dev/null
+++ b/app/components/layouts/ArticleLayout.tsx
@@ -0,0 +1,105 @@
+import { Link } from "@remix-run/react";
+import { RootLayout } from "./RootLayout";
+import { type EmbedConsent } from "~/utils/embed-consent";
+import { getMDXComponents } from "../mdx";
+import { useMemo } from "react";
+import { RelatedContent } from "../RelatedContent";
+import { findRelatedContent } from "~/utils/content-relations";
+
+interface ArticleLayoutProps {
+ title: string;
+ description: string;
+ publishedAt: string;
+ updatedAt?: string;
+ author: string;
+ tags: string[];
+ slug: string;
+ content: string;
+ embedConsent: EmbedConsent;
+}
+
+export function ArticleLayout({
+ title,
+ description,
+ publishedAt,
+ updatedAt,
+ author,
+ tags,
+ slug,
+ content,
+ embedConsent,
+}: ArticleLayoutProps) {
+ const components = useMemo(
+ () => getMDXComponents({ embedConsent }),
+ [embedConsent],
+ );
+
+ const relatedContent = findRelatedContent("article", slug, tags);
+
+ return (
+
+
+
+
+ ← Back to articles
+
+
+
+
+
+ {title}
+ {description}
+
+
+ By {author}
+ •
+
+ {new Date(publishedAt).toLocaleDateString("en-US", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ })}
+
+ {updatedAt && (
+ <>
+ •
+
+ Updated{" "}
+ {new Date(updatedAt).toLocaleDateString("en-US", {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ })}
+
+ >
+ )}
+
+ {tags.length > 0 && (
+
+ {tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+ )}
+
+
+
+ {content}
+
+
+
+
+
+ );
+}
diff --git a/app/components/layouts/ArticleListLayout.tsx b/app/components/layouts/ArticleListLayout.tsx
new file mode 100644
index 0000000..17f0b40
--- /dev/null
+++ b/app/components/layouts/ArticleListLayout.tsx
@@ -0,0 +1,66 @@
+import { Link } from "@remix-run/react";
+import { RootLayout } from "./RootLayout";
+
+interface Article {
+ title: string;
+ description: string;
+ slug: string;
+ publishedAt?: string;
+}
+
+interface ArticleListLayoutProps {
+ articles: Article[];
+}
+
+export function ArticleListLayout({ articles }: ArticleListLayoutProps) {
+ return (
+
+
+
+
Articles
+
+ I write about software development, design, and other topics that
+ interest me.
+
+
+
+
+ {articles.map((article) => (
+
+
+
+
+ {article.title}
+
+ {article.publishedAt && (
+
+ {new Date(article.publishedAt).toLocaleDateString(
+ "en-US",
+ {
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ },
+ )}
+
+ )}
+ {article.description}
+
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/app/components/layouts/BaseLayout.tsx b/app/components/layouts/BaseLayout.tsx
new file mode 100644
index 0000000..2a23b3f
--- /dev/null
+++ b/app/components/layouts/BaseLayout.tsx
@@ -0,0 +1,24 @@
+import { type PropsWithChildren } from "react";
+
+interface BaseLayoutProps extends PropsWithChildren {
+ title?: string;
+ description?: string;
+}
+
+export function BaseLayout({ children, title, description }: BaseLayoutProps) {
+ const pageTitle = title ? `${title} | chrcit.com` : "Hi, I'm Christian";
+ const pageDescription = description ?? "I create things for the internet";
+
+ return (
+
+ {/* Plausible Analytics */}
+
+ {children}
+
+ );
+}
diff --git a/app/components/layouts/BookLayout.tsx b/app/components/layouts/BookLayout.tsx
new file mode 100644
index 0000000..0159d8d
--- /dev/null
+++ b/app/components/layouts/BookLayout.tsx
@@ -0,0 +1,126 @@
+import { Link } from "@remix-run/react";
+import { RootLayout } from "./RootLayout";
+import { type EmbedConsent } from "~/utils/embed-consent";
+import { getMDXComponents } from "../mdx";
+import { useMemo } from "react";
+import { RelatedContent } from "../RelatedContent";
+import { findRelatedContent } from "~/utils/content-relations";
+
+interface BookLayoutProps {
+ title: string;
+ description: string;
+ author: string;
+ rating: number;
+ cover: string;
+ year: number;
+ category: string;
+ tags: string[];
+ url: string;
+ slug: string;
+ content: string;
+ embedConsent: EmbedConsent;
+}
+
+export function BookLayout({
+ title,
+ description,
+ author,
+ rating,
+ cover,
+ year,
+ category,
+ tags,
+ url,
+ slug,
+ content,
+ embedConsent,
+}: BookLayoutProps) {
+ const components = useMemo(
+ () => getMDXComponents({ embedConsent }),
+ [embedConsent],
+ );
+
+ const relatedContent = findRelatedContent("book", slug, tags);
+
+ return (
+
+
+
+
+ ← Back to books
+
+
+
+
+
+
+
+
+
+
+
{title}
+
by {author}
+
+
+
+ {Array.from({ length: 5 }).map((_, i) => (
+
+ ★
+
+ ))}
+
+
({rating}/5)
+
+
+
{description}
+
+
+
+ {category}
+
+
+ {year}
+
+ {tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+
+
+ View on Amazon
+
+
+
+
+ {content}
+
+
+
+
+
+ );
+}
diff --git a/app/components/layouts/BookListLayout.tsx b/app/components/layouts/BookListLayout.tsx
new file mode 100644
index 0000000..beca8d9
--- /dev/null
+++ b/app/components/layouts/BookListLayout.tsx
@@ -0,0 +1,93 @@
+import { Link } from "@remix-run/react";
+import { RootLayout } from "./RootLayout";
+
+interface Book {
+ title: string;
+ description: string;
+ slug: string;
+ author: string;
+ rating: number;
+ cover: string;
+ year: number;
+ category: string;
+ tags: string[];
+}
+
+interface BookListLayoutProps {
+ books: Book[];
+}
+
+export function BookListLayout({ books }: BookListLayoutProps) {
+ return (
+
+
+
+
Books
+
+ A collection of books I've read and recommend. I try to read a mix
+ of fiction and non-fiction, with a focus on technology, science, and
+ philosophy.
+
+
+
+
+ {books.map((book) => (
+
+
+
+
+
+
+
+ {book.title}
+
+
by {book.author}
+
+
+ {Array.from({ length: 5 }).map((_, i) => (
+
+ ★
+
+ ))}
+
+
+ ({book.rating}/5)
+
+
+
+
+ {book.category}
+
+
+ {book.year}
+
+
+
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/app/components/layouts/ProjectLayout.tsx b/app/components/layouts/ProjectLayout.tsx
new file mode 100644
index 0000000..a298517
--- /dev/null
+++ b/app/components/layouts/ProjectLayout.tsx
@@ -0,0 +1,84 @@
+import { Link } from "@remix-run/react";
+import { RootLayout } from "./RootLayout";
+import { type EmbedConsent } from "~/utils/embed-consent";
+import { getMDXComponents } from "../mdx";
+import { useMemo } from "react";
+import { RelatedContent } from "../RelatedContent";
+import { findRelatedContent } from "~/utils/content-relations";
+
+interface ProjectLayoutProps {
+ title: string;
+ description: string;
+ tags: string[];
+ image?: string;
+ slug: string;
+ content: string;
+ embedConsent: EmbedConsent;
+}
+
+export function ProjectLayout({
+ title,
+ description,
+ tags,
+ image,
+ slug,
+ content,
+ embedConsent,
+}: ProjectLayoutProps) {
+ const components = useMemo(
+ () => getMDXComponents({ embedConsent }),
+ [embedConsent],
+ );
+
+ const relatedContent = findRelatedContent("project", slug, tags);
+
+ return (
+
+
+
+
+ ← Back to projects
+
+
+
+
+
+ {title}
+ {description}
+ {tags.length > 0 && (
+
+ {tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+ )}
+
+
+ {image && (
+
+
+
+ )}
+
+ {content}
+
+
+
+
+
+ );
+}
diff --git a/app/components/layouts/ProjectListLayout.tsx b/app/components/layouts/ProjectListLayout.tsx
new file mode 100644
index 0000000..0809bef
--- /dev/null
+++ b/app/components/layouts/ProjectListLayout.tsx
@@ -0,0 +1,75 @@
+import { Link } from "@remix-run/react";
+import { RootLayout } from "./RootLayout";
+
+interface Project {
+ title: string;
+ description: string;
+ slug: string;
+ tags: string[];
+ image?: string;
+}
+
+interface ProjectListLayoutProps {
+ projects: Project[];
+}
+
+export function ProjectListLayout({ projects }: ProjectListLayoutProps) {
+ return (
+
+
+
+
Projects
+
+ Here are some of the projects I've worked on. Most of them are open
+ source and available on GitHub.
+
+
+
+
+ {projects.map((project) => (
+
+
+ {project.image && (
+
+
+
+ )}
+
+
+ {project.title}
+
+
{project.description}
+ {project.tags.length > 0 && (
+
+ {project.tags.map((tag) => (
+
+ {tag}
+
+ ))}
+
+ )}
+
+
+
+ ))}
+
+
+
+ );
+}
diff --git a/app/components/layouts/RootLayout.tsx b/app/components/layouts/RootLayout.tsx
new file mode 100644
index 0000000..0359810
--- /dev/null
+++ b/app/components/layouts/RootLayout.tsx
@@ -0,0 +1,79 @@
+import { type PropsWithChildren, useState } from "react";
+import { type ActiveTabType } from "~/utils/navigation";
+import { BaseLayout } from "./BaseLayout";
+import { Header } from "../Header";
+import { Footer } from "../Footer";
+import clsx from "clsx";
+
+interface RootLayoutProps extends PropsWithChildren {
+ title: string;
+ description: string;
+ activeTab: ActiveTabType;
+}
+
+export function RootLayout({
+ children,
+ title,
+ description,
+ activeTab,
+}: RootLayoutProps) {
+ const [isSidebarExpanded, setIsSidebarExpanded] = useState(true);
+
+ return (
+
+
+
+ setIsSidebarExpanded(!isSidebarExpanded)}
+ className="absolute left-3 top-3 hidden rounded-md p-1 text-gray-500 lg:block notouch:hover:bg-slate-200 notouch:hover:text-gray-900"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/app/components/mdx/index.tsx b/app/components/mdx/index.tsx
new file mode 100644
index 0000000..c345f99
--- /dev/null
+++ b/app/components/mdx/index.tsx
@@ -0,0 +1,133 @@
+import { Link } from "@remix-run/react";
+import { useMemo } from "react";
+import { type EmbedConsent } from "~/utils/embed-consent";
+import {
+ YouTubeEmbed,
+ TwitterEmbed,
+ InstagramEmbed,
+ RedditEmbed,
+} from "../embeds";
+
+interface MDXComponentsProps {
+ embedConsent: EmbedConsent;
+}
+
+export function getMDXComponents({ embedConsent }: MDXComponentsProps) {
+ return useMemo(
+ () => ({
+ // Custom link handling
+ a: ({
+ href,
+ children,
+ ...props
+ }: React.AnchorHTMLAttributes) => {
+ const isExternal = href?.startsWith("http");
+ const isAnchor = href?.startsWith("#");
+
+ if (isExternal) {
+ return (
+
+ {children}
+
+ );
+ }
+
+ if (isAnchor) {
+ return (
+
+ {children}
+
+ );
+ }
+
+ return (
+
+ {children}
+
+ );
+ },
+
+ // Headings with anchor links
+ h2: ({ id, children }: React.HTMLAttributes) => (
+
+
+ #
+
+ {children}
+
+ ),
+
+ h3: ({ id, children }: React.HTMLAttributes) => (
+
+
+ #
+
+ {children}
+
+ ),
+
+ // Code blocks
+ pre: ({ children, ...props }: React.HTMLAttributes) => (
+
+ {children}
+
+ ),
+
+ code: ({ children }: React.HTMLAttributes) => (
+
+ {children}
+
+ ),
+
+ // Embeds
+ YouTubeEmbed: ({ id, title }: { id: string; title?: string }) => (
+
+ ),
+
+ TwitterEmbed: ({ id }: { id: string }) => (
+
+ ),
+
+ InstagramEmbed: ({ id }: { id: string }) => (
+
+ ),
+
+ RedditEmbed: ({ url }: { url: string }) => (
+
+ ),
+ }),
+ [embedConsent],
+ );
+}
diff --git a/app/data/socials.ts b/app/data/socials.ts
new file mode 100644
index 0000000..7318eb0
--- /dev/null
+++ b/app/data/socials.ts
@@ -0,0 +1,25 @@
+export type SocialType =
+ | "twitter"
+ | "github"
+ | "youtube"
+ | "instagram"
+ | "linkedin";
+
+export const socials = {
+ twitter: "https://twitter.com/chrcit",
+ github: "https://github.com/chrcit",
+ youtube: "https://www.youtube.com/@chrcit",
+ instagram: "https://instagram.com/chrcit",
+ linkedin: "https://linkedin.com/in/chrcit",
+} as const;
+
+export const socialLinks: {
+ type: SocialType;
+ href: string;
+}[] = [
+ { type: "twitter", href: socials.twitter },
+ { type: "github", href: socials.github },
+ { type: "youtube", href: socials.youtube },
+ { type: "instagram", href: socials.instagram },
+ { type: "linkedin", href: socials.linkedin },
+];
diff --git a/app/entry.client.tsx b/app/entry.client.tsx
new file mode 100644
index 0000000..74a69e2
--- /dev/null
+++ b/app/entry.client.tsx
@@ -0,0 +1,7 @@
+import { RemixBrowser } from "@remix-run/react";
+import { startTransition } from "react";
+import { hydrateRoot } from "react-dom/client";
+
+startTransition(() => {
+ hydrateRoot(document, );
+});
diff --git a/app/entry.server.tsx b/app/entry.server.tsx
new file mode 100644
index 0000000..10a0eb6
--- /dev/null
+++ b/app/entry.server.tsx
@@ -0,0 +1,129 @@
+import { PassThrough } from "node:stream";
+import type { EntryContext } from "@remix-run/node";
+import { createReadableStreamFromReadable } from "@remix-run/node";
+import { RemixServer } from "@remix-run/react";
+import { isbot } from "isbot";
+import { renderToPipeableStream } from "react-dom/server";
+
+const ABORT_DELAY = 5_000;
+
+export default function handleRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext,
+) {
+ return isbot(request.headers.get("user-agent"))
+ ? handleBotRequest(
+ request,
+ responseStatusCode,
+ responseHeaders,
+ remixContext,
+ )
+ : handleBrowserRequest(
+ request,
+ responseStatusCode,
+ responseHeaders,
+ remixContext,
+ );
+}
+
+function handleBotRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext,
+) {
+ return new Promise((resolve, reject) => {
+ let shellRendered = false;
+ const { pipe, abort } = renderToPipeableStream(
+ ,
+ {
+ onAllReady() {
+ shellRendered = true;
+ const body = new PassThrough();
+ const stream = createReadableStreamFromReadable(body);
+
+ responseHeaders.set("Content-Type", "text/html");
+
+ resolve(
+ new Response(stream, {
+ headers: responseHeaders,
+ status: responseStatusCode,
+ }),
+ );
+
+ pipe(body);
+ },
+ onShellError(error: unknown) {
+ reject(error);
+ },
+ onError(error: unknown) {
+ responseStatusCode = 500;
+ // Log streaming rendering errors from inside the shell. Don't log
+ // errors encountered during initial shell rendering since they'll
+ // reject and get logged in handleDocumentRequest.
+ if (shellRendered) {
+ console.error(error);
+ }
+ },
+ },
+ );
+
+ setTimeout(abort, ABORT_DELAY);
+ });
+}
+
+function handleBrowserRequest(
+ request: Request,
+ responseStatusCode: number,
+ responseHeaders: Headers,
+ remixContext: EntryContext,
+) {
+ return new Promise((resolve, reject) => {
+ let shellRendered = false;
+ const { pipe, abort } = renderToPipeableStream(
+ ,
+ {
+ onShellReady() {
+ shellRendered = true;
+ const body = new PassThrough();
+ const stream = createReadableStreamFromReadable(body);
+
+ responseHeaders.set("Content-Type", "text/html");
+
+ resolve(
+ new Response(stream, {
+ headers: responseHeaders,
+ status: responseStatusCode,
+ }),
+ );
+
+ pipe(body);
+ },
+ onShellError(error: unknown) {
+ reject(error);
+ },
+ onError(error: unknown) {
+ responseStatusCode = 500;
+ // Log streaming rendering errors from inside the shell. Don't log
+ // errors encountered during initial shell rendering since they'll
+ // reject and get logged in handleDocumentRequest.
+ if (shellRendered) {
+ console.error(error);
+ }
+ },
+ },
+ );
+
+ setTimeout(abort, ABORT_DELAY);
+ });
+}
diff --git a/app/hooks/useFocusManagement.ts b/app/hooks/useFocusManagement.ts
new file mode 100644
index 0000000..3080acf
--- /dev/null
+++ b/app/hooks/useFocusManagement.ts
@@ -0,0 +1,65 @@
+import { useEffect, useRef } from "react";
+import { useLocation } from "@remix-run/react";
+
+export function useFocusManagement() {
+ const location = useLocation();
+ const lastFocusedElement = useRef(null);
+
+ useEffect(() => {
+ // Save the currently focused element before route change
+ lastFocusedElement.current = document.activeElement as HTMLElement;
+
+ // Focus the main content after route change
+ const mainContent = document.querySelector("main");
+ if (mainContent) {
+ // Set tabindex to make the element focusable
+ mainContent.setAttribute("tabindex", "-1");
+ mainContent.focus();
+ // Remove tabindex after focus to prevent keyboard navigation issues
+ mainContent.removeAttribute("tabindex");
+ }
+
+ // Restore focus when component unmounts
+ return () => {
+ if (lastFocusedElement.current) {
+ lastFocusedElement.current.focus();
+ }
+ };
+ }, [location.pathname]);
+
+ // Handle modal focus trap
+ const trapFocus = (element: HTMLElement) => {
+ const focusableElements = element.querySelectorAll(
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
+ );
+ const firstFocusable = focusableElements[0] as HTMLElement;
+ const lastFocusable = focusableElements[
+ focusableElements.length - 1
+ ] as HTMLElement;
+
+ function handleTabKey(e: KeyboardEvent) {
+ if (e.key !== "Tab") return;
+
+ if (e.shiftKey) {
+ if (document.activeElement === firstFocusable) {
+ e.preventDefault();
+ lastFocusable.focus();
+ }
+ } else {
+ if (document.activeElement === lastFocusable) {
+ e.preventDefault();
+ firstFocusable.focus();
+ }
+ }
+ }
+
+ element.addEventListener("keydown", handleTabKey);
+ firstFocusable.focus();
+
+ return () => {
+ element.removeEventListener("keydown", handleTabKey);
+ };
+ };
+
+ return { trapFocus };
+}
diff --git a/app/hooks/useKeyboardNavigation.ts b/app/hooks/useKeyboardNavigation.ts
new file mode 100644
index 0000000..fe4b14e
--- /dev/null
+++ b/app/hooks/useKeyboardNavigation.ts
@@ -0,0 +1,71 @@
+import { useEffect } from "react";
+import { useNavigate } from "@remix-run/react";
+
+export function useKeyboardNavigation() {
+ const navigate = useNavigate();
+
+ useEffect(() => {
+ function handleKeyDown(event: KeyboardEvent) {
+ // Only handle keyboard shortcuts when not in an input or textarea
+ if (
+ event.target instanceof HTMLInputElement ||
+ event.target instanceof HTMLTextAreaElement
+ ) {
+ return;
+ }
+
+ // Handle keyboard shortcuts
+ switch (event.key) {
+ case "h":
+ if (event.metaKey || event.ctrlKey) {
+ event.preventDefault();
+ navigate("/");
+ }
+ break;
+ case "a":
+ if (event.metaKey || event.ctrlKey) {
+ event.preventDefault();
+ navigate("/articles");
+ }
+ break;
+ case "p":
+ if (event.metaKey || event.ctrlKey) {
+ event.preventDefault();
+ navigate("/projects");
+ }
+ break;
+ case "b":
+ if (event.metaKey || event.ctrlKey) {
+ event.preventDefault();
+ navigate("/books");
+ }
+ break;
+ case "ArrowLeft":
+ if (event.altKey) {
+ event.preventDefault();
+ window.history.back();
+ }
+ break;
+ case "ArrowRight":
+ if (event.altKey) {
+ event.preventDefault();
+ window.history.forward();
+ }
+ break;
+ case "/":
+ event.preventDefault();
+ // Focus search input if it exists
+ const searchInput = document.querySelector(
+ 'input[type="search"]',
+ ) as HTMLInputElement;
+ if (searchInput) {
+ searchInput.focus();
+ }
+ break;
+ }
+ }
+
+ window.addEventListener("keydown", handleKeyDown);
+ return () => window.removeEventListener("keydown", handleKeyDown);
+ }, [navigate]);
+}
diff --git a/app/root.tsx b/app/root.tsx
new file mode 100644
index 0000000..d02a89b
--- /dev/null
+++ b/app/root.tsx
@@ -0,0 +1,118 @@
+import { cssBundleHref } from "@remix-run/css-bundle";
+import {
+ json,
+ type LinksFunction,
+ type LoaderFunctionArgs,
+ type MetaFunction,
+} from "@remix-run/node";
+import {
+ Links,
+ LiveReload,
+ Meta,
+ Outlet,
+ Scripts,
+ ScrollRestoration,
+ useLoaderData,
+ useLocation,
+ useMatches,
+} from "@remix-run/react";
+import { useEffect } from "react";
+
+import tailwindStyles from "~/styles/tailwind.css";
+import { getTheme, setTheme } from "~/utils/theme.server";
+
+export const links: LinksFunction = () => [
+ { rel: "stylesheet", href: tailwindStyles },
+ ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
+ { rel: "preconnect", href: "https://fonts.googleapis.com" },
+ { rel: "preconnect", href: "https://fonts.gstatic.com", crossOrigin: "" },
+ {
+ rel: "stylesheet",
+ href: "https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600;700&family=Playfair+Display:wght@700&family=Schibsted+Grotesk:wght@400;500;600;700&display=swap",
+ },
+];
+
+export const meta: MetaFunction = () => {
+ return [
+ { title: "Christian Cito" },
+ { name: "description", content: "Personal website of Christian Cito" },
+ { name: "viewport", content: "width=device-width,initial-scale=1" },
+ { name: "theme-color", content: "#000000" },
+ { property: "og:type", content: "website" },
+ { property: "og:site_name", content: "Christian Cito" },
+ ];
+};
+
+export async function loader({ request }: LoaderFunctionArgs) {
+ return json({
+ theme: await getTheme(request),
+ });
+}
+
+function prefetchNextRoutes() {
+ const matches = useMatches();
+ const location = useLocation();
+
+ useEffect(() => {
+ // Prefetch next likely routes based on current route
+ let routesToPrefetch: string[] = [];
+
+ if (location.pathname === "/") {
+ routesToPrefetch = ["/articles", "/projects", "/books"];
+ } else if (location.pathname === "/articles") {
+ routesToPrefetch = ["/projects", "/books"];
+ } else if (location.pathname === "/projects") {
+ routesToPrefetch = ["/articles", "/books"];
+ } else if (location.pathname === "/books") {
+ routesToPrefetch = ["/articles", "/projects"];
+ }
+
+ // Use requestIdleCallback to prefetch during idle time
+ const handle = window.requestIdleCallback(() => {
+ routesToPrefetch.forEach((route) => {
+ const link = document.createElement("link");
+ link.rel = "prefetch";
+ link.href = route;
+ document.head.appendChild(link);
+ });
+ });
+
+ return () => {
+ window.cancelIdleCallback(handle);
+ };
+ }, [location.pathname]);
+}
+
+export default function App() {
+ const { theme } = useLoaderData();
+ prefetchNextRoutes();
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function SkipToContent() {
+ return (
+
+ Skip to content
+
+ );
+}
diff --git a/app/routes/_index.tsx b/app/routes/_index.tsx
new file mode 100644
index 0000000..4573067
--- /dev/null
+++ b/app/routes/_index.tsx
@@ -0,0 +1,35 @@
+import { json } from "@remix-run/node";
+import type { MetaFunction } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { RootLayout } from "~/components/layouts/RootLayout";
+import { Particles } from "~/components/Particles";
+
+export const meta: MetaFunction = () => {
+ return [
+ { title: "Christian Cito" },
+ { name: "description", content: "Personal website of Christian Cito" },
+ ];
+};
+
+export async function loader() {
+ return json({
+ title: "Christian Cito",
+ description: "Personal website of Christian Cito",
+ });
+}
+
+export default function Index() {
+ const { title, description } = useLoaderData();
+
+ return (
+
+
+
+
+
{title}
+
{description}
+
+
+
+ );
+}
diff --git a/app/routes/api.embed-consent.ts b/app/routes/api.embed-consent.ts
new file mode 100644
index 0000000..a567972
--- /dev/null
+++ b/app/routes/api.embed-consent.ts
@@ -0,0 +1,27 @@
+import { json, type ActionFunctionArgs } from "@remix-run/node";
+import { updateEmbedConsent } from "~/utils/embed-consent";
+
+export async function action({ request }: ActionFunctionArgs) {
+ if (request.method !== "POST") {
+ return json({ error: "Method not allowed" }, { status: 405 });
+ }
+
+ try {
+ const formData = await request.formData();
+ const consent = Object.fromEntries(formData.entries());
+
+ // Convert string values to booleans
+ const parsedConsent = Object.entries(consent).reduce(
+ (acc, [key, value]) => ({
+ ...acc,
+ [key]: value === "true",
+ }),
+ {},
+ );
+
+ return await updateEmbedConsent(request, parsedConsent);
+ } catch (error) {
+ console.error("Error updating embed consent:", error);
+ return json({ error: "Failed to update embed consent" }, { status: 500 });
+ }
+}
diff --git a/app/routes/articles.$slug.tsx b/app/routes/articles.$slug.tsx
new file mode 100644
index 0000000..0bae00a
--- /dev/null
+++ b/app/routes/articles.$slug.tsx
@@ -0,0 +1,33 @@
+import { json, type LoaderFunctionArgs } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { ArticleLayout } from "~/components/layouts/ArticleLayout";
+import { getArticle } from "~/utils/content";
+import { getEmbedConsent } from "~/utils/embed-consent";
+
+export async function loader({ params, request }: LoaderFunctionArgs) {
+ const article = getArticle(params.slug ?? "");
+ if (!article) {
+ throw new Response("Not Found", { status: 404 });
+ }
+
+ const embedConsent = await getEmbedConsent(request);
+
+ return json({
+ article,
+ embedConsent,
+ });
+}
+
+export default function ArticlePage() {
+ const { article, embedConsent } = useLoaderData();
+
+ return (
+
+ );
+}
diff --git a/app/routes/articles._index.tsx b/app/routes/articles._index.tsx
new file mode 100644
index 0000000..adf725b
--- /dev/null
+++ b/app/routes/articles._index.tsx
@@ -0,0 +1,14 @@
+import { json } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { ArticleListLayout } from "~/components/layouts/ArticleListLayout";
+import { getArticles } from "~/utils/content";
+
+export function loader() {
+ const articles = getArticles();
+ return json({ articles });
+}
+
+export default function ArticlesPage() {
+ const { articles } = useLoaderData();
+ return ;
+}
diff --git a/app/routes/books.$slug.tsx b/app/routes/books.$slug.tsx
new file mode 100644
index 0000000..02b8370
--- /dev/null
+++ b/app/routes/books.$slug.tsx
@@ -0,0 +1,39 @@
+import { json, type LoaderFunctionArgs } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { BookLayout } from "~/components/layouts/BookLayout";
+import { getBook } from "~/utils/content";
+import { getEmbedConsent } from "~/utils/embed-consent";
+
+export async function loader({ params, request }: LoaderFunctionArgs) {
+ const book = getBook(params.slug ?? "");
+ if (!book) {
+ throw new Response("Not Found", { status: 404 });
+ }
+
+ const embedConsent = await getEmbedConsent(request);
+
+ return json({
+ book,
+ embedConsent,
+ });
+}
+
+export default function BookPage() {
+ const { book, embedConsent } = useLoaderData();
+
+ return (
+
+ );
+}
diff --git a/app/routes/books._index.tsx b/app/routes/books._index.tsx
new file mode 100644
index 0000000..f202380
--- /dev/null
+++ b/app/routes/books._index.tsx
@@ -0,0 +1,14 @@
+import { json } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { BookListLayout } from "~/components/layouts/BookListLayout";
+import { getBooks } from "~/utils/content";
+
+export function loader() {
+ const books = getBooks();
+ return json({ books });
+}
+
+export default function BooksPage() {
+ const { books } = useLoaderData();
+ return ;
+}
diff --git a/app/routes/feed[.]xml.ts b/app/routes/feed[.]xml.ts
new file mode 100644
index 0000000..5f2f4cf
--- /dev/null
+++ b/app/routes/feed[.]xml.ts
@@ -0,0 +1,41 @@
+import { type LoaderFunctionArgs } from "@remix-run/node";
+import { getArticles } from "~/utils/content";
+
+export async function loader({ request }: LoaderFunctionArgs) {
+ const url = new URL(request.url);
+ const baseUrl = `${url.protocol}//${url.host}`;
+
+ const articles = getArticles();
+
+ const feed = `
+
+
+ Christian Cito
+ Personal website of Christian Cito
+ ${baseUrl}
+
+ en-US
+ ${articles
+ .map(
+ (article) => `
+ -
+
${article.title}
+ ${article.description}
+ ${new Date(article.publishedAt).toUTCString()}
+ ${baseUrl}/articles/${article.slug}
+ ${baseUrl}/articles/${article.slug}
+ ${article.tags.map((tag) => `${tag} `).join("")}
+ `,
+ )
+ .join("")}
+
+ `;
+
+ return new Response(feed, {
+ headers: {
+ "Content-Type": "application/xml",
+ "Content-Length": String(Buffer.byteLength(feed)),
+ "Cache-Control": "public, max-age=3600",
+ },
+ });
+}
diff --git a/app/routes/projects.$slug.tsx b/app/routes/projects.$slug.tsx
new file mode 100644
index 0000000..cb75142
--- /dev/null
+++ b/app/routes/projects.$slug.tsx
@@ -0,0 +1,34 @@
+import { json, type LoaderFunctionArgs } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { ProjectLayout } from "~/components/layouts/ProjectLayout";
+import { getProject } from "~/utils/content";
+import { getEmbedConsent } from "~/utils/embed-consent";
+
+export async function loader({ params, request }: LoaderFunctionArgs) {
+ const project = getProject(params.slug ?? "");
+ if (!project) {
+ throw new Response("Not Found", { status: 404 });
+ }
+
+ const embedConsent = await getEmbedConsent(request);
+
+ return json({
+ project,
+ embedConsent,
+ });
+}
+
+export default function ProjectPage() {
+ const { project, embedConsent } = useLoaderData();
+
+ return (
+
+ );
+}
diff --git a/app/routes/projects._index.tsx b/app/routes/projects._index.tsx
new file mode 100644
index 0000000..d2a4de3
--- /dev/null
+++ b/app/routes/projects._index.tsx
@@ -0,0 +1,14 @@
+import { json } from "@remix-run/node";
+import { useLoaderData } from "@remix-run/react";
+import { ProjectListLayout } from "~/components/layouts/ProjectListLayout";
+import { getProjects } from "~/utils/content";
+
+export function loader() {
+ const projects = getProjects();
+ return json({ projects });
+}
+
+export default function ProjectsPage() {
+ const { projects } = useLoaderData();
+ return ;
+}
diff --git a/app/routes/sitemap[.]xml.ts b/app/routes/sitemap[.]xml.ts
new file mode 100644
index 0000000..604ea6f
--- /dev/null
+++ b/app/routes/sitemap[.]xml.ts
@@ -0,0 +1,74 @@
+import { type LoaderFunctionArgs } from "@remix-run/node";
+import { getArticles, getBooks, getProjects } from "~/utils/content";
+
+export async function loader({ request }: LoaderFunctionArgs) {
+ const url = new URL(request.url);
+ const baseUrl = `${url.protocol}//${url.host}`;
+
+ const articles = getArticles();
+ const books = getBooks();
+ const projects = getProjects();
+
+ const sitemap = `
+
+
+ ${baseUrl}
+ weekly
+ 1.0
+
+
+ ${baseUrl}/articles
+ weekly
+ 0.8
+
+
+ ${baseUrl}/projects
+ monthly
+ 0.8
+
+
+ ${baseUrl}/books
+ monthly
+ 0.8
+
+ ${articles
+ .map(
+ (article) => `
+
+ ${baseUrl}/articles/${article.slug}
+ ${article.publishedAt}
+ monthly
+ 0.6
+ `,
+ )
+ .join("")}
+ ${projects
+ .map(
+ (project) => `
+
+ ${baseUrl}/projects/${project.slug}
+ monthly
+ 0.6
+ `,
+ )
+ .join("")}
+ ${books
+ .map(
+ (book) => `
+
+ ${baseUrl}/books/${book.slug}
+ monthly
+ 0.6
+ `,
+ )
+ .join("")}
+ `;
+
+ return new Response(sitemap, {
+ headers: {
+ "Content-Type": "application/xml",
+ "Content-Length": String(Buffer.byteLength(sitemap)),
+ "Cache-Control": "public, max-age=3600",
+ },
+ });
+}
diff --git a/app/styles/tailwind.css b/app/styles/tailwind.css
new file mode 100644
index 0000000..74cf100
--- /dev/null
+++ b/app/styles/tailwind.css
@@ -0,0 +1,13 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ html {
+ @apply scroll-smooth;
+ }
+
+ body {
+ @apply bg-white text-gray-900;
+ }
+}
diff --git a/app/utils/content-relations.ts b/app/utils/content-relations.ts
new file mode 100644
index 0000000..1041e89
--- /dev/null
+++ b/app/utils/content-relations.ts
@@ -0,0 +1,92 @@
+import { getArticles, getBooks, getProjects } from "./content";
+
+interface RelatedContent {
+ title: string;
+ description: string;
+ slug: string;
+ type: "article" | "book" | "project";
+ tags: string[];
+}
+
+export function findRelatedContent(
+ type: "article" | "book" | "project",
+ slug: string,
+ tags: string[],
+ limit = 3,
+): RelatedContent[] {
+ const articles = getArticles();
+ const books = getBooks();
+ const projects = getProjects();
+
+ // Exclude the current content
+ const allContent: RelatedContent[] = [
+ ...articles
+ .filter((article) => article.slug !== slug)
+ .map((article) => ({
+ title: article.title,
+ description: article.description,
+ slug: article.slug,
+ type: "article" as const,
+ tags: article.tags,
+ })),
+ ...books
+ .filter((book) => book.slug !== slug)
+ .map((book) => ({
+ title: book.title,
+ description: book.description,
+ slug: book.slug,
+ type: "book" as const,
+ tags: book.tags,
+ })),
+ ...projects
+ .filter((project) => project.slug !== slug)
+ .map((project) => ({
+ title: project.title,
+ description: project.description,
+ slug: project.slug,
+ type: "project" as const,
+ tags: project.tags,
+ })),
+ ];
+
+ // Calculate relevance score based on tag matches
+ const scoredContent = allContent.map((content) => {
+ const matchingTags = tags.filter((tag) =>
+ content.tags.includes(tag),
+ ).length;
+ return {
+ ...content,
+ score: matchingTags,
+ };
+ });
+
+ // Sort by score and get top matches
+ return scoredContent
+ .sort((a, b) => b.score - a.score)
+ .slice(0, limit)
+ .map(({ title, description, slug, type, tags }) => ({
+ title,
+ description,
+ slug,
+ type,
+ tags,
+ }));
+}
+
+export function getRelatedArticles(slug: string, tags: string[], limit = 3) {
+ return findRelatedContent("article", slug, tags, limit).filter(
+ (content) => content.type === "article",
+ );
+}
+
+export function getRelatedBooks(slug: string, tags: string[], limit = 3) {
+ return findRelatedContent("book", slug, tags, limit).filter(
+ (content) => content.type === "book",
+ );
+}
+
+export function getRelatedProjects(slug: string, tags: string[], limit = 3) {
+ return findRelatedContent("project", slug, tags, limit).filter(
+ (content) => content.type === "project",
+ );
+}
diff --git a/app/utils/content.ts b/app/utils/content.ts
new file mode 100644
index 0000000..45c9577
--- /dev/null
+++ b/app/utils/content.ts
@@ -0,0 +1,38 @@
+import {
+ allArticles,
+ allBooks,
+ allPages,
+ allProjects,
+} from "contentlayer/generated";
+
+export function getArticles() {
+ return allArticles.sort(
+ (a, b) =>
+ new Date(b.publishedAt ?? 0).getTime() -
+ new Date(a.publishedAt ?? 0).getTime(),
+ );
+}
+
+export function getArticle(slug: string) {
+ return allArticles.find((article) => article.slug === slug);
+}
+
+export function getProjects() {
+ return allProjects.sort((a, b) => a.order - b.order);
+}
+
+export function getProject(slug: string) {
+ return allProjects.find((project) => project.slug === slug);
+}
+
+export function getBooks() {
+ return allBooks.sort((a, b) => b.year - a.year);
+}
+
+export function getBook(slug: string) {
+ return allBooks.find((book) => book.slug === slug);
+}
+
+export function getPage(slug: string) {
+ return allPages.find((page) => page.slug === slug);
+}
diff --git a/app/utils/embed-consent.ts b/app/utils/embed-consent.ts
new file mode 100644
index 0000000..d562741
--- /dev/null
+++ b/app/utils/embed-consent.ts
@@ -0,0 +1,47 @@
+import { createCookie } from "@remix-run/node";
+
+export type EmbedType = "youtube" | "twitter" | "instagram" | "reddit";
+
+export interface EmbedConsent {
+ youtube: boolean;
+ twitter: boolean;
+ instagram: boolean;
+ reddit: boolean;
+}
+
+const embedConsentCookie = createCookie("embed-consent", {
+ path: "/",
+ httpOnly: true,
+ secure: process.env.NODE_ENV === "production",
+ sameSite: "lax",
+ maxAge: 31536000, // one year
+});
+
+export async function getEmbedConsent(request: Request): Promise {
+ const cookieHeader = request.headers.get("Cookie");
+ const consent = await embedConsentCookie.parse(cookieHeader);
+ return {
+ youtube: consent?.youtube ?? false,
+ twitter: consent?.twitter ?? false,
+ instagram: consent?.instagram ?? false,
+ reddit: consent?.reddit ?? false,
+ };
+}
+
+export async function setEmbedConsent(consent: Partial) {
+ return await embedConsentCookie.serialize(consent);
+}
+
+export async function updateEmbedConsent(
+ request: Request,
+ consent: Partial,
+) {
+ const currentConsent = await getEmbedConsent(request);
+ const newConsent = { ...currentConsent, ...consent };
+ return new Response(null, {
+ status: 200,
+ headers: {
+ "Set-Cookie": await setEmbedConsent(newConsent),
+ },
+ });
+}
diff --git a/app/utils/navigation.ts b/app/utils/navigation.ts
new file mode 100644
index 0000000..b2e7077
--- /dev/null
+++ b/app/utils/navigation.ts
@@ -0,0 +1,19 @@
+export type ActiveTabType = "home" | "articles" | "projects" | "books";
+
+export const navigationLinks = [
+ {
+ name: "Articles",
+ href: "/articles",
+ activeTab: "articles" as const,
+ },
+ {
+ name: "Projects",
+ href: "/projects",
+ activeTab: "projects" as const,
+ },
+ {
+ name: "Books",
+ href: "/books",
+ activeTab: "books" as const,
+ },
+];
diff --git a/app/utils/structured-data.ts b/app/utils/structured-data.ts
new file mode 100644
index 0000000..97c644e
--- /dev/null
+++ b/app/utils/structured-data.ts
@@ -0,0 +1,85 @@
+interface Article {
+ title: string;
+ description: string;
+ publishedAt: string;
+ updatedAt?: string;
+ author: string;
+ url: string;
+ image?: string;
+ tags: string[];
+}
+
+interface Book {
+ title: string;
+ description: string;
+ author: string;
+ rating: number;
+ cover: string;
+ year: number;
+ category: string;
+ tags: string[];
+ url: string;
+}
+
+interface Project {
+ title: string;
+ description: string;
+ image?: string;
+ url: string;
+ tags: string[];
+}
+
+export function generateArticleStructuredData(article: Article) {
+ return {
+ "@context": "https://schema.org",
+ "@type": "BlogPosting",
+ headline: article.title,
+ description: article.description,
+ author: {
+ "@type": "Person",
+ name: article.author,
+ },
+ datePublished: article.publishedAt,
+ dateModified: article.updatedAt || article.publishedAt,
+ image: article.image,
+ url: article.url,
+ keywords: article.tags.join(", "),
+ };
+}
+
+export function generateBookStructuredData(book: Book) {
+ return {
+ "@context": "https://schema.org",
+ "@type": "Book",
+ name: book.title,
+ description: book.description,
+ author: {
+ "@type": "Person",
+ name: book.author,
+ },
+ datePublished: book.year.toString(),
+ image: book.cover,
+ url: book.url,
+ genre: book.category,
+ keywords: book.tags.join(", "),
+ aggregateRating: {
+ "@type": "AggregateRating",
+ ratingValue: book.rating,
+ bestRating: "5",
+ ratingCount: "1",
+ },
+ };
+}
+
+export function generateProjectStructuredData(project: Project) {
+ return {
+ "@context": "https://schema.org",
+ "@type": "SoftwareApplication",
+ name: project.title,
+ description: project.description,
+ image: project.image,
+ url: project.url,
+ applicationCategory: "WebApplication",
+ keywords: project.tags.join(", "),
+ };
+}
diff --git a/app/utils/theme.server.ts b/app/utils/theme.server.ts
new file mode 100644
index 0000000..8904734
--- /dev/null
+++ b/app/utils/theme.server.ts
@@ -0,0 +1,30 @@
+import { createCookie } from "@remix-run/node";
+
+const themeCookie = createCookie("theme", {
+ path: "/",
+ httpOnly: true,
+ secure: process.env.NODE_ENV === "production",
+ sameSite: "lax",
+ maxAge: 31536000, // one year
+});
+
+export type Theme = "light" | "dark" | "system";
+
+export async function getTheme(request: Request): Promise {
+ const cookieHeader = request.headers.get("Cookie");
+ const theme = await themeCookie.parse(cookieHeader);
+ return theme?.theme || "system";
+}
+
+export async function setTheme(theme: Theme) {
+ return await themeCookie.serialize({ theme });
+}
+
+export async function updateTheme(request: Request, theme: Theme) {
+ return new Response(null, {
+ status: 200,
+ headers: {
+ "Set-Cookie": await setTheme(theme),
+ },
+ });
+}
diff --git a/astro.config.mjs b/astro-site/astro.config.mjs
similarity index 100%
rename from astro.config.mjs
rename to astro-site/astro.config.mjs
diff --git a/package-lock.json b/astro-site/package-lock.json
similarity index 100%
rename from package-lock.json
rename to astro-site/package-lock.json
diff --git a/src/components/BackButton.astro b/astro-site/src/components/BackButton.astro
similarity index 100%
rename from src/components/BackButton.astro
rename to astro-site/src/components/BackButton.astro
diff --git a/src/components/ExternalLink.astro b/astro-site/src/components/ExternalLink.astro
similarity index 100%
rename from src/components/ExternalLink.astro
rename to astro-site/src/components/ExternalLink.astro
diff --git a/src/components/Footer.astro b/astro-site/src/components/Footer.astro
similarity index 100%
rename from src/components/Footer.astro
rename to astro-site/src/components/Footer.astro
diff --git a/src/components/Header.astro b/astro-site/src/components/Header.astro
similarity index 100%
rename from src/components/Header.astro
rename to astro-site/src/components/Header.astro
diff --git a/src/components/ListHeader.astro b/astro-site/src/components/ListHeader.astro
similarity index 100%
rename from src/components/ListHeader.astro
rename to astro-site/src/components/ListHeader.astro
diff --git a/src/components/Particles.astro b/astro-site/src/components/Particles.astro
similarity index 100%
rename from src/components/Particles.astro
rename to astro-site/src/components/Particles.astro
diff --git a/src/components/ReadMoreButton.astro b/astro-site/src/components/ReadMoreButton.astro
similarity index 100%
rename from src/components/ReadMoreButton.astro
rename to astro-site/src/components/ReadMoreButton.astro
diff --git a/src/components/SkipToContent.astro b/astro-site/src/components/SkipToContent.astro
similarity index 100%
rename from src/components/SkipToContent.astro
rename to astro-site/src/components/SkipToContent.astro
diff --git a/src/components/SocialIcon.astro b/astro-site/src/components/SocialIcon.astro
similarity index 100%
rename from src/components/SocialIcon.astro
rename to astro-site/src/components/SocialIcon.astro
diff --git a/src/components/SocialLinks.astro b/astro-site/src/components/SocialLinks.astro
similarity index 100%
rename from src/components/SocialLinks.astro
rename to astro-site/src/components/SocialLinks.astro
diff --git a/src/components/TableOfContents.astro b/astro-site/src/components/TableOfContents.astro
similarity index 100%
rename from src/components/TableOfContents.astro
rename to astro-site/src/components/TableOfContents.astro
diff --git a/src/components/TableOfContentsHeading.astro b/astro-site/src/components/TableOfContentsHeading.astro
similarity index 100%
rename from src/components/TableOfContentsHeading.astro
rename to astro-site/src/components/TableOfContentsHeading.astro
diff --git a/src/components/embeds/AndererseitsInstagram.astro b/astro-site/src/components/embeds/AndererseitsInstagram.astro
similarity index 100%
rename from src/components/embeds/AndererseitsInstagram.astro
rename to astro-site/src/components/embeds/AndererseitsInstagram.astro
diff --git a/src/components/icons/ArrowLeft.astro b/astro-site/src/components/icons/ArrowLeft.astro
similarity index 100%
rename from src/components/icons/ArrowLeft.astro
rename to astro-site/src/components/icons/ArrowLeft.astro
diff --git a/src/components/icons/ArrowRight.astro b/astro-site/src/components/icons/ArrowRight.astro
similarity index 100%
rename from src/components/icons/ArrowRight.astro
rename to astro-site/src/components/icons/ArrowRight.astro
diff --git a/src/components/particles.json b/astro-site/src/components/particles.json
similarity index 100%
rename from src/components/particles.json
rename to astro-site/src/components/particles.json
diff --git a/src/content/articles/2023-year-in-review.mdx b/astro-site/src/content/articles/2023-year-in-review.mdx
similarity index 100%
rename from src/content/articles/2023-year-in-review.mdx
rename to astro-site/src/content/articles/2023-year-in-review.mdx
diff --git a/src/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg b/astro-site/src/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg
similarity index 100%
rename from src/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg
rename to astro-site/src/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg
diff --git a/src/content/books/a-liberated-mind.md b/astro-site/src/content/books/a-liberated-mind.md
similarity index 100%
rename from src/content/books/a-liberated-mind.md
rename to astro-site/src/content/books/a-liberated-mind.md
diff --git a/src/content/books/antifragile.md b/astro-site/src/content/books/antifragile.md
similarity index 100%
rename from src/content/books/antifragile.md
rename to astro-site/src/content/books/antifragile.md
diff --git a/src/content/books/black-swan.md b/astro-site/src/content/books/black-swan.md
similarity index 100%
rename from src/content/books/black-swan.md
rename to astro-site/src/content/books/black-swan.md
diff --git a/src/content/books/brave-new-world.md b/astro-site/src/content/books/brave-new-world.md
similarity index 100%
rename from src/content/books/brave-new-world.md
rename to astro-site/src/content/books/brave-new-world.md
diff --git a/src/content/books/breaking-out-of-homeostasis.md b/astro-site/src/content/books/breaking-out-of-homeostasis.md
similarity index 100%
rename from src/content/books/breaking-out-of-homeostasis.md
rename to astro-site/src/content/books/breaking-out-of-homeostasis.md
diff --git a/src/content/books/capitalist-realism.md b/astro-site/src/content/books/capitalist-realism.md
similarity index 100%
rename from src/content/books/capitalist-realism.md
rename to astro-site/src/content/books/capitalist-realism.md
diff --git a/src/content/books/covers/a-liberated-mind-cover.jpg b/astro-site/src/content/books/covers/a-liberated-mind-cover.jpg
similarity index 100%
rename from src/content/books/covers/a-liberated-mind-cover.jpg
rename to astro-site/src/content/books/covers/a-liberated-mind-cover.jpg
diff --git a/src/content/books/covers/antifragile-cover.jpg b/astro-site/src/content/books/covers/antifragile-cover.jpg
similarity index 100%
rename from src/content/books/covers/antifragile-cover.jpg
rename to astro-site/src/content/books/covers/antifragile-cover.jpg
diff --git a/src/content/books/covers/brave-new-world-cover.jpeg b/astro-site/src/content/books/covers/brave-new-world-cover.jpeg
similarity index 100%
rename from src/content/books/covers/brave-new-world-cover.jpeg
rename to astro-site/src/content/books/covers/brave-new-world-cover.jpeg
diff --git a/src/content/books/covers/breaking-out-of-homeostasis-cover.jpg b/astro-site/src/content/books/covers/breaking-out-of-homeostasis-cover.jpg
similarity index 100%
rename from src/content/books/covers/breaking-out-of-homeostasis-cover.jpg
rename to astro-site/src/content/books/covers/breaking-out-of-homeostasis-cover.jpg
diff --git a/src/content/books/covers/capitalist-realism-cover.jpg b/astro-site/src/content/books/covers/capitalist-realism-cover.jpg
similarity index 100%
rename from src/content/books/covers/capitalist-realism-cover.jpg
rename to astro-site/src/content/books/covers/capitalist-realism-cover.jpg
diff --git a/src/content/books/covers/dark-money-cover.jpeg b/astro-site/src/content/books/covers/dark-money-cover.jpeg
similarity index 100%
rename from src/content/books/covers/dark-money-cover.jpeg
rename to astro-site/src/content/books/covers/dark-money-cover.jpeg
diff --git a/src/content/books/covers/debt-the-first-5000-years-cover.jpg b/astro-site/src/content/books/covers/debt-the-first-5000-years-cover.jpg
similarity index 100%
rename from src/content/books/covers/debt-the-first-5000-years-cover.jpg
rename to astro-site/src/content/books/covers/debt-the-first-5000-years-cover.jpg
diff --git a/src/content/books/covers/flow-cover.jpg b/astro-site/src/content/books/covers/flow-cover.jpg
similarity index 100%
rename from src/content/books/covers/flow-cover.jpg
rename to astro-site/src/content/books/covers/flow-cover.jpg
diff --git a/src/content/books/covers/fooled-by-randomness-cover.jpg b/astro-site/src/content/books/covers/fooled-by-randomness-cover.jpg
similarity index 100%
rename from src/content/books/covers/fooled-by-randomness-cover.jpg
rename to astro-site/src/content/books/covers/fooled-by-randomness-cover.jpg
diff --git a/src/content/books/covers/gateless-cover.jpg b/astro-site/src/content/books/covers/gateless-cover.jpg
similarity index 100%
rename from src/content/books/covers/gateless-cover.jpg
rename to astro-site/src/content/books/covers/gateless-cover.jpg
diff --git a/src/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg b/astro-site/src/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg
similarity index 100%
rename from src/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg
rename to astro-site/src/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg
diff --git a/src/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp b/astro-site/src/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp
similarity index 100%
rename from src/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp
rename to astro-site/src/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp
diff --git a/src/content/books/covers/kill-all-normies-cover.webp b/astro-site/src/content/books/covers/kill-all-normies-cover.webp
similarity index 100%
rename from src/content/books/covers/kill-all-normies-cover.webp
rename to astro-site/src/content/books/covers/kill-all-normies-cover.webp
diff --git a/src/content/books/covers/less-is-more-cover.webp b/astro-site/src/content/books/covers/less-is-more-cover.webp
similarity index 100%
rename from src/content/books/covers/less-is-more-cover.webp
rename to astro-site/src/content/books/covers/less-is-more-cover.webp
diff --git a/src/content/books/covers/mans-search-for-meaning-cover.jpg b/astro-site/src/content/books/covers/mans-search-for-meaning-cover.jpg
similarity index 100%
rename from src/content/books/covers/mans-search-for-meaning-cover.jpg
rename to astro-site/src/content/books/covers/mans-search-for-meaning-cover.jpg
diff --git a/src/content/books/covers/of-mice-and-men-cover.jpg b/astro-site/src/content/books/covers/of-mice-and-men-cover.jpg
similarity index 100%
rename from src/content/books/covers/of-mice-and-men-cover.jpg
rename to astro-site/src/content/books/covers/of-mice-and-men-cover.jpg
diff --git a/src/content/books/covers/seeing-that-frees-cover.jpg b/astro-site/src/content/books/covers/seeing-that-frees-cover.jpg
similarity index 100%
rename from src/content/books/covers/seeing-that-frees-cover.jpg
rename to astro-site/src/content/books/covers/seeing-that-frees-cover.jpg
diff --git a/src/content/books/covers/skin-in-the-game-cover.jpg b/astro-site/src/content/books/covers/skin-in-the-game-cover.jpg
similarity index 100%
rename from src/content/books/covers/skin-in-the-game-cover.jpg
rename to astro-site/src/content/books/covers/skin-in-the-game-cover.jpg
diff --git a/src/content/books/covers/survival-of-the-richest-cover.jpg b/astro-site/src/content/books/covers/survival-of-the-richest-cover.jpg
similarity index 100%
rename from src/content/books/covers/survival-of-the-richest-cover.jpg
rename to astro-site/src/content/books/covers/survival-of-the-richest-cover.jpg
diff --git a/src/content/books/covers/the-art-of-learning-cover.jpg b/astro-site/src/content/books/covers/the-art-of-learning-cover.jpg
similarity index 100%
rename from src/content/books/covers/the-art-of-learning-cover.jpg
rename to astro-site/src/content/books/covers/the-art-of-learning-cover.jpg
diff --git a/src/content/books/covers/the-black-swan-cover.webp b/astro-site/src/content/books/covers/the-black-swan-cover.webp
similarity index 100%
rename from src/content/books/covers/the-black-swan-cover.webp
rename to astro-site/src/content/books/covers/the-black-swan-cover.webp
diff --git a/src/content/books/covers/the-count-of-monte-cristo-cover.jpg b/astro-site/src/content/books/covers/the-count-of-monte-cristo-cover.jpg
similarity index 100%
rename from src/content/books/covers/the-count-of-monte-cristo-cover.jpg
rename to astro-site/src/content/books/covers/the-count-of-monte-cristo-cover.jpg
diff --git a/src/content/books/covers/the-divide-cover.jpg b/astro-site/src/content/books/covers/the-divide-cover.jpg
similarity index 100%
rename from src/content/books/covers/the-divide-cover.jpg
rename to astro-site/src/content/books/covers/the-divide-cover.jpg
diff --git a/src/content/books/covers/the-mind-illuminated-cover.jpg b/astro-site/src/content/books/covers/the-mind-illuminated-cover.jpg
similarity index 100%
rename from src/content/books/covers/the-mind-illuminated-cover.jpg
rename to astro-site/src/content/books/covers/the-mind-illuminated-cover.jpg
diff --git a/src/content/books/covers/the-paleo-manifesto-cover.jpg b/astro-site/src/content/books/covers/the-paleo-manifesto-cover.jpg
similarity index 100%
rename from src/content/books/covers/the-paleo-manifesto-cover.jpg
rename to astro-site/src/content/books/covers/the-paleo-manifesto-cover.jpg
diff --git a/src/content/books/covers/the-science-of-enlightenment-cover.jpg b/astro-site/src/content/books/covers/the-science-of-enlightenment-cover.jpg
similarity index 100%
rename from src/content/books/covers/the-science-of-enlightenment-cover.jpg
rename to astro-site/src/content/books/covers/the-science-of-enlightenment-cover.jpg
diff --git a/src/content/books/covers/vagabonding-cover.jpg b/astro-site/src/content/books/covers/vagabonding-cover.jpg
similarity index 100%
rename from src/content/books/covers/vagabonding-cover.jpg
rename to astro-site/src/content/books/covers/vagabonding-cover.jpg
diff --git a/src/content/books/covers/we-learn-nothing-cover.jpg b/astro-site/src/content/books/covers/we-learn-nothing-cover.jpg
similarity index 100%
rename from src/content/books/covers/we-learn-nothing-cover.jpg
rename to astro-site/src/content/books/covers/we-learn-nothing-cover.jpg
diff --git a/src/content/books/covers/winners-take-all-cover.jpg b/astro-site/src/content/books/covers/winners-take-all-cover.jpg
similarity index 100%
rename from src/content/books/covers/winners-take-all-cover.jpg
rename to astro-site/src/content/books/covers/winners-take-all-cover.jpg
diff --git a/src/content/books/dark-money.md b/astro-site/src/content/books/dark-money.md
similarity index 100%
rename from src/content/books/dark-money.md
rename to astro-site/src/content/books/dark-money.md
diff --git a/src/content/books/debt-the-first-5000-years.md b/astro-site/src/content/books/debt-the-first-5000-years.md
similarity index 100%
rename from src/content/books/debt-the-first-5000-years.md
rename to astro-site/src/content/books/debt-the-first-5000-years.md
diff --git a/src/content/books/flow.md b/astro-site/src/content/books/flow.md
similarity index 100%
rename from src/content/books/flow.md
rename to astro-site/src/content/books/flow.md
diff --git a/src/content/books/fooled-by-randomness.md b/astro-site/src/content/books/fooled-by-randomness.md
similarity index 100%
rename from src/content/books/fooled-by-randomness.md
rename to astro-site/src/content/books/fooled-by-randomness.md
diff --git a/src/content/books/gateless.md b/astro-site/src/content/books/gateless.md
similarity index 100%
rename from src/content/books/gateless.md
rename to astro-site/src/content/books/gateless.md
diff --git a/src/content/books/i-wrote-this-book-because-i-love-you.md b/astro-site/src/content/books/i-wrote-this-book-because-i-love-you.md
similarity index 100%
rename from src/content/books/i-wrote-this-book-because-i-love-you.md
rename to astro-site/src/content/books/i-wrote-this-book-because-i-love-you.md
diff --git a/src/content/books/influencer-die-ideologie-des-werbekoerpers.md b/astro-site/src/content/books/influencer-die-ideologie-des-werbekoerpers.md
similarity index 100%
rename from src/content/books/influencer-die-ideologie-des-werbekoerpers.md
rename to astro-site/src/content/books/influencer-die-ideologie-des-werbekoerpers.md
diff --git a/src/content/books/kill-all-normies.md b/astro-site/src/content/books/kill-all-normies.md
similarity index 100%
rename from src/content/books/kill-all-normies.md
rename to astro-site/src/content/books/kill-all-normies.md
diff --git a/src/content/books/less-is-more.md b/astro-site/src/content/books/less-is-more.md
similarity index 100%
rename from src/content/books/less-is-more.md
rename to astro-site/src/content/books/less-is-more.md
diff --git a/src/content/books/mans-search-for-meaning.md b/astro-site/src/content/books/mans-search-for-meaning.md
similarity index 100%
rename from src/content/books/mans-search-for-meaning.md
rename to astro-site/src/content/books/mans-search-for-meaning.md
diff --git a/src/content/books/of-mice-and-men.md b/astro-site/src/content/books/of-mice-and-men.md
similarity index 100%
rename from src/content/books/of-mice-and-men.md
rename to astro-site/src/content/books/of-mice-and-men.md
diff --git a/src/content/books/seeing-that-frees.md b/astro-site/src/content/books/seeing-that-frees.md
similarity index 100%
rename from src/content/books/seeing-that-frees.md
rename to astro-site/src/content/books/seeing-that-frees.md
diff --git a/src/content/books/skin-in-the-game.md b/astro-site/src/content/books/skin-in-the-game.md
similarity index 100%
rename from src/content/books/skin-in-the-game.md
rename to astro-site/src/content/books/skin-in-the-game.md
diff --git a/src/content/books/survival-of-the-richest.md b/astro-site/src/content/books/survival-of-the-richest.md
similarity index 100%
rename from src/content/books/survival-of-the-richest.md
rename to astro-site/src/content/books/survival-of-the-richest.md
diff --git a/src/content/books/the-art-of-learning.md b/astro-site/src/content/books/the-art-of-learning.md
similarity index 100%
rename from src/content/books/the-art-of-learning.md
rename to astro-site/src/content/books/the-art-of-learning.md
diff --git a/src/content/books/the-count-of-monte-cristo.md b/astro-site/src/content/books/the-count-of-monte-cristo.md
similarity index 100%
rename from src/content/books/the-count-of-monte-cristo.md
rename to astro-site/src/content/books/the-count-of-monte-cristo.md
diff --git a/src/content/books/the-divide.md b/astro-site/src/content/books/the-divide.md
similarity index 100%
rename from src/content/books/the-divide.md
rename to astro-site/src/content/books/the-divide.md
diff --git a/src/content/books/the-mind-illuminated.md b/astro-site/src/content/books/the-mind-illuminated.md
similarity index 100%
rename from src/content/books/the-mind-illuminated.md
rename to astro-site/src/content/books/the-mind-illuminated.md
diff --git a/src/content/books/the-paleo-manifesto.md b/astro-site/src/content/books/the-paleo-manifesto.md
similarity index 100%
rename from src/content/books/the-paleo-manifesto.md
rename to astro-site/src/content/books/the-paleo-manifesto.md
diff --git a/src/content/books/the-science-of-enlightenment.md b/astro-site/src/content/books/the-science-of-enlightenment.md
similarity index 100%
rename from src/content/books/the-science-of-enlightenment.md
rename to astro-site/src/content/books/the-science-of-enlightenment.md
diff --git a/src/content/books/vagabonding.md b/astro-site/src/content/books/vagabonding.md
similarity index 100%
rename from src/content/books/vagabonding.md
rename to astro-site/src/content/books/vagabonding.md
diff --git a/src/content/books/we-learn-nothing.md b/astro-site/src/content/books/we-learn-nothing.md
similarity index 100%
rename from src/content/books/we-learn-nothing.md
rename to astro-site/src/content/books/we-learn-nothing.md
diff --git a/src/content/books/winner-takes-all.md b/astro-site/src/content/books/winner-takes-all.md
similarity index 100%
rename from src/content/books/winner-takes-all.md
rename to astro-site/src/content/books/winner-takes-all.md
diff --git a/src/content/config.ts b/astro-site/src/content/config.ts
similarity index 100%
rename from src/content/config.ts
rename to astro-site/src/content/config.ts
diff --git a/src/content/films/palm-springs.md b/astro-site/src/content/films/palm-springs.md
similarity index 100%
rename from src/content/films/palm-springs.md
rename to astro-site/src/content/films/palm-springs.md
diff --git a/src/content/musicians/ski-aggu.md b/astro-site/src/content/musicians/ski-aggu.md
similarity index 100%
rename from src/content/musicians/ski-aggu.md
rename to astro-site/src/content/musicians/ski-aggu.md
diff --git a/src/content/pages/colophon.mdx b/astro-site/src/content/pages/colophon.mdx
similarity index 100%
rename from src/content/pages/colophon.mdx
rename to astro-site/src/content/pages/colophon.mdx
diff --git a/src/content/pages/imprint.md b/astro-site/src/content/pages/imprint.md
similarity index 100%
rename from src/content/pages/imprint.md
rename to astro-site/src/content/pages/imprint.md
diff --git a/src/content/pages/privacy-policy.md b/astro-site/src/content/pages/privacy-policy.md
similarity index 100%
rename from src/content/pages/privacy-policy.md
rename to astro-site/src/content/pages/privacy-policy.md
diff --git a/src/content/pages/uses.md b/astro-site/src/content/pages/uses.md
similarity index 100%
rename from src/content/pages/uses.md
rename to astro-site/src/content/pages/uses.md
diff --git a/src/content/projects/hasanhub-com.mdx b/astro-site/src/content/projects/hasanhub-com.mdx
similarity index 100%
rename from src/content/projects/hasanhub-com.mdx
rename to astro-site/src/content/projects/hasanhub-com.mdx
diff --git a/src/content/projects/hausgemacht.mdx b/astro-site/src/content/projects/hausgemacht.mdx
similarity index 100%
rename from src/content/projects/hausgemacht.mdx
rename to astro-site/src/content/projects/hausgemacht.mdx
diff --git a/src/content/projects/images/hasanhub-plausible-april-may-2022.png b/astro-site/src/content/projects/images/hasanhub-plausible-april-may-2022.png
similarity index 100%
rename from src/content/projects/images/hasanhub-plausible-april-may-2022.png
rename to astro-site/src/content/projects/images/hasanhub-plausible-april-may-2022.png
diff --git a/src/content/projects/images/hasanhub-plausible-august-2022.png b/astro-site/src/content/projects/images/hasanhub-plausible-august-2022.png
similarity index 100%
rename from src/content/projects/images/hasanhub-plausible-august-2022.png
rename to astro-site/src/content/projects/images/hasanhub-plausible-august-2022.png
diff --git a/src/content/projects/images/hasanhub-plausible-december-2022.png b/astro-site/src/content/projects/images/hasanhub-plausible-december-2022.png
similarity index 100%
rename from src/content/projects/images/hasanhub-plausible-december-2022.png
rename to astro-site/src/content/projects/images/hasanhub-plausible-december-2022.png
diff --git a/src/content/projects/images/hasanhub-screenshot.png b/astro-site/src/content/projects/images/hasanhub-screenshot.png
similarity index 100%
rename from src/content/projects/images/hasanhub-screenshot.png
rename to astro-site/src/content/projects/images/hasanhub-screenshot.png
diff --git a/src/content/projects/images/hausgemacht-screenshot.png b/astro-site/src/content/projects/images/hausgemacht-screenshot.png
similarity index 100%
rename from src/content/projects/images/hausgemacht-screenshot.png
rename to astro-site/src/content/projects/images/hausgemacht-screenshot.png
diff --git a/src/content/projects/images/hausgemacht-vibechecker-screenshots.png b/astro-site/src/content/projects/images/hausgemacht-vibechecker-screenshots.png
similarity index 100%
rename from src/content/projects/images/hausgemacht-vibechecker-screenshots.png
rename to astro-site/src/content/projects/images/hausgemacht-vibechecker-screenshots.png
diff --git a/src/content/projects/images/mitentscheiden-kabine-clip.gif b/astro-site/src/content/projects/images/mitentscheiden-kabine-clip.gif
similarity index 100%
rename from src/content/projects/images/mitentscheiden-kabine-clip.gif
rename to astro-site/src/content/projects/images/mitentscheiden-kabine-clip.gif
diff --git a/src/content/projects/images/mitentscheiden-kabine-screenshot.png b/astro-site/src/content/projects/images/mitentscheiden-kabine-screenshot.png
similarity index 100%
rename from src/content/projects/images/mitentscheiden-kabine-screenshot.png
rename to astro-site/src/content/projects/images/mitentscheiden-kabine-screenshot.png
diff --git a/src/content/projects/images/mitentscheiden-results.png b/astro-site/src/content/projects/images/mitentscheiden-results.png
similarity index 100%
rename from src/content/projects/images/mitentscheiden-results.png
rename to astro-site/src/content/projects/images/mitentscheiden-results.png
diff --git a/src/content/projects/images/mitentscheiden-screenshot.png b/astro-site/src/content/projects/images/mitentscheiden-screenshot.png
similarity index 100%
rename from src/content/projects/images/mitentscheiden-screenshot.png
rename to astro-site/src/content/projects/images/mitentscheiden-screenshot.png
diff --git a/src/content/projects/images/mitentscheiden-screenshots.jpg b/astro-site/src/content/projects/images/mitentscheiden-screenshots.jpg
similarity index 100%
rename from src/content/projects/images/mitentscheiden-screenshots.jpg
rename to astro-site/src/content/projects/images/mitentscheiden-screenshots.jpg
diff --git a/src/content/projects/images/mitentscheiden-shareables.jpg b/astro-site/src/content/projects/images/mitentscheiden-shareables.jpg
similarity index 100%
rename from src/content/projects/images/mitentscheiden-shareables.jpg
rename to astro-site/src/content/projects/images/mitentscheiden-shareables.jpg
diff --git a/src/content/projects/images/preismonitor-plausible-may-july.png b/astro-site/src/content/projects/images/preismonitor-plausible-may-july.png
similarity index 100%
rename from src/content/projects/images/preismonitor-plausible-may-july.png
rename to astro-site/src/content/projects/images/preismonitor-plausible-may-july.png
diff --git a/src/content/projects/images/preismonitor-screenshot.png b/astro-site/src/content/projects/images/preismonitor-screenshot.png
similarity index 100%
rename from src/content/projects/images/preismonitor-screenshot.png
rename to astro-site/src/content/projects/images/preismonitor-screenshot.png
diff --git a/src/content/projects/mitentscheiden-at.mdx b/astro-site/src/content/projects/mitentscheiden-at.mdx
similarity index 100%
rename from src/content/projects/mitentscheiden-at.mdx
rename to astro-site/src/content/projects/mitentscheiden-at.mdx
diff --git a/src/content/projects/preismonitor-at.mdx b/astro-site/src/content/projects/preismonitor-at.mdx
similarity index 100%
rename from src/content/projects/preismonitor-at.mdx
rename to astro-site/src/content/projects/preismonitor-at.mdx
diff --git a/src/content/quotes/write-in-blood.md b/astro-site/src/content/quotes/write-in-blood.md
similarity index 100%
rename from src/content/quotes/write-in-blood.md
rename to astro-site/src/content/quotes/write-in-blood.md
diff --git a/src/content/shows/bojack-horseman.md b/astro-site/src/content/shows/bojack-horseman.md
similarity index 100%
rename from src/content/shows/bojack-horseman.md
rename to astro-site/src/content/shows/bojack-horseman.md
diff --git a/src/data/socials.ts b/astro-site/src/data/socials.ts
similarity index 100%
rename from src/data/socials.ts
rename to astro-site/src/data/socials.ts
diff --git a/src/env.d.ts b/astro-site/src/env.d.ts
similarity index 100%
rename from src/env.d.ts
rename to astro-site/src/env.d.ts
diff --git a/src/images/chrcit-favicon.png b/astro-site/src/images/chrcit-favicon.png
similarity index 100%
rename from src/images/chrcit-favicon.png
rename to astro-site/src/images/chrcit-favicon.png
diff --git a/src/images/cut-out.png b/astro-site/src/images/cut-out.png
similarity index 100%
rename from src/images/cut-out.png
rename to astro-site/src/images/cut-out.png
diff --git a/src/images/home-profile-camera.jpg b/astro-site/src/images/home-profile-camera.jpg
similarity index 100%
rename from src/images/home-profile-camera.jpg
rename to astro-site/src/images/home-profile-camera.jpg
diff --git a/src/images/home-profile.jpg b/astro-site/src/images/home-profile.jpg
similarity index 100%
rename from src/images/home-profile.jpg
rename to astro-site/src/images/home-profile.jpg
diff --git a/src/images/profile-frontal.jpg b/astro-site/src/images/profile-frontal.jpg
similarity index 100%
rename from src/images/profile-frontal.jpg
rename to astro-site/src/images/profile-frontal.jpg
diff --git a/src/layouts/ArticleLayout.astro b/astro-site/src/layouts/ArticleLayout.astro
similarity index 100%
rename from src/layouts/ArticleLayout.astro
rename to astro-site/src/layouts/ArticleLayout.astro
diff --git a/src/layouts/BaseLayout.astro b/astro-site/src/layouts/BaseLayout.astro
similarity index 100%
rename from src/layouts/BaseLayout.astro
rename to astro-site/src/layouts/BaseLayout.astro
diff --git a/src/layouts/ListLayout.astro b/astro-site/src/layouts/ListLayout.astro
similarity index 100%
rename from src/layouts/ListLayout.astro
rename to astro-site/src/layouts/ListLayout.astro
diff --git a/src/layouts/RootLayout.astro b/astro-site/src/layouts/RootLayout.astro
similarity index 100%
rename from src/layouts/RootLayout.astro
rename to astro-site/src/layouts/RootLayout.astro
diff --git a/src/pages/[slug].astro b/astro-site/src/pages/[slug].astro
similarity index 100%
rename from src/pages/[slug].astro
rename to astro-site/src/pages/[slug].astro
diff --git a/src/pages/articles.astro b/astro-site/src/pages/articles.astro
similarity index 100%
rename from src/pages/articles.astro
rename to astro-site/src/pages/articles.astro
diff --git a/src/pages/articles/[slug].astro b/astro-site/src/pages/articles/[slug].astro
similarity index 100%
rename from src/pages/articles/[slug].astro
rename to astro-site/src/pages/articles/[slug].astro
diff --git a/src/pages/books.astro b/astro-site/src/pages/books.astro
similarity index 100%
rename from src/pages/books.astro
rename to astro-site/src/pages/books.astro
diff --git a/src/pages/books/[slug].astro b/astro-site/src/pages/books/[slug].astro
similarity index 100%
rename from src/pages/books/[slug].astro
rename to astro-site/src/pages/books/[slug].astro
diff --git a/src/pages/index.astro b/astro-site/src/pages/index.astro
similarity index 100%
rename from src/pages/index.astro
rename to astro-site/src/pages/index.astro
diff --git a/src/pages/projects.astro b/astro-site/src/pages/projects.astro
similarity index 100%
rename from src/pages/projects.astro
rename to astro-site/src/pages/projects.astro
diff --git a/src/pages/projects/[slug].astro b/astro-site/src/pages/projects/[slug].astro
similarity index 100%
rename from src/pages/projects/[slug].astro
rename to astro-site/src/pages/projects/[slug].astro
diff --git a/tailwind.config.mjs b/astro-site/tailwind.config.mjs
similarity index 100%
rename from tailwind.config.mjs
rename to astro-site/tailwind.config.mjs
diff --git a/content/articles/2023-year-in-review.mdx b/content/articles/2023-year-in-review.mdx
new file mode 100644
index 0000000..1487e49
--- /dev/null
+++ b/content/articles/2023-year-in-review.mdx
@@ -0,0 +1,283 @@
+---
+title: 2023 year in review
+description: My 2023 year in review.
+tags: []
+image: ./images/der-wanderer-ueber-dem-nebelmeer.jpg
+publishedAt: 2023-12-20
+---
+
+import { Tweet } from "@astro-community/astro-embed-twitter";
+import AndererseitsInstagram from "../../components/embeds/AndererseitsInstagram.astro"
+import ExternalLink from "../../components/ExternalLink.astro"
+import { YouTube } from "@astro-community/astro-embed-youtube";
+
+2023 was a wild ride.
+
+I started the year with a new job, got fired after 3 weeks, got involved in politics, made apps for sex positive parties, started another new job, was invited to consult an Austrian minister on a new law and much more.
+
+## I launched my first project to 30.000 people
+The political streamer Hasanabi allows his fans to clip his stream VODs, upload those clips to YouTube and make money from his content.
+
+Due to this, there are 100+ different YouTube channels dedicated to him. Some of these fan channels have over 100.000 subscribers. I saw the opportunity to build something useful for his community by creating a web app which aggregates all of these channels into one feed. It's called hasanhub.com .
+
+
+
+I first launched the project in April 2022 and Hasan looked at it on his stream while live to roughly 30.000 people.
+
+
+
+The active users stagnated at around 30 per day until in December 2022 and January 2023 Hasan opened it on stream again. After that exposure, the active users went up to 300-400 per day.
+
+
+
+In January 2023 I decided to create a separate Twitter account (@hasanhub_com ) for the project and had a tweet go viral with ~500.000 impressions:
+
+
+
+Check out the [project page for Hasanhub](/projects/hasanhub-com).
+
+## I got my dream job (and was fired after 3 weeks)
+Between July and September 2022 I spent ~50 hours researching and ideating on a link-in-bio style microsite builder. The concept was that instead of just links to external sites, the app would automatically fetch the latest content from Twitter, Instagram, YouTube, Spotify, RSS, etc.
+
+I submitted the idea to an incubator but it was rejected.
+
+In January 2023 I talked about it on Twitter and got a reply from a company called Bento. They were building just that and were looking for a founding product engineer:
+
+
+After a few rounds of interviews and a 1 day hackathon , I received an offer and accepted it.
+
+For my first week I traveled to Berlin to meet the team:
+
+
+
+My first feature was a gorgeous settings UI + some auth related stuff. I shipped it after 3 days:
+
+
+Besides the regular marketing by Bento I decided to also post about it on multiple subreddits. The posts got ~300.000 impressions, thousands of upvotes and hundreds of comments. It also drove a good bit of extra sign-ups to Bento.
+
+
+
+ I started a new job this week and shipped this gorgeous settings UI
+ yesterday
+
+ byu/chrcit inwebdev
+
+
+After my second week I shipped new widgets for Figma, Dribbble and Behance:
+
+
+In my third week I worked on interactive media player widgets for Spotify with beautiful animations:
+
+
+But before I could ship those I got fired.
+
+Earlier in the same week I asked to get a few days more time to work on the next feature. I had been working 50–60 hours per week up to that point and wanted to take the weekend off to recharge.
+
+I told my CTO that developing and launching a big, new feature every week wouldn't be sustainable for me long-term. He told me that that is startup life and that we could talk more about it on Friday with the CEO. On Friday I got fired for not being a good fit.
+
+10 weeks later Bento was sold to Linktree only 6 months after it was first launched. This is good for Bento and amazing for Linktree.
+
+I don't hold any ill will towards the people at Bento. In the few weeks I worked there I learned a lot about product development, engineering, design, and marketing from the team. I also figured out what I want and don't want from a job.
+
+## An app I made helped get a socialist elected
+Georg , a good friend of mine, is active in the SPÖ (the social democratic party of Austria). In the early summer of 2023 they were holding an internal election for the new party leader.
+
+The Junge Generation ("young generation" in German), the youth wing of the party wanted to create an app to help people decide which of the internal candidates to vote for.
+
+Georg asked me if I wanted to collaborate on this application and I agreed. The concept was modelled after wahlkabine.at , a political questionnaire which helps you find the party which best represents your political views.
+
+We went from idea to launch of mitentscheiden.at in 3 weeks.
+
+
+
+The 3 candidates all answered 42 questions via the app and the users could then answer the same questions. After finishing the questionnaire the user is shown how much they match with the 3 candidates as well as multiple pages to compare their answers with the candidates.
+
+
+
+
+
+The launch was a big success with around ~27.000 people filling out the questionnaire. The app also went viral on Twitter with over 400.000 impressions and multiple high profile people in the Austrian political bubble sharing it.
+
+It was covered by [multiple](https://www.puls24.at/news/politik/spoe-wahl-41-fragen-und-die-antworten-von-babler-doskozil-und-rendi-wagner/295388) [national](https://kurier.at/politik/inland/test-fuer-nicht-mitglieder-welcher-spoe-kandidat-wuerde-zu-ihnen-passen/402422507) [newspapers](https://www.derstandard.at/story/2000145782957/was-man-ueber-die-rote-vorsitzwahl-wissen-muss), [meme](https://www.instagram.com/p/CrX6u3nMem0/) [pages](https://www.instagram.com/p/CrYPyLWsp7w) and the largest TV news program of the country (ZIB 1).
+
+A question regarding removing abortion from the criminal code resulted in a controversy. The more conservative candidate (and front-runner) Doskozil at first answered with “no” but after a backlash on social media changed his answer to “yes”.
+
+The incumbent candidate Rendi-Wagner dropped out of the race after she came in last in a party wide poll.
+
+The election was held in June and ~600 party officials voted. Initially it was announced that the more conservative candidate Doskozil won with 52% of the vote.
+
+But a few days later it was discovered that there was a [mistake in the Excel sheet](https://www.theguardian.com/world/2023/jun/05/austrian-social-democrats-announce-wrong-leader-after-technical-error) used to calculate the results. The votes were flipped by accident and actually the more radical candidate Babler won.
+
+Due to the close result it's possible that the controversy around the abortion question could have swayed the election in Babler's favor.
+
+2 months after the launch I used the project as a case study for my first dev talk which I held at the Technical University of Vienna. I uploaded the recording to YouTube and got over 1000 views on it in a few days.
+
+
+
+I also joined the party and founded the Web Task Force together with [Georg Windhaber](https://georgwindhaber.com).
+
+We are currently working on multiple web projects to campaign for the upcoming national election in September 2024 as well as the European Union elections in July.
+
+
+
+Check out the [project page for mitentscheiden.at](/projects/mitentscheiden-at).
+
+## A (shitty) website I made might change the law
+In 2022 and 2023 inflation was rising in Austria and all over the world. A big driver was the increase in grocery prices.
+
+In May 2023 Martin Kocher, the Austrian Minister for Labour and Economy announced plans for a state grocery price tracker for a few selected products. The plan was quite vague and it wouldn't launch anytime before fall 2023.
+
+Lukas , a good friend of mine, suggested that we should just build this ourselves.
+
+We went from idea to launch in 2 weeks. The site is called preismonitor.at and it's a simple website which shows the price development of ~300 products in 3 supermarkets.
+
+
+
+Even though we launched as fast as possible there were 3 other price trackers that were released before our site:
+
+- heisse-preisse.io by Mario Zechner
+- teuerungsportal.at by Bernhard Ruckenstuhl
+- preisrunter.at by David Wurm
+
+I reached out to all of them and we started a group chat.
+
+
+
+Both Lukas and I didn't have much time to work on the project after launch. Due to the other projects existing we didn't see a strong need to continue developing it further for the moment.
+
+We still got a few mentions in both national and international media.
+
+
+
+In July the Austrian Federal Competition Authority reached out to us and the other grocery price providers to ask us a few questions about our projects. They have been investigating the supermarket industry since fall 2022.
+
+Our answers were then used in a final report which was handed over to Martin Kocher, the Minister of Labour and Economy.
+
+The report recommended implementing a law which would force supermarkets to report their price data to the ministry which then would make it available via an API.
+
+This would enable developers, researchers and journalists to utilize the data for many varied use cases.
+
+
+
+In September the Minister for Labour and Economy invited us to consult him on the exact implementation of the law. We were invited together with our friends from heisse-preisse.io , teuerungsportal.at and preisrunter.at .
+
+
+
+In mid October our crawler stopped working and both Lukas and I were too busy to fix it. We decided to pause development until we have more time.
+
+We intend to dump our crawler and instead use the data from heisse-preisse.io or the government API (if it actually comes).
+
+A long-term idea is to create a grocery list app which is enhanced by this pricing data. This would allow users to see which supermarket is the cheapest for their current grocery list.
+
+Check out the [project page for Preismonitor](/projects/preismonitor-at).
+
+## I make apps for sex positive parties
+hausgemacht ("homemade" in German) is the biggest techno collective in Vienna. They organize events in various clubs in the city. Besides regular techno clubbings they also host sex positive parties.
+
+The people behind it are focused on creating a safeR space for their guests, especially FLINTA* people. They make this possible via an online application process before the sex positive parties and a large awareness team looking after the safety and well-being of the guests during the event.
+
+After attending my first event in February 2023 I decided I wanted to join the collective. I reached out to them and offered to support them with their custom-made application process.
+
+
+
+After meeting with the internet team and getting to know each other they invited me to become a member of the collective.
+
+The application process is handled via a web app built by members of the collective. Because of the sensitive nature of the data the app is built with a strong focus on data protection and privacy.
+
+Alois Paulin built the backend which is architected to minimize data stored and disclosed to members of the organisation. There is also great care to ensure that all personal data is encrypted and stored securely. Once the need for the data is gone it is deleted.
+
+Patrick Ludewig designed and built the frontend. Vlad I. acted as a product owner/manager for this and many other projects.
+
+This year I focused on improving and extending the way we check in our guests.
+
+The team built a web app which allows guests to anonymously check in via a passport scanner. The app connects to the scanner and matches the name against the ticketing system. The person selecting the guest will only see the image read from the passport but will not see the name.
+
+The data from the passport (i.e. the image) is only processed and transported in a secure local network. It never leaves the local network and is deleted immediately after the event.
+
+This approach is quite innovative and Alois even wrote a paper about it.
+
+
+
+Together with Alois I refactored the app to stabilize the integration of the passport scanner and simplify the UI for the end user. We also trialed processing other IDs via OCR.
+
+A few hours before an event in September our backend server went down and we didn't have time to port it to another infrastructure.
+
+I quickly built a new web app for scanning the ticket QR code and enriching it with our guest data. Our team was then able to use the app to check in or reject guests at the door.
+
+
+
+I kept iterating on this app for 2 other events and added many new features. The app is now used at all our events and is the main tool for checking in guests.
+
+
+
+The plan is to eventually merge the passport scanner and the ticket scanner into one application so both methods can be used interchangeably.
+
+Our focus for 2024 is to unify all the different systems into one web application. Over the next 2 years this will evolve into a bespoke event management system for the collective.
+
+Check out the [project page for hausgemacht](/projects/hausgemacht).
+
+## Scaling a media site to millions of users
+After getting fired I applied to around 15 companies and got a few offers.
+
+I accepted an offer from RegionalMedien Austria. They're a media company which publishes 200+ regional print newspapers in Austria as well as an online portal: meinbezirk.at .
+
+The current online platform is managed by an external provider. In 2023 the company started working on an in-house developed relaunch of the whole site.
+
+Currently the site gets around 1.000.000 unique daily visitors. The goal is to transition route by route from the old platform to the new one.
+
+In my first month I got promoted to Lead Full-Stack Developer and started taking ownership over the development process.
+
+I'm very excited to work on a project of this scale.
+
+## Starting an agency?
+I've been freelancing since early high school (2012) and after getting fired I briefly thought about doing it full-time.
+
+To get something out there I built a coming soon page in a few hours while hungover and launched it on Twitter:
+
+
+
+After a few weeks the idea subsided again but I wanted to keep freelancing on the side to fund some other projects of mine.
+
+I started working with a digital agency called Anwert where I do web consulting, build WordPress plugins and create some social media posts .
+
+Over the summer I started supporting Mindnode , one of the most popular Mac/iOS productivity apps, with their website.
+
+My biggest freelance project in 2023 was the relaunch of houseofstrauss.at and zoegernitz.com .
+
+Both sites were commissioned by a real estate company which bought and renovated the Casino Zögernitz which used to be the old concert halls of Johann Strauss and his son. The building now houses a museum, a restaurant, and a concert hall/event location.
+
+The project's creative director Georg Brennwald designed 20+ components for the site.
+I then implemented them as full-stack components in Next.js which can be composed together via a headless page builder inside of Sanity .
+
+I'm still not 100% certain where to take Arthouse in the future, but for, now I'm happy to have it as a vehicle for my freelancing work.
+
+If you are interested in collaborating on a project with me you can reach out via email . I offer an initial free 30 minutes consulting call and after that my rate is 100€ per hour.
+
+
+## Supporting journalism for and from people with disabilities
+andererseits ("otherwise" in German) is a media startup based in Vienna about, for and from people with disabilities. Markus , a good friend of mine told me about them early 2023 and suggested that I could support them with their IT systems.
+
+I was interested because I have a disability myself due to an accident 6 years ago and always wanted to work on a project which helps people with disabilities.
+
+
+
+In fall and winter 2023 I met up with Lukas , one of the co-founders of andererseits and I automated some of their internal processes. These automations have saved them around 10% of their person hours per week which allows them to focus more on their core business.
+
+At the end of the year I also wrote a newsletter about my experience with disability:
+
+
+
+
+## Prospects for 2024
+I could have never imagined how 2023 would turn out. The year brought tons of new experiences and many shifts in my perspective on life and success.
+
+In 2024 I'm going to continue working on many of the projects which started in 2023. For the first time in my life I'm not unsure about what I want to spend my time on.
+
+The only new thing planned in 2024 is creating YouTube videos about my projects and the societal context around them.
+
+---
+Thank you for reading this far. If you want to stay up to date with my projects you can follow me on Twitter , YouTube or Instagram .
\ No newline at end of file
diff --git a/content/articles/hello-world.mdx b/content/articles/hello-world.mdx
new file mode 100644
index 0000000..bac21e2
--- /dev/null
+++ b/content/articles/hello-world.mdx
@@ -0,0 +1,10 @@
+---
+title: Hello World
+description: My first article in the new Remix site
+date: 2024-01-01
+tags: [remix, react]
+---
+
+# Hello World
+
+This is my first article in the new Remix site. I'm excited to share my thoughts and experiences with you.
\ No newline at end of file
diff --git a/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg b/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg
new file mode 100644
index 0000000..b07c471
Binary files /dev/null and b/content/articles/images/der-wanderer-ueber-dem-nebelmeer.jpg differ
diff --git a/content/books/a-liberated-mind.md b/content/books/a-liberated-mind.md
new file mode 100644
index 0000000..0735dce
--- /dev/null
+++ b/content/books/a-liberated-mind.md
@@ -0,0 +1,11 @@
+---
+title: A Liberated Mind
+author: Steven C. Hayes
+description: A guide to overcoming mental challenges and transforming one's life through Acceptance and Commitment Therapy (ACT).
+category: Self-Development
+tags: [mental health, self-help, ACT]
+cover: ./covers/a-liberated-mind-cover.jpg
+rating: 8
+year: 2019
+url: https://www.goodreads.com/en/book/show/43330899
+---
diff --git a/content/books/antifragile.md b/content/books/antifragile.md
new file mode 100644
index 0000000..ac4264b
--- /dev/null
+++ b/content/books/antifragile.md
@@ -0,0 +1,11 @@
+---
+title: Antifragile
+author: Nassim Nicholas Taleb
+description: A guide to embracing and thriving in an uncertain world by building systems that benefit from disorder and volatility.
+category: Politics, History, and Economics
+tags: [antifragility, uncertainty, resilience]
+cover: ./covers/antifragile-cover.jpg
+rating: 9
+year: 2012
+url: https://www.goodreads.com/book/show/13530973-antifragile
+---
diff --git a/content/books/black-swan.md b/content/books/black-swan.md
new file mode 100644
index 0000000..2cd33d8
--- /dev/null
+++ b/content/books/black-swan.md
@@ -0,0 +1,11 @@
+---
+title: The Black Swan
+author: Nassim Nicholas Taleb
+description: A exploration of the impact of rare and unpredictable events, emphasizing the importance of understanding uncertainty in decision-making.
+category: Politics, History, and Economics
+tags: [black swan events, uncertainty, decision-making]
+cover: ./covers/the-black-swan-cover.webp
+rating: 8
+year: 2007
+url: https://www.goodreads.com/book/show/242472.The_Black_Swan
+---
diff --git a/content/books/brave-new-world.md b/content/books/brave-new-world.md
new file mode 100644
index 0000000..07b6e37
--- /dev/null
+++ b/content/books/brave-new-world.md
@@ -0,0 +1,11 @@
+---
+title: Brave New World
+author: Aldous Huxley
+description: A dystopian novel that explores a futuristic society where technology, consumerism, and conformity dictate human existence.
+category: Fiction
+tags: [dystopian, science fiction, societal critique]
+cover: ./covers/brave-new-world-cover.jpeg
+rating: 9
+year: 1932
+url: https://www.goodreads.com/book/show/5129.Brave_New_World
+---
diff --git a/content/books/breaking-out-of-homeostasis.md b/content/books/breaking-out-of-homeostasis.md
new file mode 100644
index 0000000..164dc48
--- /dev/null
+++ b/content/books/breaking-out-of-homeostasis.md
@@ -0,0 +1,11 @@
+---
+title: Breaking Out of Homeostasis
+author: Ludwig Sunstrum
+description: A guide to overcoming the inertia of homeostasis and transforming one's life through challenging one's beliefs and habits.
+category: Self-Development
+tags: [self-transformation, self-inquiry, personal growth]
+cover: ./covers/breaking-out-of-homeostasis-cover.jpg
+rating: 8
+year: 2017
+url: https://www.goodreads.com/book/show/37276118-breaking-out-of-homeostasis
+---
diff --git a/content/books/capitalist-realism.md b/content/books/capitalist-realism.md
new file mode 100644
index 0000000..e568bd8
--- /dev/null
+++ b/content/books/capitalist-realism.md
@@ -0,0 +1,11 @@
+---
+title: Capitalist Realism
+author: Mark Fisher
+description: An exploration of the pervasive influence of capitalist ideology on contemporary culture and the sense of resignation it creates.
+category: Politics, History, and Economics
+tags: [capitalism, ideology, culture]
+cover: ./covers/capitalist-realism-cover.jpg
+rating: 8
+year: 2009
+url: https://www.goodreads.com/book/show/40612134-capitalist-realism
+---
diff --git a/content/books/covers/a-liberated-mind-cover.jpg b/content/books/covers/a-liberated-mind-cover.jpg
new file mode 100644
index 0000000..7c96271
Binary files /dev/null and b/content/books/covers/a-liberated-mind-cover.jpg differ
diff --git a/content/books/covers/antifragile-cover.jpg b/content/books/covers/antifragile-cover.jpg
new file mode 100644
index 0000000..a570f07
Binary files /dev/null and b/content/books/covers/antifragile-cover.jpg differ
diff --git a/content/books/covers/brave-new-world-cover.jpeg b/content/books/covers/brave-new-world-cover.jpeg
new file mode 100644
index 0000000..991fb14
Binary files /dev/null and b/content/books/covers/brave-new-world-cover.jpeg differ
diff --git a/content/books/covers/breaking-out-of-homeostasis-cover.jpg b/content/books/covers/breaking-out-of-homeostasis-cover.jpg
new file mode 100644
index 0000000..ba18947
Binary files /dev/null and b/content/books/covers/breaking-out-of-homeostasis-cover.jpg differ
diff --git a/content/books/covers/capitalist-realism-cover.jpg b/content/books/covers/capitalist-realism-cover.jpg
new file mode 100644
index 0000000..08baa9c
Binary files /dev/null and b/content/books/covers/capitalist-realism-cover.jpg differ
diff --git a/content/books/covers/dark-money-cover.jpeg b/content/books/covers/dark-money-cover.jpeg
new file mode 100644
index 0000000..4ab0a7b
Binary files /dev/null and b/content/books/covers/dark-money-cover.jpeg differ
diff --git a/content/books/covers/debt-the-first-5000-years-cover.jpg b/content/books/covers/debt-the-first-5000-years-cover.jpg
new file mode 100644
index 0000000..f32566c
Binary files /dev/null and b/content/books/covers/debt-the-first-5000-years-cover.jpg differ
diff --git a/content/books/covers/flow-cover.jpg b/content/books/covers/flow-cover.jpg
new file mode 100644
index 0000000..fc2a5d5
Binary files /dev/null and b/content/books/covers/flow-cover.jpg differ
diff --git a/content/books/covers/fooled-by-randomness-cover.jpg b/content/books/covers/fooled-by-randomness-cover.jpg
new file mode 100644
index 0000000..3586717
Binary files /dev/null and b/content/books/covers/fooled-by-randomness-cover.jpg differ
diff --git a/content/books/covers/gateless-cover.jpg b/content/books/covers/gateless-cover.jpg
new file mode 100644
index 0000000..edc7e14
Binary files /dev/null and b/content/books/covers/gateless-cover.jpg differ
diff --git a/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg b/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg
new file mode 100644
index 0000000..c6a69ac
Binary files /dev/null and b/content/books/covers/i-wrote-this-book-because-i-love-you-cover.jpg differ
diff --git a/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp b/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp
new file mode 100644
index 0000000..2cfca46
Binary files /dev/null and b/content/books/covers/influencer-die-ideologie-des-werbekoerpers-cover.webp differ
diff --git a/content/books/covers/kill-all-normies-cover.webp b/content/books/covers/kill-all-normies-cover.webp
new file mode 100644
index 0000000..47a6859
Binary files /dev/null and b/content/books/covers/kill-all-normies-cover.webp differ
diff --git a/content/books/covers/less-is-more-cover.webp b/content/books/covers/less-is-more-cover.webp
new file mode 100644
index 0000000..a3ad4f8
Binary files /dev/null and b/content/books/covers/less-is-more-cover.webp differ
diff --git a/content/books/covers/mans-search-for-meaning-cover.jpg b/content/books/covers/mans-search-for-meaning-cover.jpg
new file mode 100644
index 0000000..e19ca87
Binary files /dev/null and b/content/books/covers/mans-search-for-meaning-cover.jpg differ
diff --git a/content/books/covers/of-mice-and-men-cover.jpg b/content/books/covers/of-mice-and-men-cover.jpg
new file mode 100644
index 0000000..bfdf28c
Binary files /dev/null and b/content/books/covers/of-mice-and-men-cover.jpg differ
diff --git a/content/books/covers/seeing-that-frees-cover.jpg b/content/books/covers/seeing-that-frees-cover.jpg
new file mode 100644
index 0000000..fce1dc3
Binary files /dev/null and b/content/books/covers/seeing-that-frees-cover.jpg differ
diff --git a/content/books/covers/skin-in-the-game-cover.jpg b/content/books/covers/skin-in-the-game-cover.jpg
new file mode 100644
index 0000000..7fadf7b
Binary files /dev/null and b/content/books/covers/skin-in-the-game-cover.jpg differ
diff --git a/content/books/covers/survival-of-the-richest-cover.jpg b/content/books/covers/survival-of-the-richest-cover.jpg
new file mode 100644
index 0000000..7c56a9f
Binary files /dev/null and b/content/books/covers/survival-of-the-richest-cover.jpg differ
diff --git a/content/books/covers/the-art-of-learning-cover.jpg b/content/books/covers/the-art-of-learning-cover.jpg
new file mode 100644
index 0000000..10f989c
Binary files /dev/null and b/content/books/covers/the-art-of-learning-cover.jpg differ
diff --git a/content/books/covers/the-black-swan-cover.webp b/content/books/covers/the-black-swan-cover.webp
new file mode 100644
index 0000000..f76676d
Binary files /dev/null and b/content/books/covers/the-black-swan-cover.webp differ
diff --git a/content/books/covers/the-count-of-monte-cristo-cover.jpg b/content/books/covers/the-count-of-monte-cristo-cover.jpg
new file mode 100644
index 0000000..2dd90dc
Binary files /dev/null and b/content/books/covers/the-count-of-monte-cristo-cover.jpg differ
diff --git a/content/books/covers/the-divide-cover.jpg b/content/books/covers/the-divide-cover.jpg
new file mode 100644
index 0000000..38f8e43
Binary files /dev/null and b/content/books/covers/the-divide-cover.jpg differ
diff --git a/content/books/covers/the-mind-illuminated-cover.jpg b/content/books/covers/the-mind-illuminated-cover.jpg
new file mode 100644
index 0000000..c963438
Binary files /dev/null and b/content/books/covers/the-mind-illuminated-cover.jpg differ
diff --git a/content/books/covers/the-paleo-manifesto-cover.jpg b/content/books/covers/the-paleo-manifesto-cover.jpg
new file mode 100644
index 0000000..f2ed785
Binary files /dev/null and b/content/books/covers/the-paleo-manifesto-cover.jpg differ
diff --git a/content/books/covers/the-science-of-enlightenment-cover.jpg b/content/books/covers/the-science-of-enlightenment-cover.jpg
new file mode 100644
index 0000000..641af31
Binary files /dev/null and b/content/books/covers/the-science-of-enlightenment-cover.jpg differ
diff --git a/content/books/covers/vagabonding-cover.jpg b/content/books/covers/vagabonding-cover.jpg
new file mode 100644
index 0000000..149502d
Binary files /dev/null and b/content/books/covers/vagabonding-cover.jpg differ
diff --git a/content/books/covers/we-learn-nothing-cover.jpg b/content/books/covers/we-learn-nothing-cover.jpg
new file mode 100644
index 0000000..11db804
Binary files /dev/null and b/content/books/covers/we-learn-nothing-cover.jpg differ
diff --git a/content/books/covers/winners-take-all-cover.jpg b/content/books/covers/winners-take-all-cover.jpg
new file mode 100644
index 0000000..8b64c45
Binary files /dev/null and b/content/books/covers/winners-take-all-cover.jpg differ
diff --git a/content/books/dark-money.md b/content/books/dark-money.md
new file mode 100644
index 0000000..6fbe000
--- /dev/null
+++ b/content/books/dark-money.md
@@ -0,0 +1,11 @@
+---
+title: Dark Money
+author: Jane Mayer
+description: An investigative journey into the influence of hidden and untraceable money on politics and democracy.
+category: Politics, History, and Economics
+tags: [dark money, political influence, democracy]
+cover: ./covers/dark-money-cover.jpeg
+rating: 8
+year: 2016
+url: https://www.goodreads.com/book/show/27833494-dark-money
+---
diff --git a/content/books/debt-the-first-5000-years.md b/content/books/debt-the-first-5000-years.md
new file mode 100644
index 0000000..0c32837
--- /dev/null
+++ b/content/books/debt-the-first-5000-years.md
@@ -0,0 +1,11 @@
+---
+title: "Debt: The First 5000 Years"
+author: David Graeber
+description: An anthropological exploration of the history and impact of debt on societies throughout the ages.
+category: Politics, History, and Economics
+tags: [debt, economic history, anthropology]
+cover: ./covers/debt-the-first-5000-years-cover.jpg
+rating: 8
+year: 2011
+url: https://www.goodreads.com/book/show/6617037-debt
+---
diff --git a/content/books/flow.md b/content/books/flow.md
new file mode 100644
index 0000000..bbcda28
--- /dev/null
+++ b/content/books/flow.md
@@ -0,0 +1,11 @@
+---
+title: Flow
+author: Mihaly Csikszentmihalyi
+description: A study of the state of optimal experience, in which people are so involved in an activity that nothing else seems to matter.
+category: Self-Development
+tags: [flow, psychology, optimal experience]
+cover: ./covers/flow-cover.jpg
+rating: 10
+year: 1990
+url: https://goodreads.com
+---
diff --git a/content/books/fooled-by-randomness.md b/content/books/fooled-by-randomness.md
new file mode 100644
index 0000000..7f3f7e9
--- /dev/null
+++ b/content/books/fooled-by-randomness.md
@@ -0,0 +1,13 @@
+---
+title: Fooled by Randomness
+author: Nassim Nicholas Taleb
+description: What role does luck, randomness, and uncertainty have in financial markets, decision-making and life.
+category: Politics, History, and Economics
+tags: [randomness, luck, decision-making, financial markets]
+cover: ./covers/fooled-by-randomness-cover.jpg
+rating: 7
+year: 2001
+url: https://www.goodreads.com/book/show/38315.Fooled_by_Randomness
+---
+
+An exploration of the role of luck, randomness, and uncertainty in financial markets and decision-making. Nassim Nicholas Taleb challenges conventional wisdom and highlights the impact of randomness on outcomes, particularly in the realm of finance. This book provides insights into the illusions of control and certainty, urging readers to reconsider their understanding of success and failure in various domains.
diff --git a/content/books/gateless.md b/content/books/gateless.md
new file mode 100644
index 0000000..44befe1
--- /dev/null
+++ b/content/books/gateless.md
@@ -0,0 +1,11 @@
+---
+title: Gateless
+author: Sebastian Marshall & Kai Zau
+description: How to become successful in a world without gatekeepers.
+category: Self-Development
+tags: [self-inquiry, spirituality, personal transformation]
+cover: ./covers/gateless-cover.jpg
+rating: 9
+year: 2014
+url: https://www.goodreads.com/en/book/show/23642948
+---
diff --git a/content/books/i-wrote-this-book-because-i-love-you.md b/content/books/i-wrote-this-book-because-i-love-you.md
new file mode 100644
index 0000000..884c16e
--- /dev/null
+++ b/content/books/i-wrote-this-book-because-i-love-you.md
@@ -0,0 +1,11 @@
+---
+title: I Wrote This Book Because I Love You
+author: Tim Kreider
+description: A collection of personal essays delving into love, relationships, and the author's reflections on various aspects of life.
+category: Entertainment
+tags: [personal essays, love, relationships]
+cover: ./covers/i-wrote-this-book-because-i-love-you-cover.jpg
+rating: 8
+year: 2018
+url: https://www.goodreads.com/en/book/show/29430830
+---
diff --git a/content/books/influencer-die-ideologie-des-werbekoerpers.md b/content/books/influencer-die-ideologie-des-werbekoerpers.md
new file mode 100644
index 0000000..6bffbdb
--- /dev/null
+++ b/content/books/influencer-die-ideologie-des-werbekoerpers.md
@@ -0,0 +1,11 @@
+---
+title: "Influencer: Die Ideologie des Werbekörpers"
+author: Ole Nymoen und Wolfgang M. Schmitt
+description: Eine kritische Analyse der Influencer-Kultur und ihrer Auswirkungen auf die Gesellschaft.
+category: Politics, History, and Economics
+tags: [influencer, social media, capitalism, advertising, marketing]
+cover: ./covers/influencer-die-ideologie-des-werbekoerpers-cover.webp
+rating: 7
+year: 2021
+url: https://www.goodreads.com/en/book/show/56895557
+---
diff --git a/content/books/kill-all-normies.md b/content/books/kill-all-normies.md
new file mode 100644
index 0000000..8bc9b4e
--- /dev/null
+++ b/content/books/kill-all-normies.md
@@ -0,0 +1,11 @@
+---
+title: Kill All Normies
+author: Angela Nagle
+description: A critical examination of online culture, exploring the rise of internet subcultures and their impact on politics and society.
+category: Politics, History, and Economics
+tags: [internet culture, subcultures, politics]
+cover: ./covers/kill-all-normies-cover.webp
+rating: 7
+year: 2017
+url: https://www.goodreads.com/book/show/34313577-kill-all-normies
+---
diff --git a/content/books/less-is-more.md b/content/books/less-is-more.md
new file mode 100644
index 0000000..6e00a5a
--- /dev/null
+++ b/content/books/less-is-more.md
@@ -0,0 +1,11 @@
+---
+title: Less is more
+author: Jason Hickel
+description: Climate breakdown and the threat of ecological collapse demand that we rethink our relationship with capitalism and economic growth.
+category: Politics, History, and Economics
+tags: [politics, economics, inequality, poverty, growth, capitalism]
+cover: ./covers/less-is-more-cover.webp
+rating: 7.5
+year: 2015
+url: https://www.goodreads.com/book/show/25942786-the-mind-illuminated
+---
diff --git a/content/books/mans-search-for-meaning.md b/content/books/mans-search-for-meaning.md
new file mode 100644
index 0000000..e23c24f
--- /dev/null
+++ b/content/books/mans-search-for-meaning.md
@@ -0,0 +1,11 @@
+---
+title: Man's Search for Meaning
+author: Viktor E. Frankl
+description: Based on the author's experience surviving Auschwitz and other concentration camps, this book explores the human capacity to find meaning in the face of suffering.
+category: Politics, History, and Economics
+tags: [meaning of life, Holocaust, psychology]
+cover: ./covers/mans-search-for-meaning-cover.jpg
+rating: 8
+year: 1946
+url: https://www.goodreads.com/book/show/4069.Man_s_Search_for_Meaning
+---
diff --git a/content/books/of-mice-and-men.md b/content/books/of-mice-and-men.md
new file mode 100644
index 0000000..2de1e1e
--- /dev/null
+++ b/content/books/of-mice-and-men.md
@@ -0,0 +1,13 @@
+---
+title: Of Mice and Men
+author: John Steinbeck
+description: Two friends come to work at a farm during the Great Depression.
+category: Fiction
+tags: [classic literature, friendship, Great Depression]
+cover: ./covers/of-mice-and-men-cover.jpg
+rating: 7.5
+year: 1937
+url: https://goodreads.com
+---
+
+A poignant exploration of friendship, dreams, and the challenges faced by itinerant workers during the Great Depression. John Steinbeck's "Of Mice and Men" is a novella that delves into the lives of George Milton and Lennie Small as they navigate a world marked by hardship and societal struggles. The narrative offers profound insights into human relationships and societal dynamics.
diff --git a/content/books/seeing-that-frees.md b/content/books/seeing-that-frees.md
new file mode 100644
index 0000000..85efd30
--- /dev/null
+++ b/content/books/seeing-that-frees.md
@@ -0,0 +1,11 @@
+---
+title: Seeing That Frees
+author: Rob Burbea
+description: A comprehensive guide to meditation and mindfulness, exploring the transformative power of deep insight and perceptual freedom.
+category: Meditation
+tags: [meditation, mindfulness, insight]
+cover: ./covers/seeing-that-frees-cover.jpg
+rating: 10
+year: 2014
+url: https://www.goodreads.com/book/show/25172403-seeing-that-frees
+---
diff --git a/content/books/skin-in-the-game.md b/content/books/skin-in-the-game.md
new file mode 100644
index 0000000..7ca31be
--- /dev/null
+++ b/content/books/skin-in-the-game.md
@@ -0,0 +1,11 @@
+---
+title: Skin in the Game
+author: Nassim Nicholas Taleb
+description: What role should risk play in how we structure our lives and society as a whole?
+category: Politics, History, and Economics
+tags: [risk, uncertainty, decision-making]
+cover: ./covers/skin-in-the-game-cover.jpg
+rating: 8
+year: 2015
+url: https://www.goodreads.com/book/show/36200141-skin-in-the-game
+---
diff --git a/content/books/survival-of-the-richest.md b/content/books/survival-of-the-richest.md
new file mode 100644
index 0000000..ff5e06f
--- /dev/null
+++ b/content/books/survival-of-the-richest.md
@@ -0,0 +1,11 @@
+---
+title: Survival of the Richest
+author: Douglas Rushkoff
+description: The ultra-rich are preparing for the end of the world while causing it at the same time.
+category: Politics, History, and Economics
+tags: [politics, economics, inequality, poverty, growth, capitalism]
+cover: ./covers/survival-of-the-richest-cover.jpg
+rating: 8
+year: 2022
+url: https://www.goodreads.com/book/show/60165391-survival-of-the-richest
+---
diff --git a/content/books/the-art-of-learning.md b/content/books/the-art-of-learning.md
new file mode 100644
index 0000000..f241f82
--- /dev/null
+++ b/content/books/the-art-of-learning.md
@@ -0,0 +1,11 @@
+---
+title: The Art of Learning
+author: Josh Waitzkin
+description: A child chess prodigy and Tai Chi world champion shares his journey on how to learn and excel at peak levels.
+category: Self-Development
+tags: [learning, skill acquisition, personal development]
+cover: ./covers/the-art-of-learning-cover.jpg
+rating: 10
+year: 2007
+url: https://www.goodreads.com/book/show/857333.The_Art_of_Learning
+---
diff --git a/content/books/the-count-of-monte-cristo.md b/content/books/the-count-of-monte-cristo.md
new file mode 100644
index 0000000..0d269c2
--- /dev/null
+++ b/content/books/the-count-of-monte-cristo.md
@@ -0,0 +1,11 @@
+---
+title: The Count of Monte Cristo
+author: Alexandre Dumas
+description: A classic tale of revenge, betrayal, and redemption as Edmond Dantès seeks justice after being wrongfully imprisoned. The first classic I read.
+category: Fiction
+tags: [classic literature, revenge, betrayal]
+cover: ./covers/the-count-of-monte-cristo-cover.jpg
+rating: 9
+year: 1844
+url: https://www.goodreads.com/book/show/7126.The_Count_of_Monte_Cristo
+---
diff --git a/content/books/the-divide.md b/content/books/the-divide.md
new file mode 100644
index 0000000..bc7e62a
--- /dev/null
+++ b/content/books/the-divide.md
@@ -0,0 +1,11 @@
+---
+title: The Divide
+author: Jason Hickel
+description: A brief history of global inequality and the injustices of the modern economic system.
+category: Politics, History, and Economics
+tags: [income inequality, society, wealth gap]
+cover: ./covers/the-divide-cover.jpg
+rating: 9
+year: 2014
+url: https://www.goodreads.com/book/show/18774994-the-divide
+---
diff --git a/content/books/the-mind-illuminated.md b/content/books/the-mind-illuminated.md
new file mode 100644
index 0000000..39d4854
--- /dev/null
+++ b/content/books/the-mind-illuminated.md
@@ -0,0 +1,11 @@
+---
+title: The Mind Illuminated
+author: Culadasa (John Yates) and Matthew Immergut
+description: A comprehensive guide to meditation taking you from the basics all the way to the deepest states of consciousness.
+category: Meditation
+tags: [meditation, buddhism, neuroscience, consciousness]
+cover: ./covers/the-mind-illuminated-cover.jpg
+rating: 10
+year: 2015
+url: https://www.goodreads.com/book/show/25942786-the-mind-illuminated
+---
diff --git a/content/books/the-paleo-manifesto.md b/content/books/the-paleo-manifesto.md
new file mode 100644
index 0000000..e39d9f2
--- /dev/null
+++ b/content/books/the-paleo-manifesto.md
@@ -0,0 +1,11 @@
+---
+title: The Paleo Manifesto
+author: John Durant
+description: Humans aren't adapted to modern life and we need to look to our evolutionary past to understand how to live a healthy life.
+category: Self-Development
+tags: [paleo lifestyle, health, evolutionary biology]
+cover: ./covers/the-paleo-manifesto-cover.jpg
+rating: 8.5
+year: 2013
+url: https://www.goodreads.com/book/show/14871266-the-paleo-manifesto
+---
diff --git a/content/books/the-science-of-enlightenment.md b/content/books/the-science-of-enlightenment.md
new file mode 100644
index 0000000..6dee92e
--- /dev/null
+++ b/content/books/the-science-of-enlightenment.md
@@ -0,0 +1,13 @@
+---
+title: The Science of Enlightenment
+author: Shinzen Young
+description: What is enlightenment, how can one achieve it, and why is it good?
+category: Meditation
+tags: [meditation, buddhism, neuroscience, consciousness]
+cover: ./covers/the-science-of-enlightenment-cover.jpg
+rating: 8.5
+year: 2016
+url: https://www.goodreads.com/book/show/1663855.The_Science_of_Enlightenment
+---
+
+A beautiful book that combines the best of the Buddhist tradition with modern neuroscience. It's a practical guide to meditation, but also a deep exploration of the mind and consciousness. It's a book that I will return to again and again.
diff --git a/content/books/vagabonding.md b/content/books/vagabonding.md
new file mode 100644
index 0000000..87f8697
--- /dev/null
+++ b/content/books/vagabonding.md
@@ -0,0 +1,11 @@
+---
+title: Vagabonding
+author: Rolf Potts
+description: A guide to long-term travel, exploring the philosophy and practicalities of living a life of adventure.
+category: Self-Development
+tags: [travel, adventure, lifestyle]
+cover: ./covers/vagabonding-cover.jpg
+rating: 8
+year: 2002
+url: https://www.goodreads.com/book/show/100247.Vagabonding
+---
diff --git a/content/books/we-learn-nothing.md b/content/books/we-learn-nothing.md
new file mode 100644
index 0000000..0cae987
--- /dev/null
+++ b/content/books/we-learn-nothing.md
@@ -0,0 +1,11 @@
+---
+title: We Learn Nothing
+author: Tim Kreider
+description: A collection of insightful and humorous essays exploring the complexities of human relationships, society, and the human condition.
+category: Entertainment
+tags: [essays, human relationships, humor]
+cover: ./covers/we-learn-nothing-cover.jpg
+rating: 9
+year: 2012
+url: https://www.goodreads.com/book/show/13259887-we-learn-nothing
+---
diff --git a/content/books/winner-takes-all.md b/content/books/winner-takes-all.md
new file mode 100644
index 0000000..94e3543
--- /dev/null
+++ b/content/books/winner-takes-all.md
@@ -0,0 +1,11 @@
+---
+title: Winners Take All
+author: Anand Giridharadas
+description: An examination of how the global elite's efforts to change the world may perpetuate existing inequalities rather than addressing systemic issues.
+category: Politics, History, and Economics
+tags: [inequality, philanthropy, social change]
+cover: ./covers/winners-take-all-cover.jpg
+rating: 7.5
+year: 2018
+url: https://www.goodreads.com/book/show/35717257-winners-take-all
+---
diff --git a/content/config.ts b/content/config.ts
new file mode 100644
index 0000000..76826be
--- /dev/null
+++ b/content/config.ts
@@ -0,0 +1,100 @@
+import { z, defineCollection } from "astro:content";
+
+const pagesCollection = defineCollection({
+ type: "content",
+ schema: z.object({
+ title: z.string(),
+ description: z.string(),
+ }),
+});
+
+const articlesCollection = defineCollection({
+ type: "content",
+ schema: ({ image }) =>
+ z.object({
+ title: z.string(),
+ tags: z.array(z.string()),
+ description: z.string(),
+ image: image().optional(),
+ publishedAt: z.date().optional(),
+ }),
+});
+
+const projectsCollection = defineCollection({
+ type: "content",
+ schema: ({ image }) =>
+ z.object({
+ title: z.string(),
+ order: z.number(),
+ tags: z.array(z.string()),
+ description: z.string(),
+ image: image().optional(),
+ }),
+});
+
+const booksCollection = defineCollection({
+ type: "content",
+ schema: ({ image }) =>
+ z.object({
+ title: z.string(),
+ rating: z.number(),
+ author: z.string(),
+ url: z.string(),
+ category: z.string(),
+ description: z.string(),
+ tags: z.array(z.string()),
+ cover: image(),
+ year: z.number(),
+ }),
+});
+
+const filmsCollection = defineCollection({
+ type: "content",
+ schema: ({ image }) =>
+ z.object({
+ title: z.string(),
+ rating: z.number(),
+ image: image().optional(),
+ url: z.string(),
+ }),
+});
+
+const showsCollection = defineCollection({
+ type: "content",
+ schema: ({ image }) =>
+ z.object({
+ title: z.string(),
+ rating: z.number(),
+ image: image().optional(),
+ url: z.string(),
+ }),
+});
+
+const musiciansCollection = defineCollection({
+ type: "content",
+ schema: ({ image }) =>
+ z.object({
+ name: z.string(),
+ url: z.string(),
+ image: image().optional(),
+ }),
+});
+
+const quotesCollection = defineCollection({
+ type: "content",
+ schema: z.object({
+ text: z.string(),
+ author: z.string(),
+ }),
+});
+
+export const collections = {
+ pages: pagesCollection,
+ articles: articlesCollection,
+ projects: projectsCollection,
+ books: booksCollection,
+ films: filmsCollection,
+ shows: showsCollection,
+ musicians: musiciansCollection,
+ quotes: quotesCollection,
+};
diff --git a/content/films/palm-springs.md b/content/films/palm-springs.md
new file mode 100644
index 0000000..09cec41
--- /dev/null
+++ b/content/films/palm-springs.md
@@ -0,0 +1,5 @@
+---
+title: Palm Springs
+rating: 5
+url: https://www.imdb.com/title/tt9484998
+---
diff --git a/content/musicians/ski-aggu.md b/content/musicians/ski-aggu.md
new file mode 100644
index 0000000..88a0775
--- /dev/null
+++ b/content/musicians/ski-aggu.md
@@ -0,0 +1,4 @@
+---
+name: Ski Aggu
+url: https://open.spotify.com/artist/6CP5wWvO8oIxedESJNCN4H
+---
diff --git a/content/pages/colophon.mdx b/content/pages/colophon.mdx
new file mode 100644
index 0000000..7e48b61
--- /dev/null
+++ b/content/pages/colophon.mdx
@@ -0,0 +1,26 @@
+---
+title: Colophon
+description: Colophon
+---
+
+import ExternalLink from "../../components/ExternalLink.astro"
+
+The full source code for this site is available on GitHub .
+You can find the analytics for this site here .
+
+## Stack
+
+This site is runs on:
+
+- Astro – HTML framework
+- Tailwind CSS – CSS framework
+- MDX – Markdown + JSX
+- Font Source - Self hosted fonts
+- TS Particles – Interactive background on the homepage
+- Vercel – Hosting
+- Plausible – privacy friendly Analytics
+
+## Fonts
+
+- Playfair Display for headings
+- Schibsted Grotesk for body text
diff --git a/content/pages/imprint.md b/content/pages/imprint.md
new file mode 100644
index 0000000..178b839
--- /dev/null
+++ b/content/pages/imprint.md
@@ -0,0 +1,10 @@
+---
+title: Imprint
+description: Imprint
+---
+
+Kontakt: citochris@gmail.com
+
+Christian Cito
+Favoritenstraße 44/10,
+1040 Wien
diff --git a/content/pages/privacy-policy.md b/content/pages/privacy-policy.md
new file mode 100644
index 0000000..7705c51
--- /dev/null
+++ b/content/pages/privacy-policy.md
@@ -0,0 +1,104 @@
+---
+title: Privacy Policy
+description: Privacy Policy
+---
+
+## Too long, didn't read
+
+The privacy of our website visitors is very important to us. Therefore, you should know at all times when which personal data is used and how it is used. We are subject to the provisions of the European General Data Protection Regulation (GDPR) and the supplementary provisions of the Austrian Data Protection Act (DSG).
+
+As a visitor to this site:
+
+- no personal information is stored
+- no information, such as cookies, is stored in the browser
+- no information is shared with, sent to or sold to third parties (e.g. advertising companies)
+- no information about personal and behavioral trends is collected and analyzed
+- no information is monetized
+
+## Complete privacy policy
+
+This privacy policy informs you as a visitor to this website about the type, scope and purpose of the collection and use of personal data.
+
+The following information applies to all data processing within the scope of this website (chrcit.com).
+
+### Links
+
+This website contains links to other websites for information purposes. These websites are not under our control and are therefore not subject to the provisions of this privacy policy. If a link is activated, it is possible that the operator of this website will collect and process data about you in accordance with its privacy policy.
+
+Responsible person according to Art 4 Z 7 GDPR is:
+
+Christian Cito
+Favoritenstraße 44/10
+1040 Vienna
+
+E-Mail: [citochris@gmail.com](mailto:citochris@gmail.com)
+
+### Processing
+
+#### Visiting the website
+
+When you visit our website, we initially collect some personal data. The following data is transmitted from your browser to our servers
+
+- IP address of the user
+- Date and time of the request
+- Content of the request (specific page)
+- Access status/HTTP status code
+- Amount of data transferred in each case
+- Website from which the request originates
+- Operating system of the user
+- Language and version of the browser software
+
+This data collection is initially for technical reasons so that our website can be displayed in your browser.
+
+#### Website statistics
+
+Subsequently, the above-mentioned data is forwarded to our processor (Plausible Insights OÜ) in order to be able to evaluate basic statistics on the use of our website. Your IP address will be deleted in the course of this evaluation. This anonymizes the data that is still used (it is therefore no longer possible to assign this data to you as a website visitor).
+
+The aim is to track general trends in our website traffic, but not to store or utilize data that can be traced back to individual visitors.
+
+All data is only stored in aggregated form. This stored data includes referral sources, top pages, visit duration, information about the devices used during the visit (device type, operating system, country and browser).
+
+Full details of the tool used (Plausible Analytics script) can be found in the Plausible Insights OÜ data policy: Plausible Analytics.
+
+#### E-mail contact
+
+On our website you will find e-mail links (mailto) that you can use to contact us quickly. In the course of such communication, you will sometimes transmit personal data to us (e.g. if your name appears from the e-mail address). Depending on your request, we will process this data for a specific purpose. We will delete the inquiries and data relating to you if they are no longer required and there are no statutory retention obligations.
+
+### Legal basis for data processing
+
+We process personal data on the basis of legitimate interests in accordance with Art. 6 para. 1 lit. f GDPR.
+
+The collection of your personal data when you access and use our website is technically necessary in order to display this website.
+
+This data is forwarded to our processor (Plausible Insights OÜ) for statistical purposes in order to continuously improve our website. The data processed in this way is first anonymized and only then evaluated or stored.
+
+When contacting us by e-mail, personal data is necessarily processed in order to ensure that these inquiries can be dealt with effectively.
+
+These differentiated considerations are intended to safeguard the interest of our website visitors in the protection of their personal data within the meaning of Art. 6 para. 1 lit. f GDPR.
+
+### Storage period and deletion of data
+
+As soon as the purpose for storing the data no longer applies, we will delete your personal data immediately.
+
+### Processor
+
+We use a processor (Plausible Insights OÜ) for data processing in the course of compiling our website statistics. Plausible Analytics is used to compile anonymous, non-personal statistics on the use of websites.
+
+### Rights of data subjects
+
+If your personal data is processed, you are a data subject within the meaning of Article 4(1) GDPR. You therefore have the following rights vis-à-vis us as the controller
+
+- Right to information
+- Right to rectification
+- Right to erasure
+- Right to restriction of data processing
+- Right to data portability
+- Right to object to processing
+
+These rights can be asserted simply by sending an email to citochris@gmail.com.
+
+We would like to point out that we do not store any personal data after your visit to our website or in the course of website statistics. Therefore, we cannot comply with requests for information, correction, deletion, restriction of processing, data portability or revocation in these cases.
+
+If you believe that the processing of your personal data violates the GDPR or the DPA, you have the right to lodge a complaint with a supervisory authority, in particular in the Member State of your habitual residence, place of work or place of the alleged infringement, without prejudice to any other administrative or judicial remedy.
+
+In Austria, the data protection authority (https://www.dsb.gv.at/) ensures compliance with data protection.
diff --git a/content/pages/uses.md b/content/pages/uses.md
new file mode 100644
index 0000000..5f6f62d
--- /dev/null
+++ b/content/pages/uses.md
@@ -0,0 +1,73 @@
+---
+title: /uses
+description: /uses
+---
+
+## Gear
+
+- Macbook Pro 14" M2 Pro, 32GB RAM
+- CalDigit TS4 Thunderbolt 4 Dock
+- 2x 2.5k Dell Displays (upgrading in 2024)
+- Sure MV7 microphone
+- Sony Alpha 7iv
+ - 28-70mm
+ - 35mm (Sony SEL-35F18F)
+
+* Airpods Pro (2nd gen)
+* Ergotopia NextBack Office Chair
+* HUANUO Monitor Mount
+* Ikea standing desk
+
+## Stack
+
+- Typescript
+- Remix
+- TailwindCSS
+- Radix UI
+- Framer Motion
+- Drizzle ORM
+- Vercel
+- Cloudflare
+- Planetscale
+
+## Dev Tools
+
+- VSCode
+ - Tailwind Intellisense
+ - Tailwind Fold
+ - Auto rename tag
+ - Path Intellisense
+ - Prettier
+- Github Copilot
+- Github
+- Figma
+- Vercel
+- Planetscale
+- Cloudflare
+- fig.io
+- TablePlus
+- Wappalyzer
+- Insomnia
+- Terminal
+- Local
+
+## Productivity Software
+
+- Setapp
+- Arc
+- Raycast
+- Mailbrew
+- Readwise + Readwise Reader
+- Timing
+- Obsidian
+- Notes.app
+- Textsniper
+- Bartender
+- iStat Menus
+- BetterTouchTool
+- Notion
+- CleanShot X
+- 1Password
+- Backblaze
+- Rectangle
+- Things
diff --git a/content/projects/hasanhub-com.mdx b/content/projects/hasanhub-com.mdx
new file mode 100644
index 0000000..79db59a
--- /dev/null
+++ b/content/projects/hasanhub-com.mdx
@@ -0,0 +1,112 @@
+---
+title: hasanhub.com
+tags: [streaming, twitch, youtube]
+description: Hasanhub is a Youtube aggregator for the 70+ channels in the Hasanabi Clips Industrial Complex.
+image: ./images/hasanhub-screenshot.png
+order: 0
+---
+import { YouTube } from "@astro-community/astro-embed-youtube";
+import { Tweet } from "@astro-community/astro-embed-twitter";
+import ExternalLink from "../../components/ExternalLink.astro";
+
+- **Link:** hasanhub.com
+- **Timeline:** April 2022 -
+- **Stack:** Typescript, Remix, MySQL, Prisma, Tailwind, Vercel, Planetscale, Plausible
+- **Status:** active
+
+The political streamer Hasanabi allows his fans to clip his stream VODs, upload those clips to YouTube and make money from his content.
+
+Due to this there are 100+ different YouTube channels dedicated to him. Some of these fan channels have over 100.000 subscribers. I saw the opportunity to build something useful for his community by creating a web app which aggregates all of these channels into one feed. It's called hasanhub.com .
+
+In February 2022 I built a proof of concept while I had Covid. Over the next few months I iterated on it until it was ready to launch.
+
+## Launch
+
+
+I first launched the project in April 2022 and Hasan looked at it on his stream while live to roughly 30.000 people.
+
+
+
+I also posted it on Reddit:
+
+
+
+ I created a web app to organise the HasanAbi Clips Industrial Complex (link
+ in the comments)
+
+ by u/chrcit inHasan_Piker
+
+
+## Launching v1.1 and making my first online $$$
+
+Shortly after the initial launch I refactored the codebase from Next to Remix and added some extra features.
+
+I also added a donate button to the website. I used Buy Me A Coffee to handle the donations. After the launch of v1.1 people donated around $60.
+
+
+
+
+
+I also posted about it on Reddit again:
+
+
+
+ HasanHub v1.1 is live! Now with duration filters, multi tag selection and
+ Hasan's Twitch schedule
+
+ byu/chrcit inHasan_Piker
+
+
+## Posting on /r/reactjs
+In August 2022 I posted it on /r/reactjs .
+
+
+
+
+
+ I created a web app for a streamer and launched it to 30k people
+ (details+stats in the comments)
+
+ by
+ u/chrcit
+ in
+
+ reactjs
+
+
+
+## Getting featured again on stream
+The active users stagnated at around 30 per day until in December 2022 and January 2023 Hasan opened it on stream again. After that exposure the active users went up to 300-400 per day.
+
+
+
+The extra attention lead to people again donating $103 in total.
+
+
+
+## Creating a Twitter account
+Early 2023 I decided to seperate the Hasanhub Twitter account from my personal developer account. I created @hasanhub_com to post Hasan related content.
+
+
+
+
+
+
+
+
diff --git a/content/projects/hausgemacht.mdx b/content/projects/hausgemacht.mdx
new file mode 100644
index 0000000..ddc96c8
--- /dev/null
+++ b/content/projects/hausgemacht.mdx
@@ -0,0 +1,80 @@
+---
+title: hausgemacht vibechecker
+tags: [club, parties, events]
+description: hausgemacht is a techno collective from Vienna which also host sex positive parties.
+image: ./images/hausgemacht-vibechecker-screenshots.png
+order: 3
+---
+
+import { Tweet } from "@astro-community/astro-embed-twitter";
+import ExternalLink from "../../components/ExternalLink.astro";
+
+- **Link:** hausgemacht.org
+- **Collaborators:** Alois Paulin , Patrick Ludewig , Vlad I.
+- **Timeline:** April 2023 -
+- **Status:** active
+- **Stack:** Typescript, Vite, Remix, Tailwind, C#, SQLite.
+
+## What is hausgemacht?
+hausgemacht ("homemade" in German) is the biggest techno collective in Vienna. They organize events in various clubs in the city.
+
+Besides regular techno clubbings they also host sex positive events. For those parties guests are selected via an application process before the event as well as a strict door policy where the guests are asked questions about the rules of the event.
+
+A big focus of hausgemacht is creating a safeR space for FLINTA\* people. There are awareness teams at the events looking after the safety and well-being of the guests.
+
+
+
+
+## Joining the collective
+After attending my first event in February 2023 I decided I wanted to join the collective. I reached out to the team and asked if they needed coding support.
+
+I met up with the Internet team to get to know each other and talk about the projects they were working on. Afterwards I was invited to join the collective.
+
+## The application process
+
+The application process is handled via a custom made web app built by members of the collective. Because of the sensitive nature of the data the app is built with a strong focus on data protection and privacy.
+
+Alois Paulin (one of our members) built the backend which is architected to minimize data stored and disclosed to members of the organisation. There is also great care to ensure that all personal data is encrypted and stored securely. Once the need for the data is gone it is deleted.
+
+Patrick Ludewig designed and built the frontend. Vlad I. acted as a product owner/manager for this and many other projects.
+
+In my first year I focused on refactoring and extending their custom web app for checking in guests.
+
+They were using two different systems:
+- A native QR code scanner developed by their event software Pretix
+- A web app which connects to a passport scanner via websockets and looks up the ticket and guest data via a custom backend
+
+## Anonymous check-in via a passport scanner
+
+The passport scanner web app was built to offer the guests a private check-in experience where even members of the collective don't see the guest's name.
+
+The app connects to the passport scanner and reads out the name and the image stored on the passport chip. The name is matched against the ticket data to confirm the person has a valid ticket. The image is used to verify the person is the same as on the passport.
+
+The data from the passport (i.e. the image) is only processed and transported in a secure local network. It never leaves the local network and is deleted immediatley after the event.
+
+This approach is quite innovative and Alois even wrote a paper about it.
+
+
+
+Together with Alois I refactored the app to stabilize the integration of the passport scanner and simplify the UI for the end user. We also trialed processing other IDs via OCR.
+
+The improved app was used at our biggest event in June and processed a few hundreds guests.
+
+## Bespoke ticket scanner app
+Over the summer we worked on improving the passport scanner app even further and extending it with different features.
+
+A few hours before an event in September a server went down and we didn't have time to port over the backend.
+
+I quickly built a new web app for scanning the ticket QR code and enriching it with our guest data. Our team was then able to use the app to check in or reject guests at the door.
+
+
+
+I kept iterating on this app for 2 other events and added many new features. The app is now used at all our events and is the main tool for checking in guests.
+
+
+
+The plan is to eventually merge the passport scanner and the ticket scanner app into one application so both methods can be used interchangeably.
+
+## 2024 and beyond
+Our focus for 2024 is to unify all our different applications into one unified web applicaton. Over the next 2 years this will evolve into a bespoke event management system for the collective integrating many different tools and services.
+
diff --git a/content/projects/images/hasanhub-plausible-april-may-2022.png b/content/projects/images/hasanhub-plausible-april-may-2022.png
new file mode 100644
index 0000000..0607631
Binary files /dev/null and b/content/projects/images/hasanhub-plausible-april-may-2022.png differ
diff --git a/content/projects/images/hasanhub-plausible-august-2022.png b/content/projects/images/hasanhub-plausible-august-2022.png
new file mode 100644
index 0000000..b6a0e77
Binary files /dev/null and b/content/projects/images/hasanhub-plausible-august-2022.png differ
diff --git a/content/projects/images/hasanhub-plausible-december-2022.png b/content/projects/images/hasanhub-plausible-december-2022.png
new file mode 100644
index 0000000..0758537
Binary files /dev/null and b/content/projects/images/hasanhub-plausible-december-2022.png differ
diff --git a/content/projects/images/hasanhub-screenshot.png b/content/projects/images/hasanhub-screenshot.png
new file mode 100644
index 0000000..5e755fb
Binary files /dev/null and b/content/projects/images/hasanhub-screenshot.png differ
diff --git a/content/projects/images/hausgemacht-screenshot.png b/content/projects/images/hausgemacht-screenshot.png
new file mode 100644
index 0000000..6e64ffd
Binary files /dev/null and b/content/projects/images/hausgemacht-screenshot.png differ
diff --git a/content/projects/images/hausgemacht-vibechecker-screenshots.png b/content/projects/images/hausgemacht-vibechecker-screenshots.png
new file mode 100644
index 0000000..451dbd9
Binary files /dev/null and b/content/projects/images/hausgemacht-vibechecker-screenshots.png differ
diff --git a/content/projects/images/mitentscheiden-kabine-clip.gif b/content/projects/images/mitentscheiden-kabine-clip.gif
new file mode 100644
index 0000000..7b1029b
Binary files /dev/null and b/content/projects/images/mitentscheiden-kabine-clip.gif differ
diff --git a/content/projects/images/mitentscheiden-kabine-screenshot.png b/content/projects/images/mitentscheiden-kabine-screenshot.png
new file mode 100644
index 0000000..f21babc
Binary files /dev/null and b/content/projects/images/mitentscheiden-kabine-screenshot.png differ
diff --git a/content/projects/images/mitentscheiden-results.png b/content/projects/images/mitentscheiden-results.png
new file mode 100644
index 0000000..bda077f
Binary files /dev/null and b/content/projects/images/mitentscheiden-results.png differ
diff --git a/content/projects/images/mitentscheiden-screenshot.png b/content/projects/images/mitentscheiden-screenshot.png
new file mode 100644
index 0000000..f6d75f6
Binary files /dev/null and b/content/projects/images/mitentscheiden-screenshot.png differ
diff --git a/content/projects/images/mitentscheiden-screenshots.jpg b/content/projects/images/mitentscheiden-screenshots.jpg
new file mode 100644
index 0000000..c0c4995
Binary files /dev/null and b/content/projects/images/mitentscheiden-screenshots.jpg differ
diff --git a/content/projects/images/mitentscheiden-shareables.jpg b/content/projects/images/mitentscheiden-shareables.jpg
new file mode 100644
index 0000000..f114d4f
Binary files /dev/null and b/content/projects/images/mitentscheiden-shareables.jpg differ
diff --git a/content/projects/images/preismonitor-plausible-may-july.png b/content/projects/images/preismonitor-plausible-may-july.png
new file mode 100644
index 0000000..2af618a
Binary files /dev/null and b/content/projects/images/preismonitor-plausible-may-july.png differ
diff --git a/content/projects/images/preismonitor-screenshot.png b/content/projects/images/preismonitor-screenshot.png
new file mode 100644
index 0000000..6ef8c09
Binary files /dev/null and b/content/projects/images/preismonitor-screenshot.png differ
diff --git a/content/projects/mitentscheiden-at.mdx b/content/projects/mitentscheiden-at.mdx
new file mode 100644
index 0000000..50df7ee
--- /dev/null
+++ b/content/projects/mitentscheiden-at.mdx
@@ -0,0 +1,94 @@
+---
+title: mitentscheiden.at
+tags: [wahlkabine, politics, austria]
+description: mitentscheiden.at was a political questionaire published by the youth wing (JG Wien) of the Austrian social democrats (SPÖ).
+image: ./images/mitentscheiden-screenshot.png
+order: 1
+---
+
+import { Tweet } from "@astro-community/astro-embed-twitter";
+import { YouTube } from "@astro-community/astro-embed-youtube";
+import ExternalLink from "../../components/ExternalLink.astro";
+
+- **Link:** mitentscheiden.at
+- **Collaborators:** Georg Windhaber
+- **Timeline:** April - August 2023
+- **Stack:** Typescript, Next.js, MySQL, Prisma, Tailwind, Vercel, Planetscale, Plausible
+- **Timeline:**: April - August 2023
+- **Status:** done
+
+## Idea to Launch
+Georg , a good friend of mine, is active in the SPÖ (the social democratic party of Austria). In the early summer of 2023 they were holding an internal election for the new party leader.
+
+The Junge Generation ("young generation" in German), the youth wing of the party wanted to create an app to help people decide which of the internal candidates to vote for.
+
+Georg asked me if I wanted to collaborate on this application and I agreed. The concept was modelled after wahlkabine.at , a political questionnaire which helps you find the party which best represents your political views.
+
+We went from idea to launch of mitentscheiden.at in 3 weeks.
+
+The 3 candidates all answered 42 questions via the app and the users could then answer the same questions. After finishing the questionnaire the user is shown how much they match with the 3 candidates as well as multiple pages to compare their answers with the candidates.
+
+
+
+
+
+
+
+The launch was a big success with around ~27.000 people filling out the 42 question quiz. The app also went viral on Twitter with over 400.000+ impressions and multiple high multiple high profile people in the Austrian political bubble sharing it.
+
+It was covered by [multiple](https://www.puls24.at/news/politik/spoe-wahl-41-fragen-und-die-antworten-von-babler-doskozil-und-rendi-wagner/295388) [national](https://kurier.at/politik/inland/test-fuer-nicht-mitglieder-welcher-spoe-kandidat-wuerde-zu-ihnen-passen/402422507) [newspapers](https://www.derstandard.at/story/2000145782957/was-man-ueber-die-rote-vorsitzwahl-wissen-muss), [meme](https://www.instagram.com/p/CrX6u3nMem0/) [pages](https://www.instagram.com/p/CrYPyLWsp7w) and the second largest tv news program of the country (ZIB 1).
+
+A question regarding removing abortion from the criminal code resulted in a controversy. The more conservative candidate (and front-runner) Doskozil at first answered with “no” but after a backlash on social media changed his answer to “yes”.
+
+## Poll results
+Before the actual election was held there was an internal poll where every party member was allowed to participate.
+
+The results were quite close:
+
+- Doskozil: 33.7%
+- Babler: 31.5%
+- Rendi-Wagner: 31.35%
+
+After coming in last in the poll, Rendi-Wagner decided to not run for re-election.
+
+## Election results
+The election was held in June and ~600 party officals voted. Initially it was announced that the more conservative candidate Doskozil won with 52% of the vote.
+
+But a few days later it was discovered that there was a [mistake in the Excel sheet](https://www.theguardian.com/world/2023/jun/05/austrian-social-democrats-announce-wrong-leader-after-technical-error) used to calculate the results. The votes were flipped by accident and actually the more radical candidate Babler won.
+
+Due to the close result it's possible that the controversy around the abortion question could have swayed the election in Babler's favour.
+
+## Dev Talk & YouTube Video
+2 months after the launch I used the project as a case study for my first dev talk which I held at the Technical University of Vienna. I uploaded the recording to YouTube and got over 1000 views on it in a few days.
+
+
+
+I also posted it on Reddit and Twitter and it got a good amount of traction.
+
+
+
+
+
+ I made an app which went (semi)-viral and showcased it in a talk
+
+ byu/chrcit inreactjs
+
+
+## Joining the organisation
+I joined the party and founded the Web Task Force together with [Georg Windhaber](https://georgwindhaber.com).
+
+We are currently working on multiple web projects to campaign for the upcoming national election in September 2024 as well as the European Union elections in July.
+
+
+
+
+
+
diff --git a/content/projects/preismonitor-at.mdx b/content/projects/preismonitor-at.mdx
new file mode 100644
index 0000000..c3921b8
--- /dev/null
+++ b/content/projects/preismonitor-at.mdx
@@ -0,0 +1,68 @@
+---
+title: preismonitor.at
+tags: [politics, austria]
+description: Preismonitor is a website that shows the price development of groceries in Austria.
+image: ./images/preismonitor-screenshot.png
+order: 2
+---
+
+import { Tweet } from "@astro-community/astro-embed-twitter";
+import ExternalLink from "../../components/ExternalLink.astro";
+
+- **Link:** preismonitor.at
+- **Collaborators:** Lukas Käferle
+- **Timeline:** May - October 2023
+- **Status:** paused
+- **Stack:** Typescript, Next.js, Node, MySQL, Prisma, Kysely, Tailwind, Plausible, Vercel, Planetscale
+
+Preismonitor is a website that ~shows~ showed the development of grocery prices in Austria. I developed it in collaboration with Lukas Käferle .
+
+## Idea
+In 2022 and 2023 inflation was rising in Austria and all over the world. A big driver was the increase in grocery prices.
+
+In May 2023 Martin Kocher, the Austrian Minister for Labour and Economy announced plans for a state grocery price tracker for a few selected products. The plan was quite vague and it wouldn't launch anytime before fall 2023.
+
+A good friend of mine, Lukas Käferle , suggested that we should just build this ourselves.
+
+We went from idea to launch in 2 weeks. The site is called preismonitor.at and it's a simple website which shows the price development of ~300 products in 3 supermarkets.
+
+## Launch
+
+
+Even though we launched as fast as possible there were 3 other price trackers that launched before us:
+
+- heisse-preisse.io by Mario Zechner
+- teuerungsportal.at by Bernhard Ruckenstuhl
+- preisrunter.at by David Wurm
+
+At first we were a bit disappointed that we weren't the first to launch but then realised that we can gain more from collaborating than competing. I then reached out to all of them and we started a group chat.
+
+Both Lukas and I didn't have much time to work on the project after launch. Due to the other projects existing we didn't see a strong need to continue developing it further for the moment.
+
+We still got a few mentions in both national and international media:
+- Wired
+- DerStandard
+- Kurier
+- Puls24
+
+## Shaping a new law
+In July 2023 the Austrian Federal Competition Authority reached out to us and the other grocery price providers to ask us a few questions about our projects. They have been investigating the supermarket industry since fall 2022.
+
+The answers were then used in a final report which was handed over to Martin Kocher, the Minister of Labour and Economy.
+
+The report recommended to create a law which would force supermarkets to report their price data to the ministry which then would make it available via an API.
+
+This would enable developers, researchers and journalists to utilize the data for many different use cases.
+
+
+
+In September the Minister for Labour and Economy invited us to consult him on the exact implementation of the law. We were invited together with our friends from heisse-preisse.io , teuerungsportal.at and preisrunter.at .
+
+
+
+## What's coming?
+In mid October our crawler stopped working and both Lukas and I were too busy to fix it. We decided to pause development until we have more time.
+
+We are planning on dumping our crawler and instead use the data from heisse-preisse.io or the government API (if it actually comes).
+
+A long-term idea is to create a grocery list app which is enhanced by this pricing data. This would allow users to see which supermarket is the cheapest for their current grocery list.
\ No newline at end of file
diff --git a/content/quotes/write-in-blood.md b/content/quotes/write-in-blood.md
new file mode 100644
index 0000000..c015437
--- /dev/null
+++ b/content/quotes/write-in-blood.md
@@ -0,0 +1,4 @@
+---
+text: Of all that is written, I love only what a person has written with his own blood.
+author: Friedrich Nietzsche
+---
diff --git a/content/shows/bojack-horseman.md b/content/shows/bojack-horseman.md
new file mode 100644
index 0000000..b114b2e
--- /dev/null
+++ b/content/shows/bojack-horseman.md
@@ -0,0 +1,5 @@
+---
+title: BoJack Horseman
+rating: 5
+url: https://www.imdb.com/title/tt3398228
+---
diff --git a/contentlayer.config.ts b/contentlayer.config.ts
new file mode 100644
index 0000000..388b03a
--- /dev/null
+++ b/contentlayer.config.ts
@@ -0,0 +1,70 @@
+import { defineDocumentType, makeSource } from "contentlayer/source-files";
+import rehypeSlug from "rehype-slug";
+import remarkGfm from "remark-gfm";
+
+const Article = defineDocumentType(() => ({
+ name: "Article",
+ filePathPattern: "articles/**/*.mdx",
+ contentType: "mdx",
+ fields: {
+ title: { type: "string", required: true },
+ description: { type: "string", required: true },
+ date: { type: "date", required: true },
+ tags: { type: "list", of: { type: "string" }, required: true },
+ },
+ computedFields: {
+ slug: {
+ type: "string",
+ resolve: (doc) => doc._raw.sourceFileName.replace(/\.mdx$/, ""),
+ },
+ },
+}));
+
+const Project = defineDocumentType(() => ({
+ name: "Project",
+ filePathPattern: "projects/**/*.mdx",
+ contentType: "mdx",
+ fields: {
+ title: { type: "string", required: true },
+ description: { type: "string", required: true },
+ date: { type: "date", required: true },
+ tags: { type: "list", of: { type: "string" }, required: true },
+ url: { type: "string", required: false },
+ },
+ computedFields: {
+ slug: {
+ type: "string",
+ resolve: (doc) => doc._raw.sourceFileName.replace(/\.mdx$/, ""),
+ },
+ },
+}));
+
+const Book = defineDocumentType(() => ({
+ name: "Book",
+ filePathPattern: "books/**/*.mdx",
+ contentType: "mdx",
+ fields: {
+ title: { type: "string", required: true },
+ description: { type: "string", required: true },
+ author: { type: "string", required: true },
+ rating: { type: "number", required: true },
+ date: { type: "date", required: true },
+ tags: { type: "list", of: { type: "string" }, required: true },
+ cover: { type: "string", required: true },
+ },
+ computedFields: {
+ slug: {
+ type: "string",
+ resolve: (doc) => doc._raw.sourceFileName.replace(/\.mdx$/, ""),
+ },
+ },
+}));
+
+export default makeSource({
+ contentDirPath: "content",
+ documentTypes: [Article, Project, Book],
+ mdx: {
+ remarkPlugins: [remarkGfm],
+ rehypePlugins: [rehypeSlug],
+ },
+});
diff --git a/package.json b/package.json
index 7dc52f3..71658c3 100644
--- a/package.json
+++ b/package.json
@@ -11,12 +11,10 @@
"type": "module",
"version": "0.0.1",
"scripts": {
- "dev": "astro dev",
- "start": "astro dev",
- "build": "astro build",
- "preview": "astro preview",
- "format": "prettier --write .",
- "astro": "astro"
+ "build": "remix vite:build",
+ "dev": "remix vite:dev",
+ "start": "remix-serve ./build/server/index.js",
+ "format": "prettier --write ."
},
"dependencies": {
"@astro-community/astro-embed-twitter": "^0.5.3",
@@ -25,22 +23,39 @@
"@astrojs/partytown": "^2.0.3",
"@astrojs/sitemap": "^3.0.3",
"@astrojs/tailwind": "^5.0.4",
- "@fontsource/montserrat": "^5.0.16",
- "@fontsource/playfair-display": "^5.0.18",
- "@fontsource/schibsted-grotesk": "^5.0.18",
+ "@fontsource/montserrat": "^5.1.0",
+ "@fontsource/playfair-display": "^5.1.0",
+ "@fontsource/schibsted-grotesk": "^5.1.0",
+ "@remix-run/css-bundle": "^2.15.2",
+ "@remix-run/node": "^2.15.2",
+ "@remix-run/react": "^2.15.2",
+ "@types/react": "^19.0.2",
+ "@types/react-dom": "^19.0.2",
"astro": "^4",
"astro-particles": "^2.10.0",
"astro-robots-txt": "^1.0.0",
- "clsx": "^2.0.0",
+ "clsx": "^2.1.1",
+ "isbot": "^5.1.18",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-tsparticles": "^2.12.2",
"rehype-slug": "^6.0.0",
+ "remark-gfm": "^4.0.0",
"remark-sectionize": "^2.0.0",
- "tailwindcss": "^3.4.0",
- "tsparticles": "^2.0.6"
+ "tsparticles": "^2.12.0",
+ "tsparticles-engine": "^2.12.0"
},
"devDependencies": {
- "@tailwindcss/typography": "^0.5.10",
- "prettier": "^3.1.1",
+ "@remix-run/dev": "^2.15.2",
+ "@tailwindcss/typography": "^0.5.15",
+ "autoprefixer": "^10.4.20",
+ "contentlayer": "^0.3.4",
+ "postcss": "^8.4.49",
+ "prettier": "^3.4.2",
"prettier-plugin-astro": "^0.12.3",
- "prettier-plugin-tailwindcss": "^0.5.10"
+ "prettier-plugin-tailwindcss": "^0.5.14",
+ "tailwindcss": "^3.4.17",
+ "vite": "^5.4.11",
+ "vite-tsconfig-paths": "^5.1.4"
}
-}
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..8bde958
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,9966 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@astro-community/astro-embed-twitter':
+ specifier: ^0.5.3
+ version: 0.5.8(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))
+ '@astro-community/astro-embed-youtube':
+ specifier: ^0.4.3
+ version: 0.4.5(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))
+ '@astrojs/mdx':
+ specifier: ^2.0.2
+ version: 2.3.1(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))
+ '@astrojs/partytown':
+ specifier: ^2.0.3
+ version: 2.1.2
+ '@astrojs/sitemap':
+ specifier: ^3.0.3
+ version: 3.2.1
+ '@astrojs/tailwind':
+ specifier: ^5.0.4
+ version: 5.1.4(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))(tailwindcss@3.4.17)
+ '@fontsource/montserrat':
+ specifier: ^5.1.0
+ version: 5.1.0
+ '@fontsource/playfair-display':
+ specifier: ^5.1.0
+ version: 5.1.0
+ '@fontsource/schibsted-grotesk':
+ specifier: ^5.1.0
+ version: 5.1.0
+ '@remix-run/css-bundle':
+ specifier: ^2.15.2
+ version: 2.15.2
+ '@remix-run/node':
+ specifier: ^2.15.2
+ version: 2.15.2(typescript@5.7.2)
+ '@remix-run/react':
+ specifier: ^2.15.2
+ version: 2.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
+ '@types/react':
+ specifier: ^19.0.2
+ version: 19.0.2
+ '@types/react-dom':
+ specifier: ^19.0.2
+ version: 19.0.2(@types/react@19.0.2)
+ astro:
+ specifier: ^4
+ version: 4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2)
+ astro-particles:
+ specifier: ^2.10.0
+ version: 2.10.0
+ astro-robots-txt:
+ specifier: ^1.0.0
+ version: 1.0.0
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
+ isbot:
+ specifier: ^5.1.18
+ version: 5.1.18
+ react:
+ specifier: ^18.3.1
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.3.1
+ version: 18.3.1(react@18.3.1)
+ react-tsparticles:
+ specifier: ^2.12.2
+ version: 2.12.2(react@18.3.1)
+ rehype-slug:
+ specifier: ^6.0.0
+ version: 6.0.0
+ remark-gfm:
+ specifier: ^4.0.0
+ version: 4.0.0
+ remark-sectionize:
+ specifier: ^2.0.0
+ version: 2.1.0
+ tsparticles:
+ specifier: ^2.12.0
+ version: 2.12.0
+ tsparticles-engine:
+ specifier: ^2.12.0
+ version: 2.12.0
+ devDependencies:
+ '@remix-run/dev':
+ specifier: ^2.15.2
+ version: 2.15.2(@remix-run/react@2.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2))
+ '@tailwindcss/typography':
+ specifier: ^0.5.15
+ version: 0.5.15(tailwindcss@3.4.17)
+ autoprefixer:
+ specifier: ^10.4.20
+ version: 10.4.20(postcss@8.4.49)
+ contentlayer:
+ specifier: ^0.3.4
+ version: 0.3.4(esbuild@0.17.6)
+ postcss:
+ specifier: ^8.4.49
+ version: 8.4.49
+ prettier:
+ specifier: ^3.4.2
+ version: 3.4.2
+ prettier-plugin-astro:
+ specifier: ^0.12.3
+ version: 0.12.3
+ prettier-plugin-tailwindcss:
+ specifier: ^0.5.14
+ version: 0.5.14(prettier-plugin-astro@0.12.3)(prettier@3.4.2)
+ tailwindcss:
+ specifier: ^3.4.17
+ version: 3.4.17
+ vite:
+ specifier: ^5.4.11
+ version: 5.4.11(@types/node@22.10.2)
+ vite-tsconfig-paths:
+ specifier: ^5.1.4
+ version: 5.1.4(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2))
+
+packages:
+
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@ampproject/remapping@2.3.0':
+ resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
+ engines: {node: '>=6.0.0'}
+
+ '@astro-community/astro-embed-twitter@0.5.8':
+ resolution: {integrity: sha512-O2ptQPw+DfipukK8czjJcTcyVgDsrs3OmrHbc3YmWRglaUTOpSTImzPo076POyNBSWjLaRKloul81DFiAMNjTA==}
+ peerDependencies:
+ astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta || ^5.0.0-beta
+
+ '@astro-community/astro-embed-utils@0.1.3':
+ resolution: {integrity: sha512-eiMO+vfCdE9GtW6qE7X5Xl6YCKZDCoXJEWqRofQcoC3GHjqN2/WhJlnaxNVRq3demSO03UNtho57Em5p7o7AOA==}
+
+ '@astro-community/astro-embed-youtube@0.4.5':
+ resolution: {integrity: sha512-YD2g9a8aiUvypYb4wSobqCKhItDomdrdy62eHFaEGlqMrxP3eT+GUYUsjFxw7Yj/KwTzMjeqbgZlav11MwQgOg==}
+ peerDependencies:
+ astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta
+
+ '@astrojs/compiler@1.8.2':
+ resolution: {integrity: sha512-o/ObKgtMzl8SlpIdzaxFnt7SATKPxu4oIP/1NL+HDJRzxfJcAkOTAb/ZKMRyULbz4q+1t2/DAebs2Z1QairkZw==}
+
+ '@astrojs/compiler@2.10.3':
+ resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==}
+
+ '@astrojs/internal-helpers@0.4.1':
+ resolution: {integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==}
+
+ '@astrojs/markdown-remark@5.1.0':
+ resolution: {integrity: sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==}
+
+ '@astrojs/markdown-remark@5.3.0':
+ resolution: {integrity: sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg==}
+
+ '@astrojs/mdx@2.3.1':
+ resolution: {integrity: sha512-BOQFKD2Pi9cRntNQJlpF2fh4xV8doNpmVy9NKI95r4jsitrY4X5aTOhAowi+fkQgP/zW1A4HwCyQ6Pdam6z8zQ==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+ peerDependencies:
+ astro: ^4.0.0
+
+ '@astrojs/partytown@2.1.2':
+ resolution: {integrity: sha512-1a9T5lqxtnrw0qLPo1KwliUvaaUzPNPtWucD8VxdwT7zqcpODFk1RzGgAgqVo+YhutFrTu/qclbtnOfXBuskjw==}
+
+ '@astrojs/prism@3.1.0':
+ resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+
+ '@astrojs/prism@3.2.0':
+ resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0}
+
+ '@astrojs/sitemap@3.2.1':
+ resolution: {integrity: sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==}
+
+ '@astrojs/tailwind@5.1.4':
+ resolution: {integrity: sha512-EJ3uoTZZr0RYwTrVS2HgYN0+VbXvg7h87AtwpD5OzqS3GyMwRmzfOwHfORTxoWGQRrY9k/Fi+Awk60kwpvRL5Q==}
+ peerDependencies:
+ astro: ^3.0.0 || ^4.0.0 || ^5.0.0
+ tailwindcss: ^3.0.24
+
+ '@astrojs/telemetry@3.1.0':
+ resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+
+ '@babel/code-frame@7.26.2':
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.26.3':
+ resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.26.0':
+ resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.26.3':
+ resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.25.9':
+ resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.25.9':
+ resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.25.9':
+ resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.26.0':
+ resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.25.9':
+ resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-replace-supers@7.25.9':
+ resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.25.9':
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.25.9':
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.25.9':
+ resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.26.0':
+ resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.26.3':
+ resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-syntax-decorators@7.25.9':
+ resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.25.9':
+ resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.25.9':
+ resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-modules-commonjs@7.26.3':
+ resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx@7.25.9':
+ resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.26.3':
+ resolution: {integrity: sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-typescript@7.26.0':
+ resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.26.0':
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.25.9':
+ resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.26.4':
+ resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.26.3':
+ resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
+ engines: {node: '>=6.9.0'}
+
+ '@builder.io/partytown@0.10.3':
+ resolution: {integrity: sha512-N2SWA3c5vEad3rgdAFM3zMb6uc7aXqibkgAz4ijvYzycgQXJ4dE5oH6fGFMXSQWj6ayVlLT1/CmpflYUJHfmQg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ '@contentlayer/cli@0.3.4':
+ resolution: {integrity: sha512-vNDwgLuhYNu+m70NZ3XK9kexKNguuxPXg7Yvzj3B34cEilQjjzSrcTY/i+AIQm9V7uT5GGshx9ukzPf+SmoszQ==}
+
+ '@contentlayer/client@0.3.4':
+ resolution: {integrity: sha512-QSlLyc3y4PtdC5lFw0L4wTZUH8BQnv2nk37hNCsPAqGf+dRO7TLAzdc+2/mVIRgK+vSH+pSOzjLsQpFxxXRTZA==}
+
+ '@contentlayer/core@0.3.4':
+ resolution: {integrity: sha512-o68oBLwfYZ+2vtgfk1lgHxOl3LoxvRNiUfeQ8IWFWy/L4wnIkKIqLZX01zlRE5IzYM+ZMMN5V0cKQlO7DsyR9g==}
+ peerDependencies:
+ esbuild: 0.17.x || 0.18.x
+ markdown-wasm: 1.x
+ peerDependenciesMeta:
+ esbuild:
+ optional: true
+ markdown-wasm:
+ optional: true
+
+ '@contentlayer/source-files@0.3.4':
+ resolution: {integrity: sha512-4njyn0OFPu7WY4tAjMxiJgWOKeiHuBOGdQ36EYE03iij/pPPRbiWbL+cmLccYXUFEW58mDwpqROZZm6pnxjRDQ==}
+
+ '@contentlayer/source-remote-files@0.3.4':
+ resolution: {integrity: sha512-cyiv4sNUySZvR0uAKlM+kSAELzNd2h2QT1R2e41dRKbwOUVxeLfmGiLugr0aVac6Q3xYcD99dbHyR1xWPV+w9w==}
+
+ '@contentlayer/utils@0.3.4':
+ resolution: {integrity: sha512-ZWWOhbUWYQ2QHoLIlcUnEo7X4ZbwcyFPuzVQWWMkK43BxCveyQtZwBIzfyx54sqVzi0GUmKP8bHzsLQT0QxaLQ==}
+ peerDependencies:
+ '@effect-ts/otel-node': '*'
+ peerDependenciesMeta:
+ '@effect-ts/otel-node':
+ optional: true
+
+ '@effect-ts/core@0.60.5':
+ resolution: {integrity: sha512-qi1WrtJA90XLMnj2hnUszW9Sx4dXP03ZJtCc5DiUBIOhF4Vw7plfb65/bdBySPoC9s7zy995TdUX1XBSxUkl5w==}
+
+ '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1':
+ resolution: {integrity: sha512-47gAg0O2pW5Jlo86jfzjdkwL5a7Bzb+Kj5WTmdu4CxYRfWn9ytKjuuYIfsNDW8neuhdKzn+P5wCddgEh0glYyQ==}
+ peerDependencies:
+ '@effect-ts/core': ^0.60.2
+ '@opentelemetry/api': ^1.4.0
+ '@opentelemetry/core': ^1.13.0
+ '@opentelemetry/exporter-trace-otlp-grpc': ^0.39.0
+ '@opentelemetry/sdk-trace-base': ^1.13.0
+
+ '@effect-ts/otel-sdk-trace-node@0.15.1':
+ resolution: {integrity: sha512-a2sF0ylmn8xOJs8fNeT/spJ1gUcsksAJCALxo9WOfuTCMtTwMVtVhCKEPEeQoL7wFqU+JgPkVdP91+FJ/Rkeow==}
+ peerDependencies:
+ '@effect-ts/core': ^0.60.2
+ '@opentelemetry/api': ^1.4.0
+ '@opentelemetry/core': ^1.13.0
+ '@opentelemetry/sdk-trace-base': ^1.13.0
+ '@opentelemetry/sdk-trace-node': ^1.13.0
+
+ '@effect-ts/otel@0.15.1':
+ resolution: {integrity: sha512-AmZJHl7t0+Peh7Yb2+hqn6r9+rd9/UfeA4AMV9h0YGTdOyouyFfD3wzWlxnAUzAQ4Lrod4kC7Noruret4EpqpA==}
+ peerDependencies:
+ '@effect-ts/core': ^0.60.2
+ '@opentelemetry/api': ^1.4.0
+ '@opentelemetry/core': ^1.13.0
+ '@opentelemetry/sdk-trace-base': ^1.13.0
+
+ '@effect-ts/system@0.57.5':
+ resolution: {integrity: sha512-/crHGujo0xnuHIYNc1VgP0HGJGFSoSqq88JFXe6FmFyXPpWt8Xu39LyLg7rchsxfXFeEdA9CrIZvLV5eswXV5g==}
+
+ '@emnapi/runtime@1.3.1':
+ resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+
+ '@emotion/hash@0.9.2':
+ resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==}
+
+ '@esbuild-plugins/node-resolve@0.1.4':
+ resolution: {integrity: sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g==}
+ peerDependencies:
+ esbuild: '*'
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.17.6':
+ resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.17.6':
+ resolution: {integrity: sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.17.6':
+ resolution: {integrity: sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.17.6':
+ resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.17.6':
+ resolution: {integrity: sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.17.6':
+ resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.17.6':
+ resolution: {integrity: sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.17.6':
+ resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.17.6':
+ resolution: {integrity: sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.17.6':
+ resolution: {integrity: sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.17.6':
+ resolution: {integrity: sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.17.6':
+ resolution: {integrity: sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.17.6':
+ resolution: {integrity: sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.17.6':
+ resolution: {integrity: sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.17.6':
+ resolution: {integrity: sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.17.6':
+ resolution: {integrity: sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.17.6':
+ resolution: {integrity: sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.17.6':
+ resolution: {integrity: sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.17.6':
+ resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.17.6':
+ resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.17.6':
+ resolution: {integrity: sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.17.6':
+ resolution: {integrity: sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@fal-works/esbuild-plugin-global-externals@2.1.2':
+ resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==}
+
+ '@fontsource/montserrat@5.1.0':
+ resolution: {integrity: sha512-HB4+rWP9Y8g6T9RGRVJk2SvAJtx2eBAXuivvPOqQdD806/9WESUfucfH9LqFj3bGgdhNCfh0Rv0NGuwEmBLRiw==}
+
+ '@fontsource/playfair-display@5.1.0':
+ resolution: {integrity: sha512-O4Ph7IwM2sH4IpSgYKP1ZdOuaYd22+eXdT1jU8/kDM6gIABV2RoqJM34Z+WD364+mO1noXPcF1ZtA4aRfcFZLA==}
+
+ '@fontsource/schibsted-grotesk@5.1.0':
+ resolution: {integrity: sha512-F9W9SoyjaipG/X3WRW8lkkKHvh4eL5ytGhVMIdKbiME2KdSquD786pI0fBZMnr4EwKShdT1O+L9sDl0MqkEzwA==}
+
+ '@grpc/grpc-js@1.12.5':
+ resolution: {integrity: sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==}
+ engines: {node: '>=12.10.0'}
+
+ '@grpc/proto-loader@0.7.13':
+ resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ '@img/sharp-darwin-arm64@0.33.5':
+ resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-darwin-x64@0.33.5':
+ resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-arm64@1.0.4':
+ resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@img/sharp-libvips-darwin-x64@1.0.4':
+ resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@img/sharp-libvips-linux-arm64@1.0.4':
+ resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-arm@1.0.5':
+ resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-s390x@1.0.4':
+ resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-libvips-linux-x64@1.0.4':
+ resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linux-arm64@0.33.5':
+ resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linux-arm@0.33.5':
+ resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@img/sharp-linux-s390x@0.33.5':
+ resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [s390x]
+ os: [linux]
+
+ '@img/sharp-linux-x64@0.33.5':
+ resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-arm64@0.33.5':
+ resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [arm64]
+ os: [linux]
+
+ '@img/sharp-linuxmusl-x64@0.33.5':
+ resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [linux]
+
+ '@img/sharp-wasm32@0.33.5':
+ resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [wasm32]
+
+ '@img/sharp-win32-ia32@0.33.5':
+ resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@img/sharp-win32-x64@0.33.5':
+ resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/gen-mapping@0.3.8':
+ resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/set-array@1.2.1':
+ resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
+ '@js-sdsl/ordered-map@4.4.2':
+ resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==}
+
+ '@js-temporal/polyfill@0.4.4':
+ resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==}
+ engines: {node: '>=12'}
+
+ '@jspm/core@2.0.1':
+ resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==}
+
+ '@mdx-js/esbuild@2.3.0':
+ resolution: {integrity: sha512-r/vsqsM0E+U4Wr0DK+0EfmABE/eg+8ITW4DjvYdh3ve/tK2safaqHArNnaqbOk1DjYGrhxtoXoGaM3BY8fGBTA==}
+ peerDependencies:
+ esbuild: '>=0.11.0'
+
+ '@mdx-js/mdx@2.3.0':
+ resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==}
+
+ '@mdx-js/mdx@3.1.0':
+ resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@npmcli/fs@3.1.1':
+ resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ '@npmcli/git@4.1.0':
+ resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ '@npmcli/package-json@4.0.1':
+ resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ '@npmcli/promise-spawn@6.0.2':
+ resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ '@opentelemetry/api-logs@0.39.1':
+ resolution: {integrity: sha512-9BJ8lMcOzEN0lu+Qji801y707oFO4xT3db6cosPvl+k7ItUHKN5ofWqtSbM9gbt1H4JJ/4/2TVrqI9Rq7hNv6Q==}
+ engines: {node: '>=14'}
+
+ '@opentelemetry/api@1.9.0':
+ resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
+ engines: {node: '>=8.0.0'}
+
+ '@opentelemetry/context-async-hooks@1.30.0':
+ resolution: {integrity: sha512-roCetrG/cz0r/gugQm/jFo75UxblVvHaNSRoR0kSSRSzXFAiIBqFCZuH458BHBNRtRe+0yJdIJ21L9t94bw7+g==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/core@1.13.0':
+ resolution: {integrity: sha512-2dBX3Sj99H96uwJKvc2w9NOiNgbvAO6mOFJFramNkKfS9O4Um+VWgpnlAazoYjT6kUJ1MP70KQ5ngD4ed+4NUw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.5.0'
+
+ '@opentelemetry/core@1.30.0':
+ resolution: {integrity: sha512-Q/3u/K73KUjTCnFUP97ZY+pBjQ1kPEgjOfXj/bJl8zW7GbXdkw6cwuyZk6ZTXkVgCBsYRYUzx4fvYK1jxdb9MA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/exporter-trace-otlp-grpc@0.39.1':
+ resolution: {integrity: sha512-l5RhLKx6U+yuLhMrtgavTDthX50E1mZM3/SSySC7OPZiArFHV/b/9x9jxAzrOgIQUDxyj4N0V9aLKSA2t7Qzxg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+
+ '@opentelemetry/otlp-exporter-base@0.39.1':
+ resolution: {integrity: sha512-Pv5X8fbi6jD/RJBePyn7MnCSuE6MbPB6dl+7YYBWJ5RcMGYMwvLXjd4h2jWsPV2TSUg38H/RoSP0aXvQ06Y7iw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+
+ '@opentelemetry/otlp-grpc-exporter-base@0.39.1':
+ resolution: {integrity: sha512-u3ErFRQqQFKjjIMuwLWxz/tLPYInfmiAmSy//fGSCzCh2ZdJgqQjMOAxBgqFtCF2xFL+OmMhyuC2ThMzceGRWA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+
+ '@opentelemetry/otlp-transformer@0.39.1':
+ resolution: {integrity: sha512-0hgVnXXz5efI382B/24NxD4b6Zxlh7nxCdJkxkdmQMbn0yRiwoq/ZT+QG8eUL6JNzsBAV1WJlF5aJNsL8skHvw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.5.0'
+
+ '@opentelemetry/propagator-b3@1.30.0':
+ resolution: {integrity: sha512-lcobQQmd+hLdtxJJKu/i51lNXmF1PJJ7Y9B97ciHRVQuMI260vSZG7Uf4Zg0fqR8PB+fT/7rnlDwS0M7QldZQQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/propagator-jaeger@1.30.0':
+ resolution: {integrity: sha512-0hdP495V6HPRkVpowt54+Swn5NdesMIRof+rlp0mbnuIUOM986uF+eNxnPo9q5MmJegVBRTxgMHXXwvnXRnKRg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/resources@1.13.0':
+ resolution: {integrity: sha512-euqjOkiN6xhjE//0vQYGvbStxoD/WWQRhDiO0OTLlnLBO9Yw2Gd/VoSx2H+svsebjzYk5OxLuREBmcdw6rbUNg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.5.0'
+
+ '@opentelemetry/resources@1.30.0':
+ resolution: {integrity: sha512-5mGMjL0Uld/99t7/pcd7CuVtJbkARckLVuiOX84nO8RtLtIz0/J6EOHM2TGvPZ6F4K+XjUq13gMx14w80SVCQg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/sdk-logs@0.39.1':
+ resolution: {integrity: sha512-/gmgKfZ1ZVFporKuwsewqIyvaUIGpv76JZ7lBpHQQPb37IMpaXO6pdqFI4ebHAWfNIm3akMyhmdtzivcgF3lgw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.4.0 <1.5.0'
+ '@opentelemetry/api-logs': '>=0.38.0'
+
+ '@opentelemetry/sdk-metrics@1.13.0':
+ resolution: {integrity: sha512-MOjZX6AnSOqLliCcZUrb+DQKjAWXBiGeICGbHAGe5w0BB18PJIeIo995lO5JSaFfHpmUMgJButTPfJJD27W3Vg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.3.0 <1.5.0'
+
+ '@opentelemetry/sdk-trace-base@1.13.0':
+ resolution: {integrity: sha512-moTiQtc0uPR1hQLt6gLDJH9IIkeBhgRb71OKjNHZPE1VF45fHtD6nBDi5J/DkTHTwYP5X3kBJLa3xN7ub6J4eg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.5.0'
+
+ '@opentelemetry/sdk-trace-base@1.30.0':
+ resolution: {integrity: sha512-RKQDaDIkV7PwizmHw+rE/FgfB2a6MBx+AEVVlAHXRG1YYxLiBpPX2KhmoB99R5vA4b72iJrjle68NDWnbrE9Dg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/sdk-trace-node@1.30.0':
+ resolution: {integrity: sha512-MeXkXEdBs9xq1JSGTr/3P1lHBSUBaVmo1+UpoQhUpviPMzDXy0MNsdTC7KKI6/YcG74lTX6eqeNjlC1jV4Rstw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
+ '@opentelemetry/semantic-conventions@1.13.0':
+ resolution: {integrity: sha512-LMGqfSZkaMQXqewO0o1wvWr/2fQdCh4a3Sqlxka/UsJCe0cfLulh6x2aqnKLnsrSGiCq5rSCwvINd152i0nCqw==}
+ engines: {node: '>=14'}
+
+ '@opentelemetry/semantic-conventions@1.28.0':
+ resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==}
+ engines: {node: '>=14'}
+
+ '@oslojs/encoding@1.1.0':
+ resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+
+ '@protobufjs/codegen@2.0.4':
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+
+ '@protobufjs/eventemitter@1.1.0':
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+
+ '@protobufjs/fetch@1.1.0':
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+
+ '@protobufjs/inquire@1.1.0':
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+
+ '@protobufjs/utf8@1.1.0':
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+
+ '@remix-run/css-bundle@2.15.2':
+ resolution: {integrity: sha512-/GX8qPfUa9lZI0rx270/JH8oq4X3KFy7FlYV5dSB9pJjc5uR0BVkfb5htpS/U55o7d0qVwa28Wa9y5Z8D01CEQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@remix-run/dev@2.15.2':
+ resolution: {integrity: sha512-o8lix8t4GBhtXjo/G1IzwtHVW5GRMs7amtFtBHiR1bhSyK7VyX5qGtTDmJyny5QDv83pxaLOCiE0dUng2BCoyQ==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+ peerDependencies:
+ '@remix-run/react': ^2.15.2
+ '@remix-run/serve': ^2.15.2
+ typescript: ^5.1.0
+ vite: ^5.1.0
+ wrangler: ^3.28.2
+ peerDependenciesMeta:
+ '@remix-run/serve':
+ optional: true
+ typescript:
+ optional: true
+ vite:
+ optional: true
+ wrangler:
+ optional: true
+
+ '@remix-run/node@2.15.2':
+ resolution: {integrity: sha512-NS/h5uxje7DYCNgcKqKAiUhf0r2HVnoYUBWLyIIMmCUP1ddWurBP6xTPcWzGhEvV/EvguniYi1wJZ5+X8sonWw==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ typescript: ^5.1.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@remix-run/react@2.15.2':
+ resolution: {integrity: sha512-NAAMsSgoC/sdOgovUewwRCE/RUm3F+MBxxZKfwu3POCNeHaplY5qGkH/y8PUXvdN1EBG7Z0Ko43dyzCfcEy5PA==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ typescript: ^5.1.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@remix-run/router@1.21.0':
+ resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==}
+ engines: {node: '>=14.0.0'}
+
+ '@remix-run/server-runtime@2.15.2':
+ resolution: {integrity: sha512-OqiPcvEnnU88B8b1LIWHHkQ3Tz2GDAmQ1RihFNQsbrFKpDsQLkw0lJlnfgKA/uHd0CEEacpfV7C9qqJT3V6Z2g==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ typescript: ^5.1.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@remix-run/web-blob@3.1.0':
+ resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==}
+
+ '@remix-run/web-fetch@4.4.2':
+ resolution: {integrity: sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==}
+ engines: {node: ^10.17 || >=12.3}
+
+ '@remix-run/web-file@3.1.0':
+ resolution: {integrity: sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==}
+
+ '@remix-run/web-form-data@3.1.0':
+ resolution: {integrity: sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==}
+
+ '@remix-run/web-stream@1.1.0':
+ resolution: {integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==}
+
+ '@rollup/pluginutils@5.1.4':
+ resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.29.1':
+ resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.29.1':
+ resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.29.1':
+ resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.29.1':
+ resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.29.1':
+ resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.29.1':
+ resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
+ resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.29.1':
+ resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.29.1':
+ resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.29.1':
+ resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
+ resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
+ resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.29.1':
+ resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.29.1':
+ resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.29.1':
+ resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.29.1':
+ resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.29.1':
+ resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.29.1':
+ resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.29.1':
+ resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@shikijs/core@1.24.4':
+ resolution: {integrity: sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q==}
+
+ '@shikijs/engine-javascript@1.24.4':
+ resolution: {integrity: sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA==}
+
+ '@shikijs/engine-oniguruma@1.24.4':
+ resolution: {integrity: sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw==}
+
+ '@shikijs/types@1.24.4':
+ resolution: {integrity: sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA==}
+
+ '@shikijs/vscode-textmate@9.3.1':
+ resolution: {integrity: sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g==}
+
+ '@tailwindcss/typography@0.5.15':
+ resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==}
+ peerDependencies:
+ tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
+
+ '@types/acorn@4.0.6':
+ resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.6.8':
+ resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.20.6':
+ resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==}
+
+ '@types/cookie@0.6.0':
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/estree-jsx@1.0.5':
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+ '@types/estree@1.0.6':
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+ '@types/hast@2.3.10':
+ resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==}
+
+ '@types/hast@3.0.4':
+ resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+ '@types/mdast@3.0.15':
+ resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==}
+
+ '@types/mdast@4.0.4':
+ resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+ '@types/mdx@2.0.13':
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
+ '@types/ms@0.7.34':
+ resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
+
+ '@types/nlcst@1.0.4':
+ resolution: {integrity: sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==}
+
+ '@types/nlcst@2.0.3':
+ resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+
+ '@types/node@17.0.45':
+ resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
+
+ '@types/node@22.10.2':
+ resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==}
+
+ '@types/parse5@6.0.3':
+ resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
+
+ '@types/react-dom@19.0.2':
+ resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==}
+ peerDependencies:
+ '@types/react': ^19.0.0
+
+ '@types/react@19.0.2':
+ resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==}
+
+ '@types/resolve@1.20.6':
+ resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
+ '@types/sax@1.2.7':
+ resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
+
+ '@types/unist@2.0.11':
+ resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+ '@types/unist@3.0.3':
+ resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+ '@ungap/structured-clone@1.2.1':
+ resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==}
+
+ '@vanilla-extract/babel-plugin-debug-ids@1.2.0':
+ resolution: {integrity: sha512-z5nx2QBnOhvmlmBKeRX5sPVLz437wV30u+GJL+Hzj1rGiJYVNvgIIlzUpRNjVQ0MgAgiQIqIUbqPnmMc6HmDlQ==}
+
+ '@vanilla-extract/css@1.17.0':
+ resolution: {integrity: sha512-W6FqVFDD+C71ZlKsuj0MxOXSvHb1tvQ9h/+79aYfi097wLsALrnnBzd0by8C///iurrpQ3S+SH74lXd7Lr9MvA==}
+
+ '@vanilla-extract/integration@6.5.0':
+ resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==}
+
+ '@vanilla-extract/private@1.0.6':
+ resolution: {integrity: sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==}
+
+ '@web3-storage/multipart-parser@1.0.0':
+ resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==}
+
+ '@zxing/text-encoding@0.9.0':
+ resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==}
+
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.14.0:
+ resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ aggregate-error@3.1.0:
+ resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+ engines: {node: '>=8'}
+
+ ansi-align@3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ array-flatten@1.1.1:
+ resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
+
+ array-iterate@2.0.1:
+ resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
+
+ array-timsort@1.0.3:
+ resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
+
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
+ astro-particles@2.10.0:
+ resolution: {integrity: sha512-DE1azMdcu2dkXxEKd7seoRqbhlh4UnTfinWM+RF5jm00tPtaJ+cjrz5nKHRnzYcyTAR18MaRAC4lIKf3tu86iQ==}
+
+ astro-robots-txt@1.0.0:
+ resolution: {integrity: sha512-6JQSLid4gMhoWjOm85UHLkgrw0+hHIjnJVIUqxjU2D6feKlVyYukMNYjH44ZDZBK1P8hNxd33PgWlHzCASvedA==}
+
+ astro@4.16.18:
+ resolution: {integrity: sha512-G7zfwJt9BDHEZwlaLNvjbInIw2hPryyD654314KV/XT34pJU6SfN1S+mWa8RAkALcZNJnJXCJmT3JXLQStD3Lw==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
+ hasBin: true
+
+ autoprefixer@10.4.20:
+ resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
+
+ bail@2.0.2:
+ resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base-64@1.0.0:
+ resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ body-parser@1.20.3:
+ resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ boxen@8.0.1:
+ resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==}
+ engines: {node: '>=18'}
+
+ brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserify-zlib@0.1.4:
+ resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
+
+ browserslist@4.24.3:
+ resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ cacache@17.1.4:
+ resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ call-bind-apply-helpers@1.0.1:
+ resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.8:
+ resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.3:
+ resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
+ engines: {node: '>= 0.4'}
+
+ camel-case@4.1.2:
+ resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ camelcase@8.0.0:
+ resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
+ engines: {node: '>=16'}
+
+ caniuse-lite@1.0.30001690:
+ resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==}
+
+ ccount@2.0.1:
+ resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chalk@5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+ character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+ character-entities@2.0.2:
+ resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+ character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
+ ci-info@4.1.0:
+ resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==}
+ engines: {node: '>=8'}
+
+ clean-stack@2.2.0:
+ resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+ engines: {node: '>=6'}
+
+ cli-boxes@3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+
+ cli-cursor@3.1.0:
+ resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+ engines: {node: '>=8'}
+
+ cli-cursor@5.0.0:
+ resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+ engines: {node: '>=18'}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
+ clipanion@3.2.1:
+ resolution: {integrity: sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA==}
+ peerDependencies:
+ typanion: '*'
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
+ clsx@2.1.1:
+ resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+ engines: {node: '>=6'}
+
+ collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
+ comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ comment-json@4.2.5:
+ resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==}
+ engines: {node: '>= 6'}
+
+ common-ancestor-path@1.0.1:
+ resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ content-disposition@0.5.4:
+ resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
+ engines: {node: '>= 0.6'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
+ contentlayer@0.3.4:
+ resolution: {integrity: sha512-FYDdTUFaN4yqep0waswrhcXjmMJnPD5iXDTtxcUCGdklfuIrXM2xLx51xl748cHmGA6IsC+27YZFxU6Ym13QIA==}
+ engines: {node: '>=14.18'}
+ hasBin: true
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie-signature@1.0.6:
+ resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
+ cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+
+ cookie@0.7.1:
+ resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==}
+ engines: {node: '>= 0.6'}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+
+ css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ cssom@0.5.0:
+ resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
+
+ csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ data-uri-to-buffer@3.0.1:
+ resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==}
+ engines: {node: '>= 6'}
+
+ data-uri-to-buffer@4.0.1:
+ resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+ engines: {node: '>= 12'}
+
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decode-named-character-reference@1.0.2:
+ resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+
+ dedent@1.5.3:
+ resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
+ deep-object-diff@1.1.9:
+ resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
+ detect-libc@2.0.3:
+ resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+ engines: {node: '>=8'}
+
+ deterministic-object-hash@2.0.2:
+ resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==}
+ engines: {node: '>=18'}
+
+ devalue@5.1.1:
+ resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
+
+ devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+ engines: {node: '>=0.3.1'}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+
+ dotenv@16.4.7:
+ resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
+ engines: {node: '>=12'}
+
+ dset@3.1.4:
+ resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==}
+ engines: {node: '>=4'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ duplexify@3.7.1:
+ resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.75:
+ resolution: {integrity: sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==}
+
+ emoji-regex-xs@1.0.0:
+ resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==}
+
+ emoji-regex@10.4.0:
+ resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ err-code@2.0.3:
+ resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@1.5.4:
+ resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
+ es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+
+ esast-util-from-estree@2.0.0:
+ resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+ esast-util-from-js@2.0.1:
+ resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
+ esbuild-plugins-node-modules-polyfill@1.6.8:
+ resolution: {integrity: sha512-bRB4qbgUDWrdY1eMk123KiaCSW9VzQ+QLZrmU7D//cCFkmksPd9mUMpmWoFK/rxjIeTfTSOpKCoGoimlvI+AWw==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ esbuild: '>=0.14.0 <=0.24.x'
+
+ esbuild@0.17.6:
+ resolution: {integrity: sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ estree-util-attach-comments@2.1.1:
+ resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==}
+
+ estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+ estree-util-build-jsx@2.2.2:
+ resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==}
+
+ estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
+ estree-util-is-identifier-name@1.1.0:
+ resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==}
+
+ estree-util-is-identifier-name@2.1.0:
+ resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==}
+
+ estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+ estree-util-scope@1.0.0:
+ resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+ estree-util-to-js@1.2.0:
+ resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==}
+
+ estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+ estree-util-value-to-estree@1.3.0:
+ resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==}
+ engines: {node: '>=12.0.0'}
+
+ estree-util-visit@1.2.1:
+ resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==}
+
+ estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ eval@0.1.8:
+ resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==}
+ engines: {node: '>= 0.8'}
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
+ exit-hook@2.2.1:
+ resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==}
+ engines: {node: '>=6'}
+
+ express@4.21.2:
+ resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
+ engines: {node: '>= 0.10.0'}
+
+ extend-shallow@2.0.1:
+ resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+ engines: {node: '>=0.10.0'}
+
+ extend@3.0.2:
+ resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+ fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.18.0:
+ resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
+
+ fault@2.0.1:
+ resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
+
+ fetch-blob@3.2.0:
+ resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+ engines: {node: ^12.20 || >= 14.13}
+
+ filename-reserved-regex@3.0.0:
+ resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ finalhandler@1.3.1:
+ resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
+ engines: {node: '>= 0.8'}
+
+ find-up-simple@1.0.0:
+ resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==}
+ engines: {node: '>=18'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ find-yarn-workspace-root2@1.2.16:
+ resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
+
+ flattie@1.1.1:
+ resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==}
+ engines: {node: '>=8'}
+
+ for-each@0.3.3:
+ resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+ foreground-child@3.3.0:
+ resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+ engines: {node: '>=14'}
+
+ format@0.2.2:
+ resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
+ engines: {node: '>=0.4.x'}
+
+ formdata-polyfill@4.0.10:
+ resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+ engines: {node: '>=12.20.0'}
+
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
+ fraction.js@4.3.7:
+ resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
+ fs-minipass@3.0.3:
+ resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ fs-monkey@1.0.6:
+ resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ generic-names@4.0.0:
+ resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.3.0:
+ resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+ engines: {node: '>=18'}
+
+ get-intrinsic@1.2.6:
+ resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
+ engines: {node: '>= 0.4'}
+
+ get-port@5.1.1:
+ resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
+ engines: {node: '>=8'}
+
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
+ github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.4.5:
+ resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+ hasBin: true
+
+ globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+
+ globrex@0.1.2:
+ resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ gray-matter@4.0.3:
+ resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
+ engines: {node: '>=6.0'}
+
+ gunzip-maybe@1.4.2:
+ resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==}
+ hasBin: true
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-own-prop@2.0.0:
+ resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hash-wasm@4.12.0:
+ resolution: {integrity: sha512-+/2B2rYLb48I/evdOIhP+K/DD2ca2fgBjp6O+GBEnCDk2e4rpeXIK8GvIyRPjTezgmWn9gmKwkQjjx6BtqDHVQ==}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hast-util-from-html@2.0.3:
+ resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
+
+ hast-util-from-parse5@7.1.2:
+ resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==}
+
+ hast-util-from-parse5@8.0.2:
+ resolution: {integrity: sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==}
+
+ hast-util-heading-rank@3.0.0:
+ resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+
+ hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+
+ hast-util-parse-selector@3.1.1:
+ resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==}
+
+ hast-util-parse-selector@4.0.0:
+ resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+
+ hast-util-raw@7.2.3:
+ resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==}
+
+ hast-util-raw@9.1.0:
+ resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==}
+
+ hast-util-to-estree@2.3.3:
+ resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==}
+
+ hast-util-to-estree@3.1.0:
+ resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==}
+
+ hast-util-to-html@8.0.4:
+ resolution: {integrity: sha512-4tpQTUOr9BMjtYyNlt0P50mH7xj0Ks2xpo8M943Vykljf99HW6EzulIoJP1N3eKOSScEHzyzi9dm7/cn0RfGwA==}
+
+ hast-util-to-html@9.0.4:
+ resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==}
+
+ hast-util-to-jsx-runtime@2.3.2:
+ resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==}
+
+ hast-util-to-parse5@7.1.0:
+ resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==}
+
+ hast-util-to-parse5@8.0.0:
+ resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+
+ hast-util-to-string@3.0.1:
+ resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==}
+
+ hast-util-to-text@4.0.2:
+ resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
+
+ hast-util-whitespace@2.0.1:
+ resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+
+ hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
+ hastscript@7.2.0:
+ resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==}
+
+ hastscript@9.0.0:
+ resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==}
+
+ hosted-git-info@6.1.3:
+ resolution: {integrity: sha512-HVJyzUrLIL1c0QmviVh5E8VGyUS7xCFPS6yydaVd1UegW+ibV/CohqTH9MkOLDp5o+rb82DMo77PTuc9F/8GKw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ html-escaper@3.0.3:
+ resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
+
+ html-void-elements@2.0.1:
+ resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==}
+
+ html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
+ htmlparser2@8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+
+ http-cache-semantics@4.1.1:
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+
+ http-errors@2.0.0:
+ resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
+ engines: {node: '>= 0.8'}
+
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
+ iconv-lite@0.4.24:
+ resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+ engines: {node: '>=0.10.0'}
+
+ icss-utils@5.1.0:
+ resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ imagescript@1.3.0:
+ resolution: {integrity: sha512-lCYzQrWzdnA68K03oMj/BUlBJrVBnslzDOgGFymAp49NmdGEJxGeN7sHh5mCva0nQkq+kkKSuru2zLf1m04+3A==}
+ engines: {node: '>=14.0.0'}
+
+ import-meta-resolve@4.1.0:
+ resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@4.0.0:
+ resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+ engines: {node: '>=8'}
+
+ inflection@2.0.1:
+ resolution: {integrity: sha512-wzkZHqpb4eGrOKBl34xy3umnYHx8Si5R1U4fwmdxLo5gdH6mEK8gclckTj/qWqy4Je0bsDYe/qazZYuO7xe3XQ==}
+ engines: {node: '>=14.0.0'}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ inline-style-parser@0.1.1:
+ resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+
+ inline-style-parser@0.2.4:
+ resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
+
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
+ is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+ is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
+ is-arguments@1.2.0:
+ resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==}
+ engines: {node: '>= 0.4'}
+
+ is-arrayish@0.3.2:
+ resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-buffer@2.0.5:
+ resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+ engines: {node: '>=4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
+ is-deflate@1.0.0:
+ resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==}
+
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
+ is-extendable@0.1.1:
+ resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+ engines: {node: '>=0.10.0'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-generator-function@1.0.10:
+ resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-gzip@1.0.0:
+ resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
+ is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+
+ is-interactive@2.0.0:
+ resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
+ engines: {node: '>=12'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@3.0.0:
+ resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
+ engines: {node: '>=10'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-reference@3.0.3:
+ resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-unicode-supported@0.1.0:
+ resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+ engines: {node: '>=10'}
+
+ is-unicode-supported@1.3.0:
+ resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
+ engines: {node: '>=12'}
+
+ is-unicode-supported@2.1.0:
+ resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
+ engines: {node: '>=18'}
+
+ is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isbot@5.1.18:
+ resolution: {integrity: sha512-df9RdChv1DheItzN5pNKtblc9/otzJYmxjf9GhCZG/f0TCcGCbQFmtM3e+SD0e8EI3/O2tIXPYVaG4FUaIIa6Q==}
+ engines: {node: '>=18'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ javascript-stringify@2.1.0:
+ resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@3.14.1:
+ resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+ hasBin: true
+
+ js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+
+ jsbi@4.3.0:
+ resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==}
+
+ jsesc@3.0.2:
+ resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-parse-even-better-errors@3.0.2:
+ resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ linkedom@0.14.26:
+ resolution: {integrity: sha512-mK6TrydfFA7phrnp+1j57ycBwFI5bGSW6YXlw9acHoqF+mP/y+FooEYYyniOt5Ot57FSKB3iwmnuQ1UUyNLm5A==}
+
+ lite-youtube-embed@0.3.3:
+ resolution: {integrity: sha512-gFfVVnj6NRjxVfJKo3qoLtpi0v5mn3AcR4eKD45wrxQuxzveFJUb+7Cr6uV6n+DjO8X3p0UzPPquhGt0H/y+NA==}
+
+ load-yaml-file@0.2.0:
+ resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
+ engines: {node: '>=6'}
+
+ loader-utils@3.3.1:
+ resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
+ engines: {node: '>= 12.13.0'}
+
+ local-pkg@0.5.1:
+ resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
+ engines: {node: '>=14'}
+
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.camelcase@4.3.0:
+ resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+ lodash.castarray@4.4.0:
+ resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
+
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ log-symbols@4.1.0:
+ resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+ engines: {node: '>=10'}
+
+ log-symbols@6.0.0:
+ resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
+ engines: {node: '>=18'}
+
+ long@5.2.3:
+ resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==}
+
+ longest-streak@3.1.0:
+ resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lower-case@2.0.2:
+ resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
+ magicast@0.3.5:
+ resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+
+ markdown-extensions@1.1.1:
+ resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==}
+ engines: {node: '>=0.10.0'}
+
+ markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+
+ markdown-table@3.0.4:
+ resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mdast-util-definitions@5.1.2:
+ resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+
+ mdast-util-definitions@6.0.0:
+ resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==}
+
+ mdast-util-find-and-replace@3.0.1:
+ resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
+
+ mdast-util-from-markdown@1.3.1:
+ resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+
+ mdast-util-from-markdown@2.0.2:
+ resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==}
+
+ mdast-util-frontmatter@1.0.1:
+ resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==}
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==}
+
+ mdast-util-gfm-footnote@2.0.0:
+ resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+
+ mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+
+ mdast-util-gfm@3.0.0:
+ resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+
+ mdast-util-mdx-expression@1.3.2:
+ resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==}
+
+ mdast-util-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+ mdast-util-mdx-jsx@2.1.4:
+ resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==}
+
+ mdast-util-mdx-jsx@3.1.3:
+ resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==}
+
+ mdast-util-mdx@2.0.1:
+ resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==}
+
+ mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+ mdast-util-mdxjs-esm@1.3.1:
+ resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==}
+
+ mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+ mdast-util-phrasing@3.0.1:
+ resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+
+ mdast-util-phrasing@4.1.0:
+ resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
+
+ mdast-util-to-hast@12.3.0:
+ resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+
+ mdast-util-to-hast@13.2.0:
+ resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+
+ mdast-util-to-markdown@1.5.0:
+ resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+
+ mdast-util-to-markdown@2.1.2:
+ resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==}
+
+ mdast-util-to-string@3.2.0:
+ resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+
+ mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
+ mdx-bundler@9.2.1:
+ resolution: {integrity: sha512-hWEEip1KU9MCNqeH2rqwzAZ1pdqPPbfkx9OTJjADqGPQz4t9BO85fhI7AP9gVYrpmfArf9/xJZUN0yBErg/G/Q==}
+ engines: {node: '>=14', npm: '>=6'}
+ peerDependencies:
+ esbuild: 0.*
+
+ media-query-parser@2.0.2:
+ resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==}
+
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ memfs@3.5.3:
+ resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
+ engines: {node: '>= 4.0.0'}
+
+ merge-descriptors@1.0.3:
+ resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
+ micromark-core-commonmark@1.1.0:
+ resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+
+ micromark-core-commonmark@2.0.2:
+ resolution: {integrity: sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==}
+
+ micromark-extension-frontmatter@1.1.1:
+ resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==}
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==}
+
+ micromark-extension-gfm-footnote@2.1.0:
+ resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==}
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==}
+
+ micromark-extension-gfm-table@2.1.0:
+ resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==}
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==}
+
+ micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+ micromark-extension-mdx-expression@1.0.8:
+ resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==}
+
+ micromark-extension-mdx-expression@3.0.0:
+ resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==}
+
+ micromark-extension-mdx-jsx@1.0.5:
+ resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==}
+
+ micromark-extension-mdx-jsx@3.0.1:
+ resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==}
+
+ micromark-extension-mdx-md@1.0.1:
+ resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==}
+
+ micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+ micromark-extension-mdxjs-esm@1.0.5:
+ resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==}
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+ micromark-extension-mdxjs@1.0.1:
+ resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==}
+
+ micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
+ micromark-factory-destination@1.1.0:
+ resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+
+ micromark-factory-destination@2.0.1:
+ resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==}
+
+ micromark-factory-label@1.1.0:
+ resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+
+ micromark-factory-label@2.0.1:
+ resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==}
+
+ micromark-factory-mdx-expression@1.0.9:
+ resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==}
+
+ micromark-factory-mdx-expression@2.0.2:
+ resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==}
+
+ micromark-factory-space@1.1.0:
+ resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+
+ micromark-factory-space@2.0.1:
+ resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==}
+
+ micromark-factory-title@1.1.0:
+ resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+
+ micromark-factory-title@2.0.1:
+ resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==}
+
+ micromark-factory-whitespace@1.1.0:
+ resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+
+ micromark-factory-whitespace@2.0.1:
+ resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==}
+
+ micromark-util-character@1.2.0:
+ resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+
+ micromark-util-character@2.1.1:
+ resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==}
+
+ micromark-util-chunked@1.1.0:
+ resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+
+ micromark-util-chunked@2.0.1:
+ resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==}
+
+ micromark-util-classify-character@1.1.0:
+ resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+
+ micromark-util-classify-character@2.0.1:
+ resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==}
+
+ micromark-util-combine-extensions@1.1.0:
+ resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+
+ micromark-util-combine-extensions@2.0.1:
+ resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==}
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==}
+
+ micromark-util-decode-string@1.1.0:
+ resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+
+ micromark-util-decode-string@2.0.1:
+ resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==}
+
+ micromark-util-encode@1.1.0:
+ resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+
+ micromark-util-encode@2.0.1:
+ resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==}
+
+ micromark-util-events-to-acorn@1.2.3:
+ resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==}
+
+ micromark-util-events-to-acorn@2.0.2:
+ resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==}
+
+ micromark-util-html-tag-name@1.2.0:
+ resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+
+ micromark-util-html-tag-name@2.0.1:
+ resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==}
+
+ micromark-util-normalize-identifier@1.1.0:
+ resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+
+ micromark-util-normalize-identifier@2.0.1:
+ resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==}
+
+ micromark-util-resolve-all@1.1.0:
+ resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+
+ micromark-util-resolve-all@2.0.1:
+ resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==}
+
+ micromark-util-sanitize-uri@1.2.0:
+ resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+
+ micromark-util-sanitize-uri@2.0.1:
+ resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==}
+
+ micromark-util-subtokenize@1.1.0:
+ resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+
+ micromark-util-subtokenize@2.0.3:
+ resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==}
+
+ micromark-util-symbol@1.1.0:
+ resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+
+ micromark-util-symbol@2.0.1:
+ resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==}
+
+ micromark-util-types@1.1.0:
+ resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+
+ micromark-util-types@2.0.1:
+ resolution: {integrity: sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==}
+
+ micromark@3.2.0:
+ resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+
+ micromark@4.0.1:
+ resolution: {integrity: sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+
+ mimic-function@5.0.1:
+ resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+ engines: {node: '>=18'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass-collect@1.0.2:
+ resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
+ engines: {node: '>= 8'}
+
+ minipass-flush@1.0.5:
+ resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+ engines: {node: '>= 8'}
+
+ minipass-pipeline@1.2.4:
+ resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+ engines: {node: '>=8'}
+
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
+ mkdirp-classic@0.5.3:
+ resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ mlly@1.7.3:
+ resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==}
+
+ modern-ahocorasick@1.1.0:
+ resolution: {integrity: sha512-sEKPVl2rM+MNVkGQt3ChdmD8YsigmXdn5NifZn6jiwn9LRJpWm8F3guhaqrJT/JOat6pwpbXEk6kv+b9DMIjsQ==}
+
+ mri@1.2.0:
+ resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
+ engines: {node: '>=4'}
+
+ mrmime@1.0.1:
+ resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
+ engines: {node: '>=10'}
+
+ mrmime@2.0.0:
+ resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+ engines: {node: '>=10'}
+
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nanoid@3.3.8:
+ resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ neotraverse@0.6.18:
+ resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==}
+ engines: {node: '>= 10'}
+
+ nlcst-to-string@3.1.1:
+ resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==}
+
+ nlcst-to-string@4.0.0:
+ resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
+
+ no-case@3.0.4:
+ resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
+
+ node-domexception@1.0.0:
+ resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+ engines: {node: '>=10.5.0'}
+
+ node-fetch@3.3.2:
+ resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ node-releases@2.0.19:
+ resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
+
+ normalize-package-data@5.0.0:
+ resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-install-checks@6.3.0:
+ resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-normalize-package-bin@3.0.1:
+ resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-package-arg@10.1.0:
+ resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-pick-manifest@8.0.2:
+ resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ object-inspect@1.13.3:
+ resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
+ engines: {node: '>= 0.4'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+
+ onetime@7.0.0:
+ resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+ engines: {node: '>=18'}
+
+ oniguruma-to-es@0.8.1:
+ resolution: {integrity: sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw==}
+
+ oo-ascii-tree@1.106.0:
+ resolution: {integrity: sha512-0PZkjIiJUW3jEx7durxcri7JciR8VbJpf2K3qiVbGG4x0MTq6Xm/H84GjBI6tamSx/DV1PMFDfwMs3hm8zfOCw==}
+ engines: {node: '>= 14.17.0'}
+
+ ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+
+ ora@8.1.1:
+ resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==}
+ engines: {node: '>=18'}
+
+ outdent@0.8.0:
+ resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-limit@6.2.0:
+ resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==}
+ engines: {node: '>=18'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-map@4.0.0:
+ resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+ engines: {node: '>=10'}
+
+ p-queue@8.0.1:
+ resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==}
+ engines: {node: '>=18'}
+
+ p-timeout@6.1.3:
+ resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==}
+ engines: {node: '>=14.16'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ pako@0.2.9:
+ resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==}
+
+ parse-entities@4.0.2:
+ resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==}
+
+ parse-latin@5.0.1:
+ resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==}
+
+ parse-latin@7.0.0:
+ resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
+
+ parse-ms@2.1.0:
+ resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==}
+ engines: {node: '>=6'}
+
+ parse5@6.0.1:
+ resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==}
+
+ parse5@7.2.1:
+ resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ pascal-case@3.1.2:
+ resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-to-regexp@0.1.12:
+ resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ peek-stream@1.1.3:
+ resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==}
+
+ periscopic@3.1.0:
+ resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
+ pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pify@4.0.1:
+ resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+ engines: {node: '>=6'}
+
+ pirates@4.0.6:
+ resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
+ engines: {node: '>= 6'}
+
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
+ pkg-types@1.2.1:
+ resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
+
+ possible-typed-array-names@1.0.0:
+ resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ engines: {node: '>= 0.4'}
+
+ postcss-discard-duplicates@5.1.0:
+ resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
+ engines: {node: ^10 || ^12 || >=14.0}
+ peerDependencies:
+ postcss: ^8.2.15
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.0.1:
+ resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@4.0.2:
+ resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ postcss: '>=8.0.9'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ postcss:
+ optional: true
+ ts-node:
+ optional: true
+
+ postcss-modules-extract-imports@3.1.0:
+ resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-local-by-default@4.2.0:
+ resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-scope@3.2.1:
+ resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules-values@4.0.0:
+ resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
+ engines: {node: ^10 || ^12 || >= 14}
+ peerDependencies:
+ postcss: ^8.1.0
+
+ postcss-modules@6.0.1:
+ resolution: {integrity: sha512-zyo2sAkVvuZFFy0gc2+4O+xar5dYlaVy/ebO24KT0ftk/iJevSNyPyQellsBLlnccwh7f6V6Y4GvuKRYToNgpQ==}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-selector-parser@6.0.10:
+ resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@7.0.0:
+ resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.4.49:
+ resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ preferred-pm@4.0.0:
+ resolution: {integrity: sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==}
+ engines: {node: '>=18.12'}
+
+ prettier-plugin-astro@0.12.3:
+ resolution: {integrity: sha512-GthUSu3zCvmtVyqlArosez0xE08vSJ0R1sWurxIWpABaCkNGYFANoUdFkqmIo54EV2uPLGcVJzOucWvCjPBWvg==}
+ engines: {node: ^14.15.0 || >=16.0.0}
+
+ prettier-plugin-tailwindcss@0.5.14:
+ resolution: {integrity: sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==}
+ engines: {node: '>=14.21.3'}
+ peerDependencies:
+ '@ianvs/prettier-plugin-sort-imports': '*'
+ '@prettier/plugin-pug': '*'
+ '@shopify/prettier-plugin-liquid': '*'
+ '@trivago/prettier-plugin-sort-imports': '*'
+ '@zackad/prettier-plugin-twig-melody': '*'
+ prettier: ^3.0
+ prettier-plugin-astro: '*'
+ prettier-plugin-css-order: '*'
+ prettier-plugin-import-sort: '*'
+ prettier-plugin-jsdoc: '*'
+ prettier-plugin-marko: '*'
+ prettier-plugin-organize-attributes: '*'
+ prettier-plugin-organize-imports: '*'
+ prettier-plugin-sort-imports: '*'
+ prettier-plugin-style-order: '*'
+ prettier-plugin-svelte: '*'
+ peerDependenciesMeta:
+ '@ianvs/prettier-plugin-sort-imports':
+ optional: true
+ '@prettier/plugin-pug':
+ optional: true
+ '@shopify/prettier-plugin-liquid':
+ optional: true
+ '@trivago/prettier-plugin-sort-imports':
+ optional: true
+ '@zackad/prettier-plugin-twig-melody':
+ optional: true
+ prettier-plugin-astro:
+ optional: true
+ prettier-plugin-css-order:
+ optional: true
+ prettier-plugin-import-sort:
+ optional: true
+ prettier-plugin-jsdoc:
+ optional: true
+ prettier-plugin-marko:
+ optional: true
+ prettier-plugin-organize-attributes:
+ optional: true
+ prettier-plugin-organize-imports:
+ optional: true
+ prettier-plugin-sort-imports:
+ optional: true
+ prettier-plugin-style-order:
+ optional: true
+ prettier-plugin-svelte:
+ optional: true
+
+ prettier@2.8.8:
+ resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+
+ prettier@3.4.2:
+ resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ pretty-ms@7.0.1:
+ resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==}
+ engines: {node: '>=10'}
+
+ prismjs@1.29.0:
+ resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+ engines: {node: '>=6'}
+
+ proc-log@3.0.0:
+ resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ promise-inflight@1.0.1:
+ resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
+ peerDependencies:
+ bluebird: '*'
+ peerDependenciesMeta:
+ bluebird:
+ optional: true
+
+ promise-retry@2.0.1:
+ resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+ engines: {node: '>=10'}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
+ property-information@6.5.0:
+ resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
+ protobufjs@7.4.0:
+ resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==}
+ engines: {node: '>=12.0.0'}
+
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
+ pump@2.0.1:
+ resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==}
+
+ pump@3.0.2:
+ resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
+
+ pumpify@1.5.1:
+ resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==}
+
+ qs@6.13.0:
+ resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
+ engines: {node: '>=0.6'}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ raw-body@2.5.2:
+ resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
+ engines: {node: '>= 0.8'}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+
+ react-router-dom@6.28.1:
+ resolution: {integrity: sha512-YraE27C/RdjcZwl5UCqF/ffXnZDxpJdk9Q6jw38SZHjXs7NNdpViq2l2c7fO7+4uWaEfcwfGCv3RSg4e1By/fQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: '>=16.8'
+ react-dom: '>=16.8'
+
+ react-router@6.28.1:
+ resolution: {integrity: sha512-2omQTA3rkMljmrvvo6WtewGdVh45SpL9hGiCI9uUrwGGfNFDIvGK4gYJsKlJoNVi6AQZcopSCballL+QGOm7fA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: '>=16.8'
+
+ react-tsparticles@2.12.2:
+ resolution: {integrity: sha512-/nrEbyL8UROXKIMXe+f+LZN2ckvkwV2Qa+GGe/H26oEIc+wq/ybSG9REDwQiSt2OaDQGu0MwmA4BKmkL6wAWcA==}
+ deprecated: '@tsparticles/react is the new version, please use that'
+ peerDependencies:
+ react: '>=16'
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ recma-build-jsx@1.0.0:
+ resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+ recma-jsx@1.0.0:
+ resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==}
+
+ recma-parse@1.0.0:
+ resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+ recma-stringify@1.0.0:
+ resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
+ regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ regex-recursion@5.0.0:
+ resolution: {integrity: sha512-UwyOqeobrCCqTXPcsSqH4gDhOjD5cI/b8kjngWgSZbxYh5yVjAwTjO5+hAuPRNiuR70+5RlWSs+U9PVcVcW9Lw==}
+
+ regex-utilities@2.3.0:
+ resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==}
+
+ regex@5.0.2:
+ resolution: {integrity: sha512-/pczGbKIQgfTMRV0XjABvc5RzLqQmwqxLHdQao2RTXPk+pmTXB2P0IaUHYdYyk412YLwUIkaeMd5T+RzVgTqnQ==}
+
+ rehype-parse@9.0.1:
+ resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==}
+
+ rehype-raw@7.0.0:
+ resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
+
+ rehype-recma@1.0.0:
+ resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
+ rehype-slug@6.0.0:
+ resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
+
+ rehype-stringify@10.0.1:
+ resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
+
+ rehype-stringify@9.0.4:
+ resolution: {integrity: sha512-Uk5xu1YKdqobe5XpSskwPvo1XeHUUucWEQSl8hTrXt5selvca1e8K1EZ37E6YoZ4BT8BCqCdVfQW7OfHfthtVQ==}
+
+ rehype@13.0.2:
+ resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==}
+
+ remark-frontmatter@4.0.1:
+ resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==}
+
+ remark-gfm@4.0.0:
+ resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+
+ remark-mdx-frontmatter@1.1.1:
+ resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==}
+ engines: {node: '>=12.2.0'}
+
+ remark-mdx@2.3.0:
+ resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==}
+
+ remark-mdx@3.1.0:
+ resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
+
+ remark-parse@10.0.2:
+ resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+
+ remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+ remark-rehype@10.1.0:
+ resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+
+ remark-rehype@11.1.1:
+ resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+
+ remark-sectionize@2.1.0:
+ resolution: {integrity: sha512-R/pHt1RLYrEqrbwOVXx8HnvvwOg+mxg8pE4kIWpIYE3/CuZhU8/PAx/0y1BbHWUA0jmTLTeWpUlDrS/B0pyd0g==}
+
+ remark-smartypants@2.1.0:
+ resolution: {integrity: sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ remark-smartypants@3.0.2:
+ resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==}
+ engines: {node: '>=16.0.0'}
+
+ remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
+ repeat-string@1.6.1:
+ resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
+ engines: {node: '>=0.10'}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-like@0.1.2:
+ resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==}
+
+ resolve.exports@2.0.3:
+ resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
+ engines: {node: '>=10'}
+
+ resolve@1.22.10:
+ resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ restore-cursor@3.1.0:
+ resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+ engines: {node: '>=8'}
+
+ restore-cursor@5.1.0:
+ resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+ engines: {node: '>=18'}
+
+ retext-latin@3.1.0:
+ resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==}
+
+ retext-latin@4.0.0:
+ resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
+
+ retext-smartypants@5.2.0:
+ resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==}
+
+ retext-smartypants@6.2.0:
+ resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==}
+
+ retext-stringify@3.1.0:
+ resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==}
+
+ retext-stringify@4.0.0:
+ resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==}
+
+ retext@8.1.0:
+ resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==}
+
+ retext@9.0.0:
+ resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
+
+ retry@0.12.0:
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
+
+ reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup@4.29.1:
+ resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ s.color@0.0.15:
+ resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==}
+
+ sade@1.8.1:
+ resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
+ engines: {node: '>=6'}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ sass-formatter@0.7.9:
+ resolution: {integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw==}
+
+ sax@1.4.1:
+ resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ section-matter@1.0.0:
+ resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
+ engines: {node: '>=4'}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.19.0:
+ resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
+ engines: {node: '>= 0.8.0'}
+
+ serve-static@1.16.2:
+ resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
+ engines: {node: '>= 0.8.0'}
+
+ set-cookie-parser@2.7.1:
+ resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sharp@0.33.5:
+ resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shiki@1.24.4:
+ resolution: {integrity: sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw==}
+
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ simple-swizzle@0.2.2:
+ resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ sitemap@8.0.0:
+ resolution: {integrity: sha512-+AbdxhM9kJsHtruUF39bwS/B0Fytw6Fr1o4ZAIAEqA6cke2xcoO2GleBw9Zw7nRzILVEgz7zBM5GiTJjie1G9A==}
+ engines: {node: '>=14.0.0', npm: '>=6.0.0'}
+ hasBin: true
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+
+ space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-license-ids@3.0.20:
+ resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ ssri@10.0.6:
+ resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ statuses@2.0.1:
+ resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
+ engines: {node: '>= 0.8'}
+
+ stdin-discarder@0.2.2:
+ resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
+ engines: {node: '>=18'}
+
+ stream-replace-string@2.0.0:
+ resolution: {integrity: sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==}
+
+ stream-shift@1.0.3:
+ resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+
+ stream-slice@0.1.2:
+ resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==}
+
+ string-hash@1.1.3:
+ resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ stringify-entities@4.0.4:
+ resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+
+ strip-bom-string@1.0.0:
+ resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+ engines: {node: '>=0.10.0'}
+
+ strip-bom@3.0.0:
+ resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+ engines: {node: '>=4'}
+
+ strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+
+ style-to-object@0.4.4:
+ resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
+
+ style-to-object@1.0.8:
+ resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ suf-log@2.5.3:
+ resolution: {integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow==}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tailwindcss@3.4.17:
+ resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ tar-fs@2.1.1:
+ resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
+ tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ through2@2.0.5:
+ resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+
+ tinyexec@0.3.1:
+ resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ toml@3.0.0:
+ resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==}
+
+ trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+ trough@2.2.0:
+ resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ ts-pattern@4.3.0:
+ resolution: {integrity: sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg==}
+
+ tsconfck@3.1.4:
+ resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==}
+ engines: {node: ^18 || >=20}
+ hasBin: true
+ peerDependencies:
+ typescript: ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tsparticles-basic@2.12.0:
+ resolution: {integrity: sha512-pN6FBpL0UsIUXjYbiui5+IVsbIItbQGOlwyGV55g6IYJBgdTNXgFX0HRYZGE9ZZ9psEXqzqwLM37zvWnb5AG9g==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-engine@2.12.0:
+ resolution: {integrity: sha512-ZjDIYex6jBJ4iMc9+z0uPe7SgBnmb6l+EJm83MPIsOny9lPpetMsnw/8YJ3xdxn8hV+S3myTpTN1CkOVmFv0QQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-attract@2.12.0:
+ resolution: {integrity: sha512-0roC6D1QkFqMVomcMlTaBrNVjVOpyNzxIUsjMfshk2wUZDAvTNTuWQdUpmsLS4EeSTDN3rzlGNnIuuUQqyBU5w==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-bounce@2.12.0:
+ resolution: {integrity: sha512-MMcqKLnQMJ30hubORtdq+4QMldQ3+gJu0bBYsQr9BsThsh8/V0xHc1iokZobqHYVP5tV77mbFBD8Z7iSCf0TMQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-bubble@2.12.0:
+ resolution: {integrity: sha512-5kImCSCZlLNccXOHPIi2Yn+rQWTX3sEa/xCHwXW19uHxtILVJlnAweayc8+Zgmb7mo0DscBtWVFXHPxrVPFDUA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-connect@2.12.0:
+ resolution: {integrity: sha512-ymzmFPXz6AaA1LAOL5Ihuy7YSQEW8MzuSJzbd0ES13U8XjiU3HlFqlH6WGT1KvXNw6WYoqrZt0T3fKxBW3/C3A==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-grab@2.12.0:
+ resolution: {integrity: sha512-iQF/A947hSfDNqAjr49PRjyQaeRkYgTYpfNmAf+EfME8RsbapeP/BSyF6mTy0UAFC0hK2A2Hwgw72eT78yhXeQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-pause@2.12.0:
+ resolution: {integrity: sha512-4SUikNpsFROHnRqniL+uX2E388YTtfRWqqqZxRhY0BrijH4z04Aii3YqaGhJxfrwDKkTQlIoM2GbFT552QZWjw==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-push@2.12.0:
+ resolution: {integrity: sha512-kqs3V0dgDKgMoeqbdg+cKH2F+DTrvfCMrPF1MCCUpBCqBiH+TRQpJNNC86EZYHfNUeeLuIM3ttWwIkk2hllR/Q==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-remove@2.12.0:
+ resolution: {integrity: sha512-2eNIrv4m1WB2VfSVj46V2L/J9hNEZnMgFc+A+qmy66C8KzDN1G8aJUAf1inW8JVc0lmo5+WKhzex4X0ZSMghBg==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-repulse@2.12.0:
+ resolution: {integrity: sha512-rSzdnmgljeBCj5FPp4AtGxOG9TmTsK3AjQW0vlyd1aG2O5kSqFjR+FuT7rfdSk9LEJGH5SjPFE6cwbuy51uEWA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-slow@2.12.0:
+ resolution: {integrity: sha512-2IKdMC3om7DttqyroMtO//xNdF0NvJL/Lx7LDo08VpfTgJJozxU+JAUT8XVT7urxhaDzbxSSIROc79epESROtA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-external-trail@2.12.0:
+ resolution: {integrity: sha512-LKSapU5sPTaZqYx+y5VJClj0prlV7bswplSFQaIW1raXkvsk45qir2AVcpP5JUhZSFSG+SwsHr+qCgXhNeN1KA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-particles-attract@2.12.0:
+ resolution: {integrity: sha512-Hl8qwuwF9aLq3FOkAW+Zomu7Gb8IKs6Y3tFQUQScDmrrSCaeRt2EGklAiwgxwgntmqzL7hbMWNx06CHHcUQKdQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-particles-collisions@2.12.0:
+ resolution: {integrity: sha512-Se9nPWlyPxdsnHgR6ap4YUImAu3W5MeGKJaQMiQpm1vW8lSMOUejI1n1ioIaQth9weKGKnD9rvcNn76sFlzGBA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-interaction-particles-links@2.12.0:
+ resolution: {integrity: sha512-e7I8gRs4rmKfcsHONXMkJnymRWpxHmeaJIo4g2NaDRjIgeb2AcJSWKWZvrsoLnm7zvaf/cMQlbN6vQwCixYq3A==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-move-base@2.12.0:
+ resolution: {integrity: sha512-oSogCDougIImq+iRtIFJD0YFArlorSi8IW3HD2gO3USkH+aNn3ZqZNTqp321uB08K34HpS263DTbhLHa/D6BWw==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-move-parallax@2.12.0:
+ resolution: {integrity: sha512-58CYXaX8Ih5rNtYhpnH0YwU4Ks7gVZMREGUJtmjhuYN+OFr9FVdF3oDIJ9N6gY5a5AnAKz8f5j5qpucoPRcYrQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-particles.js@2.12.0:
+ resolution: {integrity: sha512-LyOuvYdhbUScmA4iDgV3LxA0HzY1DnOwQUy3NrPYO393S2YwdDjdwMod6Btq7EBUjg9FVIh+sZRizgV5elV2dg==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-plugin-absorbers@2.12.0:
+ resolution: {integrity: sha512-2CkPreaXHrE5VzFlxUKLeRB5t66ff+3jwLJoDFgQcp+R4HOEITo0bBZv2DagGP0QZdYN4grpnQzRBVdB4d1rWA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-plugin-easing-quad@2.12.0:
+ resolution: {integrity: sha512-2mNqez5pydDewMIUWaUhY5cNQ80IUOYiujwG6qx9spTq1D6EEPLbRNAEL8/ecPdn2j1Um3iWSx6lo340rPkv4Q==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-plugin-emitters@2.12.0:
+ resolution: {integrity: sha512-fbskYnaXWXivBh9KFReVCfqHdhbNQSK2T+fq2qcGEWpwtDdgujcaS1k2Q/xjZnWNMfVesik4IrqspcL51gNdSA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-circle@2.12.0:
+ resolution: {integrity: sha512-L6OngbAlbadG7b783x16ns3+SZ7i0SSB66M8xGa5/k+YcY7zm8zG0uPt1Hd+xQDR2aNA3RngVM10O23/Lwk65Q==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-image@2.12.0:
+ resolution: {integrity: sha512-iCkSdUVa40DxhkkYjYuYHr9MJGVw+QnQuN5UC+e/yBgJQY+1tQL8UH0+YU/h0GHTzh5Sm+y+g51gOFxHt1dj7Q==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-line@2.12.0:
+ resolution: {integrity: sha512-RcpKmmpKlk+R8mM5wA2v64Lv1jvXtU4SrBDv3vbdRodKbKaWGGzymzav1Q0hYyDyUZgplEK/a5ZwrfrOwmgYGA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-polygon@2.12.0:
+ resolution: {integrity: sha512-5YEy7HVMt1Obxd/jnlsjajchAlYMr9eRZWN+lSjcFSH6Ibra7h59YuJVnwxOxAobpijGxsNiBX0PuGQnB47pmA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-square@2.12.0:
+ resolution: {integrity: sha512-33vfajHqmlODKaUzyPI/aVhnAOT09V7nfEPNl8DD0cfiNikEuPkbFqgJezJuE55ebtVo7BZPDA9o7GYbWxQNuw==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-star@2.12.0:
+ resolution: {integrity: sha512-4sfG/BBqm2qBnPLASl2L5aBfCx86cmZLXeh49Un+TIR1F5Qh4XUFsahgVOG0vkZQa+rOsZPEH04xY5feWmj90g==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-shape-text@2.12.0:
+ resolution: {integrity: sha512-v2/FCA+hyTbDqp2ymFOe97h/NFb2eezECMrdirHWew3E3qlvj9S/xBibjbpZva2gnXcasBwxn0+LxKbgGdP0rA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-slim@2.12.0:
+ resolution: {integrity: sha512-27w9aGAAAPKHvP4LHzWFpyqu7wKyulayyaZ/L6Tuuejy4KP4BBEB4rY5GG91yvAPsLtr6rwWAn3yS+uxnBDpkA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-color@2.12.0:
+ resolution: {integrity: sha512-KcG3a8zd0f8CTiOrylXGChBrjhKcchvDJjx9sp5qpwQK61JlNojNCU35xoaSk2eEHeOvFjh0o3CXWUmYPUcBTQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-destroy@2.12.0:
+ resolution: {integrity: sha512-6NN3dJhxACvzbIGL4dADbYQSZJmdHfwjujj1uvnxdMbb2x8C/AZzGxiN33smo4jkrZ5VLEWZWCJPJ8aOKjQ2Sg==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-life@2.12.0:
+ resolution: {integrity: sha512-J7RWGHAZkowBHpcLpmjKsxwnZZJ94oGEL2w+wvW1/+ZLmAiFFF6UgU0rHMC5CbHJT4IPx9cbkYMEHsBkcRJ0Bw==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-opacity@2.12.0:
+ resolution: {integrity: sha512-YUjMsgHdaYi4HN89LLogboYcCi1o9VGo21upoqxq19yRy0hRCtx2NhH22iHF/i5WrX6jqshN0iuiiNefC53CsA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-out-modes@2.12.0:
+ resolution: {integrity: sha512-owBp4Gk0JNlSrmp12XVEeBroDhLZU+Uq3szbWlHGSfcR88W4c/0bt0FiH5bHUqORIkw+m8O56hCjbqwj69kpOQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-roll@2.12.0:
+ resolution: {integrity: sha512-dxoxY5jP4C9x15BxlUv5/Q8OjUPBiE09ToXRyBxea9aEJ7/iMw6odvi1HuT0H1vTIfV7o1MYawjeCbMycvODKQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-rotate@2.12.0:
+ resolution: {integrity: sha512-waOFlGFmEZOzsQg4C4VSejNVXGf4dMf3fsnQrEROASGf1FCd8B6WcZau7JtXSTFw0OUGuk8UGz36ETWN72DkCw==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-size@2.12.0:
+ resolution: {integrity: sha512-B0yRdEDd/qZXCGDL/ussHfx5YJ9UhTqNvmS5X2rR2hiZhBAE2fmsXLeWkdtF2QusjPeEqFDxrkGiLOsh6poqRA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-stroke-color@2.12.0:
+ resolution: {integrity: sha512-MPou1ZDxsuVq6SN1fbX+aI5yrs6FyP2iPCqqttpNbWyL+R6fik1rL0ab/x02B57liDXqGKYomIbBQVP3zUTW1A==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-tilt@2.12.0:
+ resolution: {integrity: sha512-HDEFLXazE+Zw+kkKKAiv0Fs9D9sRP61DoCR6jZ36ipea6OBgY7V1Tifz2TSR1zoQkk57ER9+EOQbkSQO+YIPGQ==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-twinkle@2.12.0:
+ resolution: {integrity: sha512-JhK/DO4kTx7IFwMBP2EQY9hBaVVvFnGBvX21SQWcjkymmN1hZ+NdcgUtR9jr4jUiiSNdSl7INaBuGloVjWvOgA==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles-updater-wobble@2.12.0:
+ resolution: {integrity: sha512-85FIRl95ipD3jfIsQdDzcUC5PRMWIrCYqBq69nIy9P8rsNzygn+JK2n+P1VQZowWsZvk0mYjqb9OVQB21Lhf6Q==}
+ deprecated: starting from tsparticles v3 the packages are now moved to @tsparticles/package-name instead of tsparticles-package-name
+
+ tsparticles@2.12.0:
+ resolution: {integrity: sha512-aw77llkaEhcKYUHuRlggA6SB1Dpa814/nrStp9USGiDo5QwE1Ckq30QAgdXU6GRvnblUFsiO750ZuLQs5Y0tVw==}
+ deprecated: tsParticles v3 is out, it contains breaking changes and it's recommended to migrate to that version with fixes and new features
+
+ turbo-stream@2.4.0:
+ resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==}
+
+ typanion@3.14.0:
+ resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==}
+
+ type-fest@3.13.1:
+ resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
+ engines: {node: '>=14.16'}
+
+ type-fest@4.30.2:
+ resolution: {integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig==}
+ engines: {node: '>=16'}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ typescript@5.7.2:
+ resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.5.4:
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+
+ uhyphen@0.2.0:
+ resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
+
+ undici-types@6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
+ undici@6.21.0:
+ resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==}
+ engines: {node: '>=18.17'}
+
+ unherit@3.0.1:
+ resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==}
+
+ unified@10.1.2:
+ resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+
+ unified@11.0.5:
+ resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
+ unique-filename@3.0.0:
+ resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ unique-slug@4.0.0:
+ resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ unist-util-find-after@4.0.1:
+ resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==}
+
+ unist-util-find-after@5.0.0:
+ resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+
+ unist-util-generated@2.0.1:
+ resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
+
+ unist-util-is@5.2.1:
+ resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
+ unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+
+ unist-util-modify-children@3.1.1:
+ resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==}
+
+ unist-util-modify-children@4.0.0:
+ resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
+
+ unist-util-position-from-estree@1.1.2:
+ resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==}
+
+ unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+ unist-util-position@4.0.4:
+ resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+
+ unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+ unist-util-remove-position@4.0.2:
+ resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==}
+
+ unist-util-remove-position@5.0.0:
+ resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+
+ unist-util-stringify-position@3.0.3:
+ resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+
+ unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+ unist-util-visit-children@2.0.2:
+ resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==}
+
+ unist-util-visit-children@3.0.0:
+ resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
+
+ unist-util-visit-parents@5.1.3:
+ resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+ unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
+ unist-util-visit@4.1.2:
+ resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
+ unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
+ update-browserslist-db@1.1.1:
+ resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+
+ uvu@0.5.6:
+ resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ valibot@0.41.0:
+ resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==}
+ peerDependencies:
+ typescript: '>=5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ valid-filename@4.0.0:
+ resolution: {integrity: sha512-VEYTpTVPMgO799f2wI7zWf0x2C54bPX6NAfbZ2Z8kZn76p+3rEYCTYVYzMUcVSMvakxMQTriBf24s3+WeXJtEg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ validate-npm-package-name@5.0.1:
+ resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
+ vfile-location@4.1.0:
+ resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==}
+
+ vfile-location@5.0.3:
+ resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==}
+
+ vfile-message@3.1.4:
+ resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+
+ vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+
+ vfile@5.3.7:
+ resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+
+ vfile@6.0.3:
+ resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
+ vite-node@1.6.0:
+ resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
+ vite-tsconfig-paths@5.1.4:
+ resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==}
+ peerDependencies:
+ vite: '*'
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ vite@5.4.11:
+ resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vitefu@1.0.4:
+ resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==}
+ peerDependencies:
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
+ peerDependenciesMeta:
+ vite:
+ optional: true
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+ web-encoding@1.1.5:
+ resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==}
+
+ web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+
+ web-streams-polyfill@3.3.3:
+ resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
+ engines: {node: '>= 8'}
+
+ which-pm-runs@1.1.0:
+ resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
+ engines: {node: '>=4'}
+
+ which-pm@3.0.0:
+ resolution: {integrity: sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==}
+ engines: {node: '>=18.12'}
+
+ which-typed-array@1.1.18:
+ resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ which@3.0.1:
+ resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ hasBin: true
+
+ widest-line@5.0.0:
+ resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+ engines: {node: '>=18'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ xtend@4.0.2:
+ resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+ engines: {node: '>=0.4'}
+
+ xxhash-wasm@1.1.0:
+ resolution: {integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yaml@2.6.1:
+ resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==}
+ engines: {node: '>= 14'}
+ hasBin: true
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.1.1:
+ resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
+ engines: {node: '>=12.20'}
+
+ zod-to-json-schema@3.24.1:
+ resolution: {integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w==}
+ peerDependencies:
+ zod: ^3.24.1
+
+ zod-to-ts@1.2.0:
+ resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==}
+ peerDependencies:
+ typescript: ^4.9.4 || ^5.0.2
+ zod: ^3
+
+ zod@3.24.1:
+ resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==}
+
+ zwitch@2.0.4:
+ resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@ampproject/remapping@2.3.0':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@astro-community/astro-embed-twitter@0.5.8(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))':
+ dependencies:
+ '@astro-community/astro-embed-utils': 0.1.3
+ astro: 4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2)
+
+ '@astro-community/astro-embed-utils@0.1.3':
+ dependencies:
+ linkedom: 0.14.26
+
+ '@astro-community/astro-embed-youtube@0.4.5(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))':
+ dependencies:
+ astro: 4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2)
+ lite-youtube-embed: 0.3.3
+
+ '@astrojs/compiler@1.8.2': {}
+
+ '@astrojs/compiler@2.10.3': {}
+
+ '@astrojs/internal-helpers@0.4.1': {}
+
+ '@astrojs/markdown-remark@5.1.0':
+ dependencies:
+ '@astrojs/prism': 3.2.0
+ github-slugger: 2.0.0
+ hast-util-from-html: 2.0.3
+ hast-util-to-text: 4.0.2
+ import-meta-resolve: 4.1.0
+ mdast-util-definitions: 6.0.0
+ rehype-raw: 7.0.0
+ rehype-stringify: 10.0.1
+ remark-gfm: 4.0.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ remark-smartypants: 2.1.0
+ shiki: 1.24.4
+ unified: 11.0.5
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@astrojs/markdown-remark@5.3.0':
+ dependencies:
+ '@astrojs/prism': 3.1.0
+ github-slugger: 2.0.0
+ hast-util-from-html: 2.0.3
+ hast-util-to-text: 4.0.2
+ import-meta-resolve: 4.1.0
+ mdast-util-definitions: 6.0.0
+ rehype-raw: 7.0.0
+ rehype-stringify: 10.0.1
+ remark-gfm: 4.0.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ remark-smartypants: 3.0.2
+ shiki: 1.24.4
+ unified: 11.0.5
+ unist-util-remove-position: 5.0.0
+ unist-util-visit: 5.0.0
+ unist-util-visit-parents: 6.0.1
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@astrojs/mdx@2.3.1(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))':
+ dependencies:
+ '@astrojs/markdown-remark': 5.1.0
+ '@mdx-js/mdx': 3.1.0(acorn@8.14.0)
+ acorn: 8.14.0
+ astro: 4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2)
+ es-module-lexer: 1.5.4
+ estree-util-visit: 2.0.0
+ github-slugger: 2.0.0
+ gray-matter: 4.0.3
+ hast-util-to-html: 9.0.4
+ kleur: 4.1.5
+ rehype-raw: 7.0.0
+ remark-gfm: 4.0.0
+ remark-smartypants: 2.1.0
+ source-map: 0.7.4
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@astrojs/partytown@2.1.2':
+ dependencies:
+ '@builder.io/partytown': 0.10.3
+ mrmime: 2.0.0
+
+ '@astrojs/prism@3.1.0':
+ dependencies:
+ prismjs: 1.29.0
+
+ '@astrojs/prism@3.2.0':
+ dependencies:
+ prismjs: 1.29.0
+
+ '@astrojs/sitemap@3.2.1':
+ dependencies:
+ sitemap: 8.0.0
+ stream-replace-string: 2.0.0
+ zod: 3.24.1
+
+ '@astrojs/tailwind@5.1.4(astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2))(tailwindcss@3.4.17)':
+ dependencies:
+ astro: 4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2)
+ autoprefixer: 10.4.20(postcss@8.4.49)
+ postcss: 8.4.49
+ postcss-load-config: 4.0.2(postcss@8.4.49)
+ tailwindcss: 3.4.17
+ transitivePeerDependencies:
+ - ts-node
+
+ '@astrojs/telemetry@3.1.0':
+ dependencies:
+ ci-info: 4.1.0
+ debug: 4.4.0
+ dlv: 1.1.3
+ dset: 3.1.4
+ is-docker: 3.0.0
+ is-wsl: 3.1.0
+ which-pm-runs: 1.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/code-frame@7.26.2':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.26.3': {}
+
+ '@babel/core@7.26.0':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.3
+ '@babel/helper-compilation-targets': 7.25.9
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
+ '@babel/helpers': 7.26.0
+ '@babel/parser': 7.26.3
+ '@babel/template': 7.25.9
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ convert-source-map: 2.0.0
+ debug: 4.4.0
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.26.3':
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+ '@jridgewell/gen-mapping': 0.3.8
+ '@jridgewell/trace-mapping': 0.3.25
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.25.9':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/helper-compilation-targets@7.25.9':
+ dependencies:
+ '@babel/compat-data': 7.26.3
+ '@babel/helper-validator-option': 7.25.9
+ browserslist: 4.24.3
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/traverse': 7.26.4
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-member-expression-to-functions@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+ '@babel/traverse': 7.26.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.25.9':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/helper-plugin-utils@7.25.9': {}
+
+ '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-member-expression-to-functions': 7.25.9
+ '@babel/helper-optimise-call-expression': 7.25.9
+ '@babel/traverse': 7.26.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.25.9':
+ dependencies:
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.25.9': {}
+
+ '@babel/helper-validator-identifier@7.25.9': {}
+
+ '@babel/helper-validator-option@7.25.9': {}
+
+ '@babel/helpers@7.26.0':
+ dependencies:
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.3
+
+ '@babel/parser@7.26.3':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+
+ '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.25.9
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-module-imports': 7.25.9
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/types': 7.26.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-typescript@7.26.3(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-annotate-as-pure': 7.25.9
+ '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0)
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-skip-transparent-expression-wrappers': 7.25.9
+ '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/helper-plugin-utils': 7.25.9
+ '@babel/helper-validator-option': 7.25.9
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0)
+ '@babel/plugin-transform-typescript': 7.26.3(@babel/core@7.26.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/runtime@7.26.0':
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ '@babel/template@7.25.9':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+
+ '@babel/traverse@7.26.4':
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ '@babel/generator': 7.26.3
+ '@babel/parser': 7.26.3
+ '@babel/template': 7.25.9
+ '@babel/types': 7.26.3
+ debug: 4.4.0
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.26.3':
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
+ '@builder.io/partytown@0.10.3': {}
+
+ '@contentlayer/cli@0.3.4(esbuild@0.17.6)':
+ dependencies:
+ '@contentlayer/core': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/utils': 0.3.4
+ clipanion: 3.2.1(typanion@3.14.0)
+ typanion: 3.14.0
+ transitivePeerDependencies:
+ - '@effect-ts/otel-node'
+ - esbuild
+ - markdown-wasm
+ - supports-color
+
+ '@contentlayer/client@0.3.4(esbuild@0.17.6)':
+ dependencies:
+ '@contentlayer/core': 0.3.4(esbuild@0.17.6)
+ transitivePeerDependencies:
+ - '@effect-ts/otel-node'
+ - esbuild
+ - markdown-wasm
+ - supports-color
+
+ '@contentlayer/core@0.3.4(esbuild@0.17.6)':
+ dependencies:
+ '@contentlayer/utils': 0.3.4
+ camel-case: 4.1.2
+ comment-json: 4.2.5
+ gray-matter: 4.0.3
+ mdx-bundler: 9.2.1(esbuild@0.17.6)
+ rehype-stringify: 9.0.4
+ remark-frontmatter: 4.0.1
+ remark-parse: 10.0.2
+ remark-rehype: 10.1.0
+ source-map-support: 0.5.21
+ type-fest: 3.13.1
+ unified: 10.1.2
+ optionalDependencies:
+ esbuild: 0.17.6
+ transitivePeerDependencies:
+ - '@effect-ts/otel-node'
+ - supports-color
+
+ '@contentlayer/source-files@0.3.4(esbuild@0.17.6)':
+ dependencies:
+ '@contentlayer/core': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/utils': 0.3.4
+ chokidar: 3.6.0
+ fast-glob: 3.3.2
+ gray-matter: 4.0.3
+ imagescript: 1.3.0
+ micromatch: 4.0.8
+ ts-pattern: 4.3.0
+ unified: 10.1.2
+ yaml: 2.6.1
+ zod: 3.24.1
+ transitivePeerDependencies:
+ - '@effect-ts/otel-node'
+ - esbuild
+ - markdown-wasm
+ - supports-color
+
+ '@contentlayer/source-remote-files@0.3.4(esbuild@0.17.6)':
+ dependencies:
+ '@contentlayer/core': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/source-files': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/utils': 0.3.4
+ transitivePeerDependencies:
+ - '@effect-ts/otel-node'
+ - esbuild
+ - markdown-wasm
+ - supports-color
+
+ '@contentlayer/utils@0.3.4':
+ dependencies:
+ '@effect-ts/core': 0.60.5
+ '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))
+ '@effect-ts/otel-exporter-trace-otlp-grpc': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))
+ '@effect-ts/otel-sdk-trace-node': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.30.0(@opentelemetry/api@1.9.0))
+ '@js-temporal/polyfill': 0.4.4
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-node': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.28.0
+ chokidar: 3.6.0
+ hash-wasm: 4.12.0
+ inflection: 2.0.1
+ memfs: 3.5.3
+ oo-ascii-tree: 1.106.0
+ ts-pattern: 4.3.0
+ type-fest: 3.13.1
+
+ '@effect-ts/core@0.60.5':
+ dependencies:
+ '@effect-ts/system': 0.57.5
+
+ '@effect-ts/otel-exporter-trace-otlp-grpc@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))':
+ dependencies:
+ '@effect-ts/core': 0.60.5
+ '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/exporter-trace-otlp-grpc': 0.39.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0)
+
+ '@effect-ts/otel-sdk-trace-node@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@1.30.0(@opentelemetry/api@1.9.0))':
+ dependencies:
+ '@effect-ts/core': 0.60.5
+ '@effect-ts/otel': 0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-node': 1.30.0(@opentelemetry/api@1.9.0)
+
+ '@effect-ts/otel@0.15.1(@effect-ts/core@0.60.5)(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0))':
+ dependencies:
+ '@effect-ts/core': 0.60.5
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0)
+
+ '@effect-ts/system@0.57.5': {}
+
+ '@emnapi/runtime@1.3.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emotion/hash@0.9.2': {}
+
+ '@esbuild-plugins/node-resolve@0.1.4(esbuild@0.17.6)':
+ dependencies:
+ '@types/resolve': 1.20.6
+ debug: 4.4.0
+ esbuild: 0.17.6
+ escape-string-regexp: 4.0.0
+ resolve: 1.22.10
+ transitivePeerDependencies:
+ - supports-color
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.17.6':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.17.6':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.17.6':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.17.6':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.17.6':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.17.6':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.17.6':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.17.6':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.17.6':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.17.6':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.17.6':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.17.6':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.17.6':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.17.6':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.17.6':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.17.6':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.17.6':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.17.6':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.17.6':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.17.6':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.17.6':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.17.6':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@fal-works/esbuild-plugin-global-externals@2.1.2': {}
+
+ '@fontsource/montserrat@5.1.0': {}
+
+ '@fontsource/playfair-display@5.1.0': {}
+
+ '@fontsource/schibsted-grotesk@5.1.0': {}
+
+ '@grpc/grpc-js@1.12.5':
+ dependencies:
+ '@grpc/proto-loader': 0.7.13
+ '@js-sdsl/ordered-map': 4.4.2
+
+ '@grpc/proto-loader@0.7.13':
+ dependencies:
+ lodash.camelcase: 4.3.0
+ long: 5.2.3
+ protobufjs: 7.4.0
+ yargs: 17.7.2
+
+ '@img/sharp-darwin-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-darwin-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-libvips-darwin-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-darwin-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-arm@1.0.5':
+ optional: true
+
+ '@img/sharp-libvips-linux-s390x@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linux-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+ optional: true
+
+ '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+ optional: true
+
+ '@img/sharp-linux-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-linux-arm@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ optional: true
+
+ '@img/sharp-linux-s390x@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ optional: true
+
+ '@img/sharp-linux-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-linuxmusl-arm64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ optional: true
+
+ '@img/sharp-linuxmusl-x64@0.33.5':
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ optional: true
+
+ '@img/sharp-wasm32@0.33.5':
+ dependencies:
+ '@emnapi/runtime': 1.3.1
+ optional: true
+
+ '@img/sharp-win32-ia32@0.33.5':
+ optional: true
+
+ '@img/sharp-win32-x64@0.33.5':
+ optional: true
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/gen-mapping@0.3.8':
+ dependencies:
+ '@jridgewell/set-array': 1.2.1
+ '@jridgewell/sourcemap-codec': 1.5.0
+ '@jridgewell/trace-mapping': 0.3.25
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/set-array@1.2.1': {}
+
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
+ '@jridgewell/trace-mapping@0.3.25':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ '@js-sdsl/ordered-map@4.4.2': {}
+
+ '@js-temporal/polyfill@0.4.4':
+ dependencies:
+ jsbi: 4.3.0
+ tslib: 2.8.1
+
+ '@jspm/core@2.0.1': {}
+
+ '@mdx-js/esbuild@2.3.0(esbuild@0.17.6)':
+ dependencies:
+ '@mdx-js/mdx': 2.3.0
+ esbuild: 0.17.6
+ node-fetch: 3.3.2
+ vfile: 5.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mdx-js/mdx@2.3.0':
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/mdx': 2.0.13
+ estree-util-build-jsx: 2.2.2
+ estree-util-is-identifier-name: 2.1.0
+ estree-util-to-js: 1.2.0
+ estree-walker: 3.0.3
+ hast-util-to-estree: 2.3.3
+ markdown-extensions: 1.1.1
+ periscopic: 3.1.0
+ remark-mdx: 2.3.0
+ remark-parse: 10.0.2
+ remark-rehype: 10.1.0
+ unified: 10.1.2
+ unist-util-position-from-estree: 1.1.2
+ unist-util-stringify-position: 3.0.3
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@mdx-js/mdx@3.1.0(acorn@8.14.0)':
+ dependencies:
+ '@types/estree': 1.0.6
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-scope: 1.0.0
+ estree-walker: 3.0.3
+ hast-util-to-jsx-runtime: 2.3.2
+ markdown-extensions: 2.0.0
+ recma-build-jsx: 1.0.0
+ recma-jsx: 1.0.0(acorn@8.14.0)
+ recma-stringify: 1.0.0
+ rehype-recma: 1.0.0
+ remark-mdx: 3.1.0
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.1
+ source-map: 0.7.4
+ unified: 11.0.5
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ transitivePeerDependencies:
+ - acorn
+ - supports-color
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.18.0
+
+ '@npmcli/fs@3.1.1':
+ dependencies:
+ semver: 7.6.3
+
+ '@npmcli/git@4.1.0':
+ dependencies:
+ '@npmcli/promise-spawn': 6.0.2
+ lru-cache: 7.18.3
+ npm-pick-manifest: 8.0.2
+ proc-log: 3.0.0
+ promise-inflight: 1.0.1
+ promise-retry: 2.0.1
+ semver: 7.6.3
+ which: 3.0.1
+ transitivePeerDependencies:
+ - bluebird
+
+ '@npmcli/package-json@4.0.1':
+ dependencies:
+ '@npmcli/git': 4.1.0
+ glob: 10.4.5
+ hosted-git-info: 6.1.3
+ json-parse-even-better-errors: 3.0.2
+ normalize-package-data: 5.0.0
+ proc-log: 3.0.0
+ semver: 7.6.3
+ transitivePeerDependencies:
+ - bluebird
+
+ '@npmcli/promise-spawn@6.0.2':
+ dependencies:
+ which: 3.0.1
+
+ '@opentelemetry/api-logs@0.39.1':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+
+ '@opentelemetry/api@1.9.0': {}
+
+ '@opentelemetry/context-async-hooks@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+
+ '@opentelemetry/core@1.13.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.13.0
+
+ '@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.28.0
+
+ '@opentelemetry/exporter-trace-otlp-grpc@0.39.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@grpc/grpc-js': 1.12.5
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-grpc-exporter-base': 0.39.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-transformer': 0.39.1(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/otlp-exporter-base@0.39.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/otlp-grpc-exporter-base@0.39.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@grpc/grpc-js': 1.12.5
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/otlp-exporter-base': 0.39.1(@opentelemetry/api@1.9.0)
+ protobufjs: 7.4.0
+
+ '@opentelemetry/otlp-transformer@0.39.1(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.39.1
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-logs': 0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-metrics': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.13.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/propagator-b3@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/propagator-jaeger@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/resources@1.13.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.13.0
+
+ '@opentelemetry/resources@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.28.0
+
+ '@opentelemetry/sdk-logs@0.39.1(@opentelemetry/api-logs@0.39.1)(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/api-logs': 0.39.1
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0)
+
+ '@opentelemetry/sdk-metrics@1.13.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0)
+ lodash.merge: 4.6.2
+
+ '@opentelemetry/sdk-trace-base@1.13.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.13.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.13.0
+
+ '@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/semantic-conventions': 1.28.0
+
+ '@opentelemetry/sdk-trace-node@1.30.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/context-async-hooks': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/propagator-b3': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/propagator-jaeger': 1.30.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0)
+ semver: 7.6.3
+
+ '@opentelemetry/semantic-conventions@1.13.0': {}
+
+ '@opentelemetry/semantic-conventions@1.28.0': {}
+
+ '@oslojs/encoding@1.1.0': {}
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@protobufjs/aspromise@1.1.2': {}
+
+ '@protobufjs/base64@1.1.2': {}
+
+ '@protobufjs/codegen@2.0.4': {}
+
+ '@protobufjs/eventemitter@1.1.0': {}
+
+ '@protobufjs/fetch@1.1.0':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/inquire': 1.1.0
+
+ '@protobufjs/float@1.0.2': {}
+
+ '@protobufjs/inquire@1.1.0': {}
+
+ '@protobufjs/path@1.1.2': {}
+
+ '@protobufjs/pool@1.1.0': {}
+
+ '@protobufjs/utf8@1.1.0': {}
+
+ '@remix-run/css-bundle@2.15.2': {}
+
+ '@remix-run/dev@2.15.2(@remix-run/react@2.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2))(@types/node@22.10.2)(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2))':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/generator': 7.26.3
+ '@babel/parser': 7.26.3
+ '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0)
+ '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0)
+ '@babel/traverse': 7.26.4
+ '@babel/types': 7.26.3
+ '@mdx-js/mdx': 2.3.0
+ '@npmcli/package-json': 4.0.1
+ '@remix-run/node': 2.15.2(typescript@5.7.2)
+ '@remix-run/react': 2.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)
+ '@remix-run/router': 1.21.0
+ '@remix-run/server-runtime': 2.15.2(typescript@5.7.2)
+ '@types/mdx': 2.0.13
+ '@vanilla-extract/integration': 6.5.0(@types/node@22.10.2)
+ arg: 5.0.2
+ cacache: 17.1.4
+ chalk: 4.1.2
+ chokidar: 3.6.0
+ cross-spawn: 7.0.6
+ dotenv: 16.4.7
+ es-module-lexer: 1.5.4
+ esbuild: 0.17.6
+ esbuild-plugins-node-modules-polyfill: 1.6.8(esbuild@0.17.6)
+ execa: 5.1.1
+ exit-hook: 2.2.1
+ express: 4.21.2
+ fs-extra: 10.1.0
+ get-port: 5.1.1
+ gunzip-maybe: 1.4.2
+ jsesc: 3.0.2
+ json5: 2.2.3
+ lodash: 4.17.21
+ lodash.debounce: 4.0.8
+ minimatch: 9.0.5
+ ora: 5.4.1
+ picocolors: 1.1.1
+ picomatch: 2.3.1
+ pidtree: 0.6.0
+ postcss: 8.4.49
+ postcss-discard-duplicates: 5.1.0(postcss@8.4.49)
+ postcss-load-config: 4.0.2(postcss@8.4.49)
+ postcss-modules: 6.0.1(postcss@8.4.49)
+ prettier: 2.8.8
+ pretty-ms: 7.0.1
+ react-refresh: 0.14.2
+ remark-frontmatter: 4.0.1
+ remark-mdx-frontmatter: 1.1.1
+ semver: 7.6.3
+ set-cookie-parser: 2.7.1
+ tar-fs: 2.1.1
+ tsconfig-paths: 4.2.0
+ valibot: 0.41.0(typescript@5.7.2)
+ vite-node: 1.6.0(@types/node@22.10.2)
+ ws: 7.5.10
+ optionalDependencies:
+ typescript: 5.7.2
+ vite: 5.4.11(@types/node@22.10.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - bluebird
+ - bufferutil
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - ts-node
+ - utf-8-validate
+
+ '@remix-run/node@2.15.2(typescript@5.7.2)':
+ dependencies:
+ '@remix-run/server-runtime': 2.15.2(typescript@5.7.2)
+ '@remix-run/web-fetch': 4.4.2
+ '@web3-storage/multipart-parser': 1.0.0
+ cookie-signature: 1.2.2
+ source-map-support: 0.5.21
+ stream-slice: 0.1.2
+ undici: 6.21.0
+ optionalDependencies:
+ typescript: 5.7.2
+
+ '@remix-run/react@2.15.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.7.2)':
+ dependencies:
+ '@remix-run/router': 1.21.0
+ '@remix-run/server-runtime': 2.15.2(typescript@5.7.2)
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-router: 6.28.1(react@18.3.1)
+ react-router-dom: 6.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ turbo-stream: 2.4.0
+ optionalDependencies:
+ typescript: 5.7.2
+
+ '@remix-run/router@1.21.0': {}
+
+ '@remix-run/server-runtime@2.15.2(typescript@5.7.2)':
+ dependencies:
+ '@remix-run/router': 1.21.0
+ '@types/cookie': 0.6.0
+ '@web3-storage/multipart-parser': 1.0.0
+ cookie: 0.6.0
+ set-cookie-parser: 2.7.1
+ source-map: 0.7.4
+ turbo-stream: 2.4.0
+ optionalDependencies:
+ typescript: 5.7.2
+
+ '@remix-run/web-blob@3.1.0':
+ dependencies:
+ '@remix-run/web-stream': 1.1.0
+ web-encoding: 1.1.5
+
+ '@remix-run/web-fetch@4.4.2':
+ dependencies:
+ '@remix-run/web-blob': 3.1.0
+ '@remix-run/web-file': 3.1.0
+ '@remix-run/web-form-data': 3.1.0
+ '@remix-run/web-stream': 1.1.0
+ '@web3-storage/multipart-parser': 1.0.0
+ abort-controller: 3.0.0
+ data-uri-to-buffer: 3.0.1
+ mrmime: 1.0.1
+
+ '@remix-run/web-file@3.1.0':
+ dependencies:
+ '@remix-run/web-blob': 3.1.0
+
+ '@remix-run/web-form-data@3.1.0':
+ dependencies:
+ web-encoding: 1.1.5
+
+ '@remix-run/web-stream@1.1.0':
+ dependencies:
+ web-streams-polyfill: 3.3.3
+
+ '@rollup/pluginutils@5.1.4(rollup@4.29.1)':
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-walker: 2.0.2
+ picomatch: 4.0.2
+ optionalDependencies:
+ rollup: 4.29.1
+
+ '@rollup/rollup-android-arm-eabi@4.29.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.29.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.29.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.29.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.29.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-loongarch64-gnu@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.29.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.29.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.29.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.29.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.29.1':
+ optional: true
+
+ '@shikijs/core@1.24.4':
+ dependencies:
+ '@shikijs/engine-javascript': 1.24.4
+ '@shikijs/engine-oniguruma': 1.24.4
+ '@shikijs/types': 1.24.4
+ '@shikijs/vscode-textmate': 9.3.1
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.4
+
+ '@shikijs/engine-javascript@1.24.4':
+ dependencies:
+ '@shikijs/types': 1.24.4
+ '@shikijs/vscode-textmate': 9.3.1
+ oniguruma-to-es: 0.8.1
+
+ '@shikijs/engine-oniguruma@1.24.4':
+ dependencies:
+ '@shikijs/types': 1.24.4
+ '@shikijs/vscode-textmate': 9.3.1
+
+ '@shikijs/types@1.24.4':
+ dependencies:
+ '@shikijs/vscode-textmate': 9.3.1
+ '@types/hast': 3.0.4
+
+ '@shikijs/vscode-textmate@9.3.1': {}
+
+ '@tailwindcss/typography@0.5.15(tailwindcss@3.4.17)':
+ dependencies:
+ lodash.castarray: 4.4.0
+ lodash.isplainobject: 4.0.6
+ lodash.merge: 4.6.2
+ postcss-selector-parser: 6.0.10
+ tailwindcss: 3.4.17
+
+ '@types/acorn@4.0.6':
+ dependencies:
+ '@types/estree': 1.0.6
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+ '@types/babel__generator': 7.6.8
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.20.6
+
+ '@types/babel__generator@7.6.8':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+
+ '@types/babel__traverse@7.20.6':
+ dependencies:
+ '@babel/types': 7.26.3
+
+ '@types/cookie@0.6.0': {}
+
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 0.7.34
+
+ '@types/estree-jsx@1.0.5':
+ dependencies:
+ '@types/estree': 1.0.6
+
+ '@types/estree@1.0.6': {}
+
+ '@types/hast@2.3.10':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/hast@3.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/mdast@3.0.15':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/mdast@4.0.4':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/mdx@2.0.13': {}
+
+ '@types/ms@0.7.34': {}
+
+ '@types/nlcst@1.0.4':
+ dependencies:
+ '@types/unist': 2.0.11
+
+ '@types/nlcst@2.0.3':
+ dependencies:
+ '@types/unist': 3.0.3
+
+ '@types/node@17.0.45': {}
+
+ '@types/node@22.10.2':
+ dependencies:
+ undici-types: 6.20.0
+
+ '@types/parse5@6.0.3': {}
+
+ '@types/react-dom@19.0.2(@types/react@19.0.2)':
+ dependencies:
+ '@types/react': 19.0.2
+
+ '@types/react@19.0.2':
+ dependencies:
+ csstype: 3.1.3
+
+ '@types/resolve@1.20.6': {}
+
+ '@types/sax@1.2.7':
+ dependencies:
+ '@types/node': 17.0.45
+
+ '@types/unist@2.0.11': {}
+
+ '@types/unist@3.0.3': {}
+
+ '@ungap/structured-clone@1.2.1': {}
+
+ '@vanilla-extract/babel-plugin-debug-ids@1.2.0':
+ dependencies:
+ '@babel/core': 7.26.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vanilla-extract/css@1.17.0':
+ dependencies:
+ '@emotion/hash': 0.9.2
+ '@vanilla-extract/private': 1.0.6
+ css-what: 6.1.0
+ cssesc: 3.0.0
+ csstype: 3.1.3
+ dedent: 1.5.3
+ deep-object-diff: 1.1.9
+ deepmerge: 4.3.1
+ lru-cache: 10.4.3
+ media-query-parser: 2.0.2
+ modern-ahocorasick: 1.1.0
+ picocolors: 1.1.1
+ transitivePeerDependencies:
+ - babel-plugin-macros
+
+ '@vanilla-extract/integration@6.5.0(@types/node@22.10.2)':
+ dependencies:
+ '@babel/core': 7.26.0
+ '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0)
+ '@vanilla-extract/babel-plugin-debug-ids': 1.2.0
+ '@vanilla-extract/css': 1.17.0
+ esbuild: 0.17.6
+ eval: 0.1.8
+ find-up: 5.0.0
+ javascript-stringify: 2.1.0
+ lodash: 4.17.21
+ mlly: 1.7.3
+ outdent: 0.8.0
+ vite: 5.4.11(@types/node@22.10.2)
+ vite-node: 1.6.0(@types/node@22.10.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ '@vanilla-extract/private@1.0.6': {}
+
+ '@web3-storage/multipart-parser@1.0.0': {}
+
+ '@zxing/text-encoding@0.9.0':
+ optional: true
+
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn-jsx@5.3.2(acorn@8.14.0):
+ dependencies:
+ acorn: 8.14.0
+
+ acorn@8.14.0: {}
+
+ aggregate-error@3.1.0:
+ dependencies:
+ clean-stack: 2.2.0
+ indent-string: 4.0.0
+
+ ansi-align@3.0.1:
+ dependencies:
+ string-width: 4.2.3
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.1.0: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.1: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@5.0.2: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ aria-query@5.3.2: {}
+
+ array-flatten@1.1.1: {}
+
+ array-iterate@2.0.1: {}
+
+ array-timsort@1.0.3: {}
+
+ astring@1.9.0: {}
+
+ astro-particles@2.10.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ astro-robots-txt@1.0.0:
+ dependencies:
+ valid-filename: 4.0.0
+ zod: 3.24.1
+
+ astro@4.16.18(@types/node@22.10.2)(rollup@4.29.1)(typescript@5.7.2):
+ dependencies:
+ '@astrojs/compiler': 2.10.3
+ '@astrojs/internal-helpers': 0.4.1
+ '@astrojs/markdown-remark': 5.3.0
+ '@astrojs/telemetry': 3.1.0
+ '@babel/core': 7.26.0
+ '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0)
+ '@babel/types': 7.26.3
+ '@oslojs/encoding': 1.1.0
+ '@rollup/pluginutils': 5.1.4(rollup@4.29.1)
+ '@types/babel__core': 7.20.5
+ '@types/cookie': 0.6.0
+ acorn: 8.14.0
+ aria-query: 5.3.2
+ axobject-query: 4.1.0
+ boxen: 8.0.1
+ ci-info: 4.1.0
+ clsx: 2.1.1
+ common-ancestor-path: 1.0.1
+ cookie: 0.7.2
+ cssesc: 3.0.0
+ debug: 4.4.0
+ deterministic-object-hash: 2.0.2
+ devalue: 5.1.1
+ diff: 5.2.0
+ dlv: 1.1.3
+ dset: 3.1.4
+ es-module-lexer: 1.5.4
+ esbuild: 0.21.5
+ estree-walker: 3.0.3
+ fast-glob: 3.3.2
+ flattie: 1.1.1
+ github-slugger: 2.0.0
+ gray-matter: 4.0.3
+ html-escaper: 3.0.3
+ http-cache-semantics: 4.1.1
+ js-yaml: 4.1.0
+ kleur: 4.1.5
+ magic-string: 0.30.17
+ magicast: 0.3.5
+ micromatch: 4.0.8
+ mrmime: 2.0.0
+ neotraverse: 0.6.18
+ ora: 8.1.1
+ p-limit: 6.2.0
+ p-queue: 8.0.1
+ preferred-pm: 4.0.0
+ prompts: 2.4.2
+ rehype: 13.0.2
+ semver: 7.6.3
+ shiki: 1.24.4
+ tinyexec: 0.3.1
+ tsconfck: 3.1.4(typescript@5.7.2)
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ vite: 5.4.11(@types/node@22.10.2)
+ vitefu: 1.0.4(vite@5.4.11(@types/node@22.10.2))
+ which-pm: 3.0.0
+ xxhash-wasm: 1.1.0
+ yargs-parser: 21.1.1
+ zod: 3.24.1
+ zod-to-json-schema: 3.24.1(zod@3.24.1)
+ zod-to-ts: 1.2.0(typescript@5.7.2)(zod@3.24.1)
+ optionalDependencies:
+ sharp: 0.33.5
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - rollup
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - typescript
+
+ autoprefixer@10.4.20(postcss@8.4.49):
+ dependencies:
+ browserslist: 4.24.3
+ caniuse-lite: 1.0.30001690
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.4.49
+ postcss-value-parser: 4.2.0
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.0.0
+
+ axobject-query@4.1.0: {}
+
+ bail@2.0.2: {}
+
+ balanced-match@1.0.2: {}
+
+ base-64@1.0.0: {}
+
+ base64-js@1.5.1: {}
+
+ binary-extensions@2.3.0: {}
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ body-parser@1.20.3:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ on-finished: 2.4.1
+ qs: 6.13.0
+ raw-body: 2.5.2
+ type-is: 1.6.18
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ boolbase@1.0.0: {}
+
+ boxen@8.0.1:
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 8.0.0
+ chalk: 5.4.1
+ cli-boxes: 3.0.0
+ string-width: 7.2.0
+ type-fest: 4.30.2
+ widest-line: 5.0.0
+ wrap-ansi: 9.0.0
+
+ brace-expansion@2.0.1:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserify-zlib@0.1.4:
+ dependencies:
+ pako: 0.2.9
+
+ browserslist@4.24.3:
+ dependencies:
+ caniuse-lite: 1.0.30001690
+ electron-to-chromium: 1.5.75
+ node-releases: 2.0.19
+ update-browserslist-db: 1.1.1(browserslist@4.24.3)
+
+ buffer-from@1.1.2: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ bytes@3.1.2: {}
+
+ cac@6.7.14: {}
+
+ cacache@17.1.4:
+ dependencies:
+ '@npmcli/fs': 3.1.1
+ fs-minipass: 3.0.3
+ glob: 10.4.5
+ lru-cache: 7.18.3
+ minipass: 7.1.2
+ minipass-collect: 1.0.2
+ minipass-flush: 1.0.5
+ minipass-pipeline: 1.2.4
+ p-map: 4.0.0
+ ssri: 10.0.6
+ tar: 6.2.1
+ unique-filename: 3.0.0
+
+ call-bind-apply-helpers@1.0.1:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.8:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ es-define-property: 1.0.1
+ get-intrinsic: 1.2.6
+ set-function-length: 1.2.2
+
+ call-bound@1.0.3:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ get-intrinsic: 1.2.6
+
+ camel-case@4.1.2:
+ dependencies:
+ pascal-case: 3.1.2
+ tslib: 2.8.1
+
+ camelcase-css@2.0.1: {}
+
+ camelcase@8.0.0: {}
+
+ caniuse-lite@1.0.30001690: {}
+
+ ccount@2.0.1: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chalk@5.4.1: {}
+
+ character-entities-html4@2.1.0: {}
+
+ character-entities-legacy@3.0.0: {}
+
+ character-entities@2.0.2: {}
+
+ character-reference-invalid@2.0.1: {}
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chownr@1.1.4: {}
+
+ chownr@2.0.0: {}
+
+ ci-info@4.1.0: {}
+
+ clean-stack@2.2.0: {}
+
+ cli-boxes@3.0.0: {}
+
+ cli-cursor@3.1.0:
+ dependencies:
+ restore-cursor: 3.1.0
+
+ cli-cursor@5.0.0:
+ dependencies:
+ restore-cursor: 5.1.0
+
+ cli-spinners@2.9.2: {}
+
+ clipanion@3.2.1(typanion@3.14.0):
+ dependencies:
+ typanion: 3.14.0
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone@1.0.4: {}
+
+ clsx@2.1.1: {}
+
+ collapse-white-space@2.1.0: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.2
+ optional: true
+
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+ optional: true
+
+ comma-separated-tokens@2.0.3: {}
+
+ commander@4.1.1: {}
+
+ comment-json@4.2.5:
+ dependencies:
+ array-timsort: 1.0.3
+ core-util-is: 1.0.3
+ esprima: 4.0.1
+ has-own-prop: 2.0.0
+ repeat-string: 1.6.1
+
+ common-ancestor-path@1.0.1: {}
+
+ confbox@0.1.8: {}
+
+ content-disposition@0.5.4:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ content-type@1.0.5: {}
+
+ contentlayer@0.3.4(esbuild@0.17.6):
+ dependencies:
+ '@contentlayer/cli': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/client': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/core': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/source-files': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/source-remote-files': 0.3.4(esbuild@0.17.6)
+ '@contentlayer/utils': 0.3.4
+ transitivePeerDependencies:
+ - '@effect-ts/otel-node'
+ - esbuild
+ - markdown-wasm
+ - supports-color
+
+ convert-source-map@2.0.0: {}
+
+ cookie-signature@1.0.6: {}
+
+ cookie-signature@1.2.2: {}
+
+ cookie@0.6.0: {}
+
+ cookie@0.7.1: {}
+
+ cookie@0.7.2: {}
+
+ core-util-is@1.0.3: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ css-select@5.1.0:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+
+ css-what@6.1.0: {}
+
+ cssesc@3.0.0: {}
+
+ cssom@0.5.0: {}
+
+ csstype@3.1.3: {}
+
+ data-uri-to-buffer@3.0.1: {}
+
+ data-uri-to-buffer@4.0.1: {}
+
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@4.4.0:
+ dependencies:
+ ms: 2.1.3
+
+ decode-named-character-reference@1.0.2:
+ dependencies:
+ character-entities: 2.0.2
+
+ dedent@1.5.3: {}
+
+ deep-object-diff@1.1.9: {}
+
+ deepmerge@4.3.1: {}
+
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ depd@2.0.0: {}
+
+ dequal@2.0.3: {}
+
+ destroy@1.2.0: {}
+
+ detect-libc@2.0.3:
+ optional: true
+
+ deterministic-object-hash@2.0.2:
+ dependencies:
+ base-64: 1.0.0
+
+ devalue@5.1.1: {}
+
+ devlop@1.1.0:
+ dependencies:
+ dequal: 2.0.3
+
+ didyoumean@1.2.2: {}
+
+ diff@5.2.0: {}
+
+ dlv@1.1.3: {}
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.1.0:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dotenv@16.4.7: {}
+
+ dset@3.1.4: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ duplexify@3.7.1:
+ dependencies:
+ end-of-stream: 1.4.4
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ stream-shift: 1.0.3
+
+ eastasianwidth@0.2.0: {}
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.75: {}
+
+ emoji-regex-xs@1.0.0: {}
+
+ emoji-regex@10.4.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ end-of-stream@1.4.4:
+ dependencies:
+ once: 1.4.0
+
+ entities@4.5.0: {}
+
+ err-code@2.0.3: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@1.5.4: {}
+
+ es-object-atoms@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+
+ esast-util-from-estree@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+
+ esast-util-from-js@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ acorn: 8.14.0
+ esast-util-from-estree: 2.0.0
+ vfile-message: 4.0.2
+
+ esbuild-plugins-node-modules-polyfill@1.6.8(esbuild@0.17.6):
+ dependencies:
+ '@jspm/core': 2.0.1
+ esbuild: 0.17.6
+ local-pkg: 0.5.1
+ resolve.exports: 2.0.3
+
+ esbuild@0.17.6:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.17.6
+ '@esbuild/android-arm64': 0.17.6
+ '@esbuild/android-x64': 0.17.6
+ '@esbuild/darwin-arm64': 0.17.6
+ '@esbuild/darwin-x64': 0.17.6
+ '@esbuild/freebsd-arm64': 0.17.6
+ '@esbuild/freebsd-x64': 0.17.6
+ '@esbuild/linux-arm': 0.17.6
+ '@esbuild/linux-arm64': 0.17.6
+ '@esbuild/linux-ia32': 0.17.6
+ '@esbuild/linux-loong64': 0.17.6
+ '@esbuild/linux-mips64el': 0.17.6
+ '@esbuild/linux-ppc64': 0.17.6
+ '@esbuild/linux-riscv64': 0.17.6
+ '@esbuild/linux-s390x': 0.17.6
+ '@esbuild/linux-x64': 0.17.6
+ '@esbuild/netbsd-x64': 0.17.6
+ '@esbuild/openbsd-x64': 0.17.6
+ '@esbuild/sunos-x64': 0.17.6
+ '@esbuild/win32-arm64': 0.17.6
+ '@esbuild/win32-ia32': 0.17.6
+ '@esbuild/win32-x64': 0.17.6
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ esprima@4.0.1: {}
+
+ estree-util-attach-comments@2.1.1:
+ dependencies:
+ '@types/estree': 1.0.6
+
+ estree-util-attach-comments@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+
+ estree-util-build-jsx@2.2.2:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ estree-util-is-identifier-name: 2.1.0
+ estree-walker: 3.0.3
+
+ estree-util-build-jsx@3.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+
+ estree-util-is-identifier-name@1.1.0: {}
+
+ estree-util-is-identifier-name@2.1.0: {}
+
+ estree-util-is-identifier-name@3.0.0: {}
+
+ estree-util-scope@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ devlop: 1.1.0
+
+ estree-util-to-js@1.2.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.4
+
+ estree-util-to-js@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.9.0
+ source-map: 0.7.4
+
+ estree-util-value-to-estree@1.3.0:
+ dependencies:
+ is-plain-obj: 3.0.0
+
+ estree-util-visit@1.2.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 2.0.11
+
+ estree-util-visit@2.0.0:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.3
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.6
+
+ etag@1.8.1: {}
+
+ eval@0.1.8:
+ dependencies:
+ '@types/node': 22.10.2
+ require-like: 0.1.2
+
+ event-target-shim@5.0.1: {}
+
+ eventemitter3@5.0.1: {}
+
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
+ exit-hook@2.2.1: {}
+
+ express@4.21.2:
+ dependencies:
+ accepts: 1.3.8
+ array-flatten: 1.1.1
+ body-parser: 1.20.3
+ content-disposition: 0.5.4
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.0.6
+ debug: 2.6.9
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 1.3.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ merge-descriptors: 1.0.3
+ methods: 1.1.2
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ path-to-regexp: 0.1.12
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ safe-buffer: 5.2.1
+ send: 0.19.0
+ serve-static: 1.16.2
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 1.6.18
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ extend-shallow@2.0.1:
+ dependencies:
+ is-extendable: 0.1.1
+
+ extend@3.0.2: {}
+
+ fast-glob@3.3.2:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fastq@1.18.0:
+ dependencies:
+ reusify: 1.0.4
+
+ fault@2.0.1:
+ dependencies:
+ format: 0.2.2
+
+ fetch-blob@3.2.0:
+ dependencies:
+ node-domexception: 1.0.0
+ web-streams-polyfill: 3.3.3
+
+ filename-reserved-regex@3.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ finalhandler@1.3.1:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-up-simple@1.0.0: {}
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ find-yarn-workspace-root2@1.2.16:
+ dependencies:
+ micromatch: 4.0.8
+ pkg-dir: 4.2.0
+
+ flattie@1.1.1: {}
+
+ for-each@0.3.3:
+ dependencies:
+ is-callable: 1.2.7
+
+ foreground-child@3.3.0:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ format@0.2.2: {}
+
+ formdata-polyfill@4.0.10:
+ dependencies:
+ fetch-blob: 3.2.0
+
+ forwarded@0.2.0: {}
+
+ fraction.js@4.3.7: {}
+
+ fresh@0.5.2: {}
+
+ fs-constants@1.0.0: {}
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+
+ fs-minipass@3.0.3:
+ dependencies:
+ minipass: 7.1.2
+
+ fs-monkey@1.0.6: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ generic-names@4.0.0:
+ dependencies:
+ loader-utils: 3.3.1
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.3.0: {}
+
+ get-intrinsic@1.2.6:
+ dependencies:
+ call-bind-apply-helpers: 1.0.1
+ dunder-proto: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ function-bind: 1.1.2
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-port@5.1.1: {}
+
+ get-stream@6.0.1: {}
+
+ github-slugger@2.0.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.4.5:
+ dependencies:
+ foreground-child: 3.3.0
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ globals@11.12.0: {}
+
+ globrex@0.1.2: {}
+
+ gopd@1.2.0: {}
+
+ graceful-fs@4.2.11: {}
+
+ gray-matter@4.0.3:
+ dependencies:
+ js-yaml: 3.14.1
+ kind-of: 6.0.3
+ section-matter: 1.0.0
+ strip-bom-string: 1.0.0
+
+ gunzip-maybe@1.4.2:
+ dependencies:
+ browserify-zlib: 0.1.4
+ is-deflate: 1.0.0
+ is-gzip: 1.0.0
+ peek-stream: 1.1.3
+ pumpify: 1.5.1
+ through2: 2.0.5
+
+ has-flag@4.0.0: {}
+
+ has-own-prop@2.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hash-wasm@4.12.0: {}
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hast-util-from-html@2.0.3:
+ dependencies:
+ '@types/hast': 3.0.4
+ devlop: 1.1.0
+ hast-util-from-parse5: 8.0.2
+ parse5: 7.2.1
+ vfile: 6.0.3
+ vfile-message: 4.0.2
+
+ hast-util-from-parse5@7.1.2:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ hastscript: 7.2.0
+ property-information: 6.5.0
+ vfile: 5.3.7
+ vfile-location: 4.1.0
+ web-namespaces: 2.0.1
+
+ hast-util-from-parse5@8.0.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ hastscript: 9.0.0
+ property-information: 6.5.0
+ vfile: 6.0.3
+ vfile-location: 5.0.3
+ web-namespaces: 2.0.1
+
+ hast-util-heading-rank@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-is-element@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-parse-selector@3.1.1:
+ dependencies:
+ '@types/hast': 2.3.10
+
+ hast-util-parse-selector@4.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-raw@7.2.3:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/parse5': 6.0.3
+ hast-util-from-parse5: 7.1.2
+ hast-util-to-parse5: 7.1.0
+ html-void-elements: 2.0.1
+ parse5: 6.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+ vfile: 5.3.7
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-raw@9.1.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ '@ungap/structured-clone': 1.2.1
+ hast-util-from-parse5: 8.0.2
+ hast-util-to-parse5: 8.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.0
+ parse5: 7.2.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-to-estree@2.3.3:
+ dependencies:
+ '@types/estree': 1.0.6
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ comma-separated-tokens: 2.0.3
+ estree-util-attach-comments: 2.1.1
+ estree-util-is-identifier-name: 2.1.0
+ hast-util-whitespace: 2.0.1
+ mdast-util-mdx-expression: 1.3.2
+ mdast-util-mdxjs-esm: 1.3.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.4.4
+ unist-util-position: 4.0.4
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-estree@3.1.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.1.3
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.4.4
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-html@8.0.4:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/unist': 2.0.11
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-raw: 7.2.3
+ hast-util-whitespace: 2.0.1
+ html-void-elements: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-html@9.0.4:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.2.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.4
+ zwitch: 2.0.4
+
+ hast-util-to-jsx-runtime@2.3.2:
+ dependencies:
+ '@types/estree': 1.0.6
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.1.3
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 1.0.8
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ hast-util-to-parse5@7.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 2.0.3
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-to-parse5@8.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+
+ hast-util-to-string@3.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-to-text@4.0.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.3
+ hast-util-is-element: 3.0.0
+ unist-util-find-after: 5.0.0
+
+ hast-util-whitespace@2.0.1: {}
+
+ hast-util-whitespace@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hastscript@7.2.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 3.1.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+
+ hastscript@9.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 4.0.0
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+
+ hosted-git-info@6.1.3:
+ dependencies:
+ lru-cache: 7.18.3
+
+ html-escaper@3.0.3: {}
+
+ html-void-elements@2.0.1: {}
+
+ html-void-elements@3.0.0: {}
+
+ htmlparser2@8.0.2:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ entities: 4.5.0
+
+ http-cache-semantics@4.1.1: {}
+
+ http-errors@2.0.0:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ toidentifier: 1.0.1
+
+ human-signals@2.1.0: {}
+
+ iconv-lite@0.4.24:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ icss-utils@5.1.0(postcss@8.4.49):
+ dependencies:
+ postcss: 8.4.49
+
+ ieee754@1.2.1: {}
+
+ imagescript@1.3.0: {}
+
+ import-meta-resolve@4.1.0: {}
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@4.0.0: {}
+
+ inflection@2.0.1: {}
+
+ inherits@2.0.4: {}
+
+ inline-style-parser@0.1.1: {}
+
+ inline-style-parser@0.2.4: {}
+
+ ipaddr.js@1.9.1: {}
+
+ is-alphabetical@2.0.1: {}
+
+ is-alphanumerical@2.0.1:
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+
+ is-arguments@1.2.0:
+ dependencies:
+ call-bound: 1.0.3
+ has-tostringtag: 1.0.2
+
+ is-arrayish@0.3.2:
+ optional: true
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-buffer@2.0.5: {}
+
+ is-callable@1.2.7: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-decimal@2.0.1: {}
+
+ is-deflate@1.0.0: {}
+
+ is-docker@3.0.0: {}
+
+ is-extendable@0.1.1: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-generator-function@1.0.10:
+ dependencies:
+ has-tostringtag: 1.0.2
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-gzip@1.0.0: {}
+
+ is-hexadecimal@2.0.1: {}
+
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
+ is-interactive@1.0.0: {}
+
+ is-interactive@2.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@3.0.0: {}
+
+ is-plain-obj@4.1.0: {}
+
+ is-reference@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.6
+
+ is-stream@2.0.1: {}
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.18
+
+ is-unicode-supported@0.1.0: {}
+
+ is-unicode-supported@1.3.0: {}
+
+ is-unicode-supported@2.1.0: {}
+
+ is-wsl@3.1.0:
+ dependencies:
+ is-inside-container: 1.0.0
+
+ isarray@1.0.0: {}
+
+ isbot@5.1.18: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ javascript-stringify@2.1.0: {}
+
+ jiti@1.21.7: {}
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@3.14.1:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsbi@4.3.0: {}
+
+ jsesc@3.0.2: {}
+
+ jsesc@3.1.0: {}
+
+ json-parse-even-better-errors@3.0.2: {}
+
+ json5@2.2.3: {}
+
+ jsonfile@6.1.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ kind-of@6.0.3: {}
+
+ kleur@3.0.3: {}
+
+ kleur@4.1.5: {}
+
+ lilconfig@3.1.3: {}
+
+ lines-and-columns@1.2.4: {}
+
+ linkedom@0.14.26:
+ dependencies:
+ css-select: 5.1.0
+ cssom: 0.5.0
+ html-escaper: 3.0.3
+ htmlparser2: 8.0.2
+ uhyphen: 0.2.0
+
+ lite-youtube-embed@0.3.3: {}
+
+ load-yaml-file@0.2.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ js-yaml: 3.14.1
+ pify: 4.0.1
+ strip-bom: 3.0.0
+
+ loader-utils@3.3.1: {}
+
+ local-pkg@0.5.1:
+ dependencies:
+ mlly: 1.7.3
+ pkg-types: 1.2.1
+
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.camelcase@4.3.0: {}
+
+ lodash.castarray@4.4.0: {}
+
+ lodash.debounce@4.0.8: {}
+
+ lodash.isplainobject@4.0.6: {}
+
+ lodash.merge@4.6.2: {}
+
+ lodash@4.17.21: {}
+
+ log-symbols@4.1.0:
+ dependencies:
+ chalk: 4.1.2
+ is-unicode-supported: 0.1.0
+
+ log-symbols@6.0.0:
+ dependencies:
+ chalk: 5.4.1
+ is-unicode-supported: 1.3.0
+
+ long@5.2.3: {}
+
+ longest-streak@3.1.0: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lower-case@2.0.2:
+ dependencies:
+ tslib: 2.8.1
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@7.18.3: {}
+
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ magicast@0.3.5:
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@babel/types': 7.26.3
+ source-map-js: 1.2.1
+
+ markdown-extensions@1.1.1: {}
+
+ markdown-extensions@2.0.0: {}
+
+ markdown-table@3.0.4: {}
+
+ math-intrinsics@1.1.0: {}
+
+ mdast-util-definitions@5.1.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ unist-util-visit: 4.1.2
+
+ mdast-util-definitions@6.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ unist-util-visit: 5.0.0
+
+ mdast-util-find-and-replace@3.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ escape-string-regexp: 5.0.0
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+
+ mdast-util-from-markdown@1.3.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ decode-named-character-reference: 1.0.2
+ mdast-util-to-string: 3.2.0
+ micromark: 3.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-decode-string: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-stringify-position: 3.0.3
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-from-markdown@2.0.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ decode-named-character-reference: 1.0.2
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-decode-string: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+ unist-util-stringify-position: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-frontmatter@1.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-to-markdown: 1.5.0
+ micromark-extension-frontmatter: 1.1.1
+
+ mdast-util-gfm-autolink-literal@2.0.1:
+ dependencies:
+ '@types/mdast': 4.0.4
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.1
+ micromark-util-character: 2.1.1
+
+ mdast-util-gfm-footnote@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ micromark-util-normalize-identifier: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-strikethrough@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-table@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ markdown-table: 3.0.4
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm-task-list-item@2.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-gfm@3.0.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-gfm-autolink-literal: 2.0.1
+ mdast-util-gfm-footnote: 2.0.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@1.3.2:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-expression@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@2.1.4:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ ccount: 2.0.1
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-remove-position: 4.0.2
+ unist-util-stringify-position: 3.0.3
+ vfile-message: 3.1.4
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx-jsx@3.1.3:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ parse-entities: 4.0.2
+ stringify-entities: 4.0.4
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@2.0.1:
+ dependencies:
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-mdx-expression: 1.3.2
+ mdast-util-mdx-jsx: 2.1.4
+ mdast-util-mdxjs-esm: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdx@3.0.0:
+ dependencies:
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-mdx-expression: 2.0.1
+ mdast-util-mdx-jsx: 3.1.3
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@1.3.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ mdast-util-to-markdown: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-mdxjs-esm@2.0.1:
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.2
+ mdast-util-to-markdown: 2.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ mdast-util-phrasing@3.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ unist-util-is: 5.2.1
+
+ mdast-util-phrasing@4.1.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ unist-util-is: 6.0.0
+
+ mdast-util-to-hast@12.3.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-definitions: 5.1.2
+ micromark-util-sanitize-uri: 1.2.0
+ trim-lines: 3.0.1
+ unist-util-generated: 2.0.1
+ unist-util-position: 4.0.4
+ unist-util-visit: 4.1.2
+
+ mdast-util-to-hast@13.2.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ '@ungap/structured-clone': 1.2.1
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.1
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.3
+
+ mdast-util-to-markdown@1.5.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+ '@types/unist': 2.0.11
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 3.0.1
+ mdast-util-to-string: 3.2.0
+ micromark-util-decode-string: 1.1.0
+ unist-util-visit: 4.1.2
+ zwitch: 2.0.4
+
+ mdast-util-to-markdown@2.1.2:
+ dependencies:
+ '@types/mdast': 4.0.4
+ '@types/unist': 3.0.3
+ longest-streak: 3.1.0
+ mdast-util-phrasing: 4.1.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-classify-character: 2.0.1
+ micromark-util-decode-string: 2.0.1
+ unist-util-visit: 5.0.0
+ zwitch: 2.0.4
+
+ mdast-util-to-string@3.2.0:
+ dependencies:
+ '@types/mdast': 3.0.15
+
+ mdast-util-to-string@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+
+ mdx-bundler@9.2.1(esbuild@0.17.6):
+ dependencies:
+ '@babel/runtime': 7.26.0
+ '@esbuild-plugins/node-resolve': 0.1.4(esbuild@0.17.6)
+ '@fal-works/esbuild-plugin-global-externals': 2.1.2
+ '@mdx-js/esbuild': 2.3.0(esbuild@0.17.6)
+ esbuild: 0.17.6
+ gray-matter: 4.0.3
+ remark-frontmatter: 4.0.1
+ remark-mdx-frontmatter: 1.1.1
+ uuid: 8.3.2
+ vfile: 5.3.7
+ transitivePeerDependencies:
+ - supports-color
+
+ media-query-parser@2.0.2:
+ dependencies:
+ '@babel/runtime': 7.26.0
+
+ media-typer@0.3.0: {}
+
+ memfs@3.5.3:
+ dependencies:
+ fs-monkey: 1.0.6
+
+ merge-descriptors@1.0.3: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ methods@1.1.2: {}
+
+ micromark-core-commonmark@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-factory-destination: 1.1.0
+ micromark-factory-label: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-factory-title: 1.1.0
+ micromark-factory-whitespace: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-classify-character: 1.1.0
+ micromark-util-html-tag-name: 1.2.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-core-commonmark@2.0.2:
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.1
+ micromark-factory-label: 2.0.1
+ micromark-factory-space: 2.0.1
+ micromark-factory-title: 2.0.1
+ micromark-factory-whitespace: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-html-tag-name: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-subtokenize: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-frontmatter@1.1.1:
+ dependencies:
+ fault: 2.0.1
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-extension-gfm-autolink-literal@2.1.0:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-gfm-footnote@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.2
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-gfm-strikethrough@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-classify-character: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-gfm-table@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-gfm-tagfilter@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.1
+
+ micromark-extension-gfm-task-list-item@2.1.0:
+ dependencies:
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-gfm@3.0.0:
+ dependencies:
+ micromark-extension-gfm-autolink-literal: 2.1.0
+ micromark-extension-gfm-footnote: 2.1.0
+ micromark-extension-gfm-strikethrough: 2.1.0
+ micromark-extension-gfm-table: 2.1.0
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.1.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-mdx-expression@1.0.8:
+ dependencies:
+ '@types/estree': 1.0.6
+ micromark-factory-mdx-expression: 1.0.9
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-events-to-acorn: 1.2.3
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-extension-mdx-expression@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.2
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-extension-mdx-jsx@1.0.5:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.6
+ estree-util-is-identifier-name: 2.1.0
+ micromark-factory-mdx-expression: 1.0.9
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-extension-mdx-jsx@3.0.1:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.6
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.2
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+ vfile-message: 4.0.2
+
+ micromark-extension-mdx-md@1.0.1:
+ dependencies:
+ micromark-util-types: 1.1.0
+
+ micromark-extension-mdx-md@2.0.0:
+ dependencies:
+ micromark-util-types: 2.0.1
+
+ micromark-extension-mdxjs-esm@1.0.5:
+ dependencies:
+ '@types/estree': 1.0.6
+ micromark-core-commonmark: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-events-to-acorn: 1.2.3
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-position-from-estree: 1.1.2
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-extension-mdxjs-esm@3.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.2
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.2
+
+ micromark-extension-mdxjs@1.0.1:
+ dependencies:
+ acorn: 8.14.0
+ acorn-jsx: 5.3.2(acorn@8.14.0)
+ micromark-extension-mdx-expression: 1.0.8
+ micromark-extension-mdx-jsx: 1.0.5
+ micromark-extension-mdx-md: 1.0.1
+ micromark-extension-mdxjs-esm: 1.0.5
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-extension-mdxjs@3.0.0:
+ dependencies:
+ acorn: 8.14.0
+ acorn-jsx: 5.3.2(acorn@8.14.0)
+ micromark-extension-mdx-expression: 3.0.0
+ micromark-extension-mdx-jsx: 3.0.1
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-factory-destination@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-destination@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-factory-label@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-factory-label@2.0.1:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-factory-mdx-expression@1.0.9:
+ dependencies:
+ '@types/estree': 1.0.6
+ micromark-util-character: 1.2.0
+ micromark-util-events-to-acorn: 1.2.3
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ unist-util-position-from-estree: 1.1.2
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-factory-mdx-expression@2.0.2:
+ dependencies:
+ '@types/estree': 1.0.6
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.2
+
+ micromark-factory-space@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-space@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-types: 2.0.1
+
+ micromark-factory-title@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-title@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-factory-whitespace@1.1.0:
+ dependencies:
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-factory-whitespace@2.0.1:
+ dependencies:
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-util-character@1.2.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-character@2.1.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-util-chunked@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-chunked@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-classify-character@1.1.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-classify-character@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-util-combine-extensions@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-types: 1.1.0
+
+ micromark-util-combine-extensions@2.0.1:
+ dependencies:
+ micromark-util-chunked: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-util-decode-numeric-character-reference@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-decode-numeric-character-reference@2.0.2:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-decode-string@1.1.0:
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-util-character: 1.2.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-decode-string@2.0.1:
+ dependencies:
+ decode-named-character-reference: 1.0.2
+ micromark-util-character: 2.1.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-encode@1.1.0: {}
+
+ micromark-util-encode@2.0.1: {}
+
+ micromark-util-events-to-acorn@1.2.3:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.6
+ '@types/unist': 2.0.11
+ estree-util-visit: 1.2.1
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ vfile-message: 3.1.4
+
+ micromark-util-events-to-acorn@2.0.2:
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.6
+ '@types/unist': 3.0.3
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+ vfile-message: 4.0.2
+
+ micromark-util-html-tag-name@1.2.0: {}
+
+ micromark-util-html-tag-name@2.0.1: {}
+
+ micromark-util-normalize-identifier@1.1.0:
+ dependencies:
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-normalize-identifier@2.0.1:
+ dependencies:
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-resolve-all@1.1.0:
+ dependencies:
+ micromark-util-types: 1.1.0
+
+ micromark-util-resolve-all@2.0.1:
+ dependencies:
+ micromark-util-types: 2.0.1
+
+ micromark-util-sanitize-uri@1.2.0:
+ dependencies:
+ micromark-util-character: 1.2.0
+ micromark-util-encode: 1.1.0
+ micromark-util-symbol: 1.1.0
+
+ micromark-util-sanitize-uri@2.0.1:
+ dependencies:
+ micromark-util-character: 2.1.1
+ micromark-util-encode: 2.0.1
+ micromark-util-symbol: 2.0.1
+
+ micromark-util-subtokenize@1.1.0:
+ dependencies:
+ micromark-util-chunked: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+
+ micromark-util-subtokenize@2.0.3:
+ dependencies:
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.1
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+
+ micromark-util-symbol@1.1.0: {}
+
+ micromark-util-symbol@2.0.1: {}
+
+ micromark-util-types@1.1.0: {}
+
+ micromark-util-types@2.0.1: {}
+
+ micromark@3.2.0:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.0
+ decode-named-character-reference: 1.0.2
+ micromark-core-commonmark: 1.1.0
+ micromark-factory-space: 1.1.0
+ micromark-util-character: 1.2.0
+ micromark-util-chunked: 1.1.0
+ micromark-util-combine-extensions: 1.1.0
+ micromark-util-decode-numeric-character-reference: 1.1.0
+ micromark-util-encode: 1.1.0
+ micromark-util-normalize-identifier: 1.1.0
+ micromark-util-resolve-all: 1.1.0
+ micromark-util-sanitize-uri: 1.2.0
+ micromark-util-subtokenize: 1.1.0
+ micromark-util-symbol: 1.1.0
+ micromark-util-types: 1.1.0
+ uvu: 0.5.6
+ transitivePeerDependencies:
+ - supports-color
+
+ micromark@4.0.1:
+ dependencies:
+ '@types/debug': 4.1.12
+ debug: 4.4.0
+ decode-named-character-reference: 1.0.2
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.2
+ micromark-factory-space: 2.0.1
+ micromark-util-character: 2.1.1
+ micromark-util-chunked: 2.0.1
+ micromark-util-combine-extensions: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.2
+ micromark-util-encode: 2.0.1
+ micromark-util-normalize-identifier: 2.0.1
+ micromark-util-resolve-all: 2.0.1
+ micromark-util-sanitize-uri: 2.0.1
+ micromark-util-subtokenize: 2.0.3
+ micromark-util-symbol: 2.0.1
+ micromark-util-types: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@1.6.0: {}
+
+ mimic-fn@2.1.0: {}
+
+ mimic-function@5.0.1: {}
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.1
+
+ minimist@1.2.8: {}
+
+ minipass-collect@1.0.2:
+ dependencies:
+ minipass: 3.3.6
+
+ minipass-flush@1.0.5:
+ dependencies:
+ minipass: 3.3.6
+
+ minipass-pipeline@1.2.4:
+ dependencies:
+ minipass: 3.3.6
+
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+
+ minipass@5.0.0: {}
+
+ minipass@7.1.2: {}
+
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+
+ mkdirp-classic@0.5.3: {}
+
+ mkdirp@1.0.4: {}
+
+ mlly@1.7.3:
+ dependencies:
+ acorn: 8.14.0
+ pathe: 1.1.2
+ pkg-types: 1.2.1
+ ufo: 1.5.4
+
+ modern-ahocorasick@1.1.0: {}
+
+ mri@1.2.0: {}
+
+ mrmime@1.0.1: {}
+
+ mrmime@2.0.0: {}
+
+ ms@2.0.0: {}
+
+ ms@2.1.3: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nanoid@3.3.8: {}
+
+ negotiator@0.6.3: {}
+
+ neotraverse@0.6.18: {}
+
+ nlcst-to-string@3.1.1:
+ dependencies:
+ '@types/nlcst': 1.0.4
+
+ nlcst-to-string@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+
+ no-case@3.0.4:
+ dependencies:
+ lower-case: 2.0.2
+ tslib: 2.8.1
+
+ node-domexception@1.0.0: {}
+
+ node-fetch@3.3.2:
+ dependencies:
+ data-uri-to-buffer: 4.0.1
+ fetch-blob: 3.2.0
+ formdata-polyfill: 4.0.10
+
+ node-releases@2.0.19: {}
+
+ normalize-package-data@5.0.0:
+ dependencies:
+ hosted-git-info: 6.1.3
+ is-core-module: 2.16.1
+ semver: 7.6.3
+ validate-npm-package-license: 3.0.4
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ npm-install-checks@6.3.0:
+ dependencies:
+ semver: 7.6.3
+
+ npm-normalize-package-bin@3.0.1: {}
+
+ npm-package-arg@10.1.0:
+ dependencies:
+ hosted-git-info: 6.1.3
+ proc-log: 3.0.0
+ semver: 7.6.3
+ validate-npm-package-name: 5.0.1
+
+ npm-pick-manifest@8.0.2:
+ dependencies:
+ npm-install-checks: 6.3.0
+ npm-normalize-package-bin: 3.0.1
+ npm-package-arg: 10.1.0
+ semver: 7.6.3
+
+ npm-run-path@4.0.1:
+ dependencies:
+ path-key: 3.1.1
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ object-assign@4.1.1: {}
+
+ object-hash@3.0.0: {}
+
+ object-inspect@1.13.3: {}
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@5.1.2:
+ dependencies:
+ mimic-fn: 2.1.0
+
+ onetime@7.0.0:
+ dependencies:
+ mimic-function: 5.0.1
+
+ oniguruma-to-es@0.8.1:
+ dependencies:
+ emoji-regex-xs: 1.0.0
+ regex: 5.0.2
+ regex-recursion: 5.0.0
+
+ oo-ascii-tree@1.106.0: {}
+
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
+ ora@8.1.1:
+ dependencies:
+ chalk: 5.4.1
+ cli-cursor: 5.0.0
+ cli-spinners: 2.9.2
+ is-interactive: 2.0.0
+ is-unicode-supported: 2.1.0
+ log-symbols: 6.0.0
+ stdin-discarder: 0.2.2
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+
+ outdent@0.8.0: {}
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-limit@6.2.0:
+ dependencies:
+ yocto-queue: 1.1.1
+
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-map@4.0.0:
+ dependencies:
+ aggregate-error: 3.1.0
+
+ p-queue@8.0.1:
+ dependencies:
+ eventemitter3: 5.0.1
+ p-timeout: 6.1.3
+
+ p-timeout@6.1.3: {}
+
+ p-try@2.2.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ pako@0.2.9: {}
+
+ parse-entities@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.0.2
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+
+ parse-latin@5.0.1:
+ dependencies:
+ nlcst-to-string: 3.1.1
+ unist-util-modify-children: 3.1.1
+ unist-util-visit-children: 2.0.2
+
+ parse-latin@7.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ '@types/unist': 3.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-modify-children: 4.0.0
+ unist-util-visit-children: 3.0.0
+ vfile: 6.0.3
+
+ parse-ms@2.1.0: {}
+
+ parse5@6.0.1: {}
+
+ parse5@7.2.1:
+ dependencies:
+ entities: 4.5.0
+
+ parseurl@1.3.3: {}
+
+ pascal-case@3.1.2:
+ dependencies:
+ no-case: 3.0.4
+ tslib: 2.8.1
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ path-to-regexp@0.1.12: {}
+
+ pathe@1.1.2: {}
+
+ peek-stream@1.1.3:
+ dependencies:
+ buffer-from: 1.1.2
+ duplexify: 3.7.1
+ through2: 2.0.5
+
+ periscopic@3.1.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-walker: 3.0.3
+ is-reference: 3.0.3
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.2: {}
+
+ pidtree@0.6.0: {}
+
+ pify@2.3.0: {}
+
+ pify@4.0.1: {}
+
+ pirates@4.0.6: {}
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ pkg-types@1.2.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.7.3
+ pathe: 1.1.2
+
+ possible-typed-array-names@1.0.0: {}
+
+ postcss-discard-duplicates@5.1.0(postcss@8.4.49):
+ dependencies:
+ postcss: 8.4.49
+
+ postcss-import@15.1.0(postcss@8.4.49):
+ dependencies:
+ postcss: 8.4.49
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.10
+
+ postcss-js@4.0.1(postcss@8.4.49):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.4.49
+
+ postcss-load-config@4.0.2(postcss@8.4.49):
+ dependencies:
+ lilconfig: 3.1.3
+ yaml: 2.6.1
+ optionalDependencies:
+ postcss: 8.4.49
+
+ postcss-modules-extract-imports@3.1.0(postcss@8.4.49):
+ dependencies:
+ postcss: 8.4.49
+
+ postcss-modules-local-by-default@4.2.0(postcss@8.4.49):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.4.49)
+ postcss: 8.4.49
+ postcss-selector-parser: 7.0.0
+ postcss-value-parser: 4.2.0
+
+ postcss-modules-scope@3.2.1(postcss@8.4.49):
+ dependencies:
+ postcss: 8.4.49
+ postcss-selector-parser: 7.0.0
+
+ postcss-modules-values@4.0.0(postcss@8.4.49):
+ dependencies:
+ icss-utils: 5.1.0(postcss@8.4.49)
+ postcss: 8.4.49
+
+ postcss-modules@6.0.1(postcss@8.4.49):
+ dependencies:
+ generic-names: 4.0.0
+ icss-utils: 5.1.0(postcss@8.4.49)
+ lodash.camelcase: 4.3.0
+ postcss: 8.4.49
+ postcss-modules-extract-imports: 3.1.0(postcss@8.4.49)
+ postcss-modules-local-by-default: 4.2.0(postcss@8.4.49)
+ postcss-modules-scope: 3.2.1(postcss@8.4.49)
+ postcss-modules-values: 4.0.0(postcss@8.4.49)
+ string-hash: 1.1.3
+
+ postcss-nested@6.2.0(postcss@8.4.49):
+ dependencies:
+ postcss: 8.4.49
+ postcss-selector-parser: 6.1.2
+
+ postcss-selector-parser@6.0.10:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-selector-parser@7.0.0:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.4.49:
+ dependencies:
+ nanoid: 3.3.8
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ preferred-pm@4.0.0:
+ dependencies:
+ find-up-simple: 1.0.0
+ find-yarn-workspace-root2: 1.2.16
+ which-pm: 3.0.0
+
+ prettier-plugin-astro@0.12.3:
+ dependencies:
+ '@astrojs/compiler': 1.8.2
+ prettier: 3.4.2
+ sass-formatter: 0.7.9
+
+ prettier-plugin-tailwindcss@0.5.14(prettier-plugin-astro@0.12.3)(prettier@3.4.2):
+ dependencies:
+ prettier: 3.4.2
+ optionalDependencies:
+ prettier-plugin-astro: 0.12.3
+
+ prettier@2.8.8: {}
+
+ prettier@3.4.2: {}
+
+ pretty-ms@7.0.1:
+ dependencies:
+ parse-ms: 2.1.0
+
+ prismjs@1.29.0: {}
+
+ proc-log@3.0.0: {}
+
+ process-nextick-args@2.0.1: {}
+
+ promise-inflight@1.0.1: {}
+
+ promise-retry@2.0.1:
+ dependencies:
+ err-code: 2.0.3
+ retry: 0.12.0
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
+ property-information@6.5.0: {}
+
+ protobufjs@7.4.0:
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/node': 22.10.2
+ long: 5.2.3
+
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
+ pump@2.0.1:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
+ pump@3.0.2:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
+ pumpify@1.5.1:
+ dependencies:
+ duplexify: 3.7.1
+ inherits: 2.0.4
+ pump: 2.0.1
+
+ qs@6.13.0:
+ dependencies:
+ side-channel: 1.1.0
+
+ queue-microtask@1.2.3: {}
+
+ range-parser@1.2.1: {}
+
+ raw-body@2.5.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.4.24
+ unpipe: 1.0.0
+
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react-refresh@0.14.2: {}
+
+ react-router-dom@6.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@remix-run/router': 1.21.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-router: 6.28.1(react@18.3.1)
+
+ react-router@6.28.1(react@18.3.1):
+ dependencies:
+ '@remix-run/router': 1.21.0
+ react: 18.3.1
+
+ react-tsparticles@2.12.2(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ tsparticles-engine: 2.12.0
+
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ recma-build-jsx@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-util-build-jsx: 3.0.1
+ vfile: 6.0.3
+
+ recma-jsx@1.0.0(acorn@8.14.0):
+ dependencies:
+ acorn-jsx: 5.3.2(acorn@8.14.0)
+ estree-util-to-js: 2.0.0
+ recma-parse: 1.0.0
+ recma-stringify: 1.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - acorn
+
+ recma-parse@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ esast-util-from-js: 2.0.1
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ recma-stringify@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-util-to-js: 2.0.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ regenerator-runtime@0.14.1: {}
+
+ regex-recursion@5.0.0:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ regex-utilities@2.3.0: {}
+
+ regex@5.0.2:
+ dependencies:
+ regex-utilities: 2.3.0
+
+ rehype-parse@9.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-from-html: 2.0.3
+ unified: 11.0.5
+
+ rehype-raw@7.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-raw: 9.1.0
+ vfile: 6.0.3
+
+ rehype-recma@1.0.0:
+ dependencies:
+ '@types/estree': 1.0.6
+ '@types/hast': 3.0.4
+ hast-util-to-estree: 3.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ rehype-slug@6.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ github-slugger: 2.0.0
+ hast-util-heading-rank: 3.0.0
+ hast-util-to-string: 3.0.1
+ unist-util-visit: 5.0.0
+
+ rehype-stringify@10.0.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ hast-util-to-html: 9.0.4
+ unified: 11.0.5
+
+ rehype-stringify@9.0.4:
+ dependencies:
+ '@types/hast': 2.3.10
+ hast-util-to-html: 8.0.4
+ unified: 10.1.2
+
+ rehype@13.0.2:
+ dependencies:
+ '@types/hast': 3.0.4
+ rehype-parse: 9.0.1
+ rehype-stringify: 10.0.1
+ unified: 11.0.5
+
+ remark-frontmatter@4.0.1:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-frontmatter: 1.0.1
+ micromark-extension-frontmatter: 1.1.1
+ unified: 10.1.2
+
+ remark-gfm@4.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-gfm: 3.0.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx-frontmatter@1.1.1:
+ dependencies:
+ estree-util-is-identifier-name: 1.1.0
+ estree-util-value-to-estree: 1.3.0
+ js-yaml: 4.1.0
+ toml: 3.0.0
+
+ remark-mdx@2.3.0:
+ dependencies:
+ mdast-util-mdx: 2.0.1
+ micromark-extension-mdxjs: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-mdx@3.1.0:
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@10.0.2:
+ dependencies:
+ '@types/mdast': 3.0.15
+ mdast-util-from-markdown: 1.3.1
+ unified: 10.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-parse@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-from-markdown: 2.0.2
+ micromark-util-types: 2.0.1
+ unified: 11.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ remark-rehype@10.1.0:
+ dependencies:
+ '@types/hast': 2.3.10
+ '@types/mdast': 3.0.15
+ mdast-util-to-hast: 12.3.0
+ unified: 10.1.2
+
+ remark-rehype@11.1.1:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.4
+ mdast-util-to-hast: 13.2.0
+ unified: 11.0.5
+ vfile: 6.0.3
+
+ remark-sectionize@2.1.0:
+ dependencies:
+ unist-util-find-after: 4.0.1
+ unist-util-visit: 4.1.2
+
+ remark-smartypants@2.1.0:
+ dependencies:
+ retext: 8.1.0
+ retext-smartypants: 5.2.0
+ unist-util-visit: 5.0.0
+
+ remark-smartypants@3.0.2:
+ dependencies:
+ retext: 9.0.0
+ retext-smartypants: 6.2.0
+ unified: 11.0.5
+ unist-util-visit: 5.0.0
+
+ remark-stringify@11.0.0:
+ dependencies:
+ '@types/mdast': 4.0.4
+ mdast-util-to-markdown: 2.1.2
+ unified: 11.0.5
+
+ repeat-string@1.6.1: {}
+
+ require-directory@2.1.1: {}
+
+ require-like@0.1.2: {}
+
+ resolve.exports@2.0.3: {}
+
+ resolve@1.22.10:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ restore-cursor@3.1.0:
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+
+ restore-cursor@5.1.0:
+ dependencies:
+ onetime: 7.0.0
+ signal-exit: 4.1.0
+
+ retext-latin@3.1.0:
+ dependencies:
+ '@types/nlcst': 1.0.4
+ parse-latin: 5.0.1
+ unherit: 3.0.1
+ unified: 10.1.2
+
+ retext-latin@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ parse-latin: 7.0.0
+ unified: 11.0.5
+
+ retext-smartypants@5.2.0:
+ dependencies:
+ '@types/nlcst': 1.0.4
+ nlcst-to-string: 3.1.1
+ unified: 10.1.2
+ unist-util-visit: 4.1.2
+
+ retext-smartypants@6.2.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-visit: 5.0.0
+
+ retext-stringify@3.1.0:
+ dependencies:
+ '@types/nlcst': 1.0.4
+ nlcst-to-string: 3.1.1
+ unified: 10.1.2
+
+ retext-stringify@4.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unified: 11.0.5
+
+ retext@8.1.0:
+ dependencies:
+ '@types/nlcst': 1.0.4
+ retext-latin: 3.1.0
+ retext-stringify: 3.1.0
+ unified: 10.1.2
+
+ retext@9.0.0:
+ dependencies:
+ '@types/nlcst': 2.0.3
+ retext-latin: 4.0.0
+ retext-stringify: 4.0.0
+ unified: 11.0.5
+
+ retry@0.12.0: {}
+
+ reusify@1.0.4: {}
+
+ rollup@4.29.1:
+ dependencies:
+ '@types/estree': 1.0.6
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.29.1
+ '@rollup/rollup-android-arm64': 4.29.1
+ '@rollup/rollup-darwin-arm64': 4.29.1
+ '@rollup/rollup-darwin-x64': 4.29.1
+ '@rollup/rollup-freebsd-arm64': 4.29.1
+ '@rollup/rollup-freebsd-x64': 4.29.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.29.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.29.1
+ '@rollup/rollup-linux-arm64-gnu': 4.29.1
+ '@rollup/rollup-linux-arm64-musl': 4.29.1
+ '@rollup/rollup-linux-loongarch64-gnu': 4.29.1
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.29.1
+ '@rollup/rollup-linux-s390x-gnu': 4.29.1
+ '@rollup/rollup-linux-x64-gnu': 4.29.1
+ '@rollup/rollup-linux-x64-musl': 4.29.1
+ '@rollup/rollup-win32-arm64-msvc': 4.29.1
+ '@rollup/rollup-win32-ia32-msvc': 4.29.1
+ '@rollup/rollup-win32-x64-msvc': 4.29.1
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ s.color@0.0.15: {}
+
+ sade@1.8.1:
+ dependencies:
+ mri: 1.2.0
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ sass-formatter@0.7.9:
+ dependencies:
+ suf-log: 2.5.3
+
+ sax@1.4.1: {}
+
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
+ section-matter@1.0.0:
+ dependencies:
+ extend-shallow: 2.0.1
+ kind-of: 6.0.3
+
+ semver@6.3.1: {}
+
+ semver@7.6.3: {}
+
+ send@0.19.0:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@1.16.2:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.0
+ transitivePeerDependencies:
+ - supports-color
+
+ set-cookie-parser@2.7.1: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.2.6
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ setprototypeof@1.2.0: {}
+
+ sharp@0.33.5:
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.3
+ semver: 7.6.3
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.33.5
+ '@img/sharp-darwin-x64': 0.33.5
+ '@img/sharp-libvips-darwin-arm64': 1.0.4
+ '@img/sharp-libvips-darwin-x64': 1.0.4
+ '@img/sharp-libvips-linux-arm': 1.0.5
+ '@img/sharp-libvips-linux-arm64': 1.0.4
+ '@img/sharp-libvips-linux-s390x': 1.0.4
+ '@img/sharp-libvips-linux-x64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+ '@img/sharp-linux-arm': 0.33.5
+ '@img/sharp-linux-arm64': 0.33.5
+ '@img/sharp-linux-s390x': 0.33.5
+ '@img/sharp-linux-x64': 0.33.5
+ '@img/sharp-linuxmusl-arm64': 0.33.5
+ '@img/sharp-linuxmusl-x64': 0.33.5
+ '@img/sharp-wasm32': 0.33.5
+ '@img/sharp-win32-ia32': 0.33.5
+ '@img/sharp-win32-x64': 0.33.5
+ optional: true
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shiki@1.24.4:
+ dependencies:
+ '@shikijs/core': 1.24.4
+ '@shikijs/engine-javascript': 1.24.4
+ '@shikijs/engine-oniguruma': 1.24.4
+ '@shikijs/types': 1.24.4
+ '@shikijs/vscode-textmate': 9.3.1
+ '@types/hast': 3.0.4
+
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.3
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.6
+ object-inspect: 1.13.3
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.2.6
+ object-inspect: 1.13.3
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.3
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ signal-exit@3.0.7: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-swizzle@0.2.2:
+ dependencies:
+ is-arrayish: 0.3.2
+ optional: true
+
+ sisteransi@1.0.5: {}
+
+ sitemap@8.0.0:
+ dependencies:
+ '@types/node': 17.0.45
+ '@types/sax': 1.2.7
+ arg: 5.0.2
+ sax: 1.4.1
+
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.4: {}
+
+ space-separated-tokens@2.0.2: {}
+
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.20
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.20
+
+ spdx-license-ids@3.0.20: {}
+
+ sprintf-js@1.0.3: {}
+
+ ssri@10.0.6:
+ dependencies:
+ minipass: 7.1.2
+
+ statuses@2.0.1: {}
+
+ stdin-discarder@0.2.2: {}
+
+ stream-replace-string@2.0.0: {}
+
+ stream-shift@1.0.3: {}
+
+ stream-slice@0.1.2: {}
+
+ string-hash@1.1.3: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.4.0
+ get-east-asian-width: 1.3.0
+ strip-ansi: 7.1.0
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ stringify-entities@4.0.4:
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.0:
+ dependencies:
+ ansi-regex: 6.1.0
+
+ strip-bom-string@1.0.0: {}
+
+ strip-bom@3.0.0: {}
+
+ strip-final-newline@2.0.0: {}
+
+ style-to-object@0.4.4:
+ dependencies:
+ inline-style-parser: 0.1.1
+
+ style-to-object@1.0.8:
+ dependencies:
+ inline-style-parser: 0.2.4
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.8
+ commander: 4.1.1
+ glob: 10.4.5
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.6
+ ts-interface-checker: 0.1.13
+
+ suf-log@2.5.3:
+ dependencies:
+ s.color: 0.0.15
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tailwindcss@3.4.17:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.2
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.7
+ lilconfig: 3.1.3
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.4.49
+ postcss-import: 15.1.0(postcss@8.4.49)
+ postcss-js: 4.0.1(postcss@8.4.49)
+ postcss-load-config: 4.0.2(postcss@8.4.49)
+ postcss-nested: 6.2.0(postcss@8.4.49)
+ postcss-selector-parser: 6.1.2
+ resolve: 1.22.10
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - ts-node
+
+ tar-fs@2.1.1:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.2
+ tar-stream: 2.2.0
+
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.4
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ through2@2.0.5:
+ dependencies:
+ readable-stream: 2.3.8
+ xtend: 4.0.2
+
+ tinyexec@0.3.1: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
+ toml@3.0.0: {}
+
+ trim-lines@3.0.1: {}
+
+ trough@2.2.0: {}
+
+ ts-interface-checker@0.1.13: {}
+
+ ts-pattern@4.3.0: {}
+
+ tsconfck@3.1.4(typescript@5.7.2):
+ optionalDependencies:
+ typescript: 5.7.2
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@2.8.1: {}
+
+ tsparticles-basic@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+ tsparticles-move-base: 2.12.0
+ tsparticles-shape-circle: 2.12.0
+ tsparticles-updater-color: 2.12.0
+ tsparticles-updater-opacity: 2.12.0
+ tsparticles-updater-out-modes: 2.12.0
+ tsparticles-updater-size: 2.12.0
+
+ tsparticles-engine@2.12.0: {}
+
+ tsparticles-interaction-external-attract@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-bounce@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-bubble@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-connect@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-grab@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-pause@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-push@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-remove@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-repulse@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-slow@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-external-trail@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-particles-attract@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-particles-collisions@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-interaction-particles-links@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-move-base@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-move-parallax@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-particles.js@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-plugin-absorbers@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-plugin-easing-quad@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-plugin-emitters@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-circle@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-image@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-line@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-polygon@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-square@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-star@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-shape-text@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-slim@2.12.0:
+ dependencies:
+ tsparticles-basic: 2.12.0
+ tsparticles-engine: 2.12.0
+ tsparticles-interaction-external-attract: 2.12.0
+ tsparticles-interaction-external-bounce: 2.12.0
+ tsparticles-interaction-external-bubble: 2.12.0
+ tsparticles-interaction-external-connect: 2.12.0
+ tsparticles-interaction-external-grab: 2.12.0
+ tsparticles-interaction-external-pause: 2.12.0
+ tsparticles-interaction-external-push: 2.12.0
+ tsparticles-interaction-external-remove: 2.12.0
+ tsparticles-interaction-external-repulse: 2.12.0
+ tsparticles-interaction-external-slow: 2.12.0
+ tsparticles-interaction-particles-attract: 2.12.0
+ tsparticles-interaction-particles-collisions: 2.12.0
+ tsparticles-interaction-particles-links: 2.12.0
+ tsparticles-move-base: 2.12.0
+ tsparticles-move-parallax: 2.12.0
+ tsparticles-particles.js: 2.12.0
+ tsparticles-plugin-easing-quad: 2.12.0
+ tsparticles-shape-circle: 2.12.0
+ tsparticles-shape-image: 2.12.0
+ tsparticles-shape-line: 2.12.0
+ tsparticles-shape-polygon: 2.12.0
+ tsparticles-shape-square: 2.12.0
+ tsparticles-shape-star: 2.12.0
+ tsparticles-shape-text: 2.12.0
+ tsparticles-updater-color: 2.12.0
+ tsparticles-updater-life: 2.12.0
+ tsparticles-updater-opacity: 2.12.0
+ tsparticles-updater-out-modes: 2.12.0
+ tsparticles-updater-rotate: 2.12.0
+ tsparticles-updater-size: 2.12.0
+ tsparticles-updater-stroke-color: 2.12.0
+
+ tsparticles-updater-color@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-destroy@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-life@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-opacity@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-out-modes@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-roll@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-rotate@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-size@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-stroke-color@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-tilt@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-twinkle@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles-updater-wobble@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+
+ tsparticles@2.12.0:
+ dependencies:
+ tsparticles-engine: 2.12.0
+ tsparticles-interaction-external-trail: 2.12.0
+ tsparticles-plugin-absorbers: 2.12.0
+ tsparticles-plugin-emitters: 2.12.0
+ tsparticles-slim: 2.12.0
+ tsparticles-updater-destroy: 2.12.0
+ tsparticles-updater-roll: 2.12.0
+ tsparticles-updater-tilt: 2.12.0
+ tsparticles-updater-twinkle: 2.12.0
+ tsparticles-updater-wobble: 2.12.0
+
+ turbo-stream@2.4.0: {}
+
+ typanion@3.14.0: {}
+
+ type-fest@3.13.1: {}
+
+ type-fest@4.30.2: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ typescript@5.7.2: {}
+
+ ufo@1.5.4: {}
+
+ uhyphen@0.2.0: {}
+
+ undici-types@6.20.0: {}
+
+ undici@6.21.0: {}
+
+ unherit@3.0.1: {}
+
+ unified@10.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ bail: 2.0.2
+ extend: 3.0.2
+ is-buffer: 2.0.5
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 5.3.7
+
+ unified@11.0.5:
+ dependencies:
+ '@types/unist': 3.0.3
+ bail: 2.0.2
+ devlop: 1.1.0
+ extend: 3.0.2
+ is-plain-obj: 4.1.0
+ trough: 2.2.0
+ vfile: 6.0.3
+
+ unique-filename@3.0.0:
+ dependencies:
+ unique-slug: 4.0.0
+
+ unique-slug@4.0.0:
+ dependencies:
+ imurmurhash: 0.1.4
+
+ unist-util-find-after@4.0.1:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
+ unist-util-find-after@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
+
+ unist-util-generated@2.0.1: {}
+
+ unist-util-is@5.2.1:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-is@6.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-modify-children@3.1.1:
+ dependencies:
+ '@types/unist': 2.0.11
+ array-iterate: 2.0.1
+
+ unist-util-modify-children@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ array-iterate: 2.0.1
+
+ unist-util-position-from-estree@1.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-position-from-estree@2.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-position@4.0.4:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-remove-position@4.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-visit: 4.1.2
+
+ unist-util-remove-position@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-visit: 5.0.0
+
+ unist-util-stringify-position@3.0.3:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-stringify-position@4.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-children@2.0.2:
+ dependencies:
+ '@types/unist': 2.0.11
+
+ unist-util-visit-children@3.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+
+ unist-util-visit-parents@5.1.3:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+
+ unist-util-visit-parents@6.0.1:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
+
+ unist-util-visit@4.1.2:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-is: 5.2.1
+ unist-util-visit-parents: 5.1.3
+
+ unist-util-visit@5.0.0:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+
+ universalify@2.0.1: {}
+
+ unpipe@1.0.0: {}
+
+ update-browserslist-db@1.1.1(browserslist@4.24.3):
+ dependencies:
+ browserslist: 4.24.3
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ util-deprecate@1.0.2: {}
+
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.2.0
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.15
+ which-typed-array: 1.1.18
+
+ utils-merge@1.0.1: {}
+
+ uuid@8.3.2: {}
+
+ uvu@0.5.6:
+ dependencies:
+ dequal: 2.0.3
+ diff: 5.2.0
+ kleur: 4.1.5
+ sade: 1.8.1
+
+ valibot@0.41.0(typescript@5.7.2):
+ optionalDependencies:
+ typescript: 5.7.2
+
+ valid-filename@4.0.0:
+ dependencies:
+ filename-reserved-regex: 3.0.0
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ validate-npm-package-name@5.0.1: {}
+
+ vary@1.1.2: {}
+
+ vfile-location@4.1.0:
+ dependencies:
+ '@types/unist': 2.0.11
+ vfile: 5.3.7
+
+ vfile-location@5.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile: 6.0.3
+
+ vfile-message@3.1.4:
+ dependencies:
+ '@types/unist': 2.0.11
+ unist-util-stringify-position: 3.0.3
+
+ vfile-message@4.0.2:
+ dependencies:
+ '@types/unist': 3.0.3
+ unist-util-stringify-position: 4.0.0
+
+ vfile@5.3.7:
+ dependencies:
+ '@types/unist': 2.0.11
+ is-buffer: 2.0.5
+ unist-util-stringify-position: 3.0.3
+ vfile-message: 3.1.4
+
+ vfile@6.0.3:
+ dependencies:
+ '@types/unist': 3.0.3
+ vfile-message: 4.0.2
+
+ vite-node@1.6.0(@types/node@22.10.2):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.0
+ pathe: 1.1.2
+ picocolors: 1.1.1
+ vite: 5.4.11(@types/node@22.10.2)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite-tsconfig-paths@5.1.4(typescript@5.7.2)(vite@5.4.11(@types/node@22.10.2)):
+ dependencies:
+ debug: 4.4.0
+ globrex: 0.1.2
+ tsconfck: 3.1.4(typescript@5.7.2)
+ optionalDependencies:
+ vite: 5.4.11(@types/node@22.10.2)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ vite@5.4.11(@types/node@22.10.2):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.4.49
+ rollup: 4.29.1
+ optionalDependencies:
+ '@types/node': 22.10.2
+ fsevents: 2.3.3
+
+ vitefu@1.0.4(vite@5.4.11(@types/node@22.10.2)):
+ optionalDependencies:
+ vite: 5.4.11(@types/node@22.10.2)
+
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+
+ web-encoding@1.1.5:
+ dependencies:
+ util: 0.12.5
+ optionalDependencies:
+ '@zxing/text-encoding': 0.9.0
+
+ web-namespaces@2.0.1: {}
+
+ web-streams-polyfill@3.3.3: {}
+
+ which-pm-runs@1.1.0: {}
+
+ which-pm@3.0.0:
+ dependencies:
+ load-yaml-file: 0.2.0
+
+ which-typed-array@1.1.18:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.8
+ call-bound: 1.0.3
+ for-each: 0.3.3
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ which@3.0.1:
+ dependencies:
+ isexe: 2.0.0
+
+ widest-line@5.0.0:
+ dependencies:
+ string-width: 7.2.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+
+ wrap-ansi@9.0.0:
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+
+ wrappy@1.0.2: {}
+
+ ws@7.5.10: {}
+
+ xtend@4.0.2: {}
+
+ xxhash-wasm@1.1.0: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yallist@4.0.0: {}
+
+ yaml@2.6.1: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
+
+ yocto-queue@1.1.1: {}
+
+ zod-to-json-schema@3.24.1(zod@3.24.1):
+ dependencies:
+ zod: 3.24.1
+
+ zod-to-ts@1.2.0(typescript@5.7.2)(zod@3.24.1):
+ dependencies:
+ typescript: 5.7.2
+ zod: 3.24.1
+
+ zod@3.24.1: {}
+
+ zwitch@2.0.4: {}
diff --git a/postcss.config.cjs b/postcss.config.cjs
new file mode 100644
index 0000000..0426792
--- /dev/null
+++ b/postcss.config.cjs
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
\ No newline at end of file
diff --git a/tailwind.config.ts b/tailwind.config.ts
new file mode 100644
index 0000000..89ffb90
--- /dev/null
+++ b/tailwind.config.ts
@@ -0,0 +1,99 @@
+/* eslint-disable @typescript-eslint/no-require-imports */
+import type { Config } from "tailwindcss";
+
+export default {
+ content: ["./app/**/*.{js,jsx,ts,tsx}"],
+ theme: {
+ extend: {
+ colors: {
+ brand: "#8B1717",
+ },
+ animation: {
+ "fade-in-up": "fade-in-up 0.3s ease-in forwards",
+ "fade-in": "fade-in 0.3s ease-in forwards",
+ },
+ screens: {
+ notouch: { raw: "(hover: hover)" },
+ xxxs: "300px",
+ xxs: "350px",
+ xs: "480px",
+ "2xl": "1440px",
+ },
+ keyframes: {
+ "fade-in-up": {
+ "0%": {
+ opacity: "0",
+ transform: "translateY(5rem)",
+ },
+ "100%": {
+ opacity: "1",
+ transform: "translateY(0)",
+ },
+ },
+ "fade-in": {
+ "0%": {
+ opacity: "0",
+ },
+ "100%": {
+ opacity: "1",
+ },
+ },
+ },
+ fontFamily: {
+ sans: ["Schibsted Grotesk", "sans-serif"],
+ serif: ["Playfair Display", "serif"],
+ },
+ typography: (theme) => ({
+ DEFAULT: {
+ css: {
+ "--tw-prose-links": theme("colors.brand"),
+ fontFamily: theme("fontFamily.sans").join(","),
+ color: theme("colors.gray.700"),
+ maxWidth: "100%",
+ width: "70ch",
+ a: {
+ textDecoration: "underline",
+ textUnderlineOffset: "3px",
+ color: theme("colors.brand"),
+ "&:hover": {
+ textDecoration: "underline",
+ },
+ },
+ "h1,h2,h3,h4": {
+ fontFamily: theme("fontFamily.serif").join(","),
+ fontWeight: "600",
+ },
+ h1: {
+ fontSize: theme("fontSize.4xl"),
+ },
+ h2: {
+ fontSize: theme("fontSize.4xl"),
+ marginTop: theme("spacing.10"),
+ marginBottom: theme("spacing.3"),
+ },
+ h3: {
+ fontSize: theme("fontSize.2xl"),
+ },
+ strong: {
+ fontWeight: "800",
+ },
+ },
+ },
+ lg: {
+ css: {
+ h2: {
+ fontSize: theme("fontSize.5xl"),
+ marginTop: theme("spacing.10"),
+ marginBottom: theme("spacing.3"),
+ },
+ h3: {
+ marginTop: theme("spacing.6"),
+ marginBottom: theme("spacing.3"),
+ },
+ },
+ },
+ }),
+ },
+ },
+ plugins: [require("@tailwindcss/typography")],
+} satisfies Config;
diff --git a/tsconfig.json b/tsconfig.json
index d78f81e..641bbeb 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,3 +1,31 @@
{
- "extends": "astro/tsconfigs/base"
+ "include": [
+ "remix.env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".contentlayer/generated"
+ ],
+ "compilerOptions": {
+ "lib": ["DOM", "DOM.Iterable", "ES2022"],
+ "types": ["@remix-run/node", "vite/client"],
+ "isolatedModules": true,
+ "esModuleInterop": true,
+ "jsx": "react-jsx",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "resolveJsonModule": true,
+ "target": "ES2022",
+ "strict": true,
+ "allowJs": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "baseUrl": ".",
+ "paths": {
+ "~/*": ["./app/*"],
+ "contentlayer/generated": ["./.contentlayer/generated"]
+ },
+
+ // Vite takes care of building everything, not tsc.
+ "noEmit": true
+ }
}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..e4e8cef
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,24 @@
+import { vitePlugin as remix } from "@remix-run/dev";
+import { defineConfig } from "vite";
+import tsconfigPaths from "vite-tsconfig-paths";
+
+declare module "@remix-run/node" {
+ interface Future {
+ v3_singleFetch: true;
+ }
+}
+
+export default defineConfig({
+ plugins: [
+ remix({
+ future: {
+ v3_fetcherPersist: true,
+ v3_relativeSplatPath: true,
+ v3_throwAbortReason: true,
+ v3_singleFetch: true,
+ v3_lazyRouteDiscovery: true,
+ },
+ }),
+ tsconfigPaths(),
+ ],
+});