Sfoglia il codice sorgente

init: new product brief to geo website

ryan 4 mesi fa
commit
a75ade783c
62 ha cambiato i file con 12926 aggiunte e 0 eliminazioni
  1. 4 0
      .gitignore
  2. 75 0
      website/.astro/collections/blog.schema.json
  3. 1 0
      website/.astro/content-assets.mjs
  4. 1 0
      website/.astro/content-modules.mjs
  5. 209 0
      website/.astro/content.d.ts
  6. 0 0
      website/.astro/data-store.json
  7. 5 0
      website/.astro/settings.json
  8. 2 0
      website/.astro/types.d.ts
  9. 78 0
      website/ARCHITECTURE.md
  10. 40 0
      website/astro.config.mjs
  11. 496 0
      website/convert_to_docx.py
  12. 6559 0
      website/package-lock.json
  13. 22 0
      website/package.json
  14. 6 0
      website/postcss.config.js
  15. 10 0
      website/public/favicon.svg
  16. 35 0
      website/public/llms.txt
  17. 23 0
      website/public/robots.txt
  18. 51 0
      website/src/components/BlogCard.astro
  19. 70 0
      website/src/components/CTASection.astro
  20. 39 0
      website/src/components/FeatureCard.astro
  21. 80 0
      website/src/components/Footer.astro
  22. 131 0
      website/src/components/Header.astro
  23. 36 0
      website/src/components/LanguagePicker.astro
  24. 93 0
      website/src/components/SEOHead.astro
  25. 13 0
      website/src/components/StructuredData.astro
  26. 86 0
      website/src/content/blog/zh/ai-enterprise-q-dilemma.md
  27. 85 0
      website/src/content/blog/zh/vibe-coding-guide.md
  28. 77 0
      website/src/content/blog/zh/what-is-software-3.md
  29. 19 0
      website/src/content/config.ts
  30. 229 0
      website/src/data/geo-keywords.ts
  31. 78 0
      website/src/data/navigation.ts
  32. 26 0
      website/src/data/site-config.ts
  33. 94 0
      website/src/i18n/ui.ts
  34. 69 0
      website/src/i18n/utils.ts
  35. 102 0
      website/src/layouts/BaseLayout.astro
  36. 43 0
      website/src/pages/[lang]/404.astro
  37. 124 0
      website/src/pages/[lang]/about.astro
  38. 100 0
      website/src/pages/[lang]/blog/[slug].astro
  39. 62 0
      website/src/pages/[lang]/blog/index.astro
  40. 69 0
      website/src/pages/[lang]/case-studies/index.astro
  41. 106 0
      website/src/pages/[lang]/contact.astro
  42. 105 0
      website/src/pages/[lang]/faq.astro
  43. 83 0
      website/src/pages/[lang]/glossary.astro
  44. 392 0
      website/src/pages/[lang]/index.astro
  45. 147 0
      website/src/pages/[lang]/product/agent-harness.astro
  46. 63 0
      website/src/pages/[lang]/product/fmode-core.astro
  47. 171 0
      website/src/pages/[lang]/product/harness-engineering.astro
  48. 69 0
      website/src/pages/[lang]/product/index.astro
  49. 63 0
      website/src/pages/[lang]/product/skills-hub.astro
  50. 148 0
      website/src/pages/[lang]/product/vibe-coding.astro
  51. 78 0
      website/src/pages/[lang]/solutions/enterprise.astro
  52. 52 0
      website/src/pages/[lang]/solutions/index.astro
  53. 62 0
      website/src/pages/[lang]/solutions/startups.astro
  54. 27 0
      website/src/pages/index.astro
  55. 64 0
      website/src/styles/global.css
  56. 201 0
      website/src/utils/seo.ts
  57. 50 0
      website/tailwind.config.mjs
  58. 16 0
      website/tsconfig.json
  59. 339 0
      产品介绍/FmodeStudio驾驭工程站产品介绍.txt
  60. 1 0
      产品介绍/README.md
  61. 717 0
      产品介绍/未来飞马-让企业驾驭AI-202603.txt
  62. 630 0
      产品独立站搭建手册-Claude版.md

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+website/node_modules/
+website/dist/
+*.pptx
+*.docx

+ 75 - 0
website/.astro/collections/blog.schema.json

@@ -0,0 +1,75 @@
+{
+  "$ref": "#/definitions/blog",
+  "definitions": {
+    "blog": {
+      "type": "object",
+      "properties": {
+        "title": {
+          "type": "string"
+        },
+        "description": {
+          "type": "string"
+        },
+        "publishDate": {
+          "anyOf": [
+            {
+              "type": "string",
+              "format": "date-time"
+            },
+            {
+              "type": "string",
+              "format": "date"
+            },
+            {
+              "type": "integer",
+              "format": "unix-time"
+            }
+          ]
+        },
+        "modifiedDate": {
+          "anyOf": [
+            {
+              "type": "string",
+              "format": "date-time"
+            },
+            {
+              "type": "string",
+              "format": "date"
+            },
+            {
+              "type": "integer",
+              "format": "unix-time"
+            }
+          ]
+        },
+        "author": {
+          "type": "string",
+          "default": "未来飞马团队"
+        },
+        "tags": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "default": []
+        },
+        "readingTime": {
+          "type": "string"
+        },
+        "image": {
+          "type": "string"
+        },
+        "$schema": {
+          "type": "string"
+        }
+      },
+      "required": [
+        "title",
+        "description",
+        "publishDate"
+      ],
+      "additionalProperties": false
+    }
+  },
+  "$schema": "http://json-schema.org/draft-07/schema#"
+}

+ 1 - 0
website/.astro/content-assets.mjs

@@ -0,0 +1 @@
+export default new Map();

+ 1 - 0
website/.astro/content-modules.mjs

@@ -0,0 +1 @@
+export default new Map();

+ 209 - 0
website/.astro/content.d.ts

@@ -0,0 +1,209 @@
+declare module 'astro:content' {
+	export interface RenderResult {
+		Content: import('astro/runtime/server/index.js').AstroComponentFactory;
+		headings: import('astro').MarkdownHeading[];
+		remarkPluginFrontmatter: Record<string, any>;
+	}
+	interface Render {
+		'.md': Promise<RenderResult>;
+	}
+
+	export interface RenderedContent {
+		html: string;
+		metadata?: {
+			imagePaths: Array<string>;
+			[key: string]: unknown;
+		};
+	}
+}
+
+declare module 'astro:content' {
+	type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
+
+	export type CollectionKey = keyof AnyEntryMap;
+	export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
+
+	export type ContentCollectionKey = keyof ContentEntryMap;
+	export type DataCollectionKey = keyof DataEntryMap;
+
+	type AllValuesOf<T> = T extends any ? T[keyof T] : never;
+	type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
+		ContentEntryMap[C]
+	>['slug'];
+
+	export type ReferenceDataEntry<
+		C extends CollectionKey,
+		E extends keyof DataEntryMap[C] = string,
+	> = {
+		collection: C;
+		id: E;
+	};
+	export type ReferenceContentEntry<
+		C extends keyof ContentEntryMap,
+		E extends ValidContentEntrySlug<C> | (string & {}) = string,
+	> = {
+		collection: C;
+		slug: E;
+	};
+	export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
+		collection: C;
+		id: string;
+	};
+
+	/** @deprecated Use `getEntry` instead. */
+	export function getEntryBySlug<
+		C extends keyof ContentEntryMap,
+		E extends ValidContentEntrySlug<C> | (string & {}),
+	>(
+		collection: C,
+		// Note that this has to accept a regular string too, for SSR
+		entrySlug: E,
+	): E extends ValidContentEntrySlug<C>
+		? Promise<CollectionEntry<C>>
+		: Promise<CollectionEntry<C> | undefined>;
+
+	/** @deprecated Use `getEntry` instead. */
+	export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
+		collection: C,
+		entryId: E,
+	): Promise<CollectionEntry<C>>;
+
+	export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
+		collection: C,
+		filter?: (entry: CollectionEntry<C>) => entry is E,
+	): Promise<E[]>;
+	export function getCollection<C extends keyof AnyEntryMap>(
+		collection: C,
+		filter?: (entry: CollectionEntry<C>) => unknown,
+	): Promise<CollectionEntry<C>[]>;
+
+	export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
+		collection: C,
+		filter?: LiveLoaderCollectionFilterType<C>,
+	): Promise<
+		import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
+	>;
+
+	export function getEntry<
+		C extends keyof ContentEntryMap,
+		E extends ValidContentEntrySlug<C> | (string & {}),
+	>(
+		entry: ReferenceContentEntry<C, E>,
+	): E extends ValidContentEntrySlug<C>
+		? Promise<CollectionEntry<C>>
+		: Promise<CollectionEntry<C> | undefined>;
+	export function getEntry<
+		C extends keyof DataEntryMap,
+		E extends keyof DataEntryMap[C] | (string & {}),
+	>(
+		entry: ReferenceDataEntry<C, E>,
+	): E extends keyof DataEntryMap[C]
+		? Promise<DataEntryMap[C][E]>
+		: Promise<CollectionEntry<C> | undefined>;
+	export function getEntry<
+		C extends keyof ContentEntryMap,
+		E extends ValidContentEntrySlug<C> | (string & {}),
+	>(
+		collection: C,
+		slug: E,
+	): E extends ValidContentEntrySlug<C>
+		? Promise<CollectionEntry<C>>
+		: Promise<CollectionEntry<C> | undefined>;
+	export function getEntry<
+		C extends keyof DataEntryMap,
+		E extends keyof DataEntryMap[C] | (string & {}),
+	>(
+		collection: C,
+		id: E,
+	): E extends keyof DataEntryMap[C]
+		? string extends keyof DataEntryMap[C]
+			? Promise<DataEntryMap[C][E]> | undefined
+			: Promise<DataEntryMap[C][E]>
+		: Promise<CollectionEntry<C> | undefined>;
+	export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
+		collection: C,
+		filter: string | LiveLoaderEntryFilterType<C>,
+	): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
+
+	/** Resolve an array of entry references from the same collection */
+	export function getEntries<C extends keyof ContentEntryMap>(
+		entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
+	): Promise<CollectionEntry<C>[]>;
+	export function getEntries<C extends keyof DataEntryMap>(
+		entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
+	): Promise<CollectionEntry<C>[]>;
+
+	export function render<C extends keyof AnyEntryMap>(
+		entry: AnyEntryMap[C][string],
+	): Promise<RenderResult>;
+
+	export function reference<C extends keyof AnyEntryMap>(
+		collection: C,
+	): import('astro/zod').ZodEffects<
+		import('astro/zod').ZodString,
+		C extends keyof ContentEntryMap
+			? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
+			: ReferenceDataEntry<C, keyof DataEntryMap[C]>
+	>;
+	// Allow generic `string` to avoid excessive type errors in the config
+	// if `dev` is not running to update as you edit.
+	// Invalid collection names will be caught at build time.
+	export function reference<C extends string>(
+		collection: C,
+	): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
+
+	type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
+	type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
+		ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
+	>;
+
+	type ContentEntryMap = {
+		
+	};
+
+	type DataEntryMap = {
+		"blog": Record<string, {
+  id: string;
+  render(): Render[".md"];
+  slug: string;
+  body: string;
+  collection: "blog";
+  data: InferEntrySchema<"blog">;
+  rendered?: RenderedContent;
+  filePath?: string;
+}>;
+
+	};
+
+	type AnyEntryMap = ContentEntryMap & DataEntryMap;
+
+	type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
+		infer TData,
+		infer TEntryFilter,
+		infer TCollectionFilter,
+		infer TError
+	>
+		? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
+		: { data: never; entryFilter: never; collectionFilter: never; error: never };
+	type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
+	type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
+	type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
+	type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
+
+	type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
+		LiveContentConfig['collections'][C]['schema'] extends undefined
+			? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
+			: import('astro/zod').infer<
+					Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
+				>;
+	type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
+		ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
+	type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
+		ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
+	type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
+		LiveContentConfig['collections'][C]['loader']
+	>;
+
+	export type ContentConfig = typeof import("./../src/content/config.js");
+	export type LiveContentConfig = never;
+}

File diff suppressed because it is too large
+ 0 - 0
website/.astro/data-store.json


+ 5 - 0
website/.astro/settings.json

@@ -0,0 +1,5 @@
+{
+	"_variables": {
+		"lastUpdateCheck": 1780241071438
+	}
+}

+ 2 - 0
website/.astro/types.d.ts

@@ -0,0 +1,2 @@
+/// <reference types="astro/client" />
+/// <reference path="content.d.ts" />

+ 78 - 0
website/ARCHITECTURE.md

@@ -0,0 +1,78 @@
+# 未来飞马 (Fmode) 产品独立站 - 架构设计
+
+## 品牌核心
+- **品牌名**: 未来飞马 / Fmode
+- **产品**: FmodeStudio 驾驭工程工作站
+- **Slogan**: 让人类驾驭AI / Simplfying AI, Harnessing AI
+- **核心范式**: Software 3.0 — Agent = 基础模型 + Harness驾驭层
+
+## 技术栈
+- **框架**: Astro 5.x (SSG模式)
+- **样式**: Tailwind CSS 3.x
+- **i18n**: 自定义i18n方案 (基于Astro动态路由)
+- **SEO**: @astrojs/sitemap, JSON-LD结构化数据
+- **部署**: 静态导出,支持Vercel/Cloudflare Pages
+
+## 多语言策略
+- 中文 (zh) — 主要市场
+- 英文 (en) — 国际市场
+- URL结构: `/[lang]/page` (子目录式)
+- 根路径 `/` 自动检测浏览器语言并重定向
+
+## URL结构
+```
+/                           → 语言检测重定向
+/[lang]/                    → 首页
+/[lang]/product/            → 产品总览
+/[lang]/product/harness-engineering  → 驾驭工程
+/[lang]/product/vibe-coding          → Vibe Coding
+/[lang]/product/agent-harness        → Agent驾驭
+/[lang]/product/skills-hub           → 技能包管理
+/[lang]/product/fmode-core           → 全模型底座
+/[lang]/solutions/           → 解决方案总览
+/[lang]/solutions/enterprise          → 大中型企业
+/[lang]/solutions/startups            → 创业公司
+/[lang]/solutions/traditional         → 传统企业
+/[lang]/solutions/outsourcing         → 软件外包
+/[lang]/solutions/developers          → 独立开发者
+/[lang]/blog/                → 博客列表
+/[lang]/blog/[slug]          → 文章详情
+/[lang]/faq/                 → 常见问题
+/[lang]/glossary/            → 术语表
+/[lang]/about/               → 关于我们
+/[lang]/contact/             → 联系我们
+/[lang]/case-studies/        → 案例研究
+```
+
+## GEO策略
+1. **llms.txt**: 根目录部署,告知AI爬虫站点结构
+2. **JSON-LD**: 每页注入对应的Schema.org结构化数据
+3. **hreflang**: 所有页面配置正确的语言标注
+4. **内容集群**: 以核心概念为中心构建主题集群
+5. **FAQ Schema**: FAQ页面使用FAQPage结构化数据
+6. **语义HTML**: 使用article, section, nav等语义标签
+7. **SSOT页面**: 为核心概念建立单一事实来源
+
+## 核心GEO关键词集群
+
+### 集群1: Software 3.0 & 驾驭工程
+- Software 3.0 是什么
+- Harness Engineering 驾驭工程
+- AI工程化三代范式
+- Agent = 基础模型 + Harness
+
+### 集群2: 企业AI落地
+- 企业如何驾驭AI
+- AI从Demo到生产
+- AI Agent落地实践
+- 降低AI应用成本
+
+### 集群3: Vibe Coding
+- Vibe Coding 是什么
+- AI代码生成到生产级应用
+- 全栈AI开发
+
+### 集群4: 行业解决方案
+- 跨境电商AI运营
+- 企业数字化转型AI
+- AI新品开发VOC分析

+ 40 - 0
website/astro.config.mjs

@@ -0,0 +1,40 @@
+// @ts-check
+import { defineConfig } from 'astro/config';
+import sitemap from '@astrojs/sitemap';
+import { fileURLToPath } from 'url';
+
+const SITE_URL = 'https://fmode.cn';
+const __dirname = fileURLToPath(new URL('.', import.meta.url));
+
+export default defineConfig({
+  site: SITE_URL,
+  integrations: [
+    sitemap({
+      i18n: {
+        defaultLocale: 'zh',
+        locales: {
+          zh: 'zh-CN',
+          en: 'en-US',
+        },
+      },
+    }),
+  ],
+  vite: {
+    resolve: {
+      alias: {
+        '@': fileURLToPath(new URL('./src', import.meta.url)),
+        '@components': fileURLToPath(new URL('./src/components', import.meta.url)),
+        '@layouts': fileURLToPath(new URL('./src/layouts', import.meta.url)),
+        '@i18n': fileURLToPath(new URL('./src/i18n', import.meta.url)),
+        '@data': fileURLToPath(new URL('./src/data', import.meta.url)),
+        '@utils': fileURLToPath(new URL('./src/utils', import.meta.url)),
+        '@assets': fileURLToPath(new URL('./src/assets', import.meta.url)),
+      },
+    },
+  },
+  markdown: {
+    shikiConfig: {
+      theme: 'github-dark',
+    },
+  },
+});

+ 496 - 0
website/convert_to_docx.py

@@ -0,0 +1,496 @@
+#!/usr/bin/env python3
+"""Convert the user manual markdown to a formatted DOCX file."""
+
+from docx import Document
+from docx.shared import Pt, Cm, RGBColor
+from docx.enum.text import WD_ALIGN_PARAGRAPH
+import re
+
+def create_manual():
+    doc = Document()
+
+    # Set default style
+    style = doc.styles['Normal']
+    style.font.name = '微软雅黑'
+    style.font.size = Pt(11)
+    style.font.color.rgb = RGBColor(0x33, 0x33, 0x33)
+    style.paragraph_format.space_after = Pt(6)
+    style.paragraph_format.line_spacing = 1.5
+
+    def h(text, level=1):
+        heading = doc.add_heading(text, level=level)
+        for run in heading.runs:
+            run.font.name = '微软雅黑'
+        return heading
+
+    def p(text, bold=False, size=None, color=None, align=None, indent=False):
+        para = doc.add_paragraph()
+        run = para.add_run(text)
+        if bold: run.bold = True
+        if size: run.font.size = Pt(size)
+        if color: run.font.color.rgb = RGBColor(*color)
+        if align: para.alignment = align
+        if indent: para.paragraph_format.left_indent = Cm(1)
+        run.font.name = '微软雅黑'
+        return para
+
+    def code(text):
+        para = doc.add_paragraph()
+        para.paragraph_format.left_indent = Cm(1)
+        para.paragraph_format.space_before = Pt(4)
+        para.paragraph_format.space_after = Pt(4)
+        run = para.add_run(text)
+        run.font.name = 'Consolas'
+        run.font.size = Pt(9)
+        run.font.color.rgb = RGBColor(0x1a, 0x1a, 0x2e)
+        return para
+
+    def tbl(headers, rows):
+        table = doc.add_table(rows=1 + len(rows), cols=len(headers))
+        table.style = 'Light Grid Accent 1'
+        for i, h_text in enumerate(headers):
+            cell = table.rows[0].cells[i]
+            cell.text = h_text
+            for cell_p in cell.paragraphs:
+                for r in cell_p.runs:
+                    r.bold = True
+                    r.font.name = '微软雅黑'
+                    r.font.size = Pt(10)
+        for ri, row in enumerate(rows):
+            for ci, cell_text in enumerate(row):
+                cell = table.rows[ri+1].cells[ci]
+                cell.text = str(cell_text)
+                for cell_p in cell.paragraphs:
+                    for r in cell_p.runs:
+                        r.font.name = '微软雅黑'
+                        r.font.size = Pt(10)
+        doc.add_paragraph()
+        return table
+
+    def tip(text):
+        para = doc.add_paragraph()
+        para.paragraph_format.left_indent = Cm(1)
+        run = para.add_run('💡 ' + text)
+        run.font.name = '微软雅黑'
+        run.font.size = Pt(10)
+        run.font.color.rgb = RGBColor(0x25, 0x63, 0xeb)
+        return para
+
+    def image_placeholder(text):
+        para = doc.add_paragraph()
+        para.alignment = WD_ALIGN_PARAGRAPH.CENTER
+        para.paragraph_format.space_before = Pt(12)
+        para.paragraph_format.space_after = Pt(12)
+        run = para.add_run(f'[此处插入截图:{text}]')
+        run.font.name = '微软雅黑'
+        run.font.size = Pt(10)
+        run.font.color.rgb = RGBColor(0x93, 0x3a, 0xea)
+        run.italic = True
+        run.bold = True
+        return para
+
+    def page_break():
+        doc.add_page_break()
+
+    # ===== TITLE PAGE =====
+    doc.add_paragraph()
+    doc.add_paragraph()
+    title_para = doc.add_paragraph()
+    title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    title_run = title_para.add_run('用 Claude Code 搭建企业产品独立站')
+    title_run.font.size = Pt(28)
+    title_run.font.color.rgb = RGBColor(0x0f, 0x17, 0x2a)
+    title_run.bold = True
+    title_run.font.name = '微软雅黑'
+
+    subtitle_para = doc.add_paragraph()
+    subtitle_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    subtitle_run = subtitle_para.add_run('零代码使用手册')
+    subtitle_run.font.size = Pt(18)
+    subtitle_run.font.color.rgb = RGBColor(0x25, 0x63, 0xeb)
+    subtitle_run.bold = True
+    subtitle_run.font.name = '微软雅黑'
+
+    doc.add_paragraph()
+    p('v1.0 · 2026年5月', size=10, color=(0x94, 0xa3, 0xb8), align=WD_ALIGN_PARAGRAPH.CENTER)
+    doc.add_paragraph()
+    p('适用人群:没有编程基础的市场、运营、产品经理', align=WD_ALIGN_PARAGRAPH.CENTER)
+    p('所需工具:Claude Code(命令行版)+ 产品介绍 PPT', align=WD_ALIGN_PARAGRAPH.CENTER)
+    p('产出成果:一个被 AI 搜索引擎收录的多语言产品官网', align=WD_ALIGN_PARAGRAPH.CENTER)
+    p('全程耗时:约 1-2 小时(含 AI 自动生成时间)', align=WD_ALIGN_PARAGRAPH.CENTER)
+
+    page_break()
+
+    # ===== TABLE OF CONTENTS =====
+    h('目录', level=1)
+    toc_items = [
+        '准备工作:你需要什么',
+        '第一步:准备产品资料',
+        '第二步:让 AI 学习你的产品',
+        '第三步:让 AI 研究 SEO 策略',
+        '第四步:让 AI 设计网站架构',
+        '第五步:让 AI 编写网站',
+        '第六步:检查网站效果',
+        '第七步:发现样式问题并修复',
+        '第八步:部署上线(可选)',
+        '常见问题排查',
+        '附录 A:给 AI 的完整提示词合集',
+        '附录 B:我们的实战案例复盘',
+        '附录 C:GEO 优化清单',
+        '附录 D:关键技术概念解释',
+    ]
+    for i, item in enumerate(toc_items):
+        p(f'{i+1}. {item}', size=11)
+
+    page_break()
+
+    # ===== SECTION 1: 准备工作 =====
+    h('1. 准备工作:你需要什么', level=1)
+    h('硬件/软件要求', level=2)
+    tbl(['项目', '要求'], [
+        ['电脑', 'Windows / Mac 均可'],
+        ['网络', '能正常访问互联网'],
+        ['Claude Code', '已安装并登录'],
+        ['Node.js', 'Claude Code 自带,无需单独安装'],
+    ])
+
+    h('材料要求', level=2)
+    tbl(['材料', '格式', '说明'], [
+        ['产品介绍 PPT', '.pptx', '产品定位、功能、品牌故事等'],
+        ['品牌手册', '.pptx 或 .pdf', '愿景、使命、价值观等'],
+    ])
+
+    image_placeholder('准备就绪的文件夹,内含 PPT 文件')
+
+    h('确认 Claude Code 已启动', level=2)
+    p('打开终端(Windows 按 Win+R,输入 cmd,回车),输入:')
+    code('claude')
+    p('看到欢迎界面说明启动成功。')
+    image_placeholder('Claude Code 启动后的欢迎界面')
+
+    # ===== SECTION 2 =====
+    h('2. 第一步:准备产品资料', level=1)
+    h('操作目标', level=2)
+    p('将 PPT 产品资料放到一个文件夹里,让 Claude Code 能找到它们。')
+
+    h('步骤 2.1:创建文件夹', level=2)
+    p('在电脑上创建一个文件夹来存放所有材料。例如:')
+    code('D:\\我的项目\\产品介绍\\')
+    p('将你的产品 PPT 文件放入这个文件夹。')
+    image_placeholder('文件夹中放置了 PPT 文件')
+
+    h('步骤 2.2:确认工作目录', level=2)
+    p('在 Claude Code 中,输入以下命令查看当前工作目录:')
+    code('你现在在哪个文件夹工作?')
+    p('Claude 会告诉你当前的工作路径,记下这个路径。')
+    image_placeholder('Claude 回复当前工作路径')
+
+    # ===== SECTION 3 =====
+    h('3. 第二步:让 AI 学习你的产品', level=1)
+    h('操作目标', level=2)
+    p('让 Claude 读取你的 PPT 资料,深入理解你的产品、品牌和业务。')
+
+    h('步骤 3.1:发送第一个提示词', level=2)
+    p('将以下提示词完整复制到 Claude Code 对话框中,替换 [文件夹路径] 为实际路径:')
+    code('请读取我放在 [你的产品介绍文件夹路径] 目录下的所有 PPT 文件,\n深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。\n然后帮我总结:\n1. 产品的核心定位是什么?\n2. 产品解决什么痛点?\n3. 产品有哪些核心功能?\n4. 目标客户是谁?')
+    image_placeholder('在 Claude Code 中粘贴提示词')
+
+    h('步骤 3.2:确认 AI 的理解', level=2)
+    p('Claude 会输出对产品的理解摘要。仔细阅读,确认理解正确。')
+    p('如果 AI 有理解偏差,直接告诉它:"第 2 点不太对,正确的理解应该是……"')
+    image_placeholder('Claude 输出的产品理解摘要')
+
+    # ===== SECTION 4 =====
+    h('4. 第三步:让 AI 研究 SEO 策略', level=1)
+    h('操作目标', level=2)
+    p('让 Claude 搜索互联网上关于 GEO(生成式引擎优化)的最佳实践。')
+
+    h('为什么这步很重要?', level=2)
+    p('传统 SEO 是让 Google 收录你的网站。但现在越来越多用户用 ChatGPT、豆包等 AI 工具搜索信息。GEO 就是让你的网站在 AI 回答中被引用和推荐的技巧。')
+
+    h('步骤 4.1:复制以下提示词', level=2)
+    code('请帮我做三件事:\n\n1. 搜索 GEO(Generative Engine Optimization)的最佳实践和最新策略\n\n2. 搜索 Astro 框架制作多语言网站的 SEO 最佳实践\n\n3. 基于你对我们产品的理解,梳理目标用户可能会搜索什么内容、\n   问什么问题,建立一个问题库\n\n然后把以上内容整理成一个 GEO 优化方案。')
+    image_placeholder('粘贴 GEO 研究提示词')
+
+    h('步骤 4.2:等待 AI 完成研究', level=2)
+    p('Claude 会自动搜索多个网页,阅读内容,然后整理出一份完整的 GEO 方案。约需 1-3 分钟。')
+    image_placeholder('Claude 输出的 GEO 优化方案摘要')
+
+    h('步骤 4.3:确认方案', level=2)
+    p('阅读 AI 输出的内容,重点关注:')
+    p('• 关键词列表:用户搜索时会用的词', indent=True)
+    p('• 问题库:用户可能会问的问题', indent=True)
+    p('• 内容建议:网站需要包含的内容', indent=True)
+
+    # ===== SECTION 5 =====
+    h('5. 第四步:让 AI 设计网站架构', level=1)
+    h('操作目标', level=2)
+    p('让 Claude 规划网站的页面结构、导航、每个页面的内容。')
+
+    h('具体步骤', level=2)
+    p('复制以下提示词,一次性发送:')
+    code('基于你对产品资料的学习和 GEO 研究,现在帮我规划完整的网站架构。\n\n请完成以下工作:\n1. 设计网站的页面地图(sitemap),列出所有页面\n2. 设计中英文双语的 URL 结构\n3. 规划每个页面的核心内容\n4. 列出所有需要做的 GEO 优化措施\n5. 把规划写入一个 ARCHITECTURE.md 文件\n\n输出格式要清晰,让我这个不懂技术的人也能看明白。')
+    image_placeholder('Claude 输出的网站架构设计')
+
+    # ===== SECTION 6 =====
+    h('6. 第五步:让 AI 编写网站', level=1)
+    h('操作目标', level=2)
+    p('让 Claude 自动生成整个网站的代码。')
+
+    h('步骤 6.1:发送生成指令', level=2)
+    p('复制以下提示词,确保一次性完整发送:')
+    code('现在请开始实际的网站搭建。\n\n要求:\n1. 使用 Astro 框架\n2. 支持中英文双语(/zh/ 和 /en/)\n3. 包含完整的 GEO 优化(结构化数据、hreflang、FAQ schema 等)\n4. 创建一个 website 目录存放所有代码\n5. 所有代码一次性生成,确保完整可运行\n\n请在开始前先创建任务清单,然后逐步执行每个任务,\n直到网站可以正常构建和预览。')
+    image_placeholder('粘贴网站生成提示词')
+
+    h('步骤 6.2:等待代码生成', level=2)
+    p('Claude 会自动完成:创建项目结构、编写所有页面、配置 SEO/GEO 优化、设置中英文双语、自动安装依赖包、构建并启动网站。约需 10-20 分钟。')
+    image_placeholder('Claude 正在生成代码的进度显示')
+
+    h('步骤 6.3:网站生成完成', level=2)
+    p('构建成功后会看到:')
+    code('38 page(s) built in 2.32s\nComplete!')
+    image_placeholder('构建成功的输出信息')
+
+    # ===== SECTION 7 =====
+    h('7. 第六步:检查网站效果', level=1)
+    h('操作目标', level=2)
+    p('在浏览器中查看生成的网站。')
+
+    h('步骤 7.1:让 Claude 打开浏览器', level=2)
+    code('帮我用浏览器打开网站首页看看效果')
+    image_placeholder('浏览器中打开的网站首页')
+
+    h('步骤 7.2:检查清单', level=2)
+    tbl(['检查项', '正常标准', '✅/❌'], [
+        ['页面排版', '文字、图片排列整齐,无重叠', ''],
+        ['导航菜单', '能正常展开,链接可点击', ''],
+        ['语言切换', '点"EN"能切换到英文版', ''],
+        ['手机显示', '手机浏览器中正常显示', ''],
+        ['页面加载速度', '2 秒内打开', ''],
+    ])
+
+    # ===== SECTION 8 =====
+    h('8. 第七步:发现样式问题并修复', level=1)
+    p('这是本次实战中实际遇到的问题,供你参考。')
+
+    h('问题描述', level=2)
+    p('网站打开后只有文字,排版完全乱了。')
+    image_placeholder('排版错乱的网站')
+
+    h('原因分析', level=2)
+    p('Claude 使用的技术方案中引用了海外 CDN 资源(Google Fonts、Partytown 等),国内网络无法访问。')
+
+    h('修复步骤', level=2)
+    p('直接复制以下提示词给 Claude:')
+    code('网页打开后排版是乱的,只有文字没有样式。\n请你检查是否引用了海外 CDN 资源(如 Google Fonts、Partytown 等),\n把这些都替换为国内可用的替代方案或完全移除。\n修复后重新构建并打开浏览器给我看。\n\n另外,请建立一条规则记住:以后在国内网络环境下做项目,\n禁止使用任何海外 CDN 资源。')
+    image_placeholder('粘贴修复提示词')
+
+    p('Claude 会自动:')
+    p('1. 切换到 Tailwind CSS v3(国内稳定版本)', indent=True)
+    p('2. 移除 Partytown 组件', indent=True)
+    p('3. 移除 Google Fonts 引用', indent=True)
+    p('4. 重新安装依赖并构建', indent=True)
+    p('5. 建立持久化规则,以后不会再犯', indent=True)
+    image_placeholder('修复后排版正常的网站')
+
+    # ===== SECTION 9 =====
+    h('9. 第八步:部署上线(可选)', level=1)
+    h('操作目标', level=2)
+    p('将网站发布到互联网上,让所有人都能访问。')
+
+    h('推荐方案', level=2)
+    tbl(['平台', '费用', '适合人群', '操作难度'], [
+        ['Vercel', '免费额度够用', '所有人', '⭐ 最简单'],
+        ['Cloudflare Pages', '免费', '有小技术基础', '⭐⭐'],
+        ['GitHub Pages', '免费', '有 GitHub 账号', '⭐⭐'],
+    ])
+
+    h('使用 Vercel 部署(推荐新手)', level=2)
+    code('帮我把这个网站部署到 Vercel 上。')
+    p('Claude 会引导你完成:注册 Vercel 账号、安装 Vercel CLI、一键部署。')
+
+    h('绑定自己的域名', level=2)
+    code('网站部署好了,我想绑定自己的域名 www.我的公司.com,\n请告诉我怎么做?')
+
+    # ===== SECTION 10 =====
+    h('10. 常见问题排查', level=1)
+
+    h('Q1:生成的代码有错误,网站打不开', level=2)
+    code('构建时报错了,错误信息如下:\n[粘贴错误信息]\n请帮我修复。')
+
+    h('Q2:网站内容需要修改', level=2)
+    code('请把首页的标题从"XX"改为"YY",并添加一段关于我们新产品的介绍。')
+
+    h('Q3:想增加新的页面', level=2)
+    code('请帮我在网站上增加一个"客户案例"页面,列出以下 3 个案例:\n1. [案例1名称]:[简述]\n2. [案例2名称]:[简述]\n3. [案例3名称]:[简述]')
+
+    h('Q4:想让网站更好看', level=2)
+    code('首页的配色太单调了,能否换成更现代的风格?\n主题色改为蓝色系 (#2563eb),搭配紫色点缀。')
+
+    h('Q5:Claude 操作到一半停了', level=2)
+    code('继续刚才未完成的工作。')
+
+    # ===== APPENDIX A =====
+    page_break()
+    h('附录 A:给 AI 的完整提示词合集', level=1)
+    p('使用时,将 [方括号] 中的内容替换为你的实际信息。')
+
+    h('A.1 产品学习提示词', level=2)
+    code('请读取我放在 [文件夹路径] 目录下的所有 PPT 文件,\n深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。\n然后帮我总结产品的核心定位、解决的痛点、核心功能和目标客户。')
+
+    h('A.2 GEO 研究提示词', level=2)
+    code('请搜索 GEO 的最佳实践。\n然后基于你对我们产品的理解:\n1. 梳理目标用户可能会搜索的内容和问题\n2. 建立一个问题库\n3. 整理关键词列表\n4. 制定完整的内容策略')
+
+    h('A.3 网站架构设计提示词', level=2)
+    code('基于产品学习和GEO研究,帮我规划完整的网站架构:\n1. 网站页面地图(sitemap)\n2. 中英文双语URL结构\n3. 每个页面的核心内容\n4. GEO优化措施清单')
+
+    h('A.4 网站生成提示词', level=2)
+    code('请使用 Astro 框架,帮我创建一个完整的产品官网。\n要求:\n- 支持中英文双语(/zh/ 和 /en/)\n- 包含完整的GEO优化\n- 所有代码放在 website 目录下\n- 确保在国内网络环境下所有资源可用\n- 完成后自动构建并用浏览器打开')
+
+    h('A.5 样式修复提示词', level=2)
+    code('网页排版乱了,请检查是否有海外CDN依赖并修复。\n以后在国内环境做项目,禁止使用海外CDN资源。')
+
+    h('A.6 内容修改提示词', level=2)
+    code('请修改 [页面名称] 页面的以下内容:\n- [修改项1]\n- [修改项2]')
+
+    # ===== APPENDIX B =====
+    page_break()
+    h('附录 B:我们的实战案例复盘', level=1)
+
+    h('B.1 任务全景', level=2)
+    tbl(['阶段', '输入', '输出', '耗时'], [
+        ['产品学习', '2 个 PPTX 文件(共 58 页)', '产品理解摘要', '~3 分钟'],
+        ['SEO 研究', '"搜索 GEO 最佳实践"', 'GEO 优化方案 + 问题库', '~5 分钟'],
+        ['架构设计', '"设计网站架构"', '完整网站地图 + URL 结构', '~5 分钟'],
+        ['代码生成', '"使用 Astro 框架搭建"', '38 个页面 + 全部配置', '~15 分钟'],
+        ['样式修复', '"页面排版乱了"', '切换到 Tailwind v3 方案', '~5 分钟'],
+        ['总计', '', '', '~35 分钟'],
+    ])
+
+    h('B.2 产出统计', level=2)
+    tbl(['指标', '数值'], [
+        ['页面总数', '38 个(中英双语)'],
+        ['代码文件', '40+ 个'],
+        ['博客文章', '3 篇 GEO 优化文章'],
+        ['FAQ 条目', '10 个(含结构化数据)'],
+        ['术语定义', '13 个(中英双语)'],
+        ['SEO Schema 类型', '6 种'],
+        ['支持语言', '中文 + 英文'],
+    ])
+
+    h('B.3 人机分工', level=2)
+    tbl(['人类做的事', 'AI 做的事'], [
+        ['提供产品 PPT 资料', '读取和分析 PPT'],
+        ['审核 AI 理解和方案', '搜索 SEO 最佳实践'],
+        ['检查网站效果', '设计网站架构'],
+        ['发现排版问题', '编写全部代码'],
+        ['反馈问题给 AI', '自动修复技术问题'],
+        ['', '构建和启动网站'],
+    ])
+
+    # ===== APPENDIX C =====
+    page_break()
+    h('附录 C:GEO 优化清单', level=1)
+    p('以下是所有实施的 GEO 措施,可交给 AI 逐项检查。')
+
+    h('C.1 结构化数据', level=2)
+    p('✅ 网站首页:Organization schema(告诉 AI 这是哪家公司)')
+    p('✅ FAQ 页面:FAQPage schema(让 AI 直接引用问答)')
+    p('✅ 博客文章:TechArticle schema(标注作者、发布时间)')
+    p('✅ 产品页面:SoftwareApplication schema(标注产品信息)')
+    p('✅ 所有页面:BreadcrumbList schema(标注页面层级)')
+
+    h('C.2 多语言 SEO', level=2)
+    p('✅ hreflang 标签:告知搜索引擎中英文版本对应关系')
+    p('✅ x-default 标签:指定默认语言版本')
+    p('✅ 规范链接(canonical URL):避免重复内容问题')
+    p('✅ 多语言站点地图(sitemap):列出所有语言版本')
+
+    h('C.3 AI 爬虫友好', level=2)
+    p('✅ llms.txt:专门给 AI 爬虫的站点说明文件')
+    p('✅ robots.txt:明确允许 ChatGPT、Google AI 等爬虫访问')
+    p('✅ 术语表页面:为专业术语提供权威定义')
+    p('✅ 每篇博客标注"作者 + 发布时间"')
+
+    h('C.4 内容策略', level=2)
+    p('✅ 为核心概念建立专属页面')
+    p('✅ FAQ 回答直接、权威、结构化')
+    p('✅ 博客覆盖高频搜索问题')
+    p('✅ 内容互联(文章之间互相引用链接)')
+
+    # ===== APPENDIX D =====
+    page_break()
+    h('附录 D:关键技术概念解释', level=1)
+    p('以下内容面向非技术读者,用"白话"解释涉及的技术概念。', size=10, color=(0x94, 0xa3, 0xb8))
+
+    concepts = [
+        ('Astro 是什么?',
+         '一个"静态网站生成器",能像搭积木一样把网站的各个部分拼在一起,最终输出为纯 HTML 文件,加载极快。',
+         '传统的网站像"现场炒菜"——用户访问时服务器现做。Astro 像"预制菜"——提前做好,用户来了直接端上桌。'),
+        ('Tailwind CSS 是什么?',
+         '一个"样式工具箱",通过给 HTML 标签添加简短的类名来控制外观,不需要写 CSS 代码。',
+         '传统写样式像"从零设计一套家具",Tailwind 像"宜家的标准化配件"——你只需要选择搭配。'),
+        ('GEO 是什么?',
+         'Generative Engine Optimization,生成式引擎优化。让你的内容被 ChatGPT、豆包等 AI 在回答中引用和推荐。',
+         '传统 SEO 像在图书馆卡片目录中排名靠前;GEO 像是让你的书成为图书馆员回答问题时必引用的参考书。'),
+        ('JSON-LD 是什么?',
+         '在网页中嵌入"机器可读的标签",告诉搜索引擎和 AI"这段文字是 FAQ 问答"、"这个页面是产品介绍"。',
+         '就像超市货架上商品的条形码——人类看包装就知道是什么,但扫码器需要条形码。JSON-LD 就是给 AI 的"条形码"。'),
+        ('hreflang 是什么?',
+         '告诉搜索引擎"这个页面有中文版和英文版,中文版在这里,英文版在那里",避免被当作重复内容。',
+         '就像一本书有中英文两个版本,封面标注"中文版"和"English Edition",读者不会困惑。'),
+        ('i18n 是什么?',
+         'Internationalization(国际化)的缩写——i 和 n 之间有 18 个字母。指让网站支持多种语言。',
+         ''),
+    ]
+
+    for name, explanation, analogy in concepts:
+        h(name, level=2)
+        p(f'一句话解释:{explanation}')
+        if analogy:
+            p(f'类比:{analogy}', size=10, color=(0x64, 0x74, 0x8b))
+
+    # ===== CONCLUSION =====
+    page_break()
+    h('总结', level=1)
+    p('你现在拥有了一套完整的方法:')
+
+    steps = [
+        '准备好产品 PPT → 放到文件夹',
+        '打开 Claude Code → 粘贴本手册的提示词',
+        '审核 AI 输出 → 必要时反馈调整',
+        '获得成品网站 → 浏览器直接看效果',
+    ]
+    for i, step in enumerate(steps, 1):
+        p(f'{i}. {step}', indent=True)
+
+    h('最重要的原则', level=2)
+    p('✅ 提示词要完整清晰,一次性说清楚需求')
+    p('✅ 每一步确认 AI 理解正确再继续')
+    p('✅ 遇到问题直接反馈,AI 会自己修复')
+    p('✅ 让 AI 建立规则,下次不再犯同类错误')
+
+    doc.add_paragraph()
+    doc.add_paragraph()
+    footer_para = doc.add_paragraph()
+    footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    footer_run = footer_para.add_run('— 手册结束 —')
+    footer_run.font.size = Pt(10)
+    footer_run.font.color.rgb = RGBColor(0x94, 0xa3, 0xb8)
+    footer_run.font.name = '微软雅黑'
+
+    doc.add_paragraph()
+    version_para = doc.add_paragraph()
+    version_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    vr = version_para.add_run('v1.0 · 2026年5月 · 基于未来飞马(Fmode)产品官网实战编写')
+    vr.font.size = Pt(9)
+    vr.font.color.rgb = RGBColor(0x94, 0xa3, 0xb8)
+    vr.font.name = '微软雅黑'
+
+    # Save
+    output_path = 'd:/workspace/temp/newp/产品独立站搭建手册-Claude版.docx'
+    doc.save(output_path)
+    print(f'✅ DOCX saved to: {output_path}')
+
+if __name__ == '__main__':
+    create_manual()

+ 6559 - 0
website/package-lock.json

@@ -0,0 +1,6559 @@
+{
+  "name": "fmode-website",
+  "version": "1.0.0",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "fmode-website",
+      "version": "1.0.0",
+      "dependencies": {
+        "@astrojs/sitemap": "^3.2.1",
+        "astro": "^5.1.0"
+      },
+      "devDependencies": {
+        "autoprefixer": "^10.4.20",
+        "postcss": "^8.4.49",
+        "tailwindcss": "^3.4.17"
+      }
+    },
+    "node_modules/@alloc/quick-lru": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmmirror.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+      "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@astrojs/compiler": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmmirror.com/@astrojs/compiler/-/compiler-2.13.1.tgz",
+      "integrity": "sha512-f3FN83d2G/v32ipNClRKgYv30onQlMZX1vCeZMjPsMMPl1mDpmbl0+N5BYo4S/ofzqJyS5hvwacEo0CCVDn/Qg==",
+      "license": "MIT"
+    },
+    "node_modules/@astrojs/internal-helpers": {
+      "version": "0.7.6",
+      "resolved": "https://registry.npmmirror.com/@astrojs/internal-helpers/-/internal-helpers-0.7.6.tgz",
+      "integrity": "sha512-GOle7smBWKfMSP8osUIGOlB5kaHdQLV3foCsf+5Q9Wsuu+C6Fs3Ez/ttXmhjZ1HkSgsogcM1RXSjjOVieHq16Q==",
+      "license": "MIT"
+    },
+    "node_modules/@astrojs/markdown-remark": {
+      "version": "6.3.11",
+      "resolved": "https://registry.npmmirror.com/@astrojs/markdown-remark/-/markdown-remark-6.3.11.tgz",
+      "integrity": "sha512-hcaxX/5aC6lQgHeGh1i+aauvSwIT6cfyFjKWvExYSxUhZZBBdvCliOtu06gbQyhbe0pGJNoNmqNlQZ5zYUuIyQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@astrojs/internal-helpers": "0.7.6",
+        "@astrojs/prism": "3.3.0",
+        "github-slugger": "^2.0.0",
+        "hast-util-from-html": "^2.0.3",
+        "hast-util-to-text": "^4.0.2",
+        "import-meta-resolve": "^4.2.0",
+        "js-yaml": "^4.1.1",
+        "mdast-util-definitions": "^6.0.0",
+        "rehype-raw": "^7.0.0",
+        "rehype-stringify": "^10.0.1",
+        "remark-gfm": "^4.0.1",
+        "remark-parse": "^11.0.0",
+        "remark-rehype": "^11.1.2",
+        "remark-smartypants": "^3.0.2",
+        "shiki": "^3.21.0",
+        "smol-toml": "^1.6.0",
+        "unified": "^11.0.5",
+        "unist-util-remove-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "unist-util-visit-parents": "^6.0.2",
+        "vfile": "^6.0.3"
+      }
+    },
+    "node_modules/@astrojs/prism": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/@astrojs/prism/-/prism-3.3.0.tgz",
+      "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
+      "license": "MIT",
+      "dependencies": {
+        "prismjs": "^1.30.0"
+      },
+      "engines": {
+        "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+      }
+    },
+    "node_modules/@astrojs/sitemap": {
+      "version": "3.7.3",
+      "resolved": "https://registry.npmmirror.com/@astrojs/sitemap/-/sitemap-3.7.3.tgz",
+      "integrity": "sha512-f8euLVsyeAmAkSm/1M2Kb8sL8byQmfgbvBNaHFItCheTj/IpiJYSEWVcqDHZ/yEHxiS7+w87mQkzwZaPHmk5GA==",
+      "license": "MIT",
+      "dependencies": {
+        "sitemap": "^9.0.0",
+        "stream-replace-string": "^2.0.0",
+        "zod": "^4.3.6"
+      }
+    },
+    "node_modules/@astrojs/telemetry": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
+      "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ci-info": "^4.2.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"
+      },
+      "engines": {
+        "node": "18.20.8 || ^20.3.0 || >=22.0.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.29.7",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
+      "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.29.7",
+      "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
+      "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.29.7",
+      "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.29.7.tgz",
+      "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.29.7"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.29.7",
+      "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.29.7.tgz",
+      "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.29.7",
+        "@babel/helper-validator-identifier": "^7.29.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@capsizecss/unpack": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/@capsizecss/unpack/-/unpack-4.0.0.tgz",
+      "integrity": "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==",
+      "license": "MIT",
+      "dependencies": {
+        "fontkitten": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@emnapi/runtime": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmmirror.com/@emnapi/runtime/-/runtime-1.10.0.tgz",
+      "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+      "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "tslib": "^2.4.0"
+      }
+    },
+    "node_modules/@esbuild/aix-ppc64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz",
+      "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.27.7.tgz",
+      "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz",
+      "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/android-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.27.7.tgz",
+      "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz",
+      "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/darwin-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz",
+      "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz",
+      "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/freebsd-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz",
+      "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz",
+      "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz",
+      "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ia32": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz",
+      "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz",
+      "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-mips64el": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz",
+      "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==",
+      "cpu": [
+        "mips64el"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-ppc64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz",
+      "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-riscv64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz",
+      "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-s390x": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz",
+      "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/linux-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz",
+      "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz",
+      "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/netbsd-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz",
+      "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz",
+      "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openbsd-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz",
+      "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz",
+      "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/sunos-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz",
+      "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-arm64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz",
+      "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-ia32": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz",
+      "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@esbuild/win32-x64": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz",
+      "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@img/colour": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/@img/colour/-/colour-1.1.0.tgz",
+      "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/@img/sharp-darwin-arm64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
+      "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-arm64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-darwin-x64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
+      "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-darwin-x64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-arm64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
+      "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-darwin-x64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
+      "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
+      "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-arm64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
+      "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-ppc64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
+      "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-riscv64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
+      "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-s390x": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
+      "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linux-x64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
+      "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
+      "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
+      "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-linux-arm": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
+      "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linux-arm64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
+      "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-arm64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linux-ppc64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
+      "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-ppc64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linux-riscv64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
+      "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-riscv64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linux-s390x": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
+      "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-s390x": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linux-x64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
+      "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linux-x64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linuxmusl-arm64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
+      "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-linuxmusl-x64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
+      "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
+      }
+    },
+    "node_modules/@img/sharp-wasm32": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
+      "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
+      "cpu": [
+        "wasm32"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+      "optional": true,
+      "dependencies": {
+        "@emnapi/runtime": "^1.7.0"
+      },
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-arm64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
+      "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-ia32": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
+      "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@img/sharp-win32-x64": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
+      "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "Apache-2.0 AND LGPL-3.0-or-later",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.13",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
+      "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.0",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+      "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.31",
+      "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
+      "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@oslojs/encoding": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/@oslojs/encoding/-/encoding-1.1.0.tgz",
+      "integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==",
+      "license": "MIT"
+    },
+    "node_modules/@rollup/pluginutils": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.4.0.tgz",
+      "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0",
+        "estree-walker": "^2.0.2",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "license": "MIT"
+    },
+    "node_modules/@rollup/rollup-android-arm-eabi": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.4.tgz",
+      "integrity": "sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-android-arm64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.4.tgz",
+      "integrity": "sha512-GxxTKApUpzRhof7poWvCJHRF51C67u1R7D6DiluBE8wKU1u5GWE8t+v81JvJYtbawoBFX1hLv5Ei4eVjkWokaw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-arm64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz",
+      "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-darwin-x64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.4.tgz",
+      "integrity": "sha512-CSKq7MsP+5PFIcydhAiR1K0UhEI1A2jWXVKHPCBZ151yOutENwvnPocgVHkivu2kviURtCEB6zUQw0vs8RrhMg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-arm64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.4.tgz",
+      "integrity": "sha512-+O8OkVdyvXMtJEciu2wS/pzm1IxntEEQx3z5TAVy4l32G0etZn+RsA48ARRrFm6Ri8fvqPQfgrvNxSjKAbnd3g==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-freebsd-x64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.4.tgz",
+      "integrity": "sha512-Iw3oMskH3AfNuhU0MSN7vNbdi4me/NiYo2azqPz/Le16zHSa+3RRmliCMWWQmh4lcndccU40xcJuTYJZxNo/lw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.4.tgz",
+      "integrity": "sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.4.tgz",
+      "integrity": "sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.4.tgz",
+      "integrity": "sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-arm64-musl": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.4.tgz",
+      "integrity": "sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loong64-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.4.tgz",
+      "integrity": "sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-loong64-musl": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.4.tgz",
+      "integrity": "sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.4.tgz",
+      "integrity": "sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-ppc64-musl": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.4.tgz",
+      "integrity": "sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.4.tgz",
+      "integrity": "sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-riscv64-musl": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.4.tgz",
+      "integrity": "sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-s390x-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.4.tgz",
+      "integrity": "sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.4.tgz",
+      "integrity": "sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.4.tgz",
+      "integrity": "sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-openbsd-x64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.4.tgz",
+      "integrity": "sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ]
+    },
+    "node_modules/@rollup/rollup-openharmony-arm64": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.4.tgz",
+      "integrity": "sha512-IPOsh5aRYuLv/nkU51X10Bf75Bsf6+gZdx1X+QP5QM6lIJFHHqbHLG0uJn/hWthzo13UAc2umiUorqZy3axoZg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-arm64-msvc": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.4.tgz",
+      "integrity": "sha512-4QzE9E81OohJ/HKzHhsqU+zcYYojVOXlFMs1DdyMT6qXl/niOH7AVElmmEdUNHHS/oRkc++d5k6Vy85zFs0DEw==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-ia32-msvc": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.4.tgz",
+      "integrity": "sha512-zTPgT1YuHHcd+Tmx7h8aml0FWFVelV5N54oHow9SLj+GfoDy/huQ+UV396N/C7KpMDMiPspRktzM1/0r1usYEA==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-gnu": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.4.tgz",
+      "integrity": "sha512-DRS4G7mi9lJxqEDezIkKCaUIKCrLUUDCUaCsTPCi/rtqaC6D/jjwslMQyiDU50Ka0JKpeXeRBFBAXwArY52vBw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@rollup/rollup-win32-x64-msvc": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.4.tgz",
+      "integrity": "sha512-QVTUovf40zgTqlFVrKA1uXMVvU2QWEFWfAH8Wdc48IxLvrJMQVMBRjuQyUpzZCDkakImib9eVazbWlC6ksWtJw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ]
+    },
+    "node_modules/@shikijs/core": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/@shikijs/core/-/core-3.23.0.tgz",
+      "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.23.0",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4",
+        "hast-util-to-html": "^9.0.5"
+      }
+    },
+    "node_modules/@shikijs/engine-javascript": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz",
+      "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.23.0",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "oniguruma-to-es": "^4.3.4"
+      }
+    },
+    "node_modules/@shikijs/engine-oniguruma": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz",
+      "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.23.0",
+        "@shikijs/vscode-textmate": "^10.0.2"
+      }
+    },
+    "node_modules/@shikijs/langs": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/@shikijs/langs/-/langs-3.23.0.tgz",
+      "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.23.0"
+      }
+    },
+    "node_modules/@shikijs/themes": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/@shikijs/themes/-/themes-3.23.0.tgz",
+      "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/types": "3.23.0"
+      }
+    },
+    "node_modules/@shikijs/types": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/@shikijs/types/-/types-3.23.0.tgz",
+      "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      }
+    },
+    "node_modules/@shikijs/vscode-textmate": {
+      "version": "10.0.2",
+      "resolved": "https://registry.npmmirror.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
+      "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/debug": {
+      "version": "4.1.13",
+      "resolved": "https://registry.npmmirror.com/@types/debug/-/debug-4.1.13.tgz",
+      "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/ms": "*"
+      }
+    },
+    "node_modules/@types/estree": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.9.tgz",
+      "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
+      "license": "MIT"
+    },
+    "node_modules/@types/hast": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz",
+      "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/mdast": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/@types/mdast/-/mdast-4.0.4.tgz",
+      "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/ms": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz",
+      "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+      "license": "MIT"
+    },
+    "node_modules/@types/nlcst": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/nlcst/-/nlcst-2.0.3.tgz",
+      "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "*"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "24.12.4",
+      "resolved": "https://registry.npmmirror.com/@types/node/-/node-24.12.4.tgz",
+      "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==",
+      "license": "MIT",
+      "dependencies": {
+        "undici-types": "~7.16.0"
+      }
+    },
+    "node_modules/@types/sax": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmmirror.com/@types/sax/-/sax-1.2.7.tgz",
+      "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/unist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz",
+      "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
+      "license": "MIT"
+    },
+    "node_modules/@ungap/structured-clone": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.1.tgz",
+      "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==",
+      "license": "ISC"
+    },
+    "node_modules/acorn": {
+      "version": "8.16.0",
+      "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.16.0.tgz",
+      "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
+      "license": "MIT",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/ansi-align": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-align/-/ansi-align-3.0.1.tgz",
+      "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^4.1.0"
+      }
+    },
+    "node_modules/ansi-align/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-align/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "license": "MIT"
+    },
+    "node_modules/ansi-align/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-align/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.2.2.tgz",
+      "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.3.tgz",
+      "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "license": "ISC",
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/anymatch/node_modules/picomatch": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz",
+      "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/arg": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmmirror.com/arg/-/arg-5.0.2.tgz",
+      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+      "license": "MIT"
+    },
+    "node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "license": "Python-2.0"
+    },
+    "node_modules/aria-query": {
+      "version": "5.3.2",
+      "resolved": "https://registry.npmmirror.com/aria-query/-/aria-query-5.3.2.tgz",
+      "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/array-iterate": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/array-iterate/-/array-iterate-2.0.1.tgz",
+      "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/astro": {
+      "version": "5.18.2",
+      "resolved": "https://registry.npmmirror.com/astro/-/astro-5.18.2.tgz",
+      "integrity": "sha512-TnFwLnAXty5MXKPDGuKXqK4AMBXG+FH6RUdK7Oyc3gyfNoFIthT+4eRbzOK43bdRlLaZuxgciDSjgtggZ3OtGQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@astrojs/compiler": "^2.13.0",
+        "@astrojs/internal-helpers": "0.7.6",
+        "@astrojs/markdown-remark": "6.3.11",
+        "@astrojs/telemetry": "3.3.0",
+        "@capsizecss/unpack": "^4.0.0",
+        "@oslojs/encoding": "^1.1.0",
+        "@rollup/pluginutils": "^5.3.0",
+        "acorn": "^8.15.0",
+        "aria-query": "^5.3.2",
+        "axobject-query": "^4.1.0",
+        "boxen": "8.0.1",
+        "ci-info": "^4.3.1",
+        "clsx": "^2.1.1",
+        "common-ancestor-path": "^1.0.1",
+        "cookie": "^1.1.1",
+        "cssesc": "^3.0.0",
+        "debug": "^4.4.3",
+        "deterministic-object-hash": "^2.0.2",
+        "devalue": "^5.6.2",
+        "diff": "^8.0.3",
+        "dlv": "^1.1.3",
+        "dset": "^3.1.4",
+        "es-module-lexer": "^1.7.0",
+        "esbuild": "^0.27.3",
+        "estree-walker": "^3.0.3",
+        "flattie": "^1.1.1",
+        "fontace": "~0.4.0",
+        "github-slugger": "^2.0.0",
+        "html-escaper": "3.0.3",
+        "http-cache-semantics": "^4.2.0",
+        "import-meta-resolve": "^4.2.0",
+        "js-yaml": "^4.1.1",
+        "magic-string": "^0.30.21",
+        "magicast": "^0.5.1",
+        "mrmime": "^2.0.1",
+        "neotraverse": "^0.6.18",
+        "p-limit": "^6.2.0",
+        "p-queue": "^8.1.1",
+        "package-manager-detector": "^1.6.0",
+        "piccolore": "^0.1.3",
+        "picomatch": "^4.0.3",
+        "prompts": "^2.4.2",
+        "rehype": "^13.0.2",
+        "semver": "^7.7.3",
+        "shiki": "^3.21.0",
+        "smol-toml": "^1.6.0",
+        "svgo": "^4.0.0",
+        "tinyexec": "^1.0.2",
+        "tinyglobby": "^0.2.15",
+        "tsconfck": "^3.1.6",
+        "ultrahtml": "^1.6.0",
+        "unifont": "~0.7.3",
+        "unist-util-visit": "^5.0.0",
+        "unstorage": "^1.17.4",
+        "vfile": "^6.0.3",
+        "vite": "^6.4.1",
+        "vitefu": "^1.1.1",
+        "xxhash-wasm": "^1.1.0",
+        "yargs-parser": "^21.1.1",
+        "yocto-spinner": "^0.2.3",
+        "zod": "^3.25.76",
+        "zod-to-json-schema": "^3.25.1",
+        "zod-to-ts": "^1.2.0"
+      },
+      "bin": {
+        "astro": "astro.js"
+      },
+      "engines": {
+        "node": "18.20.8 || ^20.3.0 || >=22.0.0",
+        "npm": ">=9.6.5",
+        "pnpm": ">=7.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/astrodotbuild"
+      },
+      "optionalDependencies": {
+        "sharp": "^0.34.0"
+      }
+    },
+    "node_modules/astro/node_modules/zod": {
+      "version": "3.25.76",
+      "resolved": "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz",
+      "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/colinhacks"
+      }
+    },
+    "node_modules/astro/node_modules/zod-to-ts": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/zod-to-ts/-/zod-to-ts-1.2.0.tgz",
+      "integrity": "sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==",
+      "peerDependencies": {
+        "typescript": "^4.9.4 || ^5.0.2",
+        "zod": "^3"
+      }
+    },
+    "node_modules/autoprefixer": {
+      "version": "10.5.0",
+      "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.5.0.tgz",
+      "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.28.2",
+        "caniuse-lite": "^1.0.30001787",
+        "fraction.js": "^5.3.4",
+        "picocolors": "^1.1.1",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "bin": {
+        "autoprefixer": "bin/autoprefixer"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      },
+      "peerDependencies": {
+        "postcss": "^8.1.0"
+      }
+    },
+    "node_modules/axobject-query": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/axobject-query/-/axobject-query-4.1.0.tgz",
+      "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/bail": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz",
+      "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/base-64": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/base-64/-/base-64-1.0.0.tgz",
+      "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==",
+      "license": "MIT"
+    },
+    "node_modules/baseline-browser-mapping": {
+      "version": "2.10.33",
+      "resolved": "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.10.33.tgz",
+      "integrity": "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "baseline-browser-mapping": "dist/cli.cjs"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+      "license": "ISC"
+    },
+    "node_modules/boxen": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmmirror.com/boxen/-/boxen-8.0.1.tgz",
+      "integrity": "sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-align": "^3.0.1",
+        "camelcase": "^8.0.0",
+        "chalk": "^5.3.0",
+        "cli-boxes": "^3.0.0",
+        "string-width": "^7.2.0",
+        "type-fest": "^4.21.0",
+        "widest-line": "^5.0.0",
+        "wrap-ansi": "^9.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "fill-range": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/browserslist": {
+      "version": "4.28.2",
+      "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.28.2.tgz",
+      "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "baseline-browser-mapping": "^2.10.12",
+        "caniuse-lite": "^1.0.30001782",
+        "electron-to-chromium": "^1.5.328",
+        "node-releases": "^2.0.36",
+        "update-browserslist-db": "^1.2.3"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
+    "node_modules/camelcase": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-8.0.0.tgz",
+      "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001793",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz",
+      "integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0"
+    },
+    "node_modules/ccount": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/ccount/-/ccount-2.0.1.tgz",
+      "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/chalk": {
+      "version": "5.6.2",
+      "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.6.2.tgz",
+      "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
+      "license": "MIT",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/character-entities": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/character-entities/-/character-entities-2.0.2.tgz",
+      "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/character-entities-html4": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
+      "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/character-entities-legacy": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
+      "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/chokidar/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/ci-info": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-4.4.0.tgz",
+      "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/sibiraj-s"
+        }
+      ],
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cli-boxes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/cli-boxes/-/cli-boxes-3.0.0.tgz",
+      "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/clsx": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/clsx/-/clsx-2.1.1.tgz",
+      "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/comma-separated-tokens": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
+      "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/commander": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-11.1.0.tgz",
+      "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=16"
+      }
+    },
+    "node_modules/common-ancestor-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+      "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
+      "license": "ISC"
+    },
+    "node_modules/cookie": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/cookie/-/cookie-1.1.1.tgz",
+      "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/express"
+      }
+    },
+    "node_modules/cookie-es": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/cookie-es/-/cookie-es-1.2.3.tgz",
+      "integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
+      "license": "MIT"
+    },
+    "node_modules/crossws": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmmirror.com/crossws/-/crossws-0.3.5.tgz",
+      "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==",
+      "license": "MIT",
+      "dependencies": {
+        "uncrypto": "^0.1.3"
+      }
+    },
+    "node_modules/css-select": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmmirror.com/css-select/-/css-select-5.2.2.tgz",
+      "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0",
+        "css-what": "^6.1.0",
+        "domhandler": "^5.0.2",
+        "domutils": "^3.0.1",
+        "nth-check": "^2.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
+      }
+    },
+    "node_modules/css-tree": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-3.2.1.tgz",
+      "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+      "license": "MIT",
+      "dependencies": {
+        "mdn-data": "2.27.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+      }
+    },
+    "node_modules/css-what": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.2.2.tgz",
+      "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">= 6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/fb55"
+      }
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "license": "MIT",
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/csso": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmmirror.com/csso/-/csso-5.0.5.tgz",
+      "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "css-tree": "~2.2.0"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+        "npm": ">=7.0.0"
+      }
+    },
+    "node_modules/csso/node_modules/css-tree": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-2.2.1.tgz",
+      "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+      "license": "MIT",
+      "dependencies": {
+        "mdn-data": "2.0.28",
+        "source-map-js": "^1.0.1"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+        "npm": ">=7.0.0"
+      }
+    },
+    "node_modules/csso/node_modules/mdn-data": {
+      "version": "2.0.28",
+      "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.28.tgz",
+      "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+      "license": "CC0-1.0"
+    },
+    "node_modules/debug": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz",
+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.3"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/decode-named-character-reference": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+      "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
+      "license": "MIT",
+      "dependencies": {
+        "character-entities": "^2.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/defu": {
+      "version": "6.1.7",
+      "resolved": "https://registry.npmmirror.com/defu/-/defu-6.1.7.tgz",
+      "integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
+      "license": "MIT"
+    },
+    "node_modules/dequal": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz",
+      "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/destr": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.5.tgz",
+      "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
+      "license": "MIT"
+    },
+    "node_modules/detect-libc": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz",
+      "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/deterministic-object-hash": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/deterministic-object-hash/-/deterministic-object-hash-2.0.2.tgz",
+      "integrity": "sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==",
+      "license": "MIT",
+      "dependencies": {
+        "base-64": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/devalue": {
+      "version": "5.8.1",
+      "resolved": "https://registry.npmmirror.com/devalue/-/devalue-5.8.1.tgz",
+      "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==",
+      "license": "MIT"
+    },
+    "node_modules/devlop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/devlop/-/devlop-1.1.0.tgz",
+      "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
+      "license": "MIT",
+      "dependencies": {
+        "dequal": "^2.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/diff": {
+      "version": "8.0.4",
+      "resolved": "https://registry.npmmirror.com/diff/-/diff-8.0.4.tgz",
+      "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.3.1"
+      }
+    },
+    "node_modules/dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "license": "MIT"
+    },
+    "node_modules/dom-serializer": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz",
+      "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+      "license": "MIT",
+      "dependencies": {
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.2",
+        "entities": "^4.2.0"
+      },
+      "funding": {
+        "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+      }
+    },
+    "node_modules/dom-serializer/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/domelementtype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz",
+      "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/fb55"
+        }
+      ],
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/domhandler": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-5.0.3.tgz",
+      "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "domelementtype": "^2.3.0"
+      },
+      "engines": {
+        "node": ">= 4"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domhandler?sponsor=1"
+      }
+    },
+    "node_modules/domutils": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmmirror.com/domutils/-/domutils-3.2.2.tgz",
+      "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "dom-serializer": "^2.0.0",
+        "domelementtype": "^2.3.0",
+        "domhandler": "^5.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/domutils?sponsor=1"
+      }
+    },
+    "node_modules/dset": {
+      "version": "3.1.4",
+      "resolved": "https://registry.npmmirror.com/dset/-/dset-3.1.4.tgz",
+      "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.364",
+      "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.364.tgz",
+      "integrity": "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/emoji-regex": {
+      "version": "10.6.0",
+      "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.6.0.tgz",
+      "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
+      "license": "MIT"
+    },
+    "node_modules/entities": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/entities/-/entities-6.0.1.tgz",
+      "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
+    "node_modules/es-errors": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz",
+      "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-module-lexer": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
+      "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
+      "license": "MIT"
+    },
+    "node_modules/esbuild": {
+      "version": "0.27.7",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.27.7.tgz",
+      "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.27.7",
+        "@esbuild/android-arm": "0.27.7",
+        "@esbuild/android-arm64": "0.27.7",
+        "@esbuild/android-x64": "0.27.7",
+        "@esbuild/darwin-arm64": "0.27.7",
+        "@esbuild/darwin-x64": "0.27.7",
+        "@esbuild/freebsd-arm64": "0.27.7",
+        "@esbuild/freebsd-x64": "0.27.7",
+        "@esbuild/linux-arm": "0.27.7",
+        "@esbuild/linux-arm64": "0.27.7",
+        "@esbuild/linux-ia32": "0.27.7",
+        "@esbuild/linux-loong64": "0.27.7",
+        "@esbuild/linux-mips64el": "0.27.7",
+        "@esbuild/linux-ppc64": "0.27.7",
+        "@esbuild/linux-riscv64": "0.27.7",
+        "@esbuild/linux-s390x": "0.27.7",
+        "@esbuild/linux-x64": "0.27.7",
+        "@esbuild/netbsd-arm64": "0.27.7",
+        "@esbuild/netbsd-x64": "0.27.7",
+        "@esbuild/openbsd-arm64": "0.27.7",
+        "@esbuild/openbsd-x64": "0.27.7",
+        "@esbuild/openharmony-arm64": "0.27.7",
+        "@esbuild/sunos-x64": "0.27.7",
+        "@esbuild/win32-arm64": "0.27.7",
+        "@esbuild/win32-ia32": "0.27.7",
+        "@esbuild/win32-x64": "0.27.7"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/estree-walker": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz",
+      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "^1.0.0"
+      }
+    },
+    "node_modules/eventemitter3": {
+      "version": "5.0.4",
+      "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.4.tgz",
+      "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
+      "license": "MIT"
+    },
+    "node_modules/extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz",
+      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.8"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.20.1",
+      "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.20.1.tgz",
+      "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fdir": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.5.0.tgz",
+      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/flattie": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/flattie/-/flattie-1.1.1.tgz",
+      "integrity": "sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/fontace": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/fontace/-/fontace-0.4.1.tgz",
+      "integrity": "sha512-lDMvbAzSnHmbYMTEld5qdtvNH2/pWpICOqpean9IgC7vUbUJc3k+k5Dokp85CegamqQpFbXf0rAVkbzpyTA8aw==",
+      "license": "MIT",
+      "dependencies": {
+        "fontkitten": "^1.0.2"
+      }
+    },
+    "node_modules/fontkitten": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/fontkitten/-/fontkitten-1.0.3.tgz",
+      "integrity": "sha512-Wp1zXWPVUPBmfoa3Cqc9ctaKuzKAV6uLstRqlR56kSjplf5uAce+qeyYym7F+PHbGTk+tCEdkCW6RD7DX/gBZw==",
+      "license": "MIT",
+      "dependencies": {
+        "tiny-inflate": "^1.0.3"
+      },
+      "engines": {
+        "node": ">=20"
+      }
+    },
+    "node_modules/fraction.js": {
+      "version": "5.3.4",
+      "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-5.3.4.tgz",
+      "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/rawify"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-east-asian-width": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
+      "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/github-slugger": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/github-slugger/-/github-slugger-2.0.0.tgz",
+      "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
+      "license": "ISC"
+    },
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/h3": {
+      "version": "1.15.11",
+      "resolved": "https://registry.npmmirror.com/h3/-/h3-1.15.11.tgz",
+      "integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==",
+      "license": "MIT",
+      "dependencies": {
+        "cookie-es": "^1.2.3",
+        "crossws": "^0.3.5",
+        "defu": "^6.1.6",
+        "destr": "^2.0.5",
+        "iron-webcrypto": "^1.2.1",
+        "node-mock-http": "^1.0.4",
+        "radix3": "^1.1.2",
+        "ufo": "^1.6.3",
+        "uncrypto": "^0.1.3"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz",
+      "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/hast-util-from-html": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
+      "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "devlop": "^1.1.0",
+        "hast-util-from-parse5": "^8.0.0",
+        "parse5": "^7.0.0",
+        "vfile": "^6.0.0",
+        "vfile-message": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-from-parse5": {
+      "version": "8.0.3",
+      "resolved": "https://registry.npmmirror.com/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
+      "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "devlop": "^1.0.0",
+        "hastscript": "^9.0.0",
+        "property-information": "^7.0.0",
+        "vfile": "^6.0.0",
+        "vfile-location": "^5.0.0",
+        "web-namespaces": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-is-element": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+      "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-parse-selector": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
+      "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-raw": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmmirror.com/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
+      "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "hast-util-from-parse5": "^8.0.0",
+        "hast-util-to-parse5": "^8.0.0",
+        "html-void-elements": "^3.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "parse5": "^7.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0",
+        "web-namespaces": "^2.0.0",
+        "zwitch": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-to-html": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmmirror.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
+      "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "ccount": "^2.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "hast-util-whitespace": "^3.0.0",
+        "html-void-elements": "^3.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "stringify-entities": "^4.0.0",
+        "zwitch": "^2.0.4"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-to-parse5": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmmirror.com/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
+      "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "devlop": "^1.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0",
+        "web-namespaces": "^2.0.0",
+        "zwitch": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-to-text": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+      "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/unist": "^3.0.0",
+        "hast-util-is-element": "^3.0.0",
+        "unist-util-find-after": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hast-util-whitespace": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
+      "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/hastscript": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/hastscript/-/hastscript-9.0.1.tgz",
+      "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "comma-separated-tokens": "^2.0.0",
+        "hast-util-parse-selector": "^4.0.0",
+        "property-information": "^7.0.0",
+        "space-separated-tokens": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/html-escaper": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-3.0.3.tgz",
+      "integrity": "sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==",
+      "license": "MIT"
+    },
+    "node_modules/html-void-elements": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-3.0.0.tgz",
+      "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/http-cache-semantics": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+      "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/import-meta-resolve": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+      "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/iron-webcrypto": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz",
+      "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/brc-dd"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.16.2",
+      "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.2.tgz",
+      "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-docker": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-3.0.0.tgz",
+      "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
+      "license": "MIT",
+      "bin": {
+        "is-docker": "cli.js"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-inside-container": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-inside-container/-/is-inside-container-1.0.0.tgz",
+      "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
+      "license": "MIT",
+      "dependencies": {
+        "is-docker": "^3.0.0"
+      },
+      "bin": {
+        "is-inside-container": "cli.js"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
+      "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-wsl": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.1.tgz",
+      "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
+      "license": "MIT",
+      "dependencies": {
+        "is-inside-container": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jiti": {
+      "version": "1.21.7",
+      "resolved": "https://registry.npmmirror.com/jiti/-/jiti-1.21.7.tgz",
+      "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
+      "devOptional": true,
+      "license": "MIT",
+      "bin": {
+        "jiti": "bin/jiti.js"
+      }
+    },
+    "node_modules/js-yaml": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-4.1.1.tgz",
+      "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+      "license": "MIT",
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/lilconfig": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-3.1.3.tgz",
+      "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antonk52"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/longest-streak": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz",
+      "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "11.5.1",
+      "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.5.1.tgz",
+      "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==",
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": "20 || >=22"
+      }
+    },
+    "node_modules/magic-string": {
+      "version": "0.30.21",
+      "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz",
+      "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/sourcemap-codec": "^1.5.5"
+      }
+    },
+    "node_modules/magicast": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmmirror.com/magicast/-/magicast-0.5.3.tgz",
+      "integrity": "sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==",
+      "license": "MIT",
+      "dependencies": {
+        "@babel/parser": "^7.29.3",
+        "@babel/types": "^7.29.0",
+        "source-map-js": "^1.2.1"
+      }
+    },
+    "node_modules/markdown-table": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.4.tgz",
+      "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/mdast-util-definitions": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
+      "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "@types/unist": "^3.0.0",
+        "unist-util-visit": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-find-and-replace": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+      "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "escape-string-regexp": "^5.0.0",
+        "unist-util-is": "^6.0.0",
+        "unist-util-visit-parents": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-from-markdown": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz",
+      "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "@types/unist": "^3.0.0",
+        "decode-named-character-reference": "^1.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-to-string": "^4.0.0",
+        "micromark": "^4.0.0",
+        "micromark-util-decode-numeric-character-reference": "^2.0.0",
+        "micromark-util-decode-string": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "unist-util-stringify-position": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-gfm": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+      "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
+      "license": "MIT",
+      "dependencies": {
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-gfm-autolink-literal": "^2.0.0",
+        "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.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-gfm-autolink-literal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+      "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "ccount": "^2.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-find-and-replace": "^3.0.0",
+        "micromark-util-character": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-gfm-footnote": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+      "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.1.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-gfm-strikethrough": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+      "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-gfm-table": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+      "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.0.0",
+        "markdown-table": "^3.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-gfm-task-list-item": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+      "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "devlop": "^1.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "mdast-util-to-markdown": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-phrasing": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+      "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-to-hast": {
+      "version": "13.2.1",
+      "resolved": "https://registry.npmmirror.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+      "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "@ungap/structured-clone": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "trim-lines": "^3.0.0",
+        "unist-util-position": "^5.0.0",
+        "unist-util-visit": "^5.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-to-markdown": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+      "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "@types/unist": "^3.0.0",
+        "longest-streak": "^3.0.0",
+        "mdast-util-phrasing": "^4.0.0",
+        "mdast-util-to-string": "^4.0.0",
+        "micromark-util-classify-character": "^2.0.0",
+        "micromark-util-decode-string": "^2.0.0",
+        "unist-util-visit": "^5.0.0",
+        "zwitch": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdast-util-to-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+      "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/mdn-data": {
+      "version": "2.27.1",
+      "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.27.1.tgz",
+      "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+      "license": "CC0-1.0"
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromark": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmmirror.com/micromark/-/micromark-4.0.2.tgz",
+      "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "@types/debug": "^4.0.0",
+        "debug": "^4.0.0",
+        "decode-named-character-reference": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-core-commonmark": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-combine-extensions": "^2.0.0",
+        "micromark-util-decode-numeric-character-reference": "^2.0.0",
+        "micromark-util-encode": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-resolve-all": "^2.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "micromark-util-subtokenize": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-core-commonmark": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmmirror.com/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+      "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "decode-named-character-reference": "^1.0.0",
+        "devlop": "^1.0.0",
+        "micromark-factory-destination": "^2.0.0",
+        "micromark-factory-label": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-factory-title": "^2.0.0",
+        "micromark-factory-whitespace": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-classify-character": "^2.0.0",
+        "micromark-util-html-tag-name": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-resolve-all": "^2.0.0",
+        "micromark-util-subtokenize": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-extension-gfm": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+      "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+      "license": "MIT",
+      "dependencies": {
+        "micromark-extension-gfm-autolink-literal": "^2.0.0",
+        "micromark-extension-gfm-footnote": "^2.0.0",
+        "micromark-extension-gfm-strikethrough": "^2.0.0",
+        "micromark-extension-gfm-table": "^2.0.0",
+        "micromark-extension-gfm-tagfilter": "^2.0.0",
+        "micromark-extension-gfm-task-list-item": "^2.0.0",
+        "micromark-util-combine-extensions": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-extension-gfm-autolink-literal": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+      "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-extension-gfm-footnote": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+      "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-core-commonmark": "^2.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-normalize-identifier": "^2.0.0",
+        "micromark-util-sanitize-uri": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-extension-gfm-strikethrough": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+      "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-classify-character": "^2.0.0",
+        "micromark-util-resolve-all": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-extension-gfm-table": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+      "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-extension-gfm-tagfilter": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+      "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-extension-gfm-task-list-item": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+      "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/micromark-factory-destination": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+      "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-factory-label": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+      "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-factory-space": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+      "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-factory-title": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+      "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-factory-whitespace": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+      "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-factory-space": "^2.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-character": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+      "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-chunked": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+      "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-classify-character": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+      "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-combine-extensions": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+      "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-decode-numeric-character-reference": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+      "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-decode-string": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+      "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "decode-named-character-reference": "^1.0.0",
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-decode-numeric-character-reference": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-encode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+      "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-html-tag-name": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+      "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-normalize-identifier": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+      "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-resolve-all": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+      "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-sanitize-uri": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+      "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "micromark-util-character": "^2.0.0",
+        "micromark-util-encode": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-subtokenize": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+      "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "devlop": "^1.0.0",
+        "micromark-util-chunked": "^2.0.0",
+        "micromark-util-symbol": "^2.0.0",
+        "micromark-util-types": "^2.0.0"
+      }
+    },
+    "node_modules/micromark-util-symbol": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
+      "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromark-util-types": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
+      "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
+      "funding": [
+        {
+          "type": "GitHub Sponsors",
+          "url": "https://github.com/sponsors/unifiedjs"
+        },
+        {
+          "type": "OpenCollective",
+          "url": "https://opencollective.com/unified"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/micromatch/node_modules/picomatch": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz",
+      "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/mrmime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz",
+      "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "license": "MIT"
+    },
+    "node_modules/mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.12",
+      "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.12.tgz",
+      "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/neotraverse": {
+      "version": "0.6.18",
+      "resolved": "https://registry.npmmirror.com/neotraverse/-/neotraverse-0.6.18.tgz",
+      "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/nlcst-to-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
+      "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/nlcst": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/node-fetch-native": {
+      "version": "1.6.7",
+      "resolved": "https://registry.npmmirror.com/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
+      "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
+      "license": "MIT"
+    },
+    "node_modules/node-mock-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/node-mock-http/-/node-mock-http-1.0.4.tgz",
+      "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==",
+      "license": "MIT"
+    },
+    "node_modules/node-releases": {
+      "version": "2.0.46",
+      "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.46.tgz",
+      "integrity": "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/nth-check": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz",
+      "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "boolbase": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/nth-check?sponsor=1"
+      }
+    },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/ofetch": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmmirror.com/ofetch/-/ofetch-1.5.1.tgz",
+      "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==",
+      "license": "MIT",
+      "dependencies": {
+        "destr": "^2.0.5",
+        "node-fetch-native": "^1.6.7",
+        "ufo": "^1.6.1"
+      }
+    },
+    "node_modules/ohash": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmmirror.com/ohash/-/ohash-2.0.11.tgz",
+      "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
+      "license": "MIT"
+    },
+    "node_modules/oniguruma-parser": {
+      "version": "0.12.2",
+      "resolved": "https://registry.npmmirror.com/oniguruma-parser/-/oniguruma-parser-0.12.2.tgz",
+      "integrity": "sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==",
+      "license": "MIT"
+    },
+    "node_modules/oniguruma-to-es": {
+      "version": "4.3.6",
+      "resolved": "https://registry.npmmirror.com/oniguruma-to-es/-/oniguruma-to-es-4.3.6.tgz",
+      "integrity": "sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==",
+      "license": "MIT",
+      "dependencies": {
+        "oniguruma-parser": "^0.12.2",
+        "regex": "^6.1.0",
+        "regex-recursion": "^6.0.2"
+      }
+    },
+    "node_modules/p-limit": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-6.2.0.tgz",
+      "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==",
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^1.1.1"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-queue": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-8.1.1.tgz",
+      "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==",
+      "license": "MIT",
+      "dependencies": {
+        "eventemitter3": "^5.0.1",
+        "p-timeout": "^6.1.2"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-timeout": {
+      "version": "6.1.4",
+      "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-6.1.4.tgz",
+      "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/package-manager-detector": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
+      "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
+      "license": "MIT"
+    },
+    "node_modules/parse-latin": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/parse-latin/-/parse-latin-7.0.0.tgz",
+      "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/nlcst": "^2.0.0",
+        "@types/unist": "^3.0.0",
+        "nlcst-to-string": "^4.0.0",
+        "unist-util-modify-children": "^4.0.0",
+        "unist-util-visit-children": "^3.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/parse5": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmmirror.com/parse5/-/parse5-7.3.0.tgz",
+      "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==",
+      "license": "MIT",
+      "dependencies": {
+        "entities": "^6.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/piccolore": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmmirror.com/piccolore/-/piccolore-0.1.3.tgz",
+      "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==",
+      "license": "ISC"
+    },
+    "node_modules/picocolors": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.4.tgz",
+      "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmmirror.com/pirates/-/pirates-4.0.7.tgz",
+      "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.5.15",
+      "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.15.tgz",
+      "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.12",
+        "picocolors": "^1.1.1",
+        "source-map-js": "^1.2.1"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "15.1.0",
+      "resolved": "https://registry.npmmirror.com/postcss-import/-/postcss-import-15.1.0.tgz",
+      "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-js": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmmirror.com/postcss-js/-/postcss-js-4.1.0.tgz",
+      "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "camelcase-css": "^2.0.1"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >= 16"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.21"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
+      "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "lilconfig": "^3.1.1"
+      },
+      "engines": {
+        "node": ">= 18"
+      },
+      "peerDependencies": {
+        "jiti": ">=1.21.0",
+        "postcss": ">=8.0.9",
+        "tsx": "^4.8.1",
+        "yaml": "^2.4.2"
+      },
+      "peerDependenciesMeta": {
+        "jiti": {
+          "optional": true
+        },
+        "postcss": {
+          "optional": true
+        },
+        "tsx": {
+          "optional": true
+        },
+        "yaml": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-nested": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/postcss-nested/-/postcss-nested-6.2.0.tgz",
+      "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "postcss-selector-parser": "^6.1.1"
+      },
+      "engines": {
+        "node": ">=12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2.14"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/prismjs": {
+      "version": "1.30.0",
+      "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.30.0.tgz",
+      "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/prompts": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz",
+      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+      "license": "MIT",
+      "dependencies": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/property-information": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz",
+      "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/radix3": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmmirror.com/radix3/-/radix3-1.1.2.tgz",
+      "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+      "license": "MIT"
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/readdirp/node_modules/picomatch": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.2.tgz",
+      "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/regex": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmmirror.com/regex/-/regex-6.1.0.tgz",
+      "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==",
+      "license": "MIT",
+      "dependencies": {
+        "regex-utilities": "^2.3.0"
+      }
+    },
+    "node_modules/regex-recursion": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/regex-recursion/-/regex-recursion-6.0.2.tgz",
+      "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
+      "license": "MIT",
+      "dependencies": {
+        "regex-utilities": "^2.3.0"
+      }
+    },
+    "node_modules/regex-utilities": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/regex-utilities/-/regex-utilities-2.3.0.tgz",
+      "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
+      "license": "MIT"
+    },
+    "node_modules/rehype": {
+      "version": "13.0.2",
+      "resolved": "https://registry.npmmirror.com/rehype/-/rehype-13.0.2.tgz",
+      "integrity": "sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "rehype-parse": "^9.0.0",
+        "rehype-stringify": "^10.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/rehype-parse": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/rehype-parse/-/rehype-parse-9.0.1.tgz",
+      "integrity": "sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-from-html": "^2.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/rehype-raw": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmmirror.com/rehype-raw/-/rehype-raw-7.0.0.tgz",
+      "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-raw": "^9.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/rehype-stringify": {
+      "version": "10.0.1",
+      "resolved": "https://registry.npmmirror.com/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
+      "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "hast-util-to-html": "^9.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-gfm": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-4.0.1.tgz",
+      "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "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.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-parse": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz",
+      "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "mdast-util-from-markdown": "^2.0.0",
+        "micromark-util-types": "^2.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-rehype": {
+      "version": "11.1.2",
+      "resolved": "https://registry.npmmirror.com/remark-rehype/-/remark-rehype-11.1.2.tgz",
+      "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/hast": "^3.0.0",
+        "@types/mdast": "^4.0.0",
+        "mdast-util-to-hast": "^13.0.0",
+        "unified": "^11.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/remark-smartypants": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
+      "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
+      "license": "MIT",
+      "dependencies": {
+        "retext": "^9.0.0",
+        "retext-smartypants": "^6.0.0",
+        "unified": "^11.0.4",
+        "unist-util-visit": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
+    "node_modules/remark-stringify": {
+      "version": "11.0.0",
+      "resolved": "https://registry.npmmirror.com/remark-stringify/-/remark-stringify-11.0.0.tgz",
+      "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/mdast": "^4.0.0",
+        "mdast-util-to-markdown": "^2.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.12",
+      "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.12.tgz",
+      "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "es-errors": "^1.3.0",
+        "is-core-module": "^2.16.1",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/retext": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmmirror.com/retext/-/retext-9.0.0.tgz",
+      "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/nlcst": "^2.0.0",
+        "retext-latin": "^4.0.0",
+        "retext-stringify": "^4.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/retext-latin": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/retext-latin/-/retext-latin-4.0.0.tgz",
+      "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/nlcst": "^2.0.0",
+        "parse-latin": "^7.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/retext-smartypants": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
+      "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/nlcst": "^2.0.0",
+        "nlcst-to-string": "^4.0.0",
+        "unist-util-visit": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/retext-stringify": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/retext-stringify/-/retext-stringify-4.0.0.tgz",
+      "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/nlcst": "^2.0.0",
+        "nlcst-to-string": "^4.0.0",
+        "unified": "^11.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz",
+      "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/rollup": {
+      "version": "4.60.4",
+      "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.60.4.tgz",
+      "integrity": "sha512-WHeFSbZYsPu3+bLoNRUuAO+wavNlocOPf3wSHTP7hcFKVnJeWsYlCDbr3mTS14FCizf9ccIxXA8sGL8zKeQN3g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/estree": "1.0.8"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
+      },
+      "engines": {
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.60.4",
+        "@rollup/rollup-android-arm64": "4.60.4",
+        "@rollup/rollup-darwin-arm64": "4.60.4",
+        "@rollup/rollup-darwin-x64": "4.60.4",
+        "@rollup/rollup-freebsd-arm64": "4.60.4",
+        "@rollup/rollup-freebsd-x64": "4.60.4",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.60.4",
+        "@rollup/rollup-linux-arm-musleabihf": "4.60.4",
+        "@rollup/rollup-linux-arm64-gnu": "4.60.4",
+        "@rollup/rollup-linux-arm64-musl": "4.60.4",
+        "@rollup/rollup-linux-loong64-gnu": "4.60.4",
+        "@rollup/rollup-linux-loong64-musl": "4.60.4",
+        "@rollup/rollup-linux-ppc64-gnu": "4.60.4",
+        "@rollup/rollup-linux-ppc64-musl": "4.60.4",
+        "@rollup/rollup-linux-riscv64-gnu": "4.60.4",
+        "@rollup/rollup-linux-riscv64-musl": "4.60.4",
+        "@rollup/rollup-linux-s390x-gnu": "4.60.4",
+        "@rollup/rollup-linux-x64-gnu": "4.60.4",
+        "@rollup/rollup-linux-x64-musl": "4.60.4",
+        "@rollup/rollup-openbsd-x64": "4.60.4",
+        "@rollup/rollup-openharmony-arm64": "4.60.4",
+        "@rollup/rollup-win32-arm64-msvc": "4.60.4",
+        "@rollup/rollup-win32-ia32-msvc": "4.60.4",
+        "@rollup/rollup-win32-x64-gnu": "4.60.4",
+        "@rollup/rollup-win32-x64-msvc": "4.60.4",
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/rollup/node_modules/@types/estree": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz",
+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
+      "license": "MIT"
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/sax": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/sax/-/sax-1.6.0.tgz",
+      "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==",
+      "license": "BlueOak-1.0.0",
+      "engines": {
+        "node": ">=11.0.0"
+      }
+    },
+    "node_modules/semver": {
+      "version": "7.8.1",
+      "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.1.tgz",
+      "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/sharp": {
+      "version": "0.34.5",
+      "resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.34.5.tgz",
+      "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
+      "hasInstallScript": true,
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "@img/colour": "^1.0.0",
+        "detect-libc": "^2.1.2",
+        "semver": "^7.7.3"
+      },
+      "engines": {
+        "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/libvips"
+      },
+      "optionalDependencies": {
+        "@img/sharp-darwin-arm64": "0.34.5",
+        "@img/sharp-darwin-x64": "0.34.5",
+        "@img/sharp-libvips-darwin-arm64": "1.2.4",
+        "@img/sharp-libvips-darwin-x64": "1.2.4",
+        "@img/sharp-libvips-linux-arm": "1.2.4",
+        "@img/sharp-libvips-linux-arm64": "1.2.4",
+        "@img/sharp-libvips-linux-ppc64": "1.2.4",
+        "@img/sharp-libvips-linux-riscv64": "1.2.4",
+        "@img/sharp-libvips-linux-s390x": "1.2.4",
+        "@img/sharp-libvips-linux-x64": "1.2.4",
+        "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
+        "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
+        "@img/sharp-linux-arm": "0.34.5",
+        "@img/sharp-linux-arm64": "0.34.5",
+        "@img/sharp-linux-ppc64": "0.34.5",
+        "@img/sharp-linux-riscv64": "0.34.5",
+        "@img/sharp-linux-s390x": "0.34.5",
+        "@img/sharp-linux-x64": "0.34.5",
+        "@img/sharp-linuxmusl-arm64": "0.34.5",
+        "@img/sharp-linuxmusl-x64": "0.34.5",
+        "@img/sharp-wasm32": "0.34.5",
+        "@img/sharp-win32-arm64": "0.34.5",
+        "@img/sharp-win32-ia32": "0.34.5",
+        "@img/sharp-win32-x64": "0.34.5"
+      }
+    },
+    "node_modules/shiki": {
+      "version": "3.23.0",
+      "resolved": "https://registry.npmmirror.com/shiki/-/shiki-3.23.0.tgz",
+      "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==",
+      "license": "MIT",
+      "dependencies": {
+        "@shikijs/core": "3.23.0",
+        "@shikijs/engine-javascript": "3.23.0",
+        "@shikijs/engine-oniguruma": "3.23.0",
+        "@shikijs/langs": "3.23.0",
+        "@shikijs/themes": "3.23.0",
+        "@shikijs/types": "3.23.0",
+        "@shikijs/vscode-textmate": "^10.0.2",
+        "@types/hast": "^3.0.4"
+      }
+    },
+    "node_modules/sisteransi": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz",
+      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+      "license": "MIT"
+    },
+    "node_modules/sitemap": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmmirror.com/sitemap/-/sitemap-9.0.1.tgz",
+      "integrity": "sha512-S6hzjGJSG3d6if0YoF5kTyeRJvia6FSTBroE5fQ0bu1QNxyJqhhinfUsXi9fH3MgtXODWvwo2BDyQSnhPQ88uQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/node": "^24.9.2",
+        "@types/sax": "^1.2.1",
+        "arg": "^5.0.0",
+        "sax": "^1.4.1"
+      },
+      "bin": {
+        "sitemap": "dist/esm/cli.js"
+      },
+      "engines": {
+        "node": ">=20.19.5",
+        "npm": ">=10.8.2"
+      }
+    },
+    "node_modules/smol-toml": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmmirror.com/smol-toml/-/smol-toml-1.6.1.tgz",
+      "integrity": "sha512-dWUG8F5sIIARXih1DTaQAX4SsiTXhInKf1buxdY9DIg4ZYPZK5nGM1VRIYmEbDbsHt7USo99xSLFu5Q1IqTmsg==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/cyyynthia"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/space-separated-tokens": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
+      "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/stream-replace-string": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
+      "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==",
+      "license": "MIT"
+    },
+    "node_modules/string-width": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/string-width/-/string-width-7.2.0.tgz",
+      "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^10.3.0",
+        "get-east-asian-width": "^1.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/stringify-entities": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/stringify-entities/-/stringify-entities-4.0.4.tgz",
+      "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
+      "license": "MIT",
+      "dependencies": {
+        "character-entities-html4": "^2.0.0",
+        "character-entities-legacy": "^3.0.0"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.2.0.tgz",
+      "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.2.2"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/sucrase": {
+      "version": "3.35.1",
+      "resolved": "https://registry.npmmirror.com/sucrase/-/sucrase-3.35.1.tgz",
+      "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "commander": "^4.0.0",
+        "lines-and-columns": "^1.1.6",
+        "mz": "^2.7.0",
+        "pirates": "^4.0.1",
+        "tinyglobby": "^0.2.11",
+        "ts-interface-checker": "^0.1.9"
+      },
+      "bin": {
+        "sucrase": "bin/sucrase",
+        "sucrase-node": "bin/sucrase-node"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/sucrase/node_modules/commander": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz",
+      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/svgo": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/svgo/-/svgo-4.0.1.tgz",
+      "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==",
+      "license": "MIT",
+      "dependencies": {
+        "commander": "^11.1.0",
+        "css-select": "^5.1.0",
+        "css-tree": "^3.0.1",
+        "css-what": "^6.1.0",
+        "csso": "^5.0.5",
+        "picocolors": "^1.1.1",
+        "sax": "^1.5.0"
+      },
+      "bin": {
+        "svgo": "bin/svgo.js"
+      },
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/svgo"
+      }
+    },
+    "node_modules/tailwindcss": {
+      "version": "3.4.19",
+      "resolved": "https://registry.npmmirror.com/tailwindcss/-/tailwindcss-3.4.19.tgz",
+      "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
+      "dev": true,
+      "license": "MIT",
+      "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.47",
+        "postcss-import": "^15.1.0",
+        "postcss-js": "^4.0.1",
+        "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
+        "postcss-nested": "^6.2.0",
+        "postcss-selector-parser": "^6.1.2",
+        "resolve": "^1.22.8",
+        "sucrase": "^3.35.0"
+      },
+      "bin": {
+        "tailwind": "lib/cli.js",
+        "tailwindcss": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "node_modules/thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "thenify": ">= 3.1.0 < 4"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/tiny-inflate": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+      "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
+      "license": "MIT"
+    },
+    "node_modules/tinyexec": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmmirror.com/tinyexec/-/tinyexec-1.2.4.tgz",
+      "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/tinyglobby": {
+      "version": "0.2.17",
+      "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.17.tgz",
+      "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==",
+      "license": "MIT",
+      "dependencies": {
+        "fdir": "^6.5.0",
+        "picomatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/SuperchupuDev"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/trim-lines": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz",
+      "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/trough": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmmirror.com/trough/-/trough-2.2.0.tgz",
+      "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/ts-interface-checker": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmmirror.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+      "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+      "dev": true,
+      "license": "Apache-2.0"
+    },
+    "node_modules/tsconfck": {
+      "version": "3.1.6",
+      "resolved": "https://registry.npmmirror.com/tsconfck/-/tsconfck-3.1.6.tgz",
+      "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+      "license": "MIT",
+      "bin": {
+        "tsconfck": "bin/tsconfck.js"
+      },
+      "engines": {
+        "node": "^18 || >=20"
+      },
+      "peerDependencies": {
+        "typescript": "^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD",
+      "optional": true
+    },
+    "node_modules/type-fest": {
+      "version": "4.41.0",
+      "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-4.41.0.tgz",
+      "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "5.9.3",
+      "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz",
+      "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+      "license": "Apache-2.0",
+      "peer": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=14.17"
+      }
+    },
+    "node_modules/ufo": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.4.tgz",
+      "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==",
+      "license": "MIT"
+    },
+    "node_modules/ultrahtml": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmmirror.com/ultrahtml/-/ultrahtml-1.6.0.tgz",
+      "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==",
+      "license": "MIT"
+    },
+    "node_modules/uncrypto": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmmirror.com/uncrypto/-/uncrypto-0.1.3.tgz",
+      "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==",
+      "license": "MIT"
+    },
+    "node_modules/undici-types": {
+      "version": "7.16.0",
+      "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz",
+      "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+      "license": "MIT"
+    },
+    "node_modules/unified": {
+      "version": "11.0.5",
+      "resolved": "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz",
+      "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "bail": "^2.0.0",
+        "devlop": "^1.0.0",
+        "extend": "^3.0.0",
+        "is-plain-obj": "^4.0.0",
+        "trough": "^2.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unifont": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmmirror.com/unifont/-/unifont-0.7.4.tgz",
+      "integrity": "sha512-oHeis4/xl42HUIeHuNZRGEvxj5AaIKR+bHPNegRq5LV1gdc3jundpONbjglKpihmJf+dswygdMJn3eftGIMemg==",
+      "license": "MIT",
+      "dependencies": {
+        "css-tree": "^3.1.0",
+        "ofetch": "^1.5.1",
+        "ohash": "^2.0.11"
+      }
+    },
+    "node_modules/unist-util-find-after": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+      "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-is": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz",
+      "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-modify-children": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
+      "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "array-iterate": "^2.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-position": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-position/-/unist-util-position-5.0.0.tgz",
+      "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-remove-position": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+      "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-visit": "^5.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-stringify-position": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
+      "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
+      "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0",
+        "unist-util-visit-parents": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit-children": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
+      "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unist-util-visit-parents": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmmirror.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
+      "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-is": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/unstorage": {
+      "version": "1.17.5",
+      "resolved": "https://registry.npmmirror.com/unstorage/-/unstorage-1.17.5.tgz",
+      "integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==",
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "^3.1.3",
+        "chokidar": "^5.0.0",
+        "destr": "^2.0.5",
+        "h3": "^1.15.10",
+        "lru-cache": "^11.2.7",
+        "node-fetch-native": "^1.6.7",
+        "ofetch": "^1.5.1",
+        "ufo": "^1.6.3"
+      },
+      "peerDependencies": {
+        "@azure/app-configuration": "^1.8.0",
+        "@azure/cosmos": "^4.2.0",
+        "@azure/data-tables": "^13.3.0",
+        "@azure/identity": "^4.6.0",
+        "@azure/keyvault-secrets": "^4.9.0",
+        "@azure/storage-blob": "^12.26.0",
+        "@capacitor/preferences": "^6 || ^7 || ^8",
+        "@deno/kv": ">=0.9.0",
+        "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0",
+        "@planetscale/database": "^1.19.0",
+        "@upstash/redis": "^1.34.3",
+        "@vercel/blob": ">=0.27.1",
+        "@vercel/functions": "^2.2.12 || ^3.0.0",
+        "@vercel/kv": "^1 || ^2 || ^3",
+        "aws4fetch": "^1.0.20",
+        "db0": ">=0.2.1",
+        "idb-keyval": "^6.2.1",
+        "ioredis": "^5.4.2",
+        "uploadthing": "^7.4.4"
+      },
+      "peerDependenciesMeta": {
+        "@azure/app-configuration": {
+          "optional": true
+        },
+        "@azure/cosmos": {
+          "optional": true
+        },
+        "@azure/data-tables": {
+          "optional": true
+        },
+        "@azure/identity": {
+          "optional": true
+        },
+        "@azure/keyvault-secrets": {
+          "optional": true
+        },
+        "@azure/storage-blob": {
+          "optional": true
+        },
+        "@capacitor/preferences": {
+          "optional": true
+        },
+        "@deno/kv": {
+          "optional": true
+        },
+        "@netlify/blobs": {
+          "optional": true
+        },
+        "@planetscale/database": {
+          "optional": true
+        },
+        "@upstash/redis": {
+          "optional": true
+        },
+        "@vercel/blob": {
+          "optional": true
+        },
+        "@vercel/functions": {
+          "optional": true
+        },
+        "@vercel/kv": {
+          "optional": true
+        },
+        "aws4fetch": {
+          "optional": true
+        },
+        "db0": {
+          "optional": true
+        },
+        "idb-keyval": {
+          "optional": true
+        },
+        "ioredis": {
+          "optional": true
+        },
+        "uploadthing": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/unstorage/node_modules/chokidar": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-5.0.0.tgz",
+      "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==",
+      "license": "MIT",
+      "dependencies": {
+        "readdirp": "^5.0.0"
+      },
+      "engines": {
+        "node": ">= 20.19.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/unstorage/node_modules/readdirp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-5.0.0.tgz",
+      "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 20.19.0"
+      },
+      "funding": {
+        "type": "individual",
+        "url": "https://paulmillr.com/funding/"
+      }
+    },
+    "node_modules/update-browserslist-db": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
+      "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/vfile": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.3.tgz",
+      "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "vfile-message": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile-location": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/vfile-location/-/vfile-location-5.0.3.tgz",
+      "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "vfile": "^6.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vfile-message": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz",
+      "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
+      "license": "MIT",
+      "dependencies": {
+        "@types/unist": "^3.0.0",
+        "unist-util-stringify-position": "^4.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/unified"
+      }
+    },
+    "node_modules/vite": {
+      "version": "6.4.2",
+      "resolved": "https://registry.npmmirror.com/vite/-/vite-6.4.2.tgz",
+      "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==",
+      "license": "MIT",
+      "dependencies": {
+        "esbuild": "^0.25.0",
+        "fdir": "^6.4.4",
+        "picomatch": "^4.0.2",
+        "postcss": "^8.5.3",
+        "rollup": "^4.34.9",
+        "tinyglobby": "^0.2.13"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
+      "engines": {
+        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+        "jiti": ">=1.21.0",
+        "less": "*",
+        "lightningcss": "^1.21.0",
+        "sass": "*",
+        "sass-embedded": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.16.0",
+        "tsx": "^4.8.1",
+        "yaml": "^2.4.2"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "jiti": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        },
+        "tsx": {
+          "optional": true
+        },
+        "yaml": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
+      "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/android-arm": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
+      "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/android-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
+      "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/android-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
+      "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
+      "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/darwin-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
+      "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
+      "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
+      "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-arm": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
+      "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
+      "cpu": [
+        "arm"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
+      "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-ia32": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
+      "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-loong64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
+      "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
+      "cpu": [
+        "loong64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
+      "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
+      "cpu": [
+        "mips64el"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
+      "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
+      "cpu": [
+        "ppc64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
+      "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
+      "cpu": [
+        "riscv64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-s390x": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
+      "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
+      "cpu": [
+        "s390x"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/linux-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
+      "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/netbsd-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
+      "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
+      "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/openbsd-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
+      "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
+      "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/openharmony-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
+      "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openharmony"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/sunos-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
+      "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/win32-arm64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
+      "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
+      "cpu": [
+        "arm64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/win32-ia32": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
+      "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/@esbuild/win32-x64": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
+      "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
+      "cpu": [
+        "x64"
+      ],
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
+    },
+    "node_modules/vite/node_modules/esbuild": {
+      "version": "0.25.12",
+      "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.12.tgz",
+      "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.25.12",
+        "@esbuild/android-arm": "0.25.12",
+        "@esbuild/android-arm64": "0.25.12",
+        "@esbuild/android-x64": "0.25.12",
+        "@esbuild/darwin-arm64": "0.25.12",
+        "@esbuild/darwin-x64": "0.25.12",
+        "@esbuild/freebsd-arm64": "0.25.12",
+        "@esbuild/freebsd-x64": "0.25.12",
+        "@esbuild/linux-arm": "0.25.12",
+        "@esbuild/linux-arm64": "0.25.12",
+        "@esbuild/linux-ia32": "0.25.12",
+        "@esbuild/linux-loong64": "0.25.12",
+        "@esbuild/linux-mips64el": "0.25.12",
+        "@esbuild/linux-ppc64": "0.25.12",
+        "@esbuild/linux-riscv64": "0.25.12",
+        "@esbuild/linux-s390x": "0.25.12",
+        "@esbuild/linux-x64": "0.25.12",
+        "@esbuild/netbsd-arm64": "0.25.12",
+        "@esbuild/netbsd-x64": "0.25.12",
+        "@esbuild/openbsd-arm64": "0.25.12",
+        "@esbuild/openbsd-x64": "0.25.12",
+        "@esbuild/openharmony-arm64": "0.25.12",
+        "@esbuild/sunos-x64": "0.25.12",
+        "@esbuild/win32-arm64": "0.25.12",
+        "@esbuild/win32-ia32": "0.25.12",
+        "@esbuild/win32-x64": "0.25.12"
+      }
+    },
+    "node_modules/vitefu": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/vitefu/-/vitefu-1.1.3.tgz",
+      "integrity": "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==",
+      "license": "MIT",
+      "workspaces": [
+        "tests/deps/*",
+        "tests/projects/*",
+        "tests/projects/workspace/packages/*"
+      ],
+      "peerDependencies": {
+        "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+      },
+      "peerDependenciesMeta": {
+        "vite": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/web-namespaces": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/web-namespaces/-/web-namespaces-2.0.1.tgz",
+      "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    },
+    "node_modules/which-pm-runs": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
+      "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/widest-line": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmmirror.com/widest-line/-/widest-line-5.0.0.tgz",
+      "integrity": "sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==",
+      "license": "MIT",
+      "dependencies": {
+        "string-width": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "9.0.2",
+      "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
+      "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^6.2.1",
+        "string-width": "^7.0.0",
+        "strip-ansi": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/xxhash-wasm": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz",
+      "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==",
+      "license": "MIT"
+    },
+    "node_modules/yargs-parser": {
+      "version": "21.1.1",
+      "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz",
+      "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/yocto-queue": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-1.2.2.tgz",
+      "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/yocto-spinner": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmmirror.com/yocto-spinner/-/yocto-spinner-0.2.3.tgz",
+      "integrity": "sha512-sqBChb33loEnkoXte1bLg45bEBsOP9N1kzQh5JZNKj/0rik4zAPTNSAVPj3uQAdc6slYJ0Ksc403G2XgxsJQFQ==",
+      "license": "MIT",
+      "dependencies": {
+        "yoctocolors": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=18.19"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/yoctocolors": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/yoctocolors/-/yoctocolors-2.1.2.tgz",
+      "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/zod": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmmirror.com/zod/-/zod-4.4.3.tgz",
+      "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/colinhacks"
+      }
+    },
+    "node_modules/zod-to-json-schema": {
+      "version": "3.25.2",
+      "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
+      "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
+      "license": "ISC",
+      "peerDependencies": {
+        "zod": "^3.25.28 || ^4"
+      }
+    },
+    "node_modules/zwitch": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz",
+      "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
+      "license": "MIT",
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/wooorm"
+      }
+    }
+  }
+}

+ 22 - 0
website/package.json

@@ -0,0 +1,22 @@
+{
+  "name": "fmode-website",
+  "version": "1.0.0",
+  "description": "未来飞马 (Fmode) - Enterprise AI Harnessing Platform Website",
+  "type": "module",
+  "scripts": {
+    "dev": "astro dev",
+    "start": "astro dev",
+    "build": "astro build",
+    "preview": "astro preview",
+    "astro": "astro"
+  },
+  "dependencies": {
+    "@astrojs/sitemap": "^3.2.1",
+    "astro": "^5.1.0"
+  },
+  "devDependencies": {
+    "tailwindcss": "^3.4.17",
+    "postcss": "^8.4.49",
+    "autoprefixer": "^10.4.20"
+  }
+}

+ 6 - 0
website/postcss.config.js

@@ -0,0 +1,6 @@
+export default {
+  plugins: {
+    tailwindcss: {},
+    autoprefixer: {},
+  },
+};

+ 10 - 0
website/public/favicon.svg

@@ -0,0 +1,10 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
+  <defs>
+    <linearGradient id="g" x1="0%" y1="0%" x2="100%" y2="100%">
+      <stop offset="0%" style="stop-color:#2563eb"/>
+      <stop offset="100%" style="stop-color:#9333ea"/>
+    </linearGradient>
+  </defs>
+  <rect width="100" height="100" rx="20" fill="url(#g)"/>
+  <text x="50" y="68" text-anchor="middle" fill="white" font-size="55" font-weight="900" font-family="Arial, sans-serif">F</text>
+</svg>

+ 35 - 0
website/public/llms.txt

@@ -0,0 +1,35 @@
+# llms.txt — Fmode (未来飞马) Website
+# This file helps AI models understand our site structure for Generative Engine Optimization (GEO)
+# Format based on the llms.txt proposal
+
+# Site Identity
+name: 未来飞马 (Fmode)
+domain: fmode.cn
+description: Enterprise Harnessing Engineering Platform — Simplifying AI, Harnessing AI
+category: AI Engineering, Enterprise Software, Developer Tools
+
+# Core Pages
+/zh/ — Chinese Homepage: Product overview, value proposition, and quick start
+/en/ — English Homepage: International landing page
+/zh/product/harness-engineering/ — Core SSOT page for Harness Engineering concept
+/zh/product/vibe-coding/ — Harness for Vibe Coding product details
+/zh/product/agent-harness/ — Harness for Agent product details
+/zh/faq/ — Frequently asked questions with full GEO-optimized answers
+/zh/glossary/ — Authoritative definitions for AI engineering terminology
+/zh/blog/ — Technical blog on Software 3.0, AI engineering, and enterprise AI
+
+# Key Concepts (SSOT pages)
+Harness Engineering: /zh/product/harness-engineering/
+Software 3.0: /zh/blog/what-is-software-3/
+Vibe Coding: /zh/product/vibe-coding/
+AI Agent Governance: /zh/product/agent-harness/
+Q-value (AI Business Gain Factor): /zh/blog/ai-enterprise-q-dilemma/
+
+# Content Clusters
+Software 3.0 Paradigm: /zh/blog/what-is-software-3/, /zh/product/harness-engineering/
+Enterprise AI Implementation: /zh/blog/ai-enterprise-q-dilemma/, /zh/solutions/enterprise/
+Vibe Coding & AI Development: /zh/blog/vibe-coding-guide/, /zh/product/vibe-coding/
+
+# Allow AI crawlers to access all content pages
+# Structured data (JSON-LD) is embedded on all pages
+# hreflang attributes are set for all multilingual pages

+ 23 - 0
website/public/robots.txt

@@ -0,0 +1,23 @@
+User-agent: *
+Allow: /
+Disallow: /api/
+Disallow: /admin/
+
+# AI Crawlers
+User-agent: GPTBot
+Allow: /
+
+User-agent: ChatGPT-User
+Allow: /
+
+User-agent: Google-Extended
+Allow: /
+
+User-agent: anthropic-ai
+Allow: /
+
+User-agent: CCBot
+Allow: /
+
+# Sitemaps
+Sitemap: https://fmode.cn/sitemap-index.xml

+ 51 - 0
website/src/components/BlogCard.astro

@@ -0,0 +1,51 @@
+---
+/**
+ * Blog card component for article listings.
+ */
+interface Props {
+  title: string;
+  description: string;
+  slug: string;
+  lang?: 'zh' | 'en';
+  publishDate?: Date;
+  tags?: string[];
+  readingTime?: string;
+}
+
+const { title, description, slug, lang = 'zh', publishDate, tags = [], readingTime } = Astro.props;
+
+const formattedDate = publishDate
+  ? publishDate.toLocaleDateString(lang === 'zh' ? 'zh-CN' : 'en-US', {
+      year: 'numeric',
+      month: 'long',
+      day: 'numeric',
+    })
+  : '';
+---
+
+<article class="card-hover group flex flex-col">
+  <div class="flex-1">
+    <div class="flex items-center gap-2 mb-3 flex-wrap">
+      {tags.slice(0, 3).map((tag) => (
+        <span class="inline-flex items-center rounded-full bg-primary-50 px-2.5 py-0.5 text-xs font-medium text-primary-700">
+          {tag}
+        </span>
+      ))}
+    </div>
+
+    <h3 class="text-lg font-semibold text-dark-900 group-hover:text-primary-700 transition-colors line-clamp-2">
+      <a href={`/${lang}/blog/${slug}/`} class="no-underline hover:no-underline">
+        {title}
+      </a>
+    </h3>
+
+    <p class="mt-2 text-sm text-dark-500 line-clamp-3 leading-relaxed">
+      {description}
+    </p>
+  </div>
+
+  <div class="mt-4 flex items-center justify-between text-xs text-dark-400">
+    {formattedDate && <time datetime={publishDate?.toISOString()}>{formattedDate}</time>}
+    {readingTime && <span>{readingTime}</span>}
+  </div>
+</article>

+ 70 - 0
website/src/components/CTASection.astro

@@ -0,0 +1,70 @@
+---
+/**
+ * Call-to-Action section component.
+ * Used across pages to drive conversions.
+ */
+interface Props {
+  lang?: 'zh' | 'en';
+  variant?: 'primary' | 'secondary' | 'dark';
+}
+
+const { lang = 'zh', variant = 'primary' } = Astro.props;
+
+const isZh = lang === 'zh';
+
+const content = {
+  zh: {
+    heading: '准备好让 AI 为您的业务服务了吗?',
+    description: '从今天开始,用未来飞马驾驭工程站,让AI能力安全、稳定、低成本地落地您的业务场景。',
+    primaryBtn: '免费开始使用',
+    secondaryBtn: '联系销售团队',
+    command: 'npx -y @fmode/studio',
+  },
+  en: {
+    heading: 'Ready to harness AI for your business?',
+    description: 'Start today with FmodeStudio. Deploy AI capabilities safely, stably, and cost-effectively in your business scenarios.',
+    primaryBtn: 'Start Free',
+    secondaryBtn: 'Contact Sales',
+    command: 'npx -y @fmode/studio',
+  },
+};
+
+const c = content[lang];
+
+const bgClass = variant === 'dark'
+  ? 'bg-dark-900 text-white'
+  : variant === 'secondary'
+  ? 'bg-primary-50'
+  : 'bg-gradient-to-br from-primary-600 to-accent-600 text-white';
+---
+
+<section class={`${bgClass} ${variant !== 'dark' ? '' : ''}`}>
+  <div class="container-page section-padding">
+    <div class="mx-auto max-w-3xl text-center">
+      <h2 class={`heading-2 ${variant === 'primary' ? 'text-white' : variant === 'dark' ? 'text-white' : 'text-dark-900'}`}>
+        {c.heading}
+      </h2>
+      <p class={`mt-4 text-lg leading-relaxed ${variant === 'primary' ? 'text-white/80' : variant === 'dark' ? 'text-dark-300' : 'text-dark-500'}`}>
+        {c.description}
+      </p>
+
+      <div class="mt-8 flex flex-col sm:flex-row items-center justify-center gap-4">
+        <a href={`/${lang}/contact/`} class={`btn-primary ${variant === 'primary' ? '!bg-white !text-primary-700 hover:!bg-white/90' : ''}`}>
+          {c.primaryBtn}
+        </a>
+        <a href={`/${lang}/product/`} class={`${variant === 'primary' ? 'text-white/90 hover:text-white border border-white/30' : 'text-dark-600 hover:text-dark-900 border border-dark-300'} inline-flex items-center justify-center rounded-lg px-6 py-3 text-sm font-semibold transition-all`}>
+          {c.secondaryBtn}
+        </a>
+      </div>
+
+      <div class="mt-8">
+        <p class={`text-sm mb-2 ${variant === 'primary' ? 'text-white/60' : 'text-dark-400'}`}>
+          {isZh ? '一行命令,即刻开始' : 'One command to start'}
+        </p>
+        <code class={`inline-block rounded-lg px-4 py-2 text-sm font-mono ${variant === 'primary' ? 'bg-black/20 text-white' : 'bg-white text-dark-700 border border-dark-200'}`}>
+          {c.command}
+        </code>
+      </div>
+    </div>
+  </div>
+</section>

+ 39 - 0
website/src/components/FeatureCard.astro

@@ -0,0 +1,39 @@
+---
+/**
+ * Feature card component for showcasing product capabilities.
+ */
+interface Props {
+  icon?: string;
+  title: string;
+  description: string;
+  href?: string;
+  lang?: 'zh' | 'en';
+}
+
+const { icon, title, description, href, lang = 'zh' } = Astro.props;
+---
+
+<div class="card-hover group">
+  {icon && (
+    <div class="mb-4 flex h-12 w-12 items-center justify-center rounded-xl bg-primary-50 text-primary-600 group-hover:bg-primary-100 transition-colors">
+      <span class="text-2xl">{icon}</span>
+    </div>
+  )}
+  <h3 class="text-lg font-semibold text-dark-900 group-hover:text-primary-700 transition-colors">
+    {title}
+  </h3>
+  <p class="mt-2 text-sm text-dark-500 leading-relaxed">
+    {description}
+  </p>
+  {href && (
+    <a
+      href={`/${lang}${href}`}
+      class="mt-4 inline-flex items-center gap-1 text-sm font-medium text-primary-600 hover:text-primary-700 transition-colors"
+    >
+      {lang === 'zh' ? '了解更多' : 'Learn more'}
+      <svg class="h-4 w-4 transition-transform group-hover:translate-x-1" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
+      </svg>
+    </a>
+  )}
+</div>

+ 80 - 0
website/src/components/Footer.astro

@@ -0,0 +1,80 @@
+---
+/**
+ * Site footer with navigation links and copyright.
+ */
+import { footerNavigation } from '@data/navigation';
+import { SITE } from '@data/site-config';
+
+interface Props {
+  lang?: 'zh' | 'en';
+}
+
+const { lang = 'zh' } = Astro.props;
+
+const isZh = lang === 'zh';
+
+const footerSections = [
+  { title: isZh ? '产品' : 'Product', items: footerNavigation.product, key: 'product' },
+  { title: isZh ? '解决方案' : 'Solutions', items: footerNavigation.solutions, key: 'solutions' },
+  { title: isZh ? '资源' : 'Resources', items: footerNavigation.resources, key: 'resources' },
+  { title: isZh ? '公司' : 'Company', items: footerNavigation.company, key: 'company' },
+];
+---
+
+<footer class="border-t border-dark-200 bg-dark-50">
+  <div class="container-page section-padding">
+    <div class="grid grid-cols-2 gap-8 md:grid-cols-5">
+      <!-- Brand Column -->
+      <div class="col-span-2 md:col-span-1">
+        <a href={`/${lang}/`} class="flex items-center gap-2.5 font-bold text-xl text-dark-900 no-underline">
+          <span class="flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br from-primary-600 to-accent-600 text-white text-sm font-extrabold">
+            F
+          </span>
+          <span>{isZh ? '未来飞马' : 'Fmode'}</span>
+        </a>
+        <p class="mt-3 text-sm text-dark-500 leading-relaxed">
+          {isZh ? SITE.slogan : SITE.sloganEn}
+        </p>
+        <div class="mt-4 flex items-center gap-3">
+          <a href={SITE.social.github} class="text-dark-400 hover:text-dark-600 transition-colors" aria-label="GitHub">
+            <svg class="h-5 w-5" fill="currentColor" viewBox="0 0 24 24"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>
+          </a>
+        </div>
+      </div>
+
+      <!-- Navigation Columns -->
+      {footerSections.map((section) => (
+        <div>
+          <h3 class="text-sm font-semibold text-dark-900">{section.title}</h3>
+          <ul class="mt-3 space-y-2">
+            {section.items.map((item) => (
+              <li>
+                <a href={`/${lang}${item.href}`} class="text-sm text-dark-500 hover:text-primary-600 transition-colors">
+                  {item.label}
+                </a>
+              </li>
+            ))}
+          </ul>
+        </div>
+      ))}
+    </div>
+
+    <!-- Bottom Bar -->
+    <div class="mt-12 border-t border-dark-200 pt-8 flex flex-col sm:flex-row items-center justify-between gap-4">
+      <p class="text-sm text-dark-400">
+        {isZh ? '© 2026 未来飞马. All rights reserved.' : '© 2026 Fmode. All rights reserved.'}
+      </p>
+      <div class="flex items-center gap-6">
+        <a href={`/${lang}/faq/`} class="text-sm text-dark-400 hover:text-dark-600 transition-colors">
+          {isZh ? '常见问题' : 'FAQ'}
+        </a>
+        <a href={`/${lang}/glossary/`} class="text-sm text-dark-400 hover:text-dark-600 transition-colors">
+          {isZh ? '术语表' : 'Glossary'}
+        </a>
+        <a href={`/${lang}/contact/`} class="text-sm text-dark-400 hover:text-dark-600 transition-colors">
+          {isZh ? '联系我们' : 'Contact'}
+        </a>
+      </div>
+    </div>
+  </div>
+</footer>

+ 131 - 0
website/src/components/Header.astro

@@ -0,0 +1,131 @@
+---
+/**
+ * Site header with navigation and language switcher.
+ */
+import LanguagePicker from './LanguagePicker.astro';
+import { mainNavigation } from '@data/navigation';
+
+interface Props {
+  lang?: 'zh' | 'en';
+  currentPath?: string;
+}
+
+const { lang = 'zh', currentPath = '/' } = Astro.props;
+
+const isZh = lang === 'zh';
+const navItems = mainNavigation;
+---
+
+<header class="sticky top-0 z-50 border-b border-dark-100 bg-white/95 backdrop-blur supports-[backdrop-filter]:bg-white/80">
+  <div class="container-page">
+    <div class="flex h-16 items-center justify-between">
+      <!-- Logo -->
+      <a href={`/${lang}/`} class="flex items-center gap-2.5 font-bold text-xl text-dark-900 no-underline">
+        <span class="flex h-9 w-9 items-center justify-center rounded-lg bg-gradient-to-br from-primary-600 to-accent-600 text-white text-sm font-extrabold">
+          F
+        </span>
+        <span class="hidden sm:inline">
+          {isZh ? '未来飞马' : 'Fmode'}
+        </span>
+      </a>
+
+      <!-- Desktop Navigation -->
+      <nav class="hidden lg:flex items-center gap-1" aria-label="Main navigation">
+        {navItems.map((item) => (
+          item.children ? (
+            <div class="group relative">
+              <button class="inline-flex items-center gap-1 rounded-md px-3 py-2 text-sm font-medium text-dark-600 hover:text-primary-600 hover:bg-primary-50 transition-colors">
+                {isZh ? item.label : item.children[0]?.label || item.label}
+                <svg class="h-4 w-4 transition-transform group-hover:rotate-180" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
+                </svg>
+              </button>
+              <div class="absolute left-0 top-full pt-1 opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200">
+                <div class="min-w-[200px] rounded-xl border border-dark-200 bg-white p-2 shadow-lg">
+                  {item.children.map((child) => (
+                    <a
+                      href={`/${lang}${child.href}`}
+                      class="block rounded-lg px-4 py-2.5 text-sm text-dark-600 hover:text-primary-600 hover:bg-primary-50 transition-colors"
+                    >
+                      {child.label}
+                    </a>
+                  ))}
+                </div>
+              </div>
+            </div>
+          ) : (
+            <a
+              href={`/${lang}${item.href}`}
+              class="rounded-md px-3 py-2 text-sm font-medium text-dark-600 hover:text-primary-600 hover:bg-primary-50 transition-colors"
+            >
+              {item.label}
+            </a>
+          )
+        ))}
+      </nav>
+
+      <!-- Right side: Language + CTA -->
+      <div class="flex items-center gap-3">
+        <LanguagePicker lang={lang} currentPath={currentPath} />
+
+        <a href={`/${lang}/contact/`} class="btn-primary text-sm hidden sm:inline-flex px-4 py-2">
+          {isZh ? '免费试用' : 'Try Free'}
+        </a>
+
+        <!-- Mobile menu button -->
+        <button
+          id="mobile-menu-btn"
+          class="inline-flex lg:hidden items-center justify-center rounded-md p-2 text-dark-600 hover:bg-dark-100"
+          aria-label="Toggle menu"
+          type="button"
+        >
+          <svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+            <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
+          </svg>
+        </button>
+      </div>
+    </div>
+  </div>
+
+  <!-- Mobile Navigation (hidden by default, shown via JS) -->
+  <div id="mobile-menu" class="hidden lg:hidden border-t border-dark-100 bg-white">
+    <div class="container-page py-4 space-y-1">
+      {navItems.map((item) => (
+        item.children ? (
+          <details class="group">
+            <summary class="cursor-pointer rounded-lg px-4 py-3 text-sm font-medium text-dark-600 hover:text-primary-600 hover:bg-primary-50 list-none">
+              <span class="inline-flex items-center gap-2">
+                {item.label}
+                <svg class="h-4 w-4 transition-transform group-open:rotate-180" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+                  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
+                </svg>
+              </span>
+            </summary>
+            <div class="ml-4 space-y-1 pt-1">
+              {item.children.map((child) => (
+                <a href={`/${lang}${child.href}`} class="block rounded-lg px-4 py-2.5 text-sm text-dark-500 hover:text-primary-600">
+                  {child.label}
+                </a>
+              ))}
+            </div>
+          </details>
+        ) : (
+          <a href={`/${lang}${item.href}`} class="block rounded-lg px-4 py-3 text-sm font-medium text-dark-600 hover:text-primary-600 hover:bg-primary-50">
+            {item.label}
+          </a>
+        )
+      ))}
+    </div>
+  </div>
+</header>
+
+<script>
+  // Simple mobile menu toggle
+  const btn = document.getElementById('mobile-menu-btn');
+  const menu = document.getElementById('mobile-menu');
+  if (btn && menu) {
+    btn.addEventListener('click', () => {
+      menu.classList.toggle('hidden');
+    });
+  }
+</script>

+ 36 - 0
website/src/components/LanguagePicker.astro

@@ -0,0 +1,36 @@
+---
+/**
+ * Language switcher component.
+ * Provides a link to the alternate language version of the current page.
+ */
+import { getAltLang } from '@i18n/utils';
+
+interface Props {
+  lang?: 'zh' | 'en';
+  currentPath?: string;
+}
+
+const { lang = 'zh', currentPath = '/' } = Astro.props;
+
+const altLang = getAltLang(lang);
+
+// Build the alternate language path by replacing the language prefix
+const pathParts = currentPath.split('/').filter(Boolean);
+// Remove current lang prefix if present
+if (pathParts[0] === lang) {
+  pathParts.shift();
+}
+const altPath = `/${altLang}/${pathParts.join('/')}`;
+---
+
+<a
+  href={altPath}
+  class="inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-sm font-medium text-dark-500 hover:text-primary-600 hover:bg-primary-50 transition-colors"
+  hreflang={altLang === 'zh' ? 'zh-CN' : 'en-US'}
+  title={lang === 'zh' ? 'Switch to English' : '切换到中文'}
+>
+  <svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
+  </svg>
+  <span>{lang === 'zh' ? 'EN' : '中文'}</span>
+</a>

+ 93 - 0
website/src/components/SEOHead.astro

@@ -0,0 +1,93 @@
+---
+/**
+ * SEOHead - Comprehensive SEO head component with GEO optimization.
+ * Handles meta tags, Open Graph, Twitter Cards, hreflang, and structured data.
+ */
+import { generateSEOMeta } from '@utils/seo';
+
+interface Props {
+  title: string;
+  description: string;
+  lang?: 'zh' | 'en';
+  canonicalURL?: string;
+  ogImage?: string;
+  ogType?: 'website' | 'article' | 'product';
+  schema?: Record<string, unknown>;
+  noIndex?: boolean;
+  publishedDate?: Date;
+  modifiedDate?: Date;
+  author?: string;
+  tags?: string[];
+  alternateLanguages?: Array<{ lang: string; href: string }>;
+}
+
+const {
+  title,
+  description,
+  lang = 'zh',
+  canonicalURL,
+  ogImage,
+  ogType,
+  schema,
+  noIndex,
+  publishedDate,
+  modifiedDate,
+  author,
+  tags,
+  alternateLanguages = [],
+} = Astro.props;
+
+const seo = generateSEOMeta(lang, {
+  title,
+  description,
+  canonicalURL,
+  ogImage,
+  ogType,
+  noIndex,
+  publishedDate,
+  modifiedDate,
+  author,
+  tags,
+});
+
+const htmlLang = lang === 'zh' ? 'zh-CN' : 'en-US';
+---
+
+<!-- Primary Meta -->
+<title>{seo.title}</title>
+<meta name="description" content={seo.description} />
+
+<!-- Open Graph -->
+<meta property="og:title" content={seo.title} />
+<meta property="og:description" content={seo.description} />
+<meta property="og:type" content={ogType || 'website'} />
+<meta property="og:image" content={seo.meta.find(m => m.property === 'og:image')?.content || ''} />
+<meta property="og:site_name" content="未来飞马 Fmode" />
+<meta property="og:locale" content={lang === 'zh' ? 'zh_CN' : 'en_US'} />
+
+<!-- Twitter Card -->
+<meta name="twitter:card" content="summary_large_image" />
+<meta name="twitter:title" content={seo.title} />
+<meta name="twitter:description" content={seo.description} />
+
+<!-- Canonical -->
+{canonicalURL && <link rel="canonical" href={canonicalURL} />}
+
+<!-- hreflang for multilingual SEO -->
+{
+  alternateLanguages.map((alt) => (
+    <link rel="alternate" hreflang={alt.lang === 'zh' ? 'zh-CN' : 'en-US'} href={alt.href} />
+  ))
+}
+<link rel="alternate" hreflang="x-default" href={canonicalURL || `https://fmode.cn/zh/`} />
+
+<!-- Robots -->
+<meta name="robots" content={noIndex ? 'noindex, nofollow' : 'index, follow'} />
+
+<!-- Additional article metadata -->
+{publishedDate && <meta name="article:published_time" content={publishedDate.toISOString()} />}
+{modifiedDate && <meta name="article:modified_time" content={modifiedDate.toISOString()} />}
+{tags && tags.length > 0 && <meta name="keywords" content={tags.join(', ')} />}
+
+<!-- Structured Data -->
+{schema && <script type="application/ld+json" set:html={JSON.stringify(schema)}></script>}

+ 13 - 0
website/src/components/StructuredData.astro

@@ -0,0 +1,13 @@
+---
+/**
+ * Injects JSON-LD structured data into the page head.
+ * Used for GEO/SEO optimization — helps AI search engines understand page content.
+ */
+interface Props {
+  schema: Record<string, unknown>;
+}
+
+const { schema } = Astro.props;
+---
+
+<script type="application/ld+json" set:html={JSON.stringify(schema)}></script>

+ 86 - 0
website/src/content/blog/zh/ai-enterprise-q-dilemma.md

@@ -0,0 +1,86 @@
+---
+title: "企业 AI 的「Q 值困境」:为什么 80% 的企业 AI 投入尚未产生回报?"
+description: "深度解读 AI 商业增益因子(Q 值),分析企业 AI 落地难的三大根本原因,并提供突破 Q<1 困局的系统解决方案。"
+publishDate: 2026-05-20
+modifiedDate: 2026-05-25
+author: "未来飞马团队"
+tags: ["企业AI", "Q值", "AI ROI", "AI落地", "驾驭工程"]
+readingTime: "10 分钟"
+image: "/images/blog/q-dilemma.png"
+---
+
+## AI 的现实困境:投入与产出的巨大鸿沟
+
+德勤 2026 Q1 报告揭示了一个令人震惊的事实:
+
+- **80%** 的大中型企业已部署 AI 工具
+- 但仅 **15%** 实现了规模化商业价值
+- 超过 **60%** 的项目,AI 收益不如人工/传统软件
+- 绝大多数项目 **Q 值 < 1**
+
+### 什么是 AI 商业增益因子(Q 值)?
+
+**Q 值 = AI 带来的商业收益 ÷ AI 全链路投入成本**
+
+全链路成本不仅包括 Token 调用费用,还包含:
+- 开发与集成成本
+- 运维监控成本
+- 人工纠错成本
+- 安全合规成本
+- 组织适配与培训成本
+
+当 Q < 1 时,意味着投入大于产出——AI 不但没有降本增效,反而吞噬了企业资源。
+
+## 三大核心症结
+
+### 1. Demo 与生产的鸿沟
+
+AI 生成的代码能跑通 Demo,但面对企业级应用的**安全性、合规性、稳定性**要求时,往往需要 3-5 个月的人工重写。**"快做慢改"**成为最常见的 AI 陷阱。
+
+### 2. Agent 成本爆炸
+
+为了防止幻觉,Agent 需要不断增加上下文信息,导致 Token 消耗呈**指数级**增长。单个 Agent 月度成本轻松突破数万元,规模化部署时成为**成本黑洞**。
+
+### 3. 速赢壁垒瞬间消失
+
+基于通用模型的 AI 应用**没有护城河**。你的竞争对手可以用相同的模型和工具,在几周内复制你的"创新"。行业迅速回到价格战的老路。
+
+## 突破之道:驾驭工程
+
+问题的本质不是模型不够强,而是**我们缺乏驾驭 AI 的方法**。
+
+> 我们造了一辆时速 300 公里的跑车,却没有驾照、交通规则和刹车系统。
+
+**驾驭工程(Harness Engineering)** 是 AI 工程化的第三代范式:
+
+- **第一代 Prompt 工程**:教 AI 怎么说
+- **第二代 Context 工程**:教 AI 知道什么
+- **第三代 Harness 工程**:教 AI 按规则做
+
+通过构建标准化约束与规则体系,驾驭工程让:
+- 低成本国产模型达到**超越 GPT-4** 的落地效果
+- Agent 运营成本降低 **70%**
+- 开发交付周期从 **6 个月压缩到 1 天**
+
+## 实战验证
+
+某跨境电商品牌通过 Harness for Agent 体系,将海外模型替换为国产模型,配合精细化规则约束:
+
+| 指标 | 旧方案 | 新方案 | 变化 |
+|------|--------|--------|------|
+| 月成本 | 高 | 低 | **↓70%** |
+| 选品准确率 | 0%(全靠人工) | 70% | **↑70%** |
+| Q 值 | < 1(消耗) | 1.6(倍增) | **翻倍以上** |
+
+## 企业应该怎么做?
+
+1. **评估你的 Q 值**:算清楚 AI 的真实投入产出比
+2. **不要迷恋 Demo**:一个能跑的 Demo 离商业价值还有很长的路
+3. **投资驾驭能力**:引入 Harness 工程体系,建立 AI 管控规则
+4. **选择正确范式**:从 Software 2.0 的"定制开发"思维转向 3.0 的"Skills 组合"
+
+**AI 的商业价值不在于模型有多强大,而在于你有多善于驾驭它。**
+
+---
+
+*延伸阅读:[驾驭工程详解](/zh/product/harness-engineering/) | [Harness for Agent](/zh/product/agent-harness/)*

+ 85 - 0
website/src/content/blog/zh/vibe-coding-guide.md

@@ -0,0 +1,85 @@
+---
+title: "Vibe Coding 完全指南:从自然语言到生产级应用"
+description: "全面了解 Vibe Coding 的定义、原理、工具链,以及如何通过 Harness 驾驭层将 AI 生成的代码从 Demo 提升到生产级水平。"
+publishDate: 2026-05-25
+modifiedDate: 2026-05-28
+author: "未来飞马团队"
+tags: ["Vibe Coding", "AI编程", "代码生成", "全栈开发", "Harness"]
+readingTime: "9 分钟"
+image: "/images/blog/vibe-coding.png"
+---
+
+## 什么是 Vibe Coding?
+
+Vibe Coding(氛围编程)是 Andrej Karpathy 提出的概念——你用自然语言描述想要什么,AI 自动生成完整的应用程序。你不再是代码的"作者",而是"导演"——设定方向、审核结果、做出关键决策。
+
+### Vibe Coding ≠ AI 辅助编程
+
+这二者的本质区别就像**雇佣一个助手**和**雇佣一个建筑师**:
+
+- **AI 辅助编程**:AI 是你的助手,帮你写函数、补全代码、查文档。你仍然需要亲手编写和管理代码库的每个细节。
+- **Vibe Coding**:AI 是你的建筑师,理解你的需求,搭建完整架构,生成可运行系统。你只需描述"想要什么"和判断"做得好不好"。
+
+## 裸奔的 Vibe Coding:Demo 陷阱
+
+一个残酷的事实:**直接从 ChatGPT 或 Cursor 生成的代码,99% 无法直接用于生产环境。**
+
+原因:
+1. **缺乏工程规范**:没有统一的代码风格、架构模式、错误处理
+2. **安全盲区**:SQL 注入、XSS、认证绕过——AI 不会主动考虑这些
+3. **不可维护**:代码结构混乱,业务逻辑与技术实现混杂
+4. **无后端能力**:绝大多数只能生成前端 Demo,缺乏真实的数据库和 API 能力
+
+这就是为什么很多团队兴奋地跑通 Demo 后,发现还需要 **3-5 个月**重写代码才能真正上线。
+
+## Harness for Vibe Coding:跨越 Demo 到生产的鸿沟
+
+未来飞马提出的解决方案是 **Harness for Vibe Coding**——将企业级开发规范转化为 AI 可读的标准协议,在代码生成阶段即进行实时约束。
+
+### 核心机制
+
+1. **开发规范协议化**
+   将安全合规、代码风格、架构设计、数据库建模、API 设计等企业标准,转化为结构化的规则文件。AI 在生成时必须遵循这些规则,就像程序员遵循公司 Coding Standards 一样。
+
+2. **生成时实时约束**
+   不是先生成再修改,而是在生成过程中**实时检查**每一行代码是否合规。这避免了"快做慢改"的陷阱。
+
+3. **全栈工程自动生成**
+   内置云函数引擎与数据库自动生成能力,根据业务描述**一键构建完整后端服务**。前端 + 后端 + 数据库,一次生成。
+
+### 与主流平台无缝集成
+
+Harness for Vibe Coding 预置了与以下平台的集成能力:
+- **前端部署**:Vercel、Netlify、Cloudflare Pages
+- **后端引擎**:Firebase、AWS Amplify、Supabase
+- **数据库**:PostgreSQL、DynamoDB、Firestore
+- **认证**:Auth0、Firebase Auth
+- **存储**:S3、Cloudflare R2
+- **监控**:Sentry、CloudWatch
+
+## 实战效果
+
+| 维度 | 传统开发 | 裸 Vibe Coding | Harness for Vibe Coding |
+|------|---------|---------------|------------------------|
+| 开发周期 | 20 周+ | 2 天 Demo | 1 天可上线 |
+| 代码质量 | 视团队而定 | Demo 级 | 生产级 |
+| 后端能力 | 需独立开发 | 无 | 自动生成 |
+| 安全合规 | 需人工审查 | 无保障 | 规则自动约束 |
+| 可维护性 | 视团队而定 | 极低 | 标准化结构 |
+
+## 开始使用
+
+```bash
+# 一行命令,即刻体验 Software 3.0 开发
+npx -y @fmode/studio
+```
+
+## 结语
+
+Vibe Coding 是软件开发民主化的下一个里程碑。但就像任何强大的工具一样,它需要正确的"驾驭"才能发挥真正的威力。
+
+**用自然语言创造软件的时代已经到来。你准备好了吗?**
+
+---
+
+*延伸阅读:[驾驭工程](/zh/product/harness-engineering/) | [全栈技术集成](/zh/product/vibe-coding/)*

+ 77 - 0
website/src/content/blog/zh/what-is-software-3.md

@@ -0,0 +1,77 @@
+---
+title: "Software 3.0 是什么?AI 原生时代的软件开发新范式"
+description: "深度解析 Software 3.0 的核心理念、与 1.0/2.0 的本质区别,以及企业如何拥抱这一新范式实现 AI 驱动转型。"
+publishDate: 2026-05-15
+modifiedDate: 2026-05-20
+author: "未来飞马团队"
+tags: ["Software 3.0", "AI原生", "软件开发范式", "驾驭工程"]
+readingTime: "8 分钟"
+image: "/images/blog/software-3.png"
+---
+
+## 从 Software 1.0 到 3.0:软件行业的三次范式跃迁
+
+软件行业正经历第三次重大范式变革。从手工编码到云端服务,再到今天的 AI 原生智能时代,每一次跃迁都重新定义了人与软件的关系。
+
+### Software 1.0:手工艺时代
+
+Software 1.0 的核心是**人 → 软件 → 任务**。开发者通过一行行代码,精确地告诉计算机要做什么。这像是**手工艺**——每一件产品都是定制的,效率受限于人的产能。
+
+核心特征:
+- 交付模式:从 0 到 1 定制开发
+- 核心价值:软件即标准化工具
+- 痛点:项目制开发,可复制性极低
+
+### Software 2.0:工业化时代
+
+Software 2.0 带来了 **SaaS(软件即服务)**。软件从一次性产品变成了持续服务。核心交互变为**人 → 软件 → 云 → 协同**。这是**工业化**——标准化大规模生产,边际成本递减。
+
+核心特征:
+- 交付模式:订阅制云服务
+- 核心价值:SaaS 即灵活服务
+- 痛点:服务同质化严重,创新空间有限
+
+### Software 3.0:AI 原生智能时代
+
+Software 3.0 是一场**质的飞跃**。核心交互变为**人 → AI → 任务**。用户不再需要操作复杂的软件界面,只需用自然语言描述目标,AI 智能体自主拆解并执行复杂流程。
+
+核心特征:
+- 交互方式:自然语言驱动
+- 核心价值:Skills 即核心能力
+- 核心公式:Agent = 基础模型 + Harness 驾驭层
+
+## Software 3.0 的核心公式
+
+> **Agent = 基础模型 + Harness 驾驭层**
+
+这个公式揭示了 Software 3.0 时代 AI 应用成功的关键逻辑:
+
+- **基础模型**(如 GPT-4、GLM-4)决定了 AI 能力的**理论上限**——它能多聪明、多强大
+- **Harness 驾驭层**决定了能力的**实际下限**——它能在真实业务中多稳定、多可靠
+
+打个比方:基础模型是**发动机**,Harness 是**方向盘+刹车+交通规则**。一辆时速 300 公里的跑车,如果没有好的驾驭系统,要么原地轰油门,要么一上路就翻车。
+
+## 为什么现在是 Software 3.0 的最佳时机?
+
+1. **AI 能力成熟**:大语言模型已经具备了理解复杂任务和执行多步骤流程的能力
+2. **成本持续下降**:Token 成本每年下降 50-80%,国产模型表现逼近国际一流
+3. **工程化突破**:Harness Engineering 驾驭工程的出现,解决了 AI 从"不可控实验"到"可预期生产资料"的跨越
+4. **市场需求紧迫**:80% 的企业已部署 AI,但仅 15% 实现了规模化价值——市场迫切需要真正能落地的方案
+
+## 企业如何拥抱 Software 3.0?
+
+转型不是一蹴而就的。未来飞马总结了一套 **1-7-90 天陪跑模型**:
+
+- **第 1 天**:从业务 SOP 直接生成 Agentic 业务智能体,核心流程即刻自动化
+- **第 7 天**:深度覆盖核心业务痛点,打通数据上下游,形成价值闭环
+- **第 90 天**:构建企业专属智能中枢,掌握自主迭代能力
+
+## 结语
+
+Software 3.0 不是未来,它正在发生。那些率先拥抱这一范式的企业,将在 AI 时代建立起真正的竞争壁垒。
+
+**让人类驾驭 AI,而不是被 AI 驾驭。**
+
+---
+
+*了解更多:[驾驭工程详解](/zh/product/harness-engineering/) | [Vibe Coding 方案](/zh/product/vibe-coding/)*

+ 19 - 0
website/src/content/config.ts

@@ -0,0 +1,19 @@
+import { defineCollection, z } from 'astro:content';
+
+const blogCollection = defineCollection({
+  type: 'content',
+  schema: z.object({
+    title: z.string(),
+    description: z.string(),
+    publishDate: z.date(),
+    modifiedDate: z.date().optional(),
+    author: z.string().default('未来飞马团队'),
+    tags: z.array(z.string()).default([]),
+    readingTime: z.string().optional(),
+    image: z.string().optional(),
+  }),
+});
+
+export const collections = {
+  'blog': blogCollection,
+};

+ 229 - 0
website/src/data/geo-keywords.ts

@@ -0,0 +1,229 @@
+/**
+ * GEO-optimized keyword clusters and question banks.
+ * These are designed to rank well in AI-generated search results
+ * by targeting specific user intent and search patterns.
+ */
+
+export interface KeywordCluster {
+  id: string;
+  topic: { zh: string; en: string };
+  description: { zh: string; en: string };
+  targetKeywords: { zh: string[]; en: string[] };
+  userQuestions: { zh: string[]; en: string[] };
+  contentPillars: { zh: string[]; en: string[] };
+}
+
+export const geoKeywordClusters: KeywordCluster[] = [
+  {
+    id: 'software-3',
+    topic: { zh: 'Software 3.0 范式', en: 'Software 3.0 Paradigm' },
+    description: {
+      zh: '从传统软件开发到AI原生智能时代的范式跃迁',
+      en: 'The paradigm shift from traditional software development to AI-native intelligence',
+    },
+    targetKeywords: {
+      zh: ['Software 3.0', 'AI原生开发', '智能体驱动开发', 'AI应用开发新范式', '下一代软件开发'],
+      en: ['Software 3.0', 'AI-native development', 'agent-driven development', 'next-gen software', 'AI application development'],
+    },
+    userQuestions: {
+      zh: [
+        'Software 3.0是什么?和传统软件开发有什么区别?',
+        'AI时代软件开发如何变革?',
+        '什么是AI原生应用开发?',
+        '企业如何从Software 2.0迁移到Software 3.0?',
+        'Software 3.0需要什么样的技术栈?',
+      ],
+      en: [
+        'What is Software 3.0?',
+        'How is AI changing software development?',
+        'What is AI-native application development?',
+        'How to transition from Software 2.0 to 3.0?',
+        'What tech stack does Software 3.0 require?',
+      ],
+    },
+    contentPillars: {
+      zh: ['Software 3.0定义与特征', '三代软件范式对比', '企业迁移路径', 'AI原生开发实践'],
+      en: ['Software 3.0 definition', 'Three generations comparison', 'Migration path', 'AI-native practices'],
+    },
+  },
+  {
+    id: 'harness-engineering',
+    topic: { zh: '驾驭工程 (Harness Engineering)', en: 'Harness Engineering' },
+    description: {
+      zh: 'AI工程化第三代范式——通过标准化约束与封装让AI能力可控可预期',
+      en: 'Third-generation AI engineering paradigm — making AI capabilities controllable through standardized constraints',
+    },
+    targetKeywords: {
+      zh: ['驾驭工程', 'Harness Engineering', 'AI工程化', 'AI稳定性', 'AI可控性', 'Agent约束'],
+      en: ['Harness Engineering', 'AI engineering', 'AI stability', 'AI controllability', 'Agent constraints', 'AI governance'],
+    },
+    userQuestions: {
+      zh: [
+        '什么是Harness Engineering驾驭工程?',
+        'AI工程化三代范式是什么?',
+        '如何让AI输出稳定可控?',
+        'Prompt工程和Context工程的区别?',
+        '为什么需要驾驭工程?',
+        '如何降低AI应用的生产成本?',
+      ],
+      en: [
+        'What is Harness Engineering?',
+        'What are the three generations of AI engineering?',
+        'How to make AI outputs stable and controllable?',
+        'Prompt Engineering vs Context Engineering?',
+        'Why do we need Harness Engineering?',
+        'How to reduce AI production costs?',
+      ],
+    },
+    contentPillars: {
+      zh: ['驾驭工程定义', 'AI工程化演进', '双Harness体系', '落地实践案例'],
+      en: ['Definition', 'AI engineering evolution', 'Dual Harness system', 'Case studies'],
+    },
+  },
+  {
+    id: 'enterprise-ai',
+    topic: { zh: '企业AI落地', en: 'Enterprise AI Implementation' },
+    description: {
+      zh: '企业如何安全、稳定、低成本地实现AI规模化落地',
+      en: 'How enterprises can implement AI at scale safely, stably, and cost-effectively',
+    },
+    targetKeywords: {
+      zh: ['企业AI落地', 'AI转型', 'AI规模化', '企业智能化', 'AI应用部署', 'AI ROI'],
+      en: ['enterprise AI implementation', 'AI transformation', 'AI at scale', 'AI deployment', 'AI ROI', 'enterprise intelligence'],
+    },
+    userQuestions: {
+      zh: [
+        '企业AI落地为什么这么难?',
+        'AI从Demo到生产需要多长时间?',
+        '企业AI转型需要多少成本?',
+        '如何降低AI Agent的运营成本?',
+        'AI商业增益因子Q值是什么?',
+        '企业如何避免AI速赢陷阱?',
+      ],
+      en: [
+        'Why is enterprise AI implementation so difficult?',
+        'How long does AI go from demo to production?',
+        'What does enterprise AI transformation cost?',
+        'How to reduce AI Agent operational costs?',
+        'What is AI Business Q-factor?',
+        'How to avoid AI quick-win traps?',
+      ],
+    },
+    contentPillars: {
+      zh: ['AI落地挑战', '成本优化', '1-7-90交付模型', '企业案例'],
+      en: ['Implementation challenges', 'Cost optimization', '1-7-90 delivery model', 'Case studies'],
+    },
+  },
+  {
+    id: 'vibe-coding',
+    topic: { zh: 'Vibe Coding 氛围编程', en: 'Vibe Coding' },
+    description: {
+      zh: '以自然语言驱动AI生成生产级代码,从Demo到商用的完整路径',
+      en: 'Natural language-driven production-grade code generation, from demo to deployment',
+    },
+    targetKeywords: {
+      zh: ['Vibe Coding', '氛围编程', 'AI编程', 'AI代码生成', 'AI全栈开发', 'AI辅助开发'],
+      en: ['Vibe Coding', 'AI coding', 'AI code generation', 'AI full-stack development', 'AI-assisted development'],
+    },
+    userQuestions: {
+      zh: [
+        'Vibe Coding是什么?和AI辅助编程有什么区别?',
+        'AI生成的代码能直接用于生产环境吗?',
+        '如何让AI生成企业级代码?',
+        'Vibe Coding有哪些工具推荐?',
+        'AI编程会替代程序员吗?',
+      ],
+      en: [
+        'What is Vibe Coding?',
+        'Can AI-generated code be used in production?',
+        'How to generate enterprise-grade code with AI?',
+        'What tools are recommended for Vibe Coding?',
+        'Will AI replace programmers?',
+      ],
+    },
+    contentPillars: {
+      zh: ['Vibe Coding定义', '对比传统开发', '生产级代码实践', '工具链集成'],
+      en: ['Definition', 'vs traditional dev', 'Production practices', 'Toolchain integration'],
+    },
+  },
+  {
+    id: 'ai-agent',
+    topic: { zh: 'AI Agent 智能体', en: 'AI Agent' },
+    description: {
+      zh: 'AI智能体的企业级管控、编排与规模化部署',
+      en: 'Enterprise-grade AI Agent governance, orchestration, and scaled deployment',
+    },
+    targetKeywords: {
+      zh: ['AI Agent', '智能体', 'Agent编排', '多智能体协同', 'Agent管控', 'MCP协议'],
+      en: ['AI Agent', 'Agent orchestration', 'multi-agent', 'Agent governance', 'MCP protocol', 'Agent deployment'],
+    },
+    userQuestions: {
+      zh: [
+        'AI Agent如何从跑通到实装?',
+        '如何控制AI Agent的成本?',
+        '多智能体如何协同工作?',
+        'Agent失控了怎么办?',
+        'MCP协议是什么?',
+      ],
+      en: [
+        'How to deploy AI Agents from POC to production?',
+        'How to control AI Agent costs?',
+        'How do multi-agent systems work?',
+        'What if an Agent goes out of control?',
+        'What is the MCP protocol?',
+      ],
+    },
+    contentPillars: {
+      zh: ['Agent架构', '成本管控', '多Agent协同', 'MCP协议', '安全边界'],
+      en: ['Agent architecture', 'Cost control', 'Multi-agent', 'MCP protocol', 'Safety'],
+    },
+  },
+];
+
+/** Long-tail question bank for FAQ and blog content */
+export const geoQuestionBank = {
+  zh: [
+    'Software 1.0、2.0、3.0分别是什么?',
+    '为什么传统软件开发模式已经过时?',
+    '企业如何评估自己的AI成熟度?',
+    'AI项目的ROI怎么计算?',
+    '国产大模型能达到GPT-4的水平吗?',
+    '什么是AI商业增益因子(Q值)?',
+    '企业AI转型第一步应该做什么?',
+    'AI Agent在企业中有哪些应用场景?',
+    '跨境电商如何利用AI提升运营效率?',
+    'VOC(客户之声)分析怎么做?',
+    'Skills技能包是什么?和传统API有什么区别?',
+    '什么是BaaS + PaaS架构?',
+    'FmodeCore支持哪些大模型?',
+    '驾驭工程和传统DevOps有什么区别?',
+    '如何培养AI全栈开发人才?',
+    '企业私有化部署AI需要注意什么?',
+    'Token成本如何管理和优化?',
+    'AI应用的知识库怎么搭建?',
+    '什么是SOP驱动的业务自动化?',
+    'AI在供应链管理中有哪些应用?',
+  ],
+  en: [
+    'What are Software 1.0, 2.0, and 3.0?',
+    'Why is traditional software development obsolete?',
+    'How to assess enterprise AI maturity?',
+    'How to calculate AI project ROI?',
+    'Can domestic LLMs match GPT-4 performance?',
+    'What is the AI Business Gain Factor (Q-value)?',
+    'What is the first step in enterprise AI transformation?',
+    'What are the use cases for AI Agents in enterprises?',
+    'How can cross-border e-commerce leverage AI?',
+    'What is VOC (Voice of Customer) analysis?',
+    'What are AI Skills packages?',
+    'What is BaaS + PaaS architecture?',
+    'Which LLMs does FmodeCore support?',
+    'How is Harness Engineering different from DevOps?',
+    'How to train full-stack AI developers?',
+    'What to consider for private AI deployment?',
+    'How to manage and optimize Token costs?',
+    'How to build a knowledge base for AI applications?',
+    'What is SOP-driven business automation?',
+    'What are AI applications in supply chain management?',
+  ],
+};

+ 78 - 0
website/src/data/navigation.ts

@@ -0,0 +1,78 @@
+/**
+ * Navigation structure for the site.
+ * Each item can have children for dropdown menus.
+ */
+
+export interface NavItem {
+  label: string;
+  labelKey: string;
+  href?: string;
+  children?: NavItem[];
+}
+
+export const mainNavigation: NavItem[] = [
+  {
+    label: '产品',
+    labelKey: 'nav.product',
+    children: [
+      { label: '驾驭工程', labelKey: 'nav.product.harness', href: '/product/harness-engineering' },
+      { label: 'Vibe Coding 驾驭', labelKey: 'nav.product.vibe', href: '/product/vibe-coding' },
+      { label: 'Agent 驾驭', labelKey: 'nav.product.agent', href: '/product/agent-harness' },
+      { label: 'Skills 技能中心', labelKey: 'nav.product.skills', href: '/product/skills-hub' },
+      { label: 'FmodeCore 模型底座', labelKey: 'nav.product.core', href: '/product/fmode-core' },
+    ],
+  },
+  {
+    label: '解决方案',
+    labelKey: 'nav.solutions',
+    children: [
+      { label: '大中型企业', labelKey: 'nav.solutions.enterprise', href: '/solutions/enterprise' },
+      { label: '创业公司', labelKey: 'nav.solutions.startups', href: '/solutions/startups' },
+      { label: '传统企业转型', labelKey: 'nav.solutions.traditional', href: '/solutions/traditional-enterprise' },
+      { label: '软件外包', labelKey: 'nav.solutions.outsourcing', href: '/solutions/outsourcing' },
+      { label: '独立开发者', labelKey: 'nav.solutions.developers', href: '/solutions/developers' },
+    ],
+  },
+  {
+    label: '资源中心',
+    labelKey: 'nav.resources',
+    children: [
+      { label: '博客', labelKey: 'nav.blog', href: '/blog' },
+      { label: '案例研究', labelKey: 'nav.caseStudies', href: '/case-studies' },
+      { label: '常见问题', labelKey: 'nav.faq', href: '/faq' },
+      { label: '术语表', labelKey: 'nav.glossary', href: '/glossary' },
+    ],
+  },
+  {
+    label: '关于我们',
+    labelKey: 'nav.about',
+    href: '/about',
+  },
+];
+
+export const footerNavigation = {
+  product: [
+    { label: '驾驭工程', labelKey: 'nav.product.harness', href: '/product/harness-engineering' },
+    { label: 'Vibe Coding 驾驭', labelKey: 'nav.product.vibe', href: '/product/vibe-coding' },
+    { label: 'Agent 驾驭', labelKey: 'nav.product.agent', href: '/product/agent-harness' },
+    { label: 'Skills 技能中心', labelKey: 'nav.product.skills', href: '/product/skills-hub' },
+    { label: 'FmodeCore 模型底座', labelKey: 'nav.product.core', href: '/product/fmode-core' },
+  ],
+  solutions: [
+    { label: '大中型企业', labelKey: 'nav.solutions.enterprise', href: '/solutions/enterprise' },
+    { label: '创业公司', labelKey: 'nav.solutions.startups', href: '/solutions/startups' },
+    { label: '传统企业转型', labelKey: 'nav.solutions.traditional', href: '/solutions/traditional-enterprise' },
+    { label: '软件外包', labelKey: 'nav.solutions.outsourcing', href: '/solutions/outsourcing' },
+    { label: '独立开发者', labelKey: 'nav.solutions.developers', href: '/solutions/developers' },
+  ],
+  resources: [
+    { label: '博客', labelKey: 'nav.blog', href: '/blog' },
+    { label: '案例研究', labelKey: 'nav.caseStudies', href: '/case-studies' },
+    { label: '常见问题', labelKey: 'nav.faq', href: '/faq' },
+    { label: '术语表', labelKey: 'nav.glossary', href: '/glossary' },
+  ],
+  company: [
+    { label: '关于我们', labelKey: 'nav.about', href: '/about' },
+    { label: '联系我们', labelKey: 'nav.contact', href: '/contact' },
+  ],
+};

+ 26 - 0
website/src/data/site-config.ts

@@ -0,0 +1,26 @@
+/**
+ * Global site configuration
+ */
+
+export const SITE = {
+  url: 'https://fmode.cn',
+  name: '未来飞马',
+  nameEn: 'Fmode',
+  slogan: '让人类驾驭AI',
+  sloganEn: 'Simplifying AI, Harnessing AI',
+  description: '未来飞马(Fmode)是全球领先的企业级驾驭工程工作站。通过Software 3.0范式与双Harness体系,我们帮助企业安全、稳定、低成本地驾驭AI能力。',
+  descriptionEn: 'Fmode is the world-leading enterprise harnessing engineering workstation. Through the Software 3.0 paradigm and dual Harness system, we help enterprises harness AI capabilities safely, stably, and cost-effectively.',
+  author: '未来飞马 Team',
+  email: 'support@fmode.cn',
+  social: {
+    github: 'https://github.com/fmode',
+    twitter: 'https://twitter.com/fmode',
+    linkedin: 'https://linkedin.com/company/fmode',
+  },
+  analytics: {
+    google: 'G-XXXXXXXXXX', // placeholder
+  },
+} as const;
+
+/** Default SEO image */
+export const DEFAULT_OG_IMAGE = '/images/og-default.png';

+ 94 - 0
website/src/i18n/ui.ts

@@ -0,0 +1,94 @@
+/**
+ * UI translation strings used across the site.
+ * For content-heavy pages, use the content collections or page-specific translations.
+ */
+
+export const ui = {
+  zh: {
+    'site.title': '未来飞马 - 企业AI驾驭工程平台',
+    'site.description': '未来飞马(Fmode)是全球领先的企业级驾驭工程工作站,通过Software 3.0范式与双Harness体系,帮助企业安全、稳定、低成本地驾驭AI能力。',
+    'nav.home': '首页',
+    'nav.product': '产品',
+    'nav.solutions': '解决方案',
+    'nav.resources': '资源中心',
+    'nav.blog': '博客',
+    'nav.faq': '常见问题',
+    'nav.glossary': '术语表',
+    'nav.about': '关于我们',
+    'nav.contact': '联系我们',
+    'nav.caseStudies': '案例研究',
+    'cta.getStarted': '立即开始',
+    'cta.contactUs': '联系我们',
+    'cta.learnMore': '了解更多',
+    'cta.tryFree': '免费试用',
+    'cta.viewDocs': '查看文档',
+    'footer.copyright': '© 2026 未来飞马. All rights reserved.',
+    'footer.tagline': '让人类驾驭AI',
+    'footer.product': '产品',
+    'footer.solutions': '解决方案',
+    'footer.resources': '资源',
+    'footer.company': '公司',
+    'footer.contact': '联系',
+    'lang.switch': 'English',
+    'lang.label': '语言',
+    'blog.readMore': '阅读更多',
+    'blog.publishedOn': '发布于',
+    'blog.relatedPosts': '相关文章',
+    'blog.allPosts': '全部文章',
+    'breadcrumb.home': '首页',
+    '404.title': '页面未找到',
+    '404.message': '您访问的页面不存在或已被移动。',
+    '404.backHome': '返回首页',
+    'search.placeholder': '搜索...',
+    'newsletter.title': '订阅我们的通讯',
+    'newsletter.placeholder': '输入您的邮箱',
+    'newsletter.button': '订阅',
+  },
+  en: {
+    'site.title': 'Fmode - Enterprise AI Harnessing Platform',
+    'site.description': 'Fmode is the world-leading enterprise harnessing engineering workstation. Through the Software 3.0 paradigm and dual Harness system, we help enterprises harness AI capabilities safely, stably, and cost-effectively.',
+    'nav.home': 'Home',
+    'nav.product': 'Product',
+    'nav.solutions': 'Solutions',
+    'nav.resources': 'Resources',
+    'nav.blog': 'Blog',
+    'nav.faq': 'FAQ',
+    'nav.glossary': 'Glossary',
+    'nav.about': 'About',
+    'nav.contact': 'Contact',
+    'nav.caseStudies': 'Case Studies',
+    'cta.getStarted': 'Get Started',
+    'cta.contactUs': 'Contact Us',
+    'cta.learnMore': 'Learn More',
+    'cta.tryFree': 'Try Free',
+    'cta.viewDocs': 'View Docs',
+    'footer.copyright': '© 2026 Fmode. All rights reserved.',
+    'footer.tagline': 'Simplifying AI, Harnessing AI',
+    'footer.product': 'Product',
+    'footer.solutions': 'Solutions',
+    'footer.resources': 'Resources',
+    'footer.company': 'Company',
+    'footer.contact': 'Contact',
+    'lang.switch': '中文',
+    'lang.label': 'Language',
+    'blog.readMore': 'Read More',
+    'blog.publishedOn': 'Published on',
+    'blog.relatedPosts': 'Related Posts',
+    'blog.allPosts': 'All Posts',
+    'breadcrumb.home': 'Home',
+    '404.title': 'Page Not Found',
+    '404.message': 'The page you are looking for does not exist or has been moved.',
+    '404.backHome': 'Back to Home',
+    'search.placeholder': 'Search...',
+    'newsletter.title': 'Subscribe to our newsletter',
+    'newsletter.placeholder': 'Enter your email',
+    'newsletter.button': 'Subscribe',
+  },
+} as const;
+
+export type UIKey = keyof typeof ui.zh;
+export type Lang = 'zh' | 'en';
+
+export function getUI(lang: Lang, key: UIKey): string {
+  return ui[lang]?.[key] ?? ui.zh[key] ?? key;
+}

+ 69 - 0
website/src/i18n/utils.ts

@@ -0,0 +1,69 @@
+/**
+ * i18n utility functions
+ */
+
+export const defaultLang = 'zh';
+export const supportedLangs = ['zh', 'en'] as const;
+export type Lang = (typeof supportedLangs)[number];
+
+/** Map of language to its native name and English name */
+export const langNames: Record<Lang, { native: string; english: string }> = {
+  zh: { native: '中文', english: 'Chinese' },
+  en: { native: 'English', english: 'English' },
+};
+
+/** Get the alternate language */
+export function getAltLang(lang: Lang): Lang {
+  return lang === 'zh' ? 'en' : 'zh';
+}
+
+/** Generate hreflang links for a page */
+export function getHreflangLinks(currentPath: string, currentLang: Lang) {
+  return supportedLangs.map((lang) => {
+    // Replace the language prefix in the path
+    const pathWithoutLang = currentPath.replace(`/${currentLang}/`, '/');
+    const langPath = `/${lang}${pathWithoutLang}`;
+    return { lang, href: langPath };
+  });
+}
+
+/** Detect preferred language from Accept-Language header or browser */
+export function detectLanguage(acceptLanguage?: string): Lang {
+  if (!acceptLanguage) return defaultLang;
+
+  const lang = acceptLanguage.toLowerCase();
+  if (lang.startsWith('zh')) return 'zh';
+  if (lang.startsWith('en')) return 'en';
+
+  return defaultLang;
+}
+
+/** Translate a localized path to a different language */
+const pathTranslations: Record<string, Record<Lang, string>> = {
+  'product': { zh: 'product', en: 'product' },
+  'solutions': { zh: 'solutions', en: 'solutions' },
+  'blog': { zh: 'blog', en: 'blog' },
+  'faq': { zh: 'faq', en: 'faq' },
+  'glossary': { zh: 'glossary', en: 'glossary' },
+  'about': { zh: 'about', en: 'about' },
+  'contact': { zh: 'contact', en: 'contact' },
+  'case-studies': { zh: 'case-studies', en: 'case-studies' },
+};
+
+export function translatePath(path: string, targetLang: Lang): string {
+  const segments = path.split('/').filter(Boolean);
+  // Remove the current language prefix if present
+  if (supportedLangs.includes(segments[0] as Lang)) {
+    segments.shift();
+  }
+  // Translate remaining segments
+  const translated = segments.map((seg) => {
+    for (const [key, translations] of Object.entries(pathTranslations)) {
+      if (seg === translations.zh || seg === translations.en) {
+        return translations[targetLang];
+      }
+    }
+    return seg;
+  });
+  return `/${targetLang}/${translated.join('/')}`;
+}

+ 102 - 0
website/src/layouts/BaseLayout.astro

@@ -0,0 +1,102 @@
+---
+/**
+ * BaseLayout - Primary layout wrapper for all pages.
+ * Includes SEO head, header, footer, and common structured data.
+ */
+import SEOHead from '@components/SEOHead.astro';
+import Header from '@components/Header.astro';
+import Footer from '@components/Footer.astro';
+import { SITE } from '@data/site-config';
+import '../styles/global.css';
+
+interface Props {
+  title: string;
+  description: string;
+  lang?: 'zh' | 'en';
+  currentPath?: string;
+  canonicalURL?: string;
+  ogImage?: string;
+  ogType?: 'website' | 'article' | 'product';
+  schema?: Record<string, unknown>;
+  noIndex?: boolean;
+  publishedDate?: Date;
+  modifiedDate?: Date;
+  author?: string;
+  tags?: string[];
+}
+
+const {
+  title,
+  description,
+  lang = 'zh',
+  currentPath = '/',
+  canonicalURL,
+  ogImage,
+  ogType,
+  schema,
+  noIndex,
+  publishedDate,
+  modifiedDate,
+  author,
+  tags,
+} = Astro.props;
+
+// Build alternate language URLs
+const altLang = lang === 'zh' ? 'en' : 'zh';
+const pathWithoutLang = currentPath.replace(new RegExp(`^/${lang}/?`), '/');
+const altPath = `/${altLang}${pathWithoutLang}`;
+
+const htmlLang = lang === 'zh' ? 'zh-CN' : 'en-US';
+---
+
+<!doctype html>
+<html lang={htmlLang} dir={lang === 'zh' ? 'ltr' : 'ltr'}>
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+
+    <SEOHead
+      title={title}
+      description={description}
+      lang={lang}
+      canonicalURL={canonicalURL || `${SITE.url}${currentPath}`}
+      ogImage={ogImage}
+      ogType={ogType}
+      schema={schema}
+      noIndex={noIndex}
+      publishedDate={publishedDate}
+      modifiedDate={modifiedDate}
+      author={author}
+      tags={tags}
+      alternateLanguages={[
+        { lang: altLang, href: `${SITE.url}${altPath}` },
+      ]}
+    />
+
+    <!-- Favicon -->
+    <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
+    <link rel="alternate icon" type="image/x-icon" href="/favicon.ico" />
+  </head>
+  <body class="min-h-screen flex flex-col">
+    <Header lang={lang} currentPath={currentPath} />
+
+    <main class="flex-1">
+      <slot />
+    </main>
+
+    <Footer lang={lang} />
+  </body>
+</html>
+
+<script is:inline>
+  // Simple dark mode toggle support (future)
+  // Mobile menu close on click outside
+  document.addEventListener('click', (e) => {
+    const menu = document.getElementById('mobile-menu');
+    const btn = document.getElementById('mobile-menu-btn');
+    if (menu && btn && !menu.contains(e.target) && !btn.contains(e.target)) {
+      menu.classList.add('hidden');
+    }
+  });
+</script>

+ 43 - 0
website/src/pages/[lang]/404.astro

@@ -0,0 +1,43 @@
+---
+/**
+ * 404 Not Found page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+---
+
+<BaseLayout
+  title={isZh ? '页面未找到' : 'Page Not Found'}
+  description={isZh ? '您访问的页面不存在或已被移动。' : 'The page you are looking for does not exist or has been moved.'}
+  lang={lang}
+  currentPath={`/${lang}/404/`}
+  noIndex={true}
+>
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-md text-center py-20">
+        <p class="text-8xl font-extrabold gradient-text">404</p>
+        <h1 class="mt-6 heading-2 text-dark-900">
+          {isZh ? '页面未找到' : 'Page Not Found'}
+        </h1>
+        <p class="mt-4 text-dark-500">
+          {isZh ? '您访问的页面不存在或已被移动。' : 'The page you are looking for does not exist or has been moved.'}
+        </p>
+        <div class="mt-8 flex items-center justify-center gap-4">
+          <a href={`/${lang}/`} class="btn-primary">
+            {isZh ? '返回首页' : 'Back to Home'}
+          </a>
+          <a href={`/${lang}/faq/`} class="btn-secondary">
+            {isZh ? '查看 FAQ' : 'View FAQ'}
+          </a>
+        </div>
+      </div>
+    </div>
+  </section>
+</BaseLayout>

+ 124 - 0
website/src/pages/[lang]/about.astro

@@ -0,0 +1,124 @@
+---
+/**
+ * About page — brand story, vision, mission, values
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateOrganizationSchema, generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: '关于未来飞马',
+    intro: '经历10年商业验证的HpaPaaS高产能平台,遇到AI场景下各类繁杂编排问题及交互协议,诞生了一套CLI+SDK+API+MCP+Agents的最佳实践,这就是未来飞马——新一代企业驾驭工程平台。',
+    vision: '简化AI,驾驭AI',
+    visionDesc: '让每个企业和OPC,无门槛地驾驭AI。',
+    mission: '企业创新的千里马,智能转型的独角兽',
+    missionDesc: '我们不仅提供驾驭工程工作站这一核心工具,更构建了企业级智能中枢PaaS+BaaS基础设施,以及FutureStack新一代AI全栈人才培养体系。通过"工具+平台+人才"的三位一体模式,全方位赋能企业实现从业务创新到组织智能转型的跨越式发展。',
+    values: [
+      { name: '预见力', tag: '未来已来 · 前瞻布局', desc: '敏锐捕捉 Software 3.0 技术浪潮,提前洞察行业变革趋势,为企业制定具有前瞻性的智能化战略路线。' },
+      { name: '执行力', tag: '来去自如 · 极速落地', desc: '拒绝冗长流程,实现1天交付Agentic业务SOP,以高效敏捷的工程能力推动技术方案快速部署。' },
+      { name: '创造力', tag: '飞越桎梏 · 定义新标', desc: '突破传统软件开发范式的局限,以驾驭工程理念重构技术边界,为AI原生应用开发定义全新标准。' },
+      { name: '自驱力', tag: '马踏飞燕 · 持续进化', desc: '保持技术与服务的持续迭代,提供90天深度陪跑服务,与企业共同成长,确保客户智能转型的长期成功。' },
+    ],
+    founder: '刘雨飏',
+    founderTitle: '未来飞马 创始人',
+    founderDesc: '懂业务的程序员,Z0 Venture Capital GP,中国大数据产业生态联盟专家委员,华为HCDE专家,江西省数字经济学会智能教育专委会委员。',
+  },
+  en: {
+    title: 'About Fmode',
+    intro: 'After 10 years of commercially-validated HpaPaaS high-productivity platform experience, encountering complex orchestration challenges and interaction protocols in AI scenarios, a set of CLI+SDK+API+MCP+Agents best practices emerged — this is Fmode, the next-generation enterprise harnessing engineering platform.',
+    vision: 'Simplifying AI, Harnessing AI',
+    visionDesc: 'Enable every enterprise and OPC to harness AI without barriers.',
+    mission: 'The Steed of Enterprise Innovation, The Unicorn of Intelligent Transformation',
+    missionDesc: 'We provide not only the Harnessing Engineering Workstation but also enterprise-grade PaaS+BaaS intelligent infrastructure and the FutureStack next-gen AI full-stack talent development system. Through our "Tools + Platform + Talent" trinity model, we empower enterprises to achieve leapfrog development from business innovation to organizational intelligence transformation.',
+    values: [
+      { name: 'Foresight', tag: 'Future is Now · Strategic Layout', desc: 'Keenly capture Software 3.0 technology waves, anticipate industry transformation trends, and chart forward-looking intelligent strategies for enterprises.' },
+      { name: 'Execution', tag: 'Swift & Decisive · Rapid Deployment', desc: 'Reject lengthy processes. Deliver Agentic business SOPs in 1 day with efficient, agile engineering capabilities for rapid technology deployment.' },
+      { name: 'Creativity', tag: 'Beyond Boundaries · Defining New Standards', desc: 'Break through traditional software development limitations. Reconstruct technology boundaries with Harnessing Engineering philosophy, defining new standards for AI-native application development.' },
+      { name: 'Self-Drive', tag: 'Continuous Evolution · Perpetual Growth', desc: 'Maintain continuous iteration of technology and services. Provide 90-day deep partnership, growing alongside enterprises to ensure long-term intelligent transformation success.' },
+    ],
+    founder: 'Liu Yuyang',
+    founderTitle: 'Founder of Fmode',
+    founderDesc: 'A programmer who understands business. GP at Z0 Venture Capital. Expert Committee Member of China Big Data Industry Ecosystem Alliance. Huawei HCDE Expert. Committee Member of Jiangxi Digital Economy Association.',
+  },
+}[lang];
+
+const orgSchema = generateOrganizationSchema(lang);
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '关于我们' : 'About', url: `/${lang}/about/` },
+]);
+---
+
+<BaseLayout
+  title={c.title}
+  description={c.intro}
+  lang={lang}
+  currentPath={`/${lang}/about/`}
+  schema={{ ...orgSchema, ...breadcrumbSchema }}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="grid gap-10 md:grid-cols-2">
+        <div class="text-center card-hover">
+          <h2 class="heading-2 gradient-text">{c.vision}</h2>
+          <p class="mt-4 text-dark-600">{c.visionDesc}</p>
+        </div>
+        <div class="text-center card-hover">
+          <h2 class="heading-2 text-dark-900">{isZh ? '使命' : 'Mission'}</h2>
+          <p class="mt-2 text-lg font-semibold text-primary-600">{c.mission}</p>
+          <p class="mt-4 text-dark-500 text-sm leading-relaxed">{c.missionDesc}</p>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{isZh ? '价值观' : 'Values'}</h2>
+      <div class="mt-10 grid gap-6 sm:grid-cols-2 lg:grid-cols-4">
+        {c.values.map((v) => (
+          <div class="card-hover text-center">
+            <h3 class="text-xl font-bold gradient-text">{v.name}</h3>
+            <p class="mt-2 text-xs font-medium text-dark-400">{v.tag}</p>
+            <p class="mt-3 text-sm text-dark-500 leading-relaxed">{v.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-md text-center">
+        <h2 class="heading-2 text-dark-900">{isZh ? '创始人' : 'Founder'}</h2>
+        <div class="mt-6 card">
+          <div class="mx-auto h-20 w-20 rounded-full bg-gradient-to-br from-primary-400 to-accent-400 flex items-center justify-center text-white text-2xl font-bold">
+            {c.founder.charAt(0)}
+          </div>
+          <h3 class="mt-4 text-lg font-bold text-dark-900">{c.founder}</h3>
+          <p class="text-sm text-primary-600">{c.founderTitle}</p>
+          <p class="mt-3 text-sm text-dark-500 leading-relaxed">{c.founderDesc}</p>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="secondary" />
+</BaseLayout>

+ 100 - 0
website/src/pages/[lang]/blog/[slug].astro

@@ -0,0 +1,100 @@
+---
+/**
+ * Blog post detail page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateArticleSchema, generateBreadcrumbSchema } from '@utils/seo';
+import { getCollection } from 'astro:content';
+
+export async function getStaticPaths() {
+  const posts = await getCollection('blog');
+  return posts.map((post) => {
+    const [lang, ...slugParts] = post.id.split('/');
+    const slug = slugParts.join('/').replace('.md', '');
+    return { params: { lang, slug } };
+  });
+}
+
+const { lang = 'zh', slug } = Astro.params as { lang: string; slug: string };
+
+const posts = await getCollection('blog', ({ id }) => id === `${lang}/${slug}.md`);
+const post = posts[0];
+
+if (!post) {
+  return Astro.redirect(`/${lang}/404/`);
+}
+
+const isZh = lang === 'zh';
+const { title, description, publishDate, modifiedDate, author, tags, readingTime } = post.data;
+
+const articleSchema = generateArticleSchema({
+  title,
+  description,
+  url: `https://fmode.cn/${lang}/blog/${slug}/`,
+  publishedDate: publishDate,
+  modifiedDate: modifiedDate || publishDate,
+  author,
+});
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '博客' : 'Blog', url: `/${lang}/blog/` },
+  { name: title, url: `/${lang}/blog/${slug}/` },
+]);
+---
+
+<BaseLayout
+  title={title}
+  description={description}
+  lang={lang as 'zh' | 'en'}
+  currentPath={`/${lang}/blog/${slug}/`}
+  ogType="article"
+  publishedDate={publishDate}
+  modifiedDate={modifiedDate || publishDate}
+  author={author}
+  tags={tags}
+  schema={{ ...articleSchema, ...breadcrumbSchema }}
+>
+  <article class="bg-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl">
+        <!-- Article Header -->
+        <header class="text-center">
+          <div class="flex items-center justify-center gap-2 mb-4 flex-wrap">
+            {tags.map((tag: string) => (
+              <span class="rounded-full bg-primary-50 px-3 py-1 text-xs font-medium text-primary-700">{tag}</span>
+            ))}
+          </div>
+          <h1 class="heading-1 text-dark-900">{title}</h1>
+          <p class="mt-4 text-lg text-dark-500 leading-relaxed">{description}</p>
+          <div class="mt-6 flex items-center justify-center gap-4 text-sm text-dark-400">
+            <span>{author}</span>
+            <span>·</span>
+            <time datetime={publishDate.toISOString()}>
+              {publishDate.toLocaleDateString(isZh ? 'zh-CN' : 'en-US', { year: 'numeric', month: 'long', day: 'numeric' })}
+            </time>
+            {readingTime && (<><span>·</span><span>{readingTime}</span></>)}
+          </div>
+        </header>
+
+        <!-- Article Content -->
+        <div class="mt-10 prose prose-lg prose-dark max-w-none">
+          <div set:html={post.body} />
+        </div>
+
+        <!-- Navigation -->
+        <div class="mt-12 pt-8 border-t border-dark-200">
+          <a href={`/${lang}/blog/`} class="inline-flex items-center gap-2 text-sm font-medium text-primary-600 hover:text-primary-700">
+            <svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" />
+            </svg>
+            {isZh ? '返回博客列表' : 'Back to blog'}
+          </a>
+        </div>
+      </div>
+    </div>
+  </article>
+
+  <CTASection lang={lang as 'zh' | 'en'} variant="secondary" />
+</BaseLayout>

+ 62 - 0
website/src/pages/[lang]/blog/index.astro

@@ -0,0 +1,62 @@
+---
+/**
+ * Blog listing page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import BlogCard from '@components/BlogCard.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+import { getCollection } from 'astro:content';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+// Get blog posts filtered by language (from the path prefix)
+const allPosts = await getCollection('blog', ({ id }) => id.startsWith(`${lang}/`));
+const sortedPosts = allPosts.sort((a, b) => b.data.publishDate.getTime() - a.data.publishDate.getTime());
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '博客' : 'Blog', url: `/${lang}/blog/` },
+]);
+---
+
+<BaseLayout
+  title={isZh ? '博客' : 'Blog'}
+  description={isZh ? '未来飞马技术博客——深度解析 Software 3.0、驾驭工程、Vibe Coding、企业 AI 落地实践。' : 'Fmode Tech Blog — Deep insights on Software 3.0, Harness Engineering, Vibe Coding, and enterprise AI implementation.'}
+  lang={lang}
+  currentPath={`/${lang}/blog/`}
+  schema={breadcrumbSchema}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '技术博客' : 'Tech Blog'}</span></h1>
+        <p class="mt-4 text-lg text-dark-500">
+          {isZh ? '深度解析 Software 3.0、驾驭工程与企业 AI 落地实践' : 'Deep insights on Software 3.0, Harness Engineering, and enterprise AI'}
+        </p>
+      </div>
+      <div class="mt-12 grid gap-6 md:grid-cols-2 lg:grid-cols-3">
+        {sortedPosts.map((post) => (
+          <BlogCard
+            title={post.data.title}
+            description={post.data.description}
+            slug={post.id.replace(`${lang}/`, '').replace('.md', '')}
+            lang={lang}
+            publishDate={post.data.publishDate}
+            tags={post.data.tags}
+            readingTime={post.data.readingTime}
+          />
+        ))}
+      </div>
+      {sortedPosts.length === 0 && (
+        <div class="text-center py-12 text-dark-400">
+          {isZh ? '暂无文章' : 'No posts yet'}
+        </div>
+      )}
+    </div>
+  </section>
+</BaseLayout>

+ 69 - 0
website/src/pages/[lang]/case-studies/index.astro

@@ -0,0 +1,69 @@
+---
+/**
+ * Case Studies listing page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const cases = {
+  zh: [
+    { title: '跨境电商智能运营', client: '某泳装品牌出海', desc: '通过 Harness for Agent + 国产模型替代,实现月成本降低70%,选品准确率从0提升至70%,Q值从<1跃升至1.6倍。', tags: ['跨境电商', 'Agent优化', '成本降低'] },
+    { title: '跨境电商VOC情报系统', client: '欧鼎香薰', desc: '2天完成VOC系统搭建,精准锁定"天然+颜值"产品升级机会,团队款式开发量从6个提升至10个。', tags: ['VOC分析', '产品开发', '市场情报'] },
+    { title: 'Shopee广告投放Agent', client: '东南亚电商品牌', desc: '部署Shopee Agent覆盖Listing优化、评论管理、智能客服,实现多平台一站式AI运营。', tags: ['Shopee', '广告投放', '多平台'] },
+    { title: '亚马逊站群管理', client: '跨境电商卖家', desc: '增长虾智能运营方案,Agent 7×24自动盯盘、报警、优化、成交,像常驻代理人一样工作。', tags: ['亚马逊', '站群管理', '自动化运营'] },
+  ],
+  en: [
+    { title: 'Cross-Border E-Commerce Intelligence', client: 'Swimwear Brand', desc: 'Harness for Agent + domestic model replacement: 70% cost reduction, selection accuracy from 0 to 70%, Q-value jumping from <1 to 1.6x.', tags: ['E-commerce', 'Agent', 'Cost Reduction'] },
+    { title: 'VOC Intelligence System', client: 'Ouding Aromatherapy', desc: '2-day VOC system deployment. Precisely identified "natural + premium design" product upgrade opportunities. Team design output increased from 6 to 10 styles.', tags: ['VOC', 'Product Dev', 'Market Intelligence'] },
+    { title: 'Shopee Ad Agent', client: 'SEA E-Commerce Brand', desc: 'Deployed Shopee Agent covering Listing optimization, review management, and intelligent customer service for one-stop multi-platform AI operations.', tags: ['Shopee', 'Advertising', 'Multi-platform'] },
+    { title: 'Amazon Store Group Management', client: 'Cross-Border Seller', desc: 'Growth Shrimp intelligent operations solution. Agent monitors, alerts, optimizes, and closes deals 24/7 — like a permanent agent on your team.', tags: ['Amazon', 'Store Group', 'Automation'] },
+  ],
+}[lang];
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '案例研究' : 'Case Studies', url: `/${lang}/case-studies/` },
+]);
+---
+
+<BaseLayout
+  title={isZh ? '案例研究' : 'Case Studies'}
+  description={isZh ? '未来飞马客户成功案例——跨境电商、品牌出海、企业智能化转型的真实实践与效果数据。' : 'Fmode customer success stories — real practices and performance data from cross-border e-commerce, brand globalization, and enterprise intelligence transformation.'}
+  lang={lang}
+  currentPath={`/${lang}/case-studies/`}
+  schema={breadcrumbSchema}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '案例研究' : 'Case Studies'}</span></h1>
+        <p class="mt-4 text-lg text-dark-500">
+          {isZh ? '真实客户实践,用数据说话' : 'Real customer practices, backed by data'}
+        </p>
+      </div>
+      <div class="mt-12 grid gap-6 md:grid-cols-2 max-w-5xl mx-auto">
+        {cases.map((cs) => (
+          <div class="card-hover">
+            <div class="flex flex-wrap gap-2 mb-3">
+              {cs.tags.map((tag: string) => (
+                <span class="rounded-full bg-green-50 px-2.5 py-0.5 text-xs font-medium text-green-700">{tag}</span>
+              ))}
+            </div>
+            <h3 class="text-lg font-semibold text-dark-900">{cs.title}</h3>
+            <p class="text-sm font-medium text-primary-600 mt-1">{cs.client}</p>
+            <p class="mt-3 text-sm text-dark-500 leading-relaxed">{cs.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+  <CTASection lang={lang} variant="secondary" />
+</BaseLayout>

+ 106 - 0
website/src/pages/[lang]/contact.astro

@@ -0,0 +1,106 @@
+---
+/**
+ * Contact page with form
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+import { SITE } from '@data/site-config';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '联系我们' : 'Contact', url: `/${lang}/contact/` },
+]);
+---
+
+<BaseLayout
+  title={isZh ? '联系我们' : 'Contact Us'}
+  description={isZh ? '联系未来飞马团队,获取产品演示、技术支持或商务合作。一行命令即刻开始:npx -y @fmode/studio' : 'Contact the Fmode team for product demos, technical support, or business inquiries. Start with one command: npx -y @fmode/studio'}
+  lang={lang}
+  currentPath={`/${lang}/contact/`}
+  schema={breadcrumbSchema}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '联系我们' : 'Contact Us'}</span></h1>
+        <p class="mt-4 text-lg text-dark-500">
+          {isZh ? '让 AI 为您的业务服务,从今天开始' : 'Start harnessing AI for your business today'}
+        </p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="grid gap-10 md:grid-cols-2 max-w-5xl mx-auto">
+        <!-- Contact Info -->
+        <div>
+          <h2 class="heading-3 text-dark-900">{isZh ? '联系方式' : 'Get in Touch'}</h2>
+          <div class="mt-6 space-y-4">
+            <div class="flex items-start gap-3">
+              <span class="text-2xl">📧</span>
+              <div>
+                <p class="font-semibold text-dark-900">{isZh ? '邮箱' : 'Email'}</p>
+                <a href={`mailto:${SITE.email}`} class="text-primary-600 hover:text-primary-700">{SITE.email}</a>
+                <p class="text-sm text-dark-400">{isZh ? '工作日 9:00-18:00 专属工程师快速响应' : 'Mon-Fri 9:00-18:00, dedicated engineer response'}</p>
+              </div>
+            </div>
+            <div class="flex items-start gap-3">
+              <span class="text-2xl">🌐</span>
+              <div>
+                <p class="font-semibold text-dark-900">{isZh ? '官方文档' : 'Documentation'}</p>
+                <a href={SITE.url} class="text-primary-600 hover:text-primary-700">{SITE.url}</a>
+              </div>
+            </div>
+            <div class="flex items-start gap-3">
+              <span class="text-2xl">💬</span>
+              <div>
+                <p class="font-semibold text-dark-900">{isZh ? '开发者社区' : 'Developer Community'}</p>
+                <p class="text-dark-500">{isZh ? '加入官方微信交流群,与全球开发者共同探讨' : 'Join our WeChat community and connect with global developers'}</p>
+              </div>
+            </div>
+          </div>
+
+          <div class="mt-8 rounded-2xl bg-gradient-to-br from-dark-900 to-dark-800 p-6 text-white">
+            <p class="text-sm font-semibold opacity-80">{isZh ? '一行命令,即刻开始' : 'One command to start'}</p>
+            <code class="mt-2 block rounded bg-black/30 px-3 py-2 text-sm font-mono text-green-400">npx -y @fmode/studio</code>
+            <p class="mt-2 text-xs text-dark-300">{isZh ? '无需全局安装,零门槛体验 Software 3.0' : 'No global install needed. Zero-friction Software 3.0 experience'}</p>
+          </div>
+        </div>
+
+        <!-- Form -->
+        <div class="card">
+          <h3 class="text-lg font-semibold text-dark-900 mb-4">{isZh ? '发送消息' : 'Send a Message'}</h3>
+          <form class="space-y-4">
+            <div>
+              <label class="block text-sm font-medium text-dark-700 mb-1">{isZh ? '姓名' : 'Name'} *</label>
+              <input type="text" required class="w-full rounded-lg border border-dark-300 px-4 py-2.5 text-sm focus:border-primary-500 focus:ring-2 focus:ring-primary-200 outline-none transition" />
+            </div>
+            <div>
+              <label class="block text-sm font-medium text-dark-700 mb-1">{isZh ? '邮箱' : 'Email'} *</label>
+              <input type="email" required class="w-full rounded-lg border border-dark-300 px-4 py-2.5 text-sm focus:border-primary-500 focus:ring-2 focus:ring-primary-200 outline-none transition" />
+            </div>
+            <div>
+              <label class="block text-sm font-medium text-dark-700 mb-1">{isZh ? '公司' : 'Company'}</label>
+              <input type="text" class="w-full rounded-lg border border-dark-300 px-4 py-2.5 text-sm focus:border-primary-500 focus:ring-2 focus:ring-primary-200 outline-none transition" />
+            </div>
+            <div>
+              <label class="block text-sm font-medium text-dark-700 mb-1">{isZh ? '需求描述' : 'Message'} *</label>
+              <textarea rows={4} required class="w-full rounded-lg border border-dark-300 px-4 py-2.5 text-sm focus:border-primary-500 focus:ring-2 focus:ring-primary-200 outline-none transition"></textarea>
+            </div>
+            <button type="submit" class="btn-primary w-full">
+              {isZh ? '提交' : 'Submit'}
+            </button>
+          </form>
+        </div>
+      </div>
+    </div>
+  </section>
+</BaseLayout>

+ 105 - 0
website/src/pages/[lang]/faq.astro

@@ -0,0 +1,105 @@
+---
+/**
+ * FAQ page — GEO-critical content with full FAQPage schema
+ * This is a core GEO asset designed to rank in AI-generated answers.
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateFAQSchema, generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const faqCategories: Record<string, { zh: string; en: string; items: Array<{ q: { zh: string; en: string }; a: { zh: string; en: string } }> }> = {
+  'software-3': {
+    zh: 'Software 3.0 与驾驭工程',
+    en: 'Software 3.0 & Harness Engineering',
+    items: [
+      { q: { zh: '什么是 Software 3.0?', en: 'What is Software 3.0?' }, a: { zh: 'Software 3.0 是 AI 原生智能时代的软件开发新范式。与传统 Software 1.0(手工编码)和 2.0(SaaS 服务)不同,Software 3.0 的核心交互是"人 → AI → 任务"。用户通过自然语言描述需求,AI 智能体自主拆解并执行复杂流程。其核心价值不再是代码或服务,而是"Skills(技能)"——可组合、可复用的 AI 能力模块。', en: 'Software 3.0 is a new software development paradigm for the AI-native intelligence era. Unlike Software 1.0 (manual coding) and 2.0 (SaaS services), the core interaction of Software 3.0 is "Human → AI → Task". Users describe needs in natural language, and AI agents autonomously decompose and execute complex workflows. The core value is no longer code or services, but "Skills" — composable, reusable AI capability modules.' } },
+      { q: { zh: '什么是驾驭工程(Harness Engineering)?', en: 'What is Harness Engineering?' }, a: { zh: '驾驭工程是 AI 工程化的第三代范式。第一代 Prompt 工程教 AI"怎么说",第二代 Context 工程教 AI"知道什么",第三代 Harness 工程教 AI"按规则做"。它构建一套具备边界定义、规则约束与异常处理的工业化运行环境,让 AI 从"不可控的实验"转化为"可预期的生产资料"。核心公式:Agent = 基础模型 + Harness 驾驭层。', en: 'Harness Engineering is the third generation of AI engineering. First-gen Prompt Engineering teaches AI "what to say"; second-gen Context Engineering teaches AI "what to know"; third-gen Harness Engineering teaches AI "to follow rules". It builds an industrialized runtime with boundary definitions, rule constraints, and exception handling, transforming AI from "uncontrolled experiments" into "predictable production tools". Core formula: Agent = Foundation Model + Harness Layer.' } },
+      { q: { zh: 'Agent = 基础模型 + Harness 驾驭层 是什么意思?', en: 'What does Agent = Foundation Model + Harness Layer mean?' }, a: { zh: '这个公式揭示了 AI 应用成功的核心逻辑。基础模型(如 GPT-4、GLM-4)决定了 AI 能力的理论上限;而 Harness 驾驭层则决定了实际业务落地中的稳定性与能力下限。一个好的驾驭系统能让低成本国产模型在实际业务中达到甚至超越顶级闭源模型的效果。这就像一辆跑车——发动机决定最高速度,但方向盘、刹车和交通规则决定了它能否安全到达目的地。', en: 'This formula reveals the core logic of AI application success. The foundation model (e.g., GPT-4, GLM-4) sets the theoretical capability ceiling, while the Harness layer determines the stability and capability floor in real business deployment. A good harness system can make budget domestic models match or surpass top closed-source models in real business scenarios. It\'s like a sports car — the engine determines top speed, but the steering wheel, brakes, and traffic rules determine whether it reaches the destination safely.' } },
+    ],
+  },
+  'enterprise-ai': {
+    zh: '企业 AI 落地',
+    en: 'Enterprise AI Implementation',
+    items: [
+      { q: { zh: '企业 AI 落地为什么这么难?', en: 'Why is enterprise AI implementation so difficult?' }, a: { zh: '核心原因有三:1)Demo 与生产的鸿沟——AI 生成的代码能跑通,但无法满足企业级安全、合规、稳定要求,通常需 3-5 个月重写;2)Agent 成本爆炸——为防止幻觉而不断追加上下文,Token 消耗指数级增长,规模化部署时成为成本黑洞;3)缺乏持久壁垒——基于通用模型的速赢方案容易被竞争对手快速复制。解决之道在于建立系统的"驾驭 AI 的方法"——即驾驭工程。', en: 'Three core reasons: 1) The demo-production gap — AI-generated code runs but can\'t meet enterprise security, compliance, and stability requirements, typically needing 3-5 months of rewriting; 2) Agent cost explosion — constantly adding context to prevent hallucinations causes exponential Token consumption, becoming a cost black hole at scale; 3) Lack of durable moats — quick-win solutions based on generic models are easily copied. The solution lies in establishing a systematic "method for harnessing AI" — Harness Engineering.' } },
+      { q: { zh: 'AI 从 Demo 到生产需要多长时间?', en: 'How long does AI go from demo to production?' }, a: { zh: '传统模式需要 5-6 个月甚至更久。而使用未来飞马的 Software 3.0 方案:1 天即可交付 Agentic 业务 SOP 并上线运行,3 天打通核心业务痛点形成价值闭环,30 天完成 AI 底座深度接入构建智能中枢,90 天企业掌握自主迭代能力实现全面转型。', en: 'Traditional approaches need 5-6 months or longer. With Fmode\'s Software 3.0 approach: 1 day delivers Agentic business SOPs online, 3 days connect core business pain points into a value loop, 30 days complete deep AI integration building an intelligence hub, 90 days achieve full autonomous iteration capability and comprehensive transformation.' } },
+      { q: { zh: '如何降低 AI Agent 的运营成本?', en: 'How to reduce AI Agent operational costs?' }, a: { zh: '通过 Harness for Agent 的 MCP 智能控制平面实现:1)多维度用量配额(按部门/项目/用户设定 Token 上限);2)智能模型路由(复杂任务用强模型,简单任务用轻量模型);3)响应缓存机制减少重复调用;4)实时监控异常消耗并自动熔断;5)用规则约束替代大量上下文,从根本上减少 Token 浪费。实践表明可降低 70% 的 Agent 运营成本。', en: 'Through Harness for Agent\'s MCP intelligent control plane: 1) Multi-dimensional usage quotas (Token limits by department/project/user); 2) Intelligent model routing (use powerful models for complex tasks, lightweight models for simple ones); 3) Response caching to reduce redundant calls; 4) Real-time anomaly monitoring with automatic circuit-breaking; 5) Replace excessive context with rule constraints to fundamentally reduce Token waste. Practice shows 70% Agent operational cost reduction.' } },
+      { q: { zh: '什么是 AI 商业增益因子(Q 值)?', en: 'What is the AI Business Gain Factor (Q-value)?' }, a: { zh: 'AI 商业增益因子 Q 值 = AI 带来的商业收益 ÷ AI 全链路投入成本。这是衡量 AI 项目商业价值的核心指标。据德勤 2026 Q1 报告,80% 的大中型企业已部署 AI 工具,但仅 15% 实现了规模化商业价值——绝大多数项目的 Q 值 < 1,即投入大于产出。驾驭工程的目标就是让 Q 值持续 > 1,实现 AI 投资的确定性回报。', en: 'AI Business Gain Factor Q = AI-generated business benefits ÷ AI full-chain investment costs. This is the core metric for measuring AI project commercial value. According to Deloitte Q1 2026 report, 80% of large enterprises have deployed AI tools, but only 15% have achieved scaled business value — most projects have Q < 1, meaning investment exceeds returns. The goal of Harness Engineering is to make Q consistently > 1, achieving deterministic AI investment returns.' } },
+    ],
+  },
+  'vibe-coding': {
+    zh: 'Vibe Coding 与 AI 开发',
+    en: 'Vibe Coding & AI Development',
+    items: [
+      { q: { zh: 'Vibe Coding 是什么?和 AI 辅助编程有什么区别?', en: 'What is Vibe Coding? How is it different from AI-assisted programming?' }, a: { zh: 'Vibe Coding(氛围编程)是用自然语言描述需求,AI 自动生成完整应用程序的开发范式。它与传统 AI 辅助编程的关键区别在于:AI 辅助编程是"人主导 + AI 辅助"——AI 帮你写函数、补全代码;Vibe Coding 是"AI 主导 + 人决策"——AI 理解业务需求后自主生成完整系统架构和代码,人只需审核和决策。但裸奔的 Vibe Coding 只能产出 Demo,需要 Harness 驾驭层才能输出生产级应用。', en: 'Vibe Coding is a development paradigm where you describe needs in natural language and AI automatically generates complete applications. The key difference from traditional AI-assisted programming: AI-assisted is "human-led + AI helper" — AI writes functions, completes code; Vibe Coding is "AI-led + human decision" — AI understands business needs and independently generates complete system architecture and code, while humans only review and decide. However, bare Vibe Coding only produces demos — it needs a Harness layer to output production-grade applications.' } },
+      { q: { zh: 'AI 生成的代码能直接用于生产环境吗?', en: 'Can AI-generated code be directly used in production?' }, a: { zh: '通过 Harness for Vibe Coding 的规则约束体系,可以。关键在于将企业级开发规范(需求分析、安全合规、代码风格、架构标准、运维监控等)转化为 AI 可读的标准化协议。在代码生成过程中实时进行合规性与逻辑性检查,而非生成后再修改。这样 AI 输出的代码从一开始就具备企业级健壮性,可直接部署上线。', en: 'Yes, through Harness for Vibe Coding\'s rule constraint system. The key is transforming enterprise development standards (requirements analysis, security compliance, code style, architecture standards, DevOps monitoring, etc.) into AI-readable standardized protocols. Compliance and logic checks happen in real-time during code generation, not after the fact. This way, AI-generated code has enterprise-grade robustness from the start and can be deployed directly.' } },
+    ],
+  },
+};
+
+const allFaqsForSchema = Object.values(faqCategories).flatMap(cat =>
+  cat.items.map(item => ({
+    question: item.q[lang],
+    answer: item.a[lang],
+  }))
+);
+
+const faqSchema = generateFAQSchema(allFaqsForSchema);
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '常见问题' : 'FAQ', url: `/${lang}/faq/` },
+]);
+---
+
+<BaseLayout
+  title={isZh ? '常见问题' : 'FAQ'}
+  description={isZh ? '关于 Software 3.0、驾驭工程、Vibe Coding、企业 AI 落地的常见问题解答。覆盖从概念到实践的完整 AI 工程化知识。' : 'Frequently asked questions about Software 3.0, Harness Engineering, Vibe Coding, and enterprise AI implementation.'}
+  lang={lang}
+  currentPath={`/${lang}/faq/`}
+  schema={{ ...faqSchema, ...breadcrumbSchema }}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '常见问题' : 'FAQ'}</span></h1>
+        <p class="mt-4 text-lg text-dark-500">
+          {isZh ? '关于 Software 3.0、驾驭工程、企业 AI 落地的核心问题解答' : 'Core questions about Software 3.0, Harness Engineering, and enterprise AI implementation'}
+        </p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-4xl space-y-12">
+        {Object.entries(faqCategories).map(([key, cat]) => (
+          <div>
+            <h2 class="heading-3 text-dark-900 mb-6">{cat[lang]}</h2>
+            <div class="space-y-4">
+              {cat.items.map((item) => (
+                <details class="card group">
+                  <summary class="cursor-pointer font-semibold text-dark-900 list-none flex items-center justify-between">
+                    <span>{item.q[lang]}</span>
+                    <svg class="h-5 w-5 text-dark-400 transition-transform group-open:rotate-180 flex-shrink-0 ml-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+                      <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
+                    </svg>
+                  </summary>
+                  <p class="mt-4 text-dark-500 leading-relaxed">{item.a[lang]}</p>
+                </details>
+              ))}
+            </div>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="secondary" />
+</BaseLayout>

+ 83 - 0
website/src/pages/[lang]/glossary.astro

@@ -0,0 +1,83 @@
+---
+/**
+ * Glossary page — SSOT for key terms, critical for GEO entity recognition
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const terms: Array<{ term: { zh: string; en: string }; def: { zh: string; en: string }; aliases?: { zh: string[]; en: string[] } }> = [
+  { term: { zh: '驾驭工程', en: 'Harness Engineering' }, def: { zh: 'AI工程化第三代范式。构建具备边界定义、规则约束与异常处理的工业化运行环境,让AI能力从"不可控的实验"转化为"可预期的生产资料"。核心公式:Agent = 基础模型 + Harness驾驭层。', en: 'Third-generation AI engineering paradigm. Builds an industrialized runtime with boundary definitions, rule constraints, and exception handling, transforming AI from uncontrolled experiments into predictable production tools. Core formula: Agent = Foundation Model + Harness Layer.' }, aliases: { zh: ['Harness工程', 'AI驾驭'], en: ['AI Harnessing'] } },
+  { term: { zh: 'Software 3.0', en: 'Software 3.0' }, def: { zh: 'AI原生智能时代的软件开发新范式。核心交互:人 → AI → 任务。通过自然语言驱动智能体自主拆解并执行复杂流程。核心价值:Skills即核心能力。', en: 'New software development paradigm for the AI-native era. Core interaction: Human → AI → Task. Natural language drives agents to autonomously decompose and execute complex workflows. Core value: Skills as capability.' }, aliases: { zh: ['AI原生开发', '第三代软件开发'], en: ['AI-native development'] } },
+  { term: { zh: 'Vibe Coding', en: 'Vibe Coding' }, def: { zh: '以自然语言描述需求,AI自动生成应用程序的开发范式。区别于传统的"人主导+AI辅助",Vibe Coding是"AI主导+人决策"。', en: 'A development paradigm where natural language describes needs and AI automatically generates applications. Differs from traditional "human-led + AI helper" — Vibe Coding is "AI-led + human decision".' }, aliases: { zh: ['氛围编程', '自然语言编程'], en: ['vibe programming', 'natural language coding'] } },
+  { term: { zh: 'AI Agent', en: 'AI Agent' }, def: { zh: '基于大语言模型的智能体,能够自主理解目标、拆解任务、调用工具并执行复杂工作流。Agent = 基础模型 + Harness驾驭层。', en: 'LLM-based intelligent agent that can autonomously understand goals, decompose tasks, invoke tools, and execute complex workflows. Agent = Foundation Model + Harness Layer.' }, aliases: { zh: ['智能体', 'AI智能体'], en: ['intelligent agent'] } },
+  { term: { zh: 'MCP 协议', en: 'MCP Protocol' }, def: { zh: 'Model Context Protocol,模型上下文协议。为大模型与外部工具/数据源之间的交互提供标准化接口,是 Agent 能力扩展的关键协议。', en: 'Model Context Protocol. Provides standardized interfaces for interaction between LLMs and external tools/data sources. A key protocol for Agent capability expansion.' }, aliases: { zh: ['模型上下文协议'], en: ['Model Context Protocol'] } },
+  { term: { zh: 'Skills 技能包', en: 'Skills Package' }, def: { zh: '将复杂业务逻辑与AI能力封装为标准化的可复用模块。如同前端的npm包、Python的pip包,Skills让AI能力像调用API一样简单。', en: 'Standardized, reusable modules that encapsulate complex business logic and AI capabilities. Like npm packages for frontend or pip packages for Python, Skills make AI capabilities as simple as calling an API.' }, aliases: { zh: ['技能包', 'AI技能模块'], en: ['AI skills', 'skill modules'] } },
+  { term: { zh: 'FmodeCore', en: 'FmodeCore' }, def: { zh: '未来飞马的全模型兼容底座。内置数十套深度优化的AI开发规则库,打破不同大模型的接口壁垒,实现跨模型的统一调度与能力对齐。', en: 'Fmode\'s universal model compatibility layer. Contains dozens of deeply optimized AI development rule libraries, breaking interface barriers between different LLMs for unified orchestration and capability alignment.' } },
+  { term: { zh: 'Q值 (AI商业增益因子)', en: 'Q-value (AI Business Gain Factor)' }, def: { zh: 'AI商业增益因子 = AI带来的商业收益 ÷ AI全链路投入成本。衡量AI项目商业价值的核心指标。Q<1表示投入大于产出,驾驭工程的目标是让Q持续>1。', en: 'AI Business Gain Factor = AI-generated business benefits ÷ AI full-chain investment costs. The core metric for AI project commercial value. Q<1 means investment exceeds returns; Harness Engineering aims to make Q consistently >1.' } },
+  { term: { zh: 'BaaS (后端即服务)', en: 'BaaS (Backend as a Service)' }, def: { zh: '云端后端服务模型,提供即用型API、数据库、认证等后端能力,让开发者专注于前端和业务逻辑。', en: 'Cloud backend service model providing ready-to-use APIs, databases, authentication, and other backend capabilities, allowing developers to focus on frontend and business logic.' } },
+  { term: { zh: 'PaaS (平台即服务)', en: 'PaaS (Platform as a Service)' }, def: { zh: '云端平台服务模型,提供应用开发、运行和管理的完整环境,包括知识库、SOP引擎等企业级能力。', en: 'Cloud platform service model providing a complete environment for application development, execution, and management, including knowledge bases, SOP engines, and other enterprise capabilities.' } },
+  { term: { zh: 'SOP (标准作业程序)', en: 'SOP (Standard Operating Procedure)' }, def: { zh: '将企业业务逻辑转化为标准化、可配置的执行流程。通过规则引擎实现业务自动化,让AI严格遵循企业业务准则。', en: 'Transforms enterprise business logic into standardized, configurable execution flows. Uses rule engines for business automation, ensuring AI strictly follows enterprise business guidelines.' } },
+  { term: { zh: 'VOC (客户之声)', en: 'VOC (Voice of Customer)' }, def: { zh: '直接从真实用户评论、社交媒体反馈中提炼的原始洞察,是AI驱动的市场分析和产品决策的数据基础。', en: 'Raw insights extracted directly from real user reviews and social media feedback. The data foundation for AI-driven market analysis and product decision-making.' } },
+  { term: { zh: 'RAG (检索增强生成)', en: 'RAG (Retrieval-Augmented Generation)' }, def: { zh: 'Context工程的核心技术。通过引入私有知识库与实时数据,为大模型提供可信赖的"外部大脑",有效抑制幻觉现象。', en: 'Core technology of Context Engineering. Introduces private knowledge bases and real-time data to provide LLMs with a trustworthy "external brain", effectively suppressing hallucinations.' } },
+];
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '术语表' : 'Glossary', url: `/${lang}/glossary/` },
+]);
+---
+
+<BaseLayout
+  title={isZh ? '术语表' : 'Glossary'}
+  description={isZh ? 'AI工程化核心术语定义:驾驭工程、Software 3.0、Vibe Coding、AI Agent、MCP协议等关键技术概念的权威解释。' : 'Core AI engineering terminology: authoritative definitions for Harness Engineering, Software 3.0, Vibe Coding, AI Agent, MCP, and more.'}
+  lang={lang}
+  currentPath={`/${lang}/glossary/`}
+  schema={breadcrumbSchema}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '术语表' : 'Glossary'}</span></h1>
+        <p class="mt-4 text-lg text-dark-500">
+          {isZh ? 'AI 工程化与 Software 3.0 核心术语的权威定义' : 'Authoritative definitions for AI Engineering and Software 3.0 terminology'}
+        </p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-4xl space-y-6">
+        {terms.map((t) => (
+          <div class="card" id={t.term.en.toLowerCase().replace(/\s+/g, '-')}>
+            <h2 class="text-lg font-bold text-dark-900">
+              {t.term[lang]}
+              {t.term.zh !== t.term.en && (
+                <span class="ml-2 text-sm font-normal text-dark-400">({t.term[lang === 'zh' ? 'en' : 'zh']})</span>
+              )}
+            </h2>
+            <p class="mt-2 text-dark-500 leading-relaxed">{t.def[lang]}</p>
+            {t.aliases && t.aliases[lang].length > 0 && (
+              <div class="mt-2 flex flex-wrap gap-1.5">
+                <span class="text-xs text-dark-400">{isZh ? '别名:' : 'Aliases: '}</span>
+                {t.aliases[lang].map((a) => (
+                  <span class="rounded bg-dark-100 px-2 py-0.5 text-xs text-dark-500">{a}</span>
+                ))}
+              </div>
+            )}
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="secondary" />
+</BaseLayout>

+ 392 - 0
website/src/pages/[lang]/index.astro

@@ -0,0 +1,392 @@
+---
+/**
+ * Homepage - Landing page for the Fmode website.
+ * Features hero section, value props, product highlights, and social proof.
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import FeatureCard from '@components/FeatureCard.astro';
+import { generateOrganizationSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [
+    { params: { lang: 'zh' } },
+    { params: { lang: 'en' } },
+  ];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const content = {
+  zh: {
+    heroTitle: '让人类驾驭AI',
+    heroSubtitle: '企业级驾驭工程工作站',
+    heroDescription: '未来飞马通过 Software 3.0 全新范式与双 Harness 驾驭体系,帮助企业将 AI 能力安全、稳定、低成本地转化为实际业务价值。不再被 AI 驾驭,而是驾驭 AI。',
+    heroCTA: '免费开始使用',
+    heroSecondary: '了解驾驭工程',
+    stats: [
+      { value: '1天', label: '极速交付业务SOP' },
+      { value: '70%', label: 'AI应用成本降低' },
+      { value: '10倍', label: '交付效率提升' },
+      { value: '1000+', label: '企业客户信赖' },
+    ],
+    sectionTag1: '核心定位',
+    sectionTitle1: '三大核心能力,重新定义企业AI应用',
+    features: [
+      {
+        icon: '🧠',
+        title: '管理智能体',
+        desc: '统一编排和调度企业内各类AI Agent,打破信息孤岛,实现多智能体高效协同与任务分配。',
+      },
+      {
+        icon: '📦',
+        title: '技能全生命周期管理',
+        desc: '支持企业级Skills技能包的创建、版本分发与跨场景复用,将核心业务逻辑沉淀为可复用资产。',
+      },
+      {
+        icon: '🎛️',
+        title: '集约化统一管控',
+        desc: '知识库、Token、权限与SOP的一站式集中管理,实现企业AI资源的精细化运营与成本优化。',
+      },
+      {
+        icon: '⚡',
+        title: 'Software 3.0 智能中枢',
+        desc: '以 Skills 替代传统僵化软件,通过灵活可组合的能力模块响应市场动态变化,让业务创新即时发生。',
+      },
+      {
+        icon: '🔧',
+        title: 'Vibe Everything 一站式',
+        desc: 'BaaS + PaaS 架构将 Vibe Coding 全链路工具链一站集成,开箱即用,零运维负担。',
+      },
+      {
+        icon: '🛡️',
+        title: '全栈技术覆盖',
+        desc: '无缝整合 Vercel、Firebase、AWS、Cloudflare 等主流平台,抹平底层差异,提供一致开发体验。',
+      },
+    ],
+    sectionTag2: '技术范式',
+    sectionTitle2: '双 Harness 驾驭体系',
+    sectionDesc2: 'Agent = 基础模型 + Harness 驾驭层。模型决定能力上限,Harness决定能力下限。',
+    harnesses: [
+      {
+        title: 'Harness for Vibe Coding',
+        desc: '将企业级开发规范、代码风格与业务约束转化为AI可读的标准协议,让AI直接输出生产级可上线代码,跨越Demo与生产环境的巨大鸿沟。',
+        benefits: ['生产级代码直出', '企业规范自动约束', '开发周期缩短90%'],
+      },
+      {
+        title: 'Harness for Agent',
+        desc: '引入MCP智能控制平面与标准化Skill模块体系,对Agent的能力边界、调用流程与资源消耗进行精细化封装与全局管控。',
+        benefits: ['Agent成本降低70%', '执行准确率大幅提升', '规模化安全部署'],
+      },
+    ],
+    sectionTag3: '交付路径',
+    sectionTitle3: '1-7-90 天极速陪跑模型',
+    sectionDesc3: '告别传统开发6个月的漫长周期,实现AI业务价值的确定性落地。',
+    timeline: [
+      { day: '01', title: '极速启动', desc: '交付Agentic业务SOP,全员快速上手,核心业务流程24小时内实现自动化流转。' },
+      { day: '07', title: '价值闭环', desc: '深度覆盖核心业务痛点,打通数据上下游,形成可观测的业务价值闭环。' },
+      { day: '90', title: '能力内化', desc: '完成AI底座深度接入,打造企业专属智能中枢,将业务经验沉淀为可复用数字化资产。' },
+    ],
+    sectionTag4: '客户群体',
+    sectionTitle4: '为各类企业量身打造',
+    personas: [
+      { title: '大中型企业', desc: '私有化部署,专属智能中枢,保障核心数据安全与流程自主可控。', href: '/solutions/enterprise' },
+      { title: '创业公司', desc: '1天极速交付MVP,大幅降低技术试错成本,抢占市场时间窗口。', href: '/solutions/startups' },
+      { title: '传统企业', desc: '轻量化数字转型方案,业务人员直接上手,无需重金组建技术团队。', href: '/solutions/traditional-enterprise' },
+      { title: '软件外包', desc: '将6个月交付周期压缩至1-7天,显著提升项目周转效率与竞争力。', href: '/solutions/outsourcing' },
+      { title: '独立开发者', desc: 'Vibe Everything全栈引擎,开箱即用,零运维负担的高效开发体验。', href: '/solutions/developers' },
+    ],
+    sectionTag5: '技术对比',
+    sectionTitle5: 'Software 3.0 vs 传统开发',
+    comparison: {
+      traditional: { title: '传统软件开发', features: ['从0到1定制开发', '纯人工驱动,6个月+交付周期', '项目制开发,可复制性极低', 'AI仅作为独立API手动调用', '需求响应滞后,难以应对变化'] },
+      vibecoding: { title: 'Vibe Coding (仅Demo)', features: ['AI辅助Demo生成', '人机基础配合', '2天上线原型验证', '缺乏企业级权限与管理', '无法直接投入业务使用'] },
+      fmode: { title: 'FmodeStudio Software 3.0', features: ['业务SOP直接生成可执行应用', 'Agent自主执行,人仅做关键决策', '1天交付,7天闭环', 'PaaS+BaaS一键集成', '低成本规模化,业务创新即时发生'] },
+    },
+  },
+  en: {
+    heroTitle: 'Simplifying AI, Harnessing AI',
+    heroSubtitle: 'Enterprise Harnessing Engineering Workstation',
+    heroDescription: 'Through the Software 3.0 paradigm and dual Harness system, Fmode helps enterprises transform AI capabilities into real business value — safely, stably, and cost-effectively. Don\'t be harnessed by AI. Harness AI.',
+    heroCTA: 'Start Free',
+    heroSecondary: 'Learn Harness Engineering',
+    stats: [
+      { value: '1 Day', label: 'Business SOP Delivery' },
+      { value: '70%', label: 'AI Cost Reduction' },
+      { value: '10x', label: 'Delivery Efficiency' },
+      { value: '1000+', label: 'Enterprise Clients' },
+    ],
+    sectionTag1: 'Core Positioning',
+    sectionTitle1: 'Three Core Capabilities Redefining Enterprise AI',
+    features: [
+      {
+        icon: '🧠',
+        title: 'Agent Management',
+        desc: 'Unified orchestration and scheduling of enterprise AI Agents, breaking down information silos for efficient multi-agent collaboration.',
+      },
+      {
+        icon: '📦',
+        title: 'Skills Lifecycle Management',
+        desc: 'Enterprise-grade Skills package creation, version distribution, and cross-scenario reuse — turning core business logic into reusable assets.',
+      },
+      {
+        icon: '🎛️',
+        title: 'Centralized Governance',
+        desc: 'One-stop management for knowledge bases, tokens, permissions, and SOPs — enabling refined operations and cost optimization.',
+      },
+      {
+        icon: '⚡',
+        title: 'Software 3.0 Intelligence Hub',
+        desc: 'Replace rigid traditional software with flexible, composable Skills modules that respond dynamically to market changes.',
+      },
+      {
+        icon: '🔧',
+        title: 'Vibe Everything Integration',
+        desc: 'BaaS + PaaS architecture integrates the full Vibe Coding toolchain — out of the box, zero operations burden.',
+      },
+      {
+        icon: '🛡️',
+        title: 'Full-Stack Technology Coverage',
+        desc: 'Seamlessly integrates Vercel, Firebase, AWS, Cloudflare and more — unified development experience across platforms.',
+      },
+    ],
+    sectionTag2: 'Technical Paradigm',
+    sectionTitle2: 'Dual Harness System',
+    sectionDesc2: 'Agent = Foundation Model + Harness Layer. The model sets the ceiling; the Harness ensures the floor.',
+    harnesses: [
+      {
+        title: 'Harness for Vibe Coding',
+        desc: 'Converts enterprise development standards, code styles, and business constraints into AI-readable protocols — enabling AI to directly output production-grade deployable code.',
+        benefits: ['Production-grade code output', 'Automatic compliance with standards', '90% faster development cycles'],
+      },
+      {
+        title: 'Harness for Agent',
+        desc: 'Introduces MCP intelligent control plane and standardized Skill modules for fine-grained encapsulation and global governance of Agent capabilities, workflows, and resource consumption.',
+        benefits: ['70% Agent cost reduction', 'Higher execution accuracy', 'Secure scaled deployment'],
+      },
+    ],
+    sectionTag3: 'Delivery Path',
+    sectionTitle3: '1-7-90 Day Rapid Enablement Model',
+    sectionDesc3: 'Say goodbye to 6-month development cycles. Achieve deterministic AI business value delivery.',
+    timeline: [
+      { day: '01', title: 'Quick Start', desc: 'Deploy Agentic business SOPs. Get your team onboard within 24 hours with automated core business processes.' },
+      { day: '07', title: 'Value Loop', desc: 'Deep coverage of core business pain points. Connect data upstream and downstream for observable business value loops.' },
+      { day: '90', title: 'Internalized Capability', desc: 'Complete AI infrastructure integration. Build your enterprise intelligence hub with reusable digital assets.' },
+    ],
+    sectionTag4: 'Customer Segments',
+    sectionTitle4: 'Tailored for Every Business',
+    personas: [
+      { title: 'Large Enterprises', desc: 'Private deployment, dedicated intelligence hub, data sovereignty and process autonomy guaranteed.', href: '/solutions/enterprise' },
+      { title: 'Startups', desc: '1-day MVP delivery. Dramatically reduce technical trial-and-error costs and seize market windows.', href: '/solutions/startups' },
+      { title: 'Traditional Enterprises', desc: 'Lightweight digital transformation. Business users onboard directly — no heavy tech team needed.', href: '/solutions/traditional-enterprise' },
+      { title: 'Software Outsourcing', desc: 'Compress 6-month delivery cycles to 1-7 days. Boost project turnover and competitiveness.', href: '/solutions/outsourcing' },
+      { title: 'Independent Developers', desc: 'Vibe Everything full-stack engine. Out of the box, zero ops, maximum creative focus.', href: '/solutions/developers' },
+    ],
+    sectionTag5: 'Comparison',
+    sectionTitle5: 'Software 3.0 vs Traditional Development',
+    comparison: {
+      traditional: { title: 'Traditional Software Dev', features: ['Custom development from scratch', 'Manual execution, 6+ month cycles', 'Project-based, low reusability', 'AI as isolated API calls', 'Slow response to market changes'] },
+      vibecoding: { title: 'Vibe Coding (Demo Only)', features: ['AI-assisted demo generation', 'Basic human-AI collaboration', '2-day prototype validation', 'No enterprise permissions or governance', 'Cannot be used in production'] },
+      fmode: { title: 'FmodeStudio Software 3.0', features: ['Business SOP → executable app', 'Agent-driven execution, human decision', '1-day delivery, 7-day closure', 'PaaS+BaaS one-click integration', 'Low-cost scaling, instant innovation'] },
+    },
+  },
+};
+
+const c = content[lang];
+const orgSchema = generateOrganizationSchema(lang);
+
+const pageTitle = isZh ? '首页' : 'Home';
+const pageDesc = isZh
+  ? '未来飞马(Fmode)是新一代企业驾驭工程平台,通过Software 3.0范式与双Harness体系,帮助企业驾驭AI。1天交付,7天闭环,90天构建智能中枢。'
+  : 'Fmode is the next-gen enterprise harnessing engineering platform. Through Software 3.0 and dual Harness, we help enterprises harness AI. 1-day delivery, 7-day closure, 90-day intelligence hub.';
+---
+
+<BaseLayout
+  title={pageTitle}
+  description={pageDesc}
+  lang={lang}
+  currentPath={`/${lang}/`}
+  ogType="website"
+  schema={orgSchema}
+>
+  <!-- Hero Section -->
+  <section class="relative overflow-hidden bg-gradient-to-b from-dark-50 to-white">
+    <div class="absolute inset-0 overflow-hidden pointer-events-none">
+      <div class="absolute -top-24 -right-24 w-96 h-96 bg-primary-200/30 rounded-full blur-3xl"></div>
+      <div class="absolute -bottom-24 -left-24 w-96 h-96 bg-accent-200/30 rounded-full blur-3xl"></div>
+    </div>
+
+    <div class="container-page relative">
+      <div class="section-padding mx-auto max-w-4xl text-center">
+        <h1 class="heading-1 text-dark-900">
+          <span class="gradient-text">{c.heroTitle}</span>
+        </h1>
+        <p class="mt-3 text-xl font-semibold text-dark-600">{c.heroSubtitle}</p>
+        <p class="mt-4 text-lg text-dark-500 leading-relaxed max-w-2xl mx-auto">
+          {c.heroDescription}
+        </p>
+        <div class="mt-8 flex flex-col sm:flex-row items-center justify-center gap-4">
+          <a href={`/${lang}/contact/`} class="btn-primary text-lg px-8 py-3.5">
+            {c.heroCTA}
+          </a>
+          <a href={`/${lang}/product/harness-engineering/`} class="btn-secondary text-lg px-8 py-3.5">
+            {c.heroSecondary}
+          </a>
+        </div>
+
+        <!-- Command line -->
+        <div class="mt-8 inline-block">
+          <code class="rounded-lg bg-dark-900 px-5 py-3 text-sm font-mono text-green-400">
+            npx -y @fmode/studio
+          </code>
+        </div>
+
+        <!-- Stats -->
+        <div class="mt-12 grid grid-cols-2 md:grid-cols-4 gap-6">
+          {c.stats.map((stat) => (
+            <div class="text-center">
+              <div class="text-2xl sm:text-3xl font-extrabold gradient-text">{stat.value}</div>
+              <div class="mt-1 text-sm text-dark-500">{stat.label}</div>
+            </div>
+          ))}
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- Core Features Section -->
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="text-center mx-auto max-w-2xl">
+        <span class="inline-block rounded-full bg-primary-50 px-4 py-1.5 text-xs font-semibold text-primary-700 uppercase tracking-wide">
+          {c.sectionTag1}
+        </span>
+        <h2 class="heading-2 mt-4 text-dark-900">{c.sectionTitle1}</h2>
+      </div>
+      <div class="mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
+        {c.features.map((f) => (
+          <FeatureCard icon={f.icon} title={f.title} description={f.desc} lang={lang} />
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <!-- Dual Harness Section -->
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <div class="text-center mx-auto max-w-2xl">
+        <span class="inline-block rounded-full bg-accent-50 px-4 py-1.5 text-xs font-semibold text-accent-700 uppercase tracking-wide">
+          {c.sectionTag2}
+        </span>
+        <h2 class="heading-2 mt-4 text-dark-900">{c.sectionTitle2}</h2>
+        <p class="mt-4 text-lg text-dark-500">{c.sectionDesc2}</p>
+      </div>
+      <div class="mt-12 grid gap-8 lg:grid-cols-2">
+        {c.harnesses.map((h) => (
+          <div class="card-hover">
+            <h3 class="text-xl font-bold text-dark-900">{h.title}</h3>
+            <p class="mt-3 text-dark-500 leading-relaxed">{h.desc}</p>
+            <ul class="mt-4 space-y-2">
+              {h.benefits.map((b) => (
+                <li class="flex items-center gap-2 text-sm text-dark-600">
+                  <svg class="h-5 w-5 text-green-500 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+                    <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
+                  </svg>
+                  {b}
+                </li>
+              ))}
+            </ul>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <!-- Timeline Section -->
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="text-center mx-auto max-w-2xl">
+        <span class="inline-block rounded-full bg-primary-50 px-4 py-1.5 text-xs font-semibold text-primary-700 uppercase tracking-wide">
+          {c.sectionTag3}
+        </span>
+        <h2 class="heading-2 mt-4 text-dark-900">{c.sectionTitle3}</h2>
+        <p class="mt-4 text-lg text-dark-500">{c.sectionDesc3}</p>
+      </div>
+      <div class="mt-12 grid gap-6 md:grid-cols-3">
+        {c.timeline.map((t) => (
+          <div class="card-hover text-center">
+            <div class="inline-flex items-center justify-center h-16 w-16 rounded-full bg-gradient-to-br from-primary-500 to-accent-500 text-white text-xl font-extrabold">
+              {t.day}
+            </div>
+            <h3 class="mt-4 text-lg font-bold text-dark-900">{t.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{t.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <!-- Persona Section -->
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <div class="text-center mx-auto max-w-2xl">
+        <span class="inline-block rounded-full bg-accent-50 px-4 py-1.5 text-xs font-semibold text-accent-700 uppercase tracking-wide">
+          {c.sectionTag4}
+        </span>
+        <h2 class="heading-2 mt-4 text-dark-900">{c.sectionTitle4}</h2>
+      </div>
+      <div class="mt-12 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
+        {c.personas.map((p) => (
+          <a href={`/${lang}${p.href}/`} class="card-hover no-underline group block">
+            <h3 class="text-lg font-semibold text-dark-900 group-hover:text-primary-700 transition-colors">{p.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{p.desc}</p>
+            <span class="mt-3 inline-flex items-center gap-1 text-sm font-medium text-primary-600">
+              {isZh ? '了解方案' : 'View Solution'}
+              <svg class="h-4 w-4 transition-transform group-hover:translate-x-1" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
+              </svg>
+            </span>
+          </a>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <!-- Comparison Section -->
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="text-center mx-auto max-w-2xl">
+        <span class="inline-block rounded-full bg-primary-50 px-4 py-1.5 text-xs font-semibold text-primary-700 uppercase tracking-wide">
+          {c.sectionTag5}
+        </span>
+        <h2 class="heading-2 mt-4 text-dark-900">{c.sectionTitle5}</h2>
+      </div>
+      <div class="mt-12 overflow-x-auto">
+        <table class="w-full border-collapse">
+          <thead>
+            <tr>
+              <th class="text-left p-4 bg-dark-100 rounded-tl-xl font-semibold text-dark-900">{c.comparison.traditional.title}</th>
+              <th class="text-left p-4 bg-dark-50 font-semibold text-dark-600">{c.comparison.vibecoding.title}</th>
+              <th class="text-left p-4 bg-gradient-to-r from-primary-50 to-accent-50 rounded-tr-xl font-semibold text-primary-800">
+                ✅ {c.comparison.fmode.title}
+              </th>
+            </tr>
+          </thead>
+          <tbody>
+            {Array.from({ length: 5 }).map((_, i) => (
+              <tr class="border-b border-dark-100">
+                <td class="p-4 text-sm text-dark-600">{c.comparison.traditional.features[i]}</td>
+                <td class="p-4 text-sm text-dark-500">{c.comparison.vibecoding.features[i]}</td>
+                <td class="p-4 text-sm text-dark-700 font-medium bg-primary-50/30">{c.comparison.fmode.features[i]}</td>
+              </tr>
+            ))}
+          </tbody>
+        </table>
+      </div>
+    </div>
+  </section>
+
+  <!-- CTA -->
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 147 - 0
website/src/pages/[lang]/product/agent-harness.astro

@@ -0,0 +1,147 @@
+---
+/**
+ * Agent Harness product page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateProductSchema, generateBreadcrumbSchema, generateFAQSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: 'Harness for Agent',
+    subtitle: '解决 Agent 实装的高昂成本与失控风险',
+    intro: 'AI Agent 在 Demo 阶段看似无所不能,但进入真实业务实装时面临 Token 成本爆炸、行为不可控、试错成本高昂等致命问题。Harness for Agent 通过 MCP 智能控制平面与标准化 Skill 模块体系,对 Agent 进行精细化的边界约束与全局管控,实现规则内的高效安全运行。',
+    painTitle: 'Agent 落地的三大痛点',
+    pains: [
+      { title: 'Token 成本爆炸', desc: '为防止幻觉而不断追加上下文,Token 消耗呈指数级增长,单个 Agent 月度成本可轻松突破数万元,规模化部署时成为成本黑洞。' },
+      { title: '行为不可控', desc: 'Agent 拥有工具调用能力却缺乏明确规则边界,容易出现误操作、越权访问等风险,一旦失控可能引发严重业务事故。' },
+      { title: '试错成本高昂', desc: '每个业务场景都需要大量时间调试 Prompt 和工作流,微调困难,效果提升遭遇瓶颈,投入产出比持续低于1。' },
+    ],
+    solutionTitle: 'MCP 智能控制平面',
+    solutions: [
+      { title: '能力边界封装', desc: '为每个 Agent 定义精确的能力边界和操作权限,通过 MCP 协议进行标准化的能力声明与访问控制。' },
+      { title: '成本阈值管控', desc: '设定 Token 消耗上限与预算预警,实时监控每个 Agent 的资源使用,自动熔断异常消耗,实现精细化成本管控。' },
+      { title: '全链路审计追踪', desc: '记录 Agent 的每一步操作决策,建立完整的审计日志,确保所有行为可追溯、可复盘、可优化。' },
+    ],
+    caseTitle: '实战案例:跨境电商 VOC 系统',
+    caseDesc: '某泳装品牌通过 Harness for Agent 切换国产模型底座,实现了成本降低70%的同时,AI商业增益因子(Q值)从<1提升至1.6倍,选品准确率从0提升至70%。',
+    faqs: [
+      { q: 'AI Agent 为什么落地成本这么高?', a: '主要原因有三:一是防止幻觉需要不断追加上下文导致Token消耗暴增;二是缺乏标准化的管控机制导致大量人工监控纠错成本;三是通用模型缺乏业务边界约束导致误操作风险。Harness for Agent 从这三个维度进行系统性的约束与优化。' },
+      { q: '如何控制 Agent 的 Token 成本?', a: '通过 MCP 智能控制平面实现:1)设定多维度用量配额与预算预警;2)根据任务类型智能匹配最优模型(复杂任务用强模型,简单任务用轻量模型);3)缓存常见查询结果减少重复调用;4)实时监控异常消耗并自动熔断。' },
+      { q: 'Agent 失控怎么办?', a: 'Harness for Agent 提供多层防护:首先是能力边界封装(限制Agent可调用的工具和API范围),其次是权限分级(RBAC+ACL),最后是实时监控与自动熔断机制。当Agent行为偏离预设规则时,系统会自动拦截并告警。' },
+    ],
+  },
+  en: {
+    title: 'Harness for Agent',
+    subtitle: 'Solving Agent Deployment Costs and Control Risks',
+    intro: 'AI Agents appear all-powerful in demos, but real business deployment faces exploding Token costs, uncontrollable behavior, and prohibitive trial-and-error costs. Harness for Agent deploys an MCP intelligent control plane and standardized Skill modules for fine-grained boundary constraints and global governance, enabling efficient, secure operation within defined rules.',
+    painTitle: 'Three Pain Points of Agent Deployment',
+    pains: [
+      { title: 'Exploding Token Costs', desc: 'Constantly appending context to prevent hallucinations causes exponential Token growth. A single Agent can easily cost thousands monthly, becoming a cost black hole at scale.' },
+      { title: 'Uncontrollable Behavior', desc: 'Agents with tool access but no clear rule boundaries risk misoperations and privilege escalation that can trigger serious business incidents.' },
+      { title: 'High Trial-and-Error Costs', desc: 'Each business scenario requires extensive Prompt and workflow debugging. Fine-tuning is difficult, improvement hits bottlenecks, and ROI stays below 1.' },
+    ],
+    solutionTitle: 'MCP Intelligent Control Plane',
+    solutions: [
+      { title: 'Capability Boundary Encapsulation', desc: 'Define precise capability boundaries and operation permissions for each Agent through standardized MCP protocol capability declarations and access control.' },
+      { title: 'Cost Threshold Management', desc: 'Set Token consumption limits with budget alerts. Monitor resource usage per Agent in real-time with automatic circuit-breaking on abnormal consumption.' },
+      { title: 'Full Audit Trail', desc: 'Record every operational decision. Build complete audit logs ensuring all behavior is traceable, reviewable, and optimizable.' },
+    ],
+    caseTitle: 'Case Study: Cross-Border E-Commerce VOC',
+    caseDesc: 'A swimwear brand switched to domestic models through Harness for Agent, achieving 70% cost reduction while increasing the AI Business Q-factor from <1 to 1.6x, with selection accuracy improving from 0 to 70%.',
+    faqs: [
+      { q: 'Why are AI Agent deployment costs so high?', a: 'Three main reasons: 1) Constantly appending context to prevent hallucinations causes Token explosion; 2) Lack of standardized governance requires heavy manual monitoring; 3) General models without business constraints risk misoperations. Harness for Agent addresses all three systematically.' },
+      { q: 'How to control Agent Token costs?', a: 'Through the MCP intelligent control plane: 1) Multi-dimensional quota setting with budget alerts; 2) Intelligent model routing based on task complexity; 3) Response caching to reduce redundant calls; 4) Real-time anomaly detection with automatic circuit-breaking.' },
+      { q: 'What if an Agent goes out of control?', a: 'Harness for Agent provides multi-layer protection: capability boundary encapsulation (limiting accessible tools/APIs), permission tiering (RBAC+ACL), and real-time monitoring with automatic intervention when Agent behavior deviates from preset rules.' },
+    ],
+  },
+}[lang];
+
+const productSchema = generateProductSchema({ name: c.title, description: c.intro, url: `https://fmode.cn/${lang}/product/agent-harness/` });
+const breadcrumbSchema = generateBreadcrumbSchema([{ name: isZh ? '首页' : 'Home', url: `/${lang}/` }, { name: isZh ? '产品' : 'Product', url: `/${lang}/product/` }, { name: c.title, url: `/${lang}/product/agent-harness/` }]);
+const faqSchema = generateFAQSchema(c.faqs);
+---
+
+<BaseLayout
+  title={c.title}
+  description={c.intro}
+  lang={lang}
+  currentPath={`/${lang}/product/agent-harness/`}
+  ogType="product"
+  schema={{ ...productSchema, ...breadcrumbSchema, ...faqSchema }}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.painTitle}</h2>
+      <div class="mt-10 grid gap-6 md:grid-cols-3">
+        {c.pains.map((p) => (
+          <div class="card-hover border-l-4 border-l-red-400">
+            <h3 class="text-lg font-semibold text-dark-900">{p.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{p.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.solutionTitle}</h2>
+      <div class="mt-10 grid gap-6 md:grid-cols-3">
+        {c.solutions.map((s) => (
+          <div class="card-hover border-l-4 border-l-green-400">
+            <h3 class="text-lg font-semibold text-dark-900">{s.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{s.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page py-16">
+      <div class="container-page">
+        <div class="rounded-2xl bg-gradient-to-br from-primary-50 to-accent-50 p-8 border border-primary-200">
+          <h3 class="text-xl font-bold text-dark-900">{c.caseTitle}</h3>
+          <p class="mt-2 text-dark-600 leading-relaxed">{c.caseDesc}</p>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{isZh ? '常见问题' : 'FAQ'}</h2>
+      <div class="mt-8 mx-auto max-w-3xl space-y-4">
+        {c.faqs.map((faq) => (
+          <details class="card group">
+            <summary class="cursor-pointer font-semibold text-dark-900 list-none flex items-center justify-between">
+              {faq.q}
+              <svg class="h-5 w-5 text-dark-400 transition-transform group-open:rotate-180 flex-shrink-0 ml-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /></svg>
+            </summary>
+            <p class="mt-3 text-dark-500 leading-relaxed">{faq.a}</p>
+          </details>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 63 - 0
website/src/pages/[lang]/product/fmode-core.astro

@@ -0,0 +1,63 @@
+---
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateProductSchema, generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: 'FmodeCore 全模型兼容底座',
+    subtitle: '打破大模型接口壁垒,一套规则库,跨模型统一调度',
+    intro: 'FmodeCore 内置数十套深度优化的 AI 开发规则库,打破 GPT、Claude、GLM、Kimi 等不同大模型的接口壁垒,实现跨模型的统一调度与能力对齐。开发者无需重复适配底层逻辑,一套代码,多模型自由切换。',
+    models: ['fmode-1.6-cn', 'GLM-4', 'Kimi', 'Claude', 'GPT-4V', 'Whisper', 'Doubao'],
+    tools: ['Claude Code', 'Cursor', 'Windsurf', 'OpenCode'],
+  },
+  en: {
+    title: 'FmodeCore Universal Model Base',
+    subtitle: 'Break LLM barriers — one rule library, cross-model unified orchestration',
+    intro: 'FmodeCore contains dozens of deeply optimized AI development rule libraries, breaking interface barriers between GPT, Claude, GLM, Kimi, and other LLMs for cross-model unified orchestration and capability alignment. Developers no longer need to repeatedly adapt to different model APIs — one codebase, multi-model freedom.',
+    models: ['fmode-1.6-cn', 'GLM-4', 'Kimi', 'Claude', 'GPT-4V', 'Whisper', 'Doubao'],
+    tools: ['Claude Code', 'Cursor', 'Windsurf', 'OpenCode'],
+  },
+}[lang];
+
+const productSchema = generateProductSchema({ name: c.title, description: c.intro, url: `https://fmode.cn/${lang}/product/fmode-core/` });
+const breadcrumbSchema = generateBreadcrumbSchema([{ name: isZh ? '首页' : 'Home', url: `/${lang}/` }, { name: isZh ? '产品' : 'Product', url: `/${lang}/product/` }, { name: c.title, url: `/${lang}/product/fmode-core/` }]);
+---
+
+<BaseLayout title={c.title} description={c.intro} lang={lang} currentPath={`/${lang}/product/fmode-core/`} schema={{ ...productSchema, ...breadcrumbSchema }}>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="grid gap-10 md:grid-cols-2 max-w-4xl mx-auto">
+        <div>
+          <h2 class="heading-3 text-dark-900">{isZh ? '支持的模型' : 'Supported Models'}</h2>
+          <div class="mt-4 flex flex-wrap gap-2">
+            {c.models.map((m: string) => (<span class="rounded-lg bg-primary-50 px-3 py-1.5 text-sm font-medium text-primary-700">{m}</span>))}
+          </div>
+        </div>
+        <div>
+          <h2 class="heading-3 text-dark-900">{isZh ? '开发工具集成' : 'Dev Tool Integration'}</h2>
+          <div class="mt-4 flex flex-wrap gap-2">
+            {c.tools.map((t: string) => (<span class="rounded-lg bg-accent-50 px-3 py-1.5 text-sm font-medium text-accent-700">{t}</span>))}
+          </div>
+        </div>
+      </div>
+    </div>
+  </section>
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 171 - 0
website/src/pages/[lang]/product/harness-engineering.astro

@@ -0,0 +1,171 @@
+---
+/**
+ * Harness Engineering product page - Core GEO SSOT page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import FeatureCard from '@components/FeatureCard.astro';
+import { generateProductSchema, generateBreadcrumbSchema, generateFAQSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: '驾驭工程 (Harness Engineering)',
+    subtitle: 'AI 工程化第三代范式 — 让 AI 能力可控、可预期、可规模化',
+    intro: '驾驭工程(Harness Engineering)是 AI 工程化的第三代范式。如同核聚变中的磁约束系统让能量可控,Harness 驾驭系统让 AI 强大的能力被稳定、安全地约束与引导,从而持续输出可预期的商业价值。',
+    formula: 'Agent = 基础模型 + Harness 驾驭层',
+    formulaDesc: '模型决定了 AI 能力的上限,而 Harness 驾驭层则决定了实际业务落地中的稳定性与能力下限。',
+    paradigmTitle: 'AI 工程化三代范式跃迁',
+    paradigms: [
+      { gen: '第一代', name: 'Prompt 工程', core: '教 AI 怎么说', desc: '解决 AI 能否听懂人话的底层沟通问题。通过精细化的指令设计与意图拆解,让大模型理解人类的自然语言逻辑。' },
+      { gen: '第二代', name: 'Context 工程', core: '教 AI 知道什么', desc: '解决 AI 信息更新与准确性问题。通过 RAG 技术引入私有知识库与实时数据,有效抑制大模型幻觉现象。' },
+      { gen: '第三代', name: 'Harness 工程', core: '教 AI 按规则做', desc: '解决 AI 落地的稳定性与标准化问题。构建具备边界定义、规则约束与异常处理的工业化运行环境。' },
+    ],
+    valueTitle: '为什么需要驾驭工程?',
+    values: [
+      { title: '低成本模型超越顶级模型', desc: '通过精准的规则适配与流程约束,国产开源模型能在实际业务场景中达到甚至超越 GPT-4 等顶级闭源模型的落地效果。' },
+      { title: 'AI 从"不可控实验"到"可预期生产资料"', desc: '将 AI 能力从实验室引入生产环境,通过标准化约束实现持续、稳定、安全的商业价值交付。' },
+      { title: '解决 AI 商业化的"Q值困境"', desc: '80%企业已部署AI,仅15%实现规模化价值。驾驭工程是突破AI商业增益因子(Q值)<1的关键路径。' },
+    ],
+    faqs: [
+      { q: '什么是驾驭工程(Harness Engineering)?', a: '驾驭工程是AI工程化的第三代范式,核心是通过构建具备边界定义、规则约束与异常处理的工业化运行环境,让AI能力从"不可控的实验"转化为"可预期的生产资料"。它解决了AI从Demo到生产环境落地的核心难题。' },
+      { q: 'Harness 工程和 Prompt 工程有什么区别?', a: 'Prompt工程教AI"怎么说"(解决沟通问题),Context工程教AI"知道什么"(解决准确性问题),Harness工程教AI"按规则做"(解决稳定性问题)。三者是递进关系,Harness工程是让AI实现规模化商业价值的关键。' },
+      { q: '驾驭工程能带来什么具体价值?', a: '驾驭工程能让低成本国产模型达到甚至超越GPT-4的落地效果,将AI应用开发周期从6个月压缩至1天,将Agent运营成本降低70%,同时确保输出结果的稳定性和合规性。' },
+      { q: '什么企业需要驾驭工程?', a: '任何希望将AI能力规模化落地到实际业务中的企业都需要驾驭工程。尤其是已部署AI但未实现预期ROI的企业、对AI输出稳定性有严格要求的企业,以及希望在AI竞争中建立持久壁垒的企业。' },
+    ],
+  },
+  en: {
+    title: 'Harness Engineering',
+    subtitle: 'Third-Generation AI Engineering Paradigm — Making AI Controllable, Predictable, and Scalable',
+    intro: 'Harness Engineering is the third generation of AI engineering. Just as magnetic confinement systems make fusion energy controllable, the Harness system constrains and guides AI\'s powerful capabilities, delivering predictable business value continuously.',
+    formula: 'Agent = Foundation Model + Harness Layer',
+    formulaDesc: 'The model sets the capability ceiling; the Harness layer ensures the stability and capability floor in real business deployment.',
+    paradigmTitle: 'Three Generations of AI Engineering',
+    paradigms: [
+      { gen: '1st Gen', name: 'Prompt Engineering', core: 'Teach AI what to say', desc: 'Solves the fundamental communication problem — helps LLMs understand human natural language through refined instruction design and intent decomposition.' },
+      { gen: '2nd Gen', name: 'Context Engineering', core: 'Teach AI what to know', desc: 'Solves accuracy and information freshness through RAG technology, introducing private knowledge bases and real-time data to suppress hallucinations.' },
+      { gen: '3rd Gen', name: 'Harness Engineering', core: 'Teach AI to follow rules', desc: 'Solves stability and standardization — builds an industrialized runtime with boundaries, constraints, and exception handling.' },
+    ],
+    valueTitle: 'Why Harness Engineering?',
+    values: [
+      { title: 'Budget Models Outperform Premium Ones', desc: 'With precise rule adaptation and process constraints, domestic open-source models can match or exceed GPT-4 in real business scenarios.' },
+      { title: 'From Uncontrolled Experiments to Predictable Production', desc: 'Brings AI from lab to production through standardized constraints, enabling continuous, stable, and secure business value delivery.' },
+      { title: 'Solving the AI Commercialization "Q-Value Dilemma"', desc: '80% of enterprises have deployed AI, but only 15% achieve scaled value. Harness Engineering is the key to breaking the Q<1 barrier.' },
+    ],
+    faqs: [
+      { q: 'What is Harness Engineering?', a: 'Harness Engineering is the third-generation AI engineering paradigm. It builds an industrialized runtime environment with boundary definitions, rule constraints, and exception handling, transforming AI from "uncontrolled experiments" into "predictable production tools".' },
+      { q: 'How is Harness Engineering different from Prompt Engineering?', a: 'Prompt Engineering teaches AI "what to say", Context Engineering teaches AI "what to know", and Harness Engineering teaches AI "to follow rules". They are progressive — Harness Engineering is the key to scaled commercial value.' },
+      { q: 'What value does Harness Engineering deliver?', a: 'It enables budget models to match GPT-4 performance, compresses AI development from 6 months to 1 day, reduces Agent operational costs by 70%, while ensuring output stability and compliance.' },
+      { q: 'Which enterprises need Harness Engineering?', a: 'Any enterprise wanting to scale AI into real business operations needs Harness Engineering — especially those who\'ve deployed AI without achieving expected ROI, or those requiring strict output stability and compliance.' },
+    ],
+  },
+}[lang];
+
+const productSchema = generateProductSchema({
+  name: isZh ? '驾驭工程 (Harness Engineering)' : 'Harness Engineering',
+  description: c.intro,
+  url: `https://fmode.cn/${lang}/product/harness-engineering/`,
+  applicationCategory: 'BusinessApplication',
+});
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '产品' : 'Product', url: `/${lang}/product/` },
+  { name: c.title, url: `/${lang}/product/harness-engineering/` },
+]);
+
+const faqSchema = generateFAQSchema(c.faqs);
+---
+
+<BaseLayout
+  title={c.title}
+  description={c.intro}
+  lang={lang}
+  currentPath={`/${lang}/product/harness-engineering/`}
+  ogType="product"
+  schema={{ ...productSchema,
+    ...breadcrumbSchema,
+    ...faqSchema,
+  }}
+>
+  <!-- Hero -->
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+
+  <!-- Formula -->
+  <section class="bg-white">
+    <div class="container-page py-16">
+      <div class="mx-auto max-w-2xl text-center">
+        <div class="rounded-2xl bg-gradient-to-br from-primary-600 to-accent-600 p-8 text-white">
+          <p class="text-sm font-semibold uppercase tracking-wide opacity-80">{isZh ? '核心公式' : 'Core Formula'}</p>
+          <p class="mt-3 text-2xl sm:text-3xl font-extrabold">{c.formula}</p>
+          <p class="mt-3 text-white/80">{c.formulaDesc}</p>
+        </div>
+      </div>
+    </div>
+  </section>
+
+  <!-- Three Generations -->
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.paradigmTitle}</h2>
+      <div class="mt-12 grid gap-8 md:grid-cols-3">
+        {c.paradigms.map((p) => (
+          <div class="card-hover">
+            <span class="inline-block rounded-full bg-primary-50 px-3 py-1 text-xs font-semibold text-primary-700">{p.gen}</span>
+            <h3 class="mt-3 text-xl font-bold text-dark-900">{p.name}</h3>
+            <p class="mt-2 text-sm font-semibold text-primary-600">{p.core}</p>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{p.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <!-- Why -->
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.valueTitle}</h2>
+      <div class="mt-12 grid gap-6 md:grid-cols-3">
+        {c.values.map((v) => (
+          <FeatureCard title={v.title} description={v.desc} lang={lang} />
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <!-- FAQ -->
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{isZh ? '常见问题' : 'FAQ'}</h2>
+      <div class="mt-8 mx-auto max-w-3xl space-y-4">
+        {c.faqs.map((faq) => (
+          <details class="card group">
+            <summary class="cursor-pointer font-semibold text-dark-900 list-none flex items-center justify-between">
+              {faq.q}
+              <svg class="h-5 w-5 text-dark-400 transition-transform group-open:rotate-180 flex-shrink-0 ml-2" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" />
+              </svg>
+            </summary>
+            <p class="mt-3 text-dark-500 leading-relaxed">{faq.a}</p>
+          </details>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 69 - 0
website/src/pages/[lang]/product/index.astro

@@ -0,0 +1,69 @@
+---
+/**
+ * Product overview page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+import { SITE } from '@data/site-config';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const products = {
+  zh: [
+    { title: '驾驭工程', desc: 'AI工程化第三代范式,让AI能力可控、可预期、可规模化。核心公式:Agent = 基础模型 + Harness驾驭层。', href: '/product/harness-engineering' },
+    { title: 'Harness for Vibe Coding', desc: '跨越Demo与生产环境的鸿沟,将企业开发规范转化为AI可读协议,直接输出生产级可上线代码。', href: '/product/vibe-coding' },
+    { title: 'Harness for Agent', desc: 'MCP智能控制平面与标准化Skill模块,解决Agent实装的高昂成本与失控风险。', href: '/product/agent-harness' },
+    { title: 'Skills 技能中心', desc: 'AI能力的"包管理器",将复杂业务逻辑与AI能力封装为标准化的技能模块,开箱即用。', href: '/product/skills-hub' },
+    { title: 'FmodeCore 模型底座', desc: '全模型兼容底座,内置数十套深度优化的AI开发规则库,打破不同大模型的接口壁垒。', href: '/product/fmode-core' },
+  ],
+  en: [
+    { title: 'Harness Engineering', desc: 'Third-gen AI engineering paradigm. Makes AI controllable, predictable, and scalable. Formula: Agent = Model + Harness Layer.', href: '/product/harness-engineering' },
+    { title: 'Harness for Vibe Coding', desc: 'Cross the demo-to-production chasm. Transform enterprise standards into AI-readable protocols for production-grade code output.', href: '/product/vibe-coding' },
+    { title: 'Harness for Agent', desc: 'MCP intelligent control plane with standardized Skills for cost control and risk management in Agent deployment.', href: '/product/agent-harness' },
+    { title: 'Skills Hub', desc: 'The "package manager" for AI capabilities. Encapsulate complex business logic as standardized, reusable skill modules.', href: '/product/skills-hub' },
+    { title: 'FmodeCore Model Base', desc: 'Universal model compatibility layer with dozens of optimized AI development rule libraries, breaking barriers between LLMs.', href: '/product/fmode-core' },
+  ],
+}[lang];
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '产品' : 'Product', url: `/${lang}/product/` },
+]);
+---
+
+<BaseLayout
+  title={isZh ? '产品' : 'Products'}
+  description={isZh ? '了解未来飞马完整产品体系:驾驭工程、Vibe Coding、Agent管控、Skills技能中心、FmodeCore模型底座' : 'Explore the Fmode product suite: Harness Engineering, Vibe Coding, Agent Governance, Skills Hub, FmodeCore'}
+  lang={lang}
+  currentPath={`/${lang}/product/`}
+  schema={breadcrumbSchema}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '产品体系' : 'Product Suite'}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">
+          {isZh ? '完整的企业级驾驭工程产品矩阵' : 'Complete Enterprise Harnessing Engineering Suite'}
+        </p>
+      </div>
+      <div class="mt-12 grid gap-6 md:grid-cols-2 lg:grid-cols-3">
+        {products.map((p) => (
+          <a href={`/${lang}${p.href}/`} class="card-hover no-underline group block">
+            <h3 class="text-lg font-semibold text-dark-900 group-hover:text-primary-700">{p.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{p.desc}</p>
+            <span class="mt-3 inline-flex items-center gap-1 text-sm font-medium text-primary-600">
+              {isZh ? '了解详情' : 'Learn More'} →
+            </span>
+          </a>
+        ))}
+      </div>
+    </div>
+  </section>
+  <CTASection lang={lang} variant="secondary" />
+</BaseLayout>

+ 63 - 0
website/src/pages/[lang]/product/skills-hub.astro

@@ -0,0 +1,63 @@
+---
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateProductSchema, generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: 'Skills 技能中心',
+    subtitle: 'AI 能力的"包管理器"——模块化封装,开箱即用',
+    intro: '像 npm 管理前端包、pip 管理 Python 包一样,Skills 技能中心将复杂的业务逻辑与 AI 能力封装为标准化的技能模块。支持企业级创建、版本分发与跨场景复用,让 AI 能力像调用 API 一样简单。',
+    features: ['文本生成与理解', '视觉识别与分析', '语音识别与合成', '数据处理与存储', 'MCP协议插件', '业务流程自动化'],
+    scenarios: ['智能客服', 'VOC分析', '广告投放', 'Listing优化', '竞品分析', '新品开发'],
+  },
+  en: {
+    title: 'Skills Hub',
+    subtitle: 'The "Package Manager" for AI — Modular, Ready to Use',
+    intro: 'Like npm for frontend and pip for Python, Skills Hub encapsulates complex business logic and AI capabilities into standardized, reusable modules. Supports enterprise-grade creation, version distribution, and cross-scenario reuse — making AI capabilities as simple as calling an API.',
+    features: ['Text Generation', 'Visual Recognition', 'Speech Synthesis', 'Data Processing', 'MCP Plugins', 'Business Automation'],
+    scenarios: ['Customer Service', 'VOC Analysis', 'Ad Placement', 'Listing Optimization', 'Competitive Analysis', 'Product Development'],
+  },
+}[lang];
+
+const productSchema = generateProductSchema({ name: c.title, description: c.intro, url: `https://fmode.cn/${lang}/product/skills-hub/` });
+const breadcrumbSchema = generateBreadcrumbSchema([{ name: isZh ? '首页' : 'Home', url: `/${lang}/` }, { name: isZh ? '产品' : 'Product', url: `/${lang}/product/` }, { name: c.title, url: `/${lang}/product/skills-hub/` }]);
+---
+
+<BaseLayout title={c.title} description={c.intro} lang={lang} currentPath={`/${lang}/product/skills-hub/`} schema={{ ...productSchema, ...breadcrumbSchema }}>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="grid gap-10 md:grid-cols-2 max-w-4xl mx-auto">
+        <div>
+          <h2 class="heading-3 text-dark-900">{isZh ? '能力覆盖' : 'Capabilities'}</h2>
+          <div class="mt-4 flex flex-wrap gap-2">
+            {c.features.map((f: string) => (<span class="rounded-lg bg-primary-50 px-3 py-1.5 text-sm font-medium text-primary-700">{f}</span>))}
+          </div>
+        </div>
+        <div>
+          <h2 class="heading-3 text-dark-900">{isZh ? '应用场景' : 'Scenarios'}</h2>
+          <div class="mt-4 flex flex-wrap gap-2">
+            {c.scenarios.map((s: string) => (<span class="rounded-lg bg-accent-50 px-3 py-1.5 text-sm font-medium text-accent-700">{s}</span>))}
+          </div>
+        </div>
+      </div>
+    </div>
+  </section>
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 148 - 0
website/src/pages/[lang]/product/vibe-coding.astro

@@ -0,0 +1,148 @@
+---
+/**
+ * Vibe Coding product page
+ */
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateProductSchema, generateBreadcrumbSchema, generateFAQSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: 'Harness for Vibe Coding',
+    subtitle: '从 Demo 到生产级应用 — 跨越 AI 代码生成的"最后一公里"',
+    intro: '传统 AI 代码生成仅能产出 Demo 级片段,无法满足企业工程化标准。Harness for Vibe Coding 将企业级开发规范、代码风格与业务约束转化为 AI 可读的标准协议,在生成阶段即进行合规性与逻辑性的实时约束,直接输出生产级可上线代码。',
+    painTitle: '核心痛点',
+    pains: [
+      { title: 'Demo 与生产的鸿沟', desc: 'AI 生成的代码仅解决"能不能跑"的问题,无法解决"能不能安全、合规、稳定地跑"的工程难题。通常需要 3-5 个月人工重写。' },
+      { title: '代码质量不可控', desc: '缺乏统一规范的 AI 代码质量参差不齐,维护成本极高,陷入"快做慢改"陷阱。' },
+      { title: '企业标准难落地', desc: '每家企业的安全规范、代码风格、架构标准各不相同,AI 难以统一适配。' },
+    ],
+    mechanismTitle: '核心机制',
+    mechanisms: [
+      { title: '开发规范协议化', desc: '将企业级需求分析、数据建模、安全合规、运维监控等全链路规范转化为 AI 可读的标准化规则文件。' },
+      { title: '生成时实时约束', desc: '在 AI 代码生成过程中实时注入规则检查,确保每行代码都符合企业标准,而非生成后再修改。' },
+      { title: '生产级代码直出', desc: 'AI 生成的代码不再是玩具,而是符合企业标准、具备健壮性,可直接部署上线的生产级应用。' },
+    ],
+    integrationTitle: '全栈技术集成',
+    integrations: ['Vercel', 'Firebase', 'AWS Lambda', 'Cloudflare Workers', 'Supabase', 'Auth0', 'Sentry', 'PostgreSQL'],
+    faqs: [
+      { q: 'Vibe Coding 是什么?', a: 'Vibe Coding 是一种全新的开发范式,通过自然语言驱动 AI 生成可运行的应用程序。但裸奔的 Vibe Coding 只能产出 Demo 级代码。我们的 Harness for Vibe Coding 在此基础上加入了企业级规则约束,让 AI 直接输出符合工程标准、可直接部署上线的生产级应用。' },
+      { q: 'AI 生成的代码真的能用于生产环境吗?', a: '通过 Harness for Vibe Coding 的规则约束体系,可以。传统 AI 代码生成缺乏工程化约束,而我们的方案将企业开发规范、安全合规要求、架构标准等转化为 AI 可读的协议,在生成阶段即进行约束,确保输出的代码质量达到生产级标准。' },
+      { q: '与传统开发相比,能节省多少时间?', a: '传统开发平均需要 20 周(5个月+),而使用 Harness for Vibe Coding,从业务 SOP 到可上线应用只需 1 天,全流程闭环只需 7 天。开发效率提升约 10 倍,成本降低约 70%。' },
+    ],
+  },
+  en: {
+    title: 'Harness for Vibe Coding',
+    subtitle: 'From Demo to Production — Crossing the "Last Mile" of AI Code Generation',
+    intro: 'Traditional AI code generation only produces demo-level fragments that cannot meet enterprise engineering standards. Harness for Vibe Coding transforms enterprise development standards, code styles, and business constraints into AI-readable protocols, enforcing compliance and logic constraints during generation — outputting production-ready code directly.',
+    painTitle: 'Core Pain Points',
+    pains: [
+      { title: 'The Demo-Production Gap', desc: 'AI-generated code only solves the "can it run" question, not "can it run safely, compliantly, and stably". Typically requires 3-5 months of manual rewriting.' },
+      { title: 'Uncontrollable Code Quality', desc: 'Without unified standards, AI code quality varies wildly with extremely high maintenance costs, falling into the "build fast, fix forever" trap.' },
+      { title: 'Enterprise Standards Hard to Implement', desc: 'Each enterprise has unique security, style, and architecture standards that AI struggles to adapt to uniformly.' },
+    ],
+    mechanismTitle: 'Core Mechanism',
+    mechanisms: [
+      { title: 'Standards as Protocols', desc: 'Transform enterprise requirements, data modeling, security, compliance, and monitoring standards into AI-readable standardized rule files.' },
+      { title: 'Real-time Generation Constraints', desc: 'Inject rule checks during AI code generation, ensuring every line meets enterprise standards — not fixing after generation.' },
+      { title: 'Production-Grade Output', desc: 'AI-generated code is no longer a toy — it\'s enterprise-standard, robust, and deployable directly to production.' },
+    ],
+    integrationTitle: 'Full-Stack Integration',
+    integrations: ['Vercel', 'Firebase', 'AWS Lambda', 'Cloudflare Workers', 'Supabase', 'Auth0', 'Sentry', 'PostgreSQL'],
+    faqs: [
+      { q: 'What is Vibe Coding?', a: 'Vibe Coding is a new development paradigm that uses natural language to drive AI code generation. However, bare Vibe Coding only produces demo-level code. Our Harness for Vibe Coding adds enterprise-grade rule constraints, enabling AI to output production-ready applications that meet engineering standards.' },
+      { q: 'Can AI-generated code really be used in production?', a: 'Yes, through Harness for Vibe Coding\'s rule constraint system. Traditional AI code generation lacks engineering constraints. Our approach transforms enterprise development standards, security requirements, and architecture guidelines into AI-readable protocols enforced during generation.' },
+      { q: 'How much time can be saved vs traditional development?', a: 'Traditional development averages 20+ weeks. With Harness for Vibe Coding, business SOP to deployable application takes 1 day, with full workflow closure in 7 days — roughly 10x efficiency improvement and 70% cost reduction.' },
+    ],
+  },
+}[lang];
+
+const productSchema = generateProductSchema({ name: c.title, description: c.intro, url: `https://fmode.cn/${lang}/product/vibe-coding/` });
+const breadcrumbSchema = generateBreadcrumbSchema([{ name: isZh ? '首页' : 'Home', url: `/${lang}/` }, { name: isZh ? '产品' : 'Product', url: `/${lang}/product/` }, { name: c.title, url: `/${lang}/product/vibe-coding/` }]);
+const faqSchema = generateFAQSchema(c.faqs);
+---
+
+<BaseLayout
+  title={c.title}
+  description={c.intro}
+  lang={lang}
+  currentPath={`/${lang}/product/vibe-coding/`}
+  ogType="product"
+  schema={{ ...productSchema, ...breadcrumbSchema, ...faqSchema }}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.painTitle}</h2>
+      <div class="mt-10 grid gap-6 md:grid-cols-3">
+        {c.pains.map((p) => (
+          <div class="card-hover">
+            <h3 class="text-lg font-semibold text-dark-900">{p.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{p.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.mechanismTitle}</h2>
+      <div class="mt-10 grid gap-6 md:grid-cols-3">
+        {c.mechanisms.map((m, i) => (
+          <div class="card-hover relative">
+            <span class="absolute top-4 right-4 text-3xl font-extrabold text-primary-100">{i + 1}</span>
+            <h3 class="text-lg font-semibold text-dark-900">{m.title}</h3>
+            <p class="mt-2 text-sm text-dark-500 leading-relaxed">{m.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{c.integrationTitle}</h2>
+      <div class="mt-8 flex flex-wrap justify-center gap-3 max-w-2xl mx-auto">
+        {c.integrations.map((i) => (
+          <span class="rounded-lg bg-dark-100 px-4 py-2 text-sm font-medium text-dark-700">{i}</span>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-dark-50">
+    <div class="container-page section-padding">
+      <h2 class="heading-2 text-center text-dark-900">{isZh ? '常见问题' : 'FAQ'}</h2>
+      <div class="mt-8 mx-auto max-w-3xl space-y-4">
+        {c.faqs.map((faq) => (
+          <details class="card group">
+            <summary class="cursor-pointer font-semibold text-dark-900 list-none flex items-center justify-between">
+              {faq.q}
+              <svg class="h-5 w-5 text-dark-400 transition-transform group-open:rotate-180 flex-shrink-0 ml-2" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /></svg>
+            </summary>
+            <p class="mt-3 text-dark-500 leading-relaxed">{faq.a}</p>
+          </details>
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 78 - 0
website/src/pages/[lang]/solutions/enterprise.astro

@@ -0,0 +1,78 @@
+---
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import FeatureCard from '@components/FeatureCard.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: '大中型企业 AI 解决方案',
+    subtitle: '私有化部署 · 专属智能中枢 · 全流程自主可控',
+    intro: '为大型企业打造安全可控的 AI 驾驭工程体系。支持私有化部署,确保核心业务数据自主可控。构建企业专属智能中枢,打通内部系统壁垒,实现全流程智能化升级。',
+    features: [
+      { title: '私有化部署', desc: '支持完全本地化部署,核心业务数据不出企业内网,满足最高等级的安全合规要求。' },
+      { title: '专属智能中枢', desc: '基于企业自身业务知识构建专属知识库与 SOP 引擎,打造不可替代的数字化核心资产。' },
+      { title: '系统打通与集成', desc: '对接企业现有 ERP、CRM、OA 等系统,通过统一 API 网关实现数据与能力的全域流通。' },
+      { title: '分级权限管控', desc: 'RBAC + ACL 双重权限体系,按部门、角色、项目进行精细化权限配置与全链路审计。' },
+      { title: '成本中心化管理', desc: '多维度 Token 用量管控,按业务线设定预算与预警,杜绝 AI 资源浪费。' },
+      { title: '90 天深度陪跑', desc: '从部署到全面转型的全程技术陪伴,确保团队掌握自主迭代能力。' },
+    ],
+  },
+  en: {
+    title: 'Enterprise AI Solution',
+    subtitle: 'Private Deployment · Dedicated Intelligence Hub · Full Process Control',
+    intro: 'Build a secure and controllable AI Harness Engineering system for large enterprises. Support private deployment to ensure core business data sovereignty. Construct dedicated intelligence hubs that break down internal system barriers for comprehensive intelligent upgrades.',
+    features: [
+      { title: 'Private Deployment', desc: 'Full on-premise deployment ensuring core business data never leaves the enterprise network, meeting the highest security and compliance requirements.' },
+      { title: 'Dedicated Intelligence Hub', desc: 'Build proprietary knowledge bases and SOP engines based on your own business knowledge, creating irreplaceable core digital assets.' },
+      { title: 'System Integration', desc: 'Connect existing ERP, CRM, OA systems through unified API gateway for seamless data and capability flow across the enterprise.' },
+      { title: 'Tiered Access Control', desc: 'RBAC + ACL dual permission system with fine-grained access control by department, role, and project, with full audit trails.' },
+      { title: 'Centralized Cost Management', desc: 'Multi-dimensional Token usage control with department-level budgets and alerts, eliminating AI resource waste.' },
+      { title: '90-Day Deep Partnership', desc: 'Full technical companionship from deployment to comprehensive transformation, ensuring your team masters autonomous iteration.' },
+    ],
+  },
+}[lang];
+
+const breadcrumbSchema = generateBreadcrumbSchema([
+  { name: isZh ? '首页' : 'Home', url: `/${lang}/` },
+  { name: isZh ? '解决方案' : 'Solutions', url: `/${lang}/solutions/` },
+  { name: c.title, url: `/${lang}/solutions/enterprise/` },
+]);
+---
+
+<BaseLayout
+  title={c.title}
+  description={c.intro}
+  lang={lang}
+  currentPath={`/${lang}/solutions/enterprise/`}
+  schema={breadcrumbSchema}
+>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
+        {c.features.map((f) => (
+          <FeatureCard title={f.title} description={f.desc} lang={lang} />
+        ))}
+      </div>
+    </div>
+  </section>
+
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 52 - 0
website/src/pages/[lang]/solutions/index.astro

@@ -0,0 +1,52 @@
+---
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const solutions = {
+  zh: [
+    { title: '大中型企业', desc: '私有化部署,专属智能中枢,全流程自主可控', href: '/solutions/enterprise' },
+    { title: '创业公司', desc: '1天极速交付MVP,大幅降低技术试错成本', href: '/solutions/startups' },
+    { title: '传统企业转型', desc: '轻量化方案,业务人员直接上手,无需重金组队', href: '/solutions/traditional-enterprise' },
+    { title: '软件外包', desc: '6个月周期压缩至1-7天,项目周转效率飞跃', href: '/solutions/outsourcing' },
+    { title: '独立开发者', desc: '全栈引擎开箱即用,零运维负担高效开发', href: '/solutions/developers' },
+  ],
+  en: [
+    { title: 'Large Enterprises', desc: 'Private deployment, dedicated intelligence hub, full process control', href: '/solutions/enterprise' },
+    { title: 'Startups', desc: '1-day MVP delivery, dramatically reduce technical costs', href: '/solutions/startups' },
+    { title: 'Traditional Enterprises', desc: 'Lightweight approach, business users onboard directly', href: '/solutions/traditional-enterprise' },
+    { title: 'Software Outsourcing', desc: 'Compress 6-month cycles to 1-7 days, boost project turnover', href: '/solutions/outsourcing' },
+    { title: 'Independent Developers', desc: 'Full-stack engine out of the box, zero ops, maximum focus', href: '/solutions/developers' },
+  ],
+}[lang];
+
+const breadcrumbSchema = generateBreadcrumbSchema([{ name: isZh ? '首页' : 'Home', url: `/${lang}/` }, { name: isZh ? '解决方案' : 'Solutions', url: `/${lang}/solutions/` }]);
+---
+
+<BaseLayout title={isZh ? '解决方案' : 'Solutions'} description={isZh ? '为各类型企业提供定制化AI驾驭方案' : 'Customized AI harnessing solutions for every business type'} lang={lang} currentPath={`/${lang}/solutions/`} schema={breadcrumbSchema}>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{isZh ? '解决方案' : 'Solutions'}</span></h1>
+        <p class="mt-4 text-lg text-dark-500">{isZh ? '为各类型企业提供定制化 AI 驾驭方案' : 'Customized AI harnessing solutions for every business'}</p>
+      </div>
+      <div class="mt-12 grid gap-6 md:grid-cols-2 lg:grid-cols-3 max-w-5xl mx-auto">
+        {solutions.map((s) => (
+          <a href={`/${lang}${s.href}/`} class="card-hover no-underline group block">
+            <h3 class="text-lg font-semibold text-dark-900 group-hover:text-primary-700">{s.title}</h3>
+            <p class="mt-2 text-sm text-dark-500">{s.desc}</p>
+            <span class="mt-3 inline-flex items-center gap-1 text-sm font-medium text-primary-600">{isZh ? '了解方案' : 'View'} →</span>
+          </a>
+        ))}
+      </div>
+    </div>
+  </section>
+  <CTASection lang={lang} variant="secondary" />
+</BaseLayout>

+ 62 - 0
website/src/pages/[lang]/solutions/startups.astro

@@ -0,0 +1,62 @@
+---
+import BaseLayout from '@layouts/BaseLayout.astro';
+import CTASection from '@components/CTASection.astro';
+import { generateBreadcrumbSchema } from '@utils/seo';
+
+export function getStaticPaths() {
+  return [{ params: { lang: 'zh' } }, { params: { lang: 'en' } }];
+}
+
+const { lang = 'zh' } = Astro.params as { lang: 'zh' | 'en' };
+const isZh = lang === 'zh';
+
+const c = {
+  zh: {
+    title: '创业公司 AI 解决方案',
+    subtitle: '1 天极速交付 MVP · 零试错成本 · 抢占市场窗口',
+    intro: '为创业团队提供开箱即用的全栈 AI 开发引擎。1天即可交付产品MVP,让创意快速落地。大幅降低技术研发与试错成本,帮助初创团队敏捷响应市场变化,在激烈竞争中抢占宝贵的时间窗口。',
+    benefits: [
+      { title: '1天MVP', desc: '从业务SOP到可运行产品仅需1天,快速验证商业假设,抢占市场窗口。' },
+      { title: '零运维负担', desc: 'BaaS+PaaS全托管架构,无需DevOps团队,专注核心业务创新。' },
+      { title: '弹性成本', desc: '按量计费模式,从零用户到百万用户无缝扩展,避免前期过度投入。' },
+    ],
+  },
+  en: {
+    title: 'Startup AI Solution',
+    subtitle: '1-Day MVP · Zero Trial Cost · Seize Market Windows',
+    intro: 'Out-of-the-box full-stack AI development engine for startups. Deliver product MVP in 1 day. Dramatically reduce R&D and trial-and-error costs, helping startups respond agilely to market changes and seize critical time windows in fierce competition.',
+    benefits: [
+      { title: '1-Day MVP', desc: 'From business SOP to functional product in 1 day. Rapidly validate business hypotheses and seize market windows.' },
+      { title: 'Zero Ops Burden', desc: 'BaaS+PaaS fully managed architecture. No DevOps team needed. Focus on core business innovation.' },
+      { title: 'Elastic Cost', desc: 'Pay-as-you-go model. Scale seamlessly from zero to millions of users. Avoid excessive upfront investment.' },
+    ],
+  },
+}[lang];
+
+const breadcrumbSchema = generateBreadcrumbSchema([{ name: isZh ? '首页' : 'Home', url: `/${lang}/` }, { name: isZh ? '解决方案' : 'Solutions', url: `/${lang}/solutions/` }, { name: c.title, url: `/${lang}/solutions/startups/` }]);
+---
+
+<BaseLayout title={c.title} description={c.intro} lang={lang} currentPath={`/${lang}/solutions/startups/`} schema={breadcrumbSchema}>
+  <section class="bg-gradient-to-b from-dark-50 to-white">
+    <div class="container-page section-padding">
+      <div class="mx-auto max-w-3xl text-center">
+        <h1 class="heading-1"><span class="gradient-text">{c.title}</span></h1>
+        <p class="mt-4 text-xl text-dark-600">{c.subtitle}</p>
+        <p class="mt-6 text-lg text-dark-500 leading-relaxed">{c.intro}</p>
+      </div>
+    </div>
+  </section>
+  <section class="bg-white">
+    <div class="container-page section-padding">
+      <div class="grid gap-6 md:grid-cols-3 max-w-5xl mx-auto">
+        {c.benefits.map((b) => (
+          <div class="card-hover text-center">
+            <h3 class="text-xl font-bold gradient-text">{b.title}</h3>
+            <p class="mt-3 text-sm text-dark-500">{b.desc}</p>
+          </div>
+        ))}
+      </div>
+    </div>
+  </section>
+  <CTASection lang={lang} variant="primary" />
+</BaseLayout>

+ 27 - 0
website/src/pages/index.astro

@@ -0,0 +1,27 @@
+---
+/**
+ * Root index page - detects browser language and redirects.
+ * Uses client-side JS for language detection.
+ */
+---
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <title>未来飞马 Fmode - Enterprise AI Harnessing Platform</title>
+  <meta name="description" content="未来飞马(Fmode)是全球领先的企业级驾驭工程工作站。通过Software 3.0范式与双Harness体系,帮助企业安全、稳定、低成本地驾驭AI能力。" />
+  <script>
+    // Detect browser language and redirect
+    const lang = navigator.language || navigator.userLanguage || 'zh';
+    const targetLang = lang.startsWith('zh') ? 'zh' : 'en';
+    window.location.replace('/' + targetLang + '/');
+  </script>
+  <noscript>
+    <meta http-equiv="refresh" content="0;url=/zh/" />
+  </noscript>
+</head>
+<body>
+  <p>Redirecting... <a href="/zh/">中文</a> | <a href="/en/">English</a></p>
+</body>
+</html>

+ 64 - 0
website/src/styles/global.css

@@ -0,0 +1,64 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+  html {
+    scroll-behavior: smooth;
+  }
+
+  body {
+    @apply bg-white text-dark-800 antialiased;
+  }
+
+  .dark body,
+  body.dark {
+    @apply bg-dark-950 text-dark-100;
+  }
+}
+
+@layer components {
+  .container-page {
+    @apply mx-auto max-w-7xl px-4 sm:px-6 lg:px-8;
+  }
+
+  .section-padding {
+    @apply py-16 sm:py-20 lg:py-24;
+  }
+
+  .heading-1 {
+    @apply text-4xl font-extrabold tracking-tight sm:text-5xl lg:text-6xl;
+  }
+
+  .heading-2 {
+    @apply text-3xl font-bold tracking-tight sm:text-4xl;
+  }
+
+  .heading-3 {
+    @apply text-2xl font-semibold tracking-tight sm:text-3xl;
+  }
+
+  .gradient-text {
+    @apply bg-gradient-to-r from-primary-600 to-accent-600 bg-clip-text text-transparent;
+  }
+
+  .btn-primary {
+    @apply inline-flex items-center justify-center rounded-lg bg-primary-600 px-6 py-3 text-sm font-semibold text-white shadow-sm transition-all hover:bg-primary-700 hover:shadow-md focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-600;
+  }
+
+  .btn-secondary {
+    @apply inline-flex items-center justify-center rounded-lg border border-dark-300 bg-white px-6 py-3 text-sm font-semibold text-dark-700 shadow-sm transition-all hover:bg-dark-50 hover:shadow-md focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-dark-400;
+  }
+
+  .btn-accent {
+    @apply inline-flex items-center justify-center rounded-lg bg-accent-600 px-6 py-3 text-sm font-semibold text-white shadow-sm transition-all hover:bg-accent-700 hover:shadow-md;
+  }
+
+  .card {
+    @apply rounded-2xl border border-dark-200 bg-white p-6 shadow-sm transition-all hover:shadow-md;
+  }
+
+  .card-hover {
+    @apply rounded-2xl border border-dark-200 bg-white p-6 shadow-sm transition-all hover:border-primary-300 hover:shadow-lg;
+  }
+}

+ 201 - 0
website/src/utils/seo.ts

@@ -0,0 +1,201 @@
+/**
+ * SEO and GEO utility functions.
+ * Generates structured data, meta tags, and other optimization helpers.
+ */
+
+import { SITE, DEFAULT_OG_IMAGE } from '@data/site-config';
+
+export interface SEOProps {
+  title: string;
+  description: string;
+  canonicalURL?: string;
+  ogImage?: string;
+  ogType?: 'website' | 'article' | 'product';
+  schema?: Record<string, unknown>;
+  noIndex?: boolean;
+  publishedDate?: Date;
+  modifiedDate?: Date;
+  author?: string;
+  tags?: string[];
+}
+
+/**
+ * Generate all SEO meta tags and structured data for a page
+ */
+export function generateSEOMeta(lang: 'zh' | 'en', props: SEOProps) {
+  const {
+    title,
+    description,
+    canonicalURL,
+    ogImage = DEFAULT_OG_IMAGE,
+    ogType = 'website',
+    noIndex = false,
+    publishedDate,
+    modifiedDate,
+    author,
+    tags,
+  } = props;
+
+  const fullTitle = `${title} | ${SITE.name}`;
+  const fullImage = ogImage.startsWith('http') ? ogImage : `${SITE.url}${ogImage}`;
+
+  return {
+    title: fullTitle,
+    description,
+    // Standard meta
+    meta: [
+      { name: 'description', content: description },
+      { name: 'author', content: author || SITE.author },
+      // Open Graph
+      { property: 'og:title', content: fullTitle },
+      { property: 'og:description', content: description },
+      { property: 'og:type', content: ogType },
+      { property: 'og:image', content: fullImage },
+      { property: 'og:site_name', content: SITE.name },
+      { property: 'og:locale', content: lang === 'zh' ? 'zh_CN' : 'en_US' },
+      // Twitter Card
+      { name: 'twitter:card', content: 'summary_large_image' },
+      { name: 'twitter:title', content: fullTitle },
+      { name: 'twitter:description', content: description },
+      { name: 'twitter:image', content: fullImage },
+      // Article specific
+      ...(publishedDate ? [{ name: 'article:published_time', content: publishedDate.toISOString() }] : []),
+      ...(modifiedDate ? [{ name: 'article:modified_time', content: modifiedDate.toISOString() }] : []),
+      ...(tags ? [{ name: 'keywords', content: tags.join(', ') }] : []),
+      // Robots
+      ...(noIndex ? [{ name: 'robots', content: 'noindex, nofollow' }] : [{ name: 'robots', content: 'index, follow' }]),
+    ],
+    link: [
+      ...(canonicalURL ? [{ rel: 'canonical', href: canonicalURL }] : []),
+    ],
+  };
+}
+
+/**
+ * Generate Organization schema for About page
+ */
+export function generateOrganizationSchema(lang: 'zh' | 'en') {
+  return {
+    '@context': 'https://schema.org',
+    '@type': 'Organization',
+    name: SITE.name,
+    alternateName: SITE.nameEn,
+    url: SITE.url,
+    slogan: lang === 'zh' ? SITE.slogan : SITE.sloganEn,
+    description: lang === 'zh' ? SITE.description : SITE.descriptionEn,
+    email: SITE.email,
+    sameAs: Object.values(SITE.social),
+    contactPoint: {
+      '@type': 'ContactPoint',
+      email: SITE.email,
+      contactType: 'customer support',
+      availableLanguage: ['Chinese', 'English'],
+    },
+  };
+}
+
+/**
+ * Generate FAQ schema
+ */
+export function generateFAQSchema(faqs: Array<{ question: string; answer: string }>) {
+  return {
+    '@context': 'https://schema.org',
+    '@type': 'FAQPage',
+    mainEntity: faqs.map((faq) => ({
+      '@type': 'Question',
+      name: faq.question,
+      acceptedAnswer: {
+        '@type': 'Answer',
+        text: faq.answer,
+      },
+    })),
+  };
+}
+
+/**
+ * Generate Article schema for blog posts
+ */
+export function generateArticleSchema(props: {
+  title: string;
+  description: string;
+  url: string;
+  image?: string;
+  publishedDate: Date;
+  modifiedDate?: Date;
+  author: string;
+}) {
+  return {
+    '@context': 'https://schema.org',
+    '@type': 'TechArticle',
+    headline: props.title,
+    description: props.description,
+    url: props.url,
+    image: props.image || `${SITE.url}${DEFAULT_OG_IMAGE}`,
+    datePublished: props.publishedDate.toISOString(),
+    dateModified: (props.modifiedDate || props.publishedDate).toISOString(),
+    author: {
+      '@type': 'Person',
+      name: props.author,
+    },
+    publisher: {
+      '@type': 'Organization',
+      name: SITE.name,
+      url: SITE.url,
+    },
+  };
+}
+
+/**
+ * Generate BreadcrumbList schema
+ */
+export function generateBreadcrumbSchema(items: Array<{ name: string; url: string }>) {
+  return {
+    '@context': 'https://schema.org',
+    '@type': 'BreadcrumbList',
+    itemListElement: items.map((item, index) => ({
+      '@type': 'ListItem',
+      position: index + 1,
+      name: item.name,
+      item: `${SITE.url}${item.url}`,
+    })),
+  };
+}
+
+/**
+ * Generate SoftwareApplication schema for product pages
+ */
+export function generateProductSchema(props: {
+  name: string;
+  description: string;
+  url: string;
+  image?: string;
+  applicationCategory?: string;
+  operatingSystem?: string;
+  offers?: {
+    price?: string;
+    priceCurrency?: string;
+  };
+}) {
+  return {
+    '@context': 'https://schema.org',
+    '@type': 'SoftwareApplication',
+    name: props.name,
+    description: props.description,
+    url: props.url,
+    image: props.image || `${SITE.url}${DEFAULT_OG_IMAGE}`,
+    applicationCategory: props.applicationCategory || 'BusinessApplication',
+    operatingSystem: props.operatingSystem || 'Web, Linux, Windows, Mac',
+    offers: props.offers
+      ? {
+          '@type': 'Offer',
+          price: props.offers.price || '0',
+          priceCurrency: props.offers.priceCurrency || 'CNY',
+        }
+      : undefined,
+    provider: {
+      '@type': 'Organization',
+      name: SITE.name,
+      url: SITE.url,
+    },
+  };
+}

+ 50 - 0
website/tailwind.config.mjs

@@ -0,0 +1,50 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+  content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
+  theme: {
+    extend: {
+      colors: {
+        primary: {
+          50: '#eff6ff',
+          100: '#dbeafe',
+          200: '#bfdbfe',
+          300: '#93c5fd',
+          400: '#60a5fa',
+          500: '#3b82f6',
+          600: '#2563eb',
+          700: '#1d4ed8',
+          800: '#1e40af',
+          900: '#1e3a8a',
+          950: '#172554',
+        },
+        accent: {
+          50: '#faf5ff',
+          100: '#f3e8ff',
+          200: '#e9d5ff',
+          300: '#d8b4fe',
+          400: '#c084fc',
+          500: '#a855f7',
+          600: '#9333ea',
+          700: '#7e22ce',
+          800: '#6b21a8',
+          900: '#581c87',
+          950: '#3b0764',
+        },
+        dark: {
+          50: '#f8fafc',
+          100: '#f1f5f9',
+          200: '#e2e8f0',
+          300: '#cbd5e1',
+          400: '#94a3b8',
+          500: '#64748b',
+          600: '#475569',
+          700: '#334155',
+          800: '#1e293b',
+          900: '#0f172a',
+          950: '#020617',
+        },
+      },
+    },
+  },
+  plugins: [],
+};

+ 16 - 0
website/tsconfig.json

@@ -0,0 +1,16 @@
+{
+  "extends": "astro/tsconfigs/strict",
+  "compilerOptions": {
+    "baseUrl": ".",
+    "paths": {
+      "@/*": ["src/*"],
+      "@components/*": ["src/components/*"],
+      "@layouts/*": ["src/layouts/*"],
+      "@i18n/*": ["src/i18n/*"],
+      "@data/*": ["src/data/*"],
+      "@utils/*": ["src/utils/*"],
+      "@assets/*": ["src/assets/*"]
+    }
+  },
+  "include": ["src/**/*.ts", "src/**/*.astro"]
+}

+ 339 - 0
产品介绍/FmodeStudio驾驭工程站产品介绍.txt

@@ -0,0 +1,339 @@
+
+--- Slide 1 ---
+FmodeStudio 驾驭工程站
+深耕 Software 3.0 全新范式
+“为企业驾驭 AI”
+
+--- Slide 2 ---
+品牌定位:未来飞马
+Software 1.0
+时代背景:传统软件开发
+核心交互:人 → 软件 → 任务
+通过编写代码实现特定功能,解决单一问题。
+核心价值:软件即标准化工具
+Software 2.0
+时代背景:云端 / SaaS 时代
+核心交互:人 → 软件 → 云 → 协同
+基于网络的订阅服务,连接多方资源与用户。
+核心价值:SaaS 即灵活服务
+Software 3.0
+时代背景:AI 原生智能时代
+核心交互:人 → AI → 任务
+自然语言驱动智能体,自主拆解并执行复杂流程。
+核心价值:Skills 即核心能力
+我们设想的未来:智能体驱动的工作新范式
+未来的人类将不再需要直接操作复杂的软件界面,而是通过集成了各类 Agentic AI 的智能工作站,将具体的执行任务交付给具备专业技能的 AI 智能体。人从繁琐的执行者转变为管理者和决策者,专注于设定目标、评估结果与战略判断。这不仅是效率的飞跃,更是生产力的本质解放——让技术回归服务本质,让创造力成为核心驱动力,这正是“未来飞马”要为行业带来的 Software 3.0 时代变革。
+
+--- Slide 3 ---
+三大核心定位
+企业级驾驭工程工作站
+FmodeStudio = 为企业驾驭 AI 而诞生的专属驾驭工程工作站,让 AI 能力真正为业务所用。
+管理智能体
+统一编排和调度企业内部各类 AI Agent,打破信息孤岛,实现多智能体的高效协同与任务分配。
+技能全生命周期管理
+支持企业级 Skills 技能包的创建、版本分发与跨场景复用,沉淀核心业务逻辑为可复用资产。
+集约化统一管控
+知识库、Token、权限与 SOP 的一站式集中管理。
+Software 3.0 智能中枢
+传统软件已死,软件不再是给人用的,而是为智能体提供核心运行逻辑的下一代智能中枢。
+以 Skills 替代传统软件
+企业核心业务不再依赖僵化的传统软件,转而通过灵活、可组合的 Skills 响应市场的动态变化。
+SOP 驱动执行自动化
+执行层工作被智能体蒸馏的标准化业务 SOP 全面替代,在提升效率的同时保证业务执行的零偏差。
+回归人类核心价值
+专注于关键决策与人类立场的坚持。
+Vibe Everything 一站式集成
+通过 BaaS + PaaS 架构,将 Vibe Coding 全链路工具链一站集成,让开发更流畅、交付更敏捷。
+全栈氛围技术栈覆盖
+无缝整合 Vercel、Firebase、AWS、Cloudflare 等主流工具,抹平底层差异,提供一致的开发体验。
+开箱即用零运维
+预置生产级环境配置,无需复杂的基础设施搭建,研发人员可即刻投入核心业务代码的编写。
+自动化 DevOps 引擎
+代码提交即触发自动化流水线部署上线。
+
+--- Slide 4 ---
+愿景 · 使命 · 价值观
+让人类驾驭 AI
+FmodeStudio 的产品使命是为企业驾驭 AI 而生。我们致力于打造全球领先的驾驭工程工作站,解决企业在智能化浪潮中“不会用、不敢用、用不好” AI 的核心痛点,让技术真正成为企业发展的核心驱动力,释放人工智能的无限潜能。
+企业创新的千里马,智能转型的独角兽
+我们不仅提供驾驭工程工作站这一核心工具,更构建了企业级智能中枢 PaaS+BaaS 基础设施,以及 FutureStack 新一代 AI 全栈人才培养体系。通过“工具+平台+人才”的三位一体模式,全方位赋能企业实现从业务创新到组织智能转型的跨越式发展。
+预见力
+未来已来 · 前瞻布局
+敏锐捕捉 Software 3.0 技术浪潮,提前洞察行业变革趋势,为企业制定具有前瞻性的智能化战略路线,抢占未来发展先机。
+执行力
+来去自如 · 极速落地
+拒绝冗长流程,实现 1 天交付 Agentic 业务 SOP,以高效敏捷的工程能力推动技术方案快速部署,让企业即时享受 AI 带来的业务价值。
+创造力
+飞越桎梏 · 定义新标
+突破传统软件开发范式的局限,以驾驭工程理念重构技术边界,为 AI 原生应用开发定义全新标准,释放业务创新的无限想象力。
+自驱力
+马踏飞燕 · 持续进化
+保持技术与服务的持续迭代,提供 90 天深度陪跑服务,与企业共同成长,在实践中不断优化方案,确保客户智能转型的长期成功。
+
+--- Slide 5 ---
+Software 3.0 vs 传统开发
+传统软件开发
+交付模式:从0到1定制开发
+开发单一软件功能,需求沟通与开发周期漫长,平均交付周期超过6个月,难以应对快速变化的市场业务需求。
+执行逻辑:纯人工驱动
+完全依赖人操作软件,后端能力需独立开发,AI仅作为独立API手动调用,系统建设成本高且维护难度大。
+痛点:高定制成本 · 响应滞后
+项目制开发导致可复制性极低,无法复用
+Vibe Coding
+效率改进:AI辅助Demo生成
+利用AI快速编写基础代码,Demo可在2天内上线。但仅停留在原型验证阶段,无法直接投入实际业务使用。
+协作方式:人机基础配合
+人主导流程与AI简单协作,需额外学习第三方平台,缺乏成熟的企业级权限与数据管理能力,落地受阻。
+瓶颈:体验割裂 · 不可商用
+仅适合验证想法,无法支撑业务闭环
+FmodeStudio Software 3.0
+范式革新:业务SOP直接落地
+跳过代码开发,基于业务SOP直接生成可执行应用。实现
+1天交付、7天闭环
+,大幅缩短业务上线周期。
+智能执行:Agent 驱动业务
+Agent自主执行逻辑,人仅做关键决策。PaaS+BaaS一键集成,内置Skills规则库,开箱即用,无需复杂配置。
+核心价值:SOP即能力 · 低成本规模化
+企业级能力一体化,让业务创新即刻发生
+
+--- Slide 6 ---
+交付路径对比:传统开发 vs FmodeStudio
+传统软件开发路径
+需求梳理 → 原型设计 → 代码开发 → 多轮测试 → 反复修改 → 部署上线。流程冗长且不可控,每一步都可能产生大量返工。
+平均耗时:≈ 20 周 (5个月+),严重拖慢业务响应
+Vibe Coding 路径
+AI快速生成Demo → 上线验证 → 沟通调整 → 无限循环修改。缺乏工程化底座,代码质量低,维护成本极高,陷入“快做慢改”陷阱。
+致命缺陷:≈ 永远无法商用交付,无法沉淀资产
+FmodeStudio Software 3.0
+基于Agentic AI底座,从业务SOP直接生成可执行系统。流程标准化、工具化,所见即所得,大幅缩短验证周期,确保业务价值按时交付。
+核心价值:确定性落地,业务与技术双闭环
+1 天
+极速启动:业务跑通
+交付 Agentic 业务 SOP,全员快速上手,让核心业务流程在24小时内实现自动化流转。
+3 天
+价值闭环:痛点覆盖
+深度覆盖核心业务痛点,打通数据上下游,形成可观测的业务价值闭环,快速验证业务效果。
+30 天
+能力内化:智能中枢
+完成AI底座深度接入,打造企业专属智能中枢,将业务经验沉淀为可复用的数字化资产。
+90 天
+全面转型:长效运营
+全周期陪跑结束,企业掌握自主迭代能力,实现从“工具辅助”到“AI原生”的业务范式升级。
+
+--- Slide 7 ---
+核心技术:双 Harness 驾驭体系
+Agent = 基础模型 + Harness 驾驭层
+模型决定了 AI 应用的能力上限,而 Harness 驾驭层则决定了实际业务落地中的稳定性与能力下限。通过标准化的约束与封装,让 AI 能力从实验室走向可信赖的生产环境。
+Harness for Vibe Coding
+痛点突破:跨越 Demo 与生产环境的巨大鸿沟
+解决传统 AI 代码生成仅能产出 Demo 级片段,无法满足企业工程化标准的核心问题。
+核心机制:将企业级开发规范、代码风格与业务约束转化为 AI 可读的标准协议,在生成阶段即进行合规性与逻辑性的实时约束。
+最终价值:
+直接输出生产级可上线代码,大幅缩短开发与验证周期,降低人工修正成本。
+Harness for Agent
+痛点突破:解决 Agent 实装的高昂成本与失控风险
+应对大模型 Agent 在复杂业务场景中响应不可控、执行成本高企且难以规模化部署的挑战。
+核心机制:引入 MCP 智能控制平面与标准化 Skill 模块体系,对 Agent 的能力边界、调用流程与资源消耗进行精细化的封装与全局管控。
+最终价值:
+实现 Agent 在规则内的高效安全运行,兼顾低成本落地与高业务准确率,支撑规模化业务应用。
+
+--- Slide 8 ---
+AI 工程化三代范式跃迁
+第一代 · Prompt 工程
+核心:教 AI 怎么说
+解决 AI 能否听懂人话的底层沟通问题。通过精细化的指令设计与意图拆解,让大模型理解人类的自然语言逻辑,是 AI 从通用能力转向场景化应用的基础起点,解决的是“能不能用”的入门问题。
+第二代 · Context 工程
+核心:教 AI 知道什么
+解决 AI 信息更新与准确性问题。通过 RAG(检索增强生成)技术引入私有知识库与实时数据,为模型提供可信赖的“外部大脑”,有效抑制大模型的“幻觉”现象,确保输出内容的事实正确性与业务场景的高度匹配。
+第三代 · Harness 工程
+核心:教 AI 按规则做
+解决 AI 落地的稳定性与标准化问题。构建一套具备边界定义、规则约束与异常处理的工业化运行环境,让 AI 从“单次调用”进化为“持续服务”,是实现业务价值规模化交付的关键技术范式。
+范式跃迁的终极价值:以工程化实现降本增效,突破模型能力边界
+Harness 工程不仅仅是技术的升级,更是方法论的革新。它将 AI 能力从“不可控的实验”转化为“可预期的生产资料”。在这一体系的赋能下,低成本的国产开源模型能够通过精准的规则适配与流程约束,在实际业务场景中达到甚至超越 GPT-4 等顶级闭源模型的落地效果,为企业构建起可规模化、高 ROI 的智能化新基建,实现真正的商业价值闭环。
+
+--- Slide 9 ---
+技术架构:整体架构
+FmodeStudio 驾驭工程工作站
+顶层 · 面向业务的智能应用入口
+智能体管理 Agent Mgmt
+统一调度多模态智能体资源,实现任务的自动拆解与协同执行,支持个性化工作流编排。
+技能包管理 Skills Hub
+提供丰富的可插拔技能组件库,快速扩展系统能力,满足不同行业场景的业务需求定制。
+企业控制台 Enterprise
+一站式企业级运营管理后台,涵盖权限配置、资源监控与系统审计,保障业务稳定运行。
+fmode-ng SDK 核心
+中层 · 全栈式技术能力引擎
+AI 多模态能力层
+深度集成文本生成、计算机视觉与语音交互技术,为上层应用提供强大且统一的 AI 推理能力底座。
+核心数据管理层
+基于 Parse API 与 PostgreSQL 的高性能数据服务,配合 RBAC/ACL 实现细粒度的数据安全控制。
+弹性云服务层
+提供无服务器云函数、一键式应用部署与高可用对象存储,支撑业务的灵活扩展与敏捷迭代。
+企业智能中枢层
+底层 · 稳定可靠的基础设施底座
+PaaS 云知识库
+企业级知识资产数字化容器,内置版本控制与 SOP 标准作业程序,沉淀核心业务领域知识。
+BaaS 智能云中台
+集成高性能数据引擎、Token 安全管理与大模型能力接口,为上层应用提供标准化的数据与能力支撑。
+统一 API 网关
+统一的流量入口与模型路由分发,具备严格的权限校验与全链路审计追踪,保障系统交互安全。
+
+--- Slide 10 ---
+码上飞 - Vibe Coding 规则驱动 DevOps
+通过 BaaS + PaaS 一站式集成,一键安装,自动化 DevOps。将开发流程标准化、组件化,让开发者彻底摆脱繁琐的环境配置与运维琐事,以“零负担”的极速模式专注于核心业务价值的创新与交付。
+前端极速部署
+无缝对接 Vercel、Netlify、Cloudflare Pages 等全球主流平台,实现毫秒级静态资源推送与边缘节点自动预热,让前端迭代即刻上线。
+全栈后端引擎
+集成 Firebase、AWS Amplify 成熟 BaaS 能力,提供开箱即用的 API 网关、实时数据库与业务逻辑层,大幅缩短后端开发周期与试错成本。
+弹性无服务器架构
+基于 AWS Lambda 与 Cloudflare Workers 的事件驱动计算,毫秒级启动,按量付费。自动应对流量洪峰,彻底告别服务器资源闲置浪费。
+云端原生数据库
+原生支持 PostgreSQL、DynamoDB、Firestore 等高性能引擎,具备自动扩缩容、多区域容灾与 ACID 事务保障,数据读写稳定可靠。
+高吞吐对象存储
+集成 S3、Cloudflare R2、Supabase Storage,提供无限容量的非结构化数据托管。支持全球 CDN 加速,适配多媒体与静态资源分发场景。
+企业级身份认证
+无缝集成 Firebase Auth、Auth0、Supabase Auth,内置 MFA 多因素认证与 RBAC 权限模型,保障用户数据与系统访问的绝对安全。
+全链路监控分析
+整合 Vercel Analytics、Sentry、CloudWatch,构建端到端可观测性体系。实时捕获性能瓶颈与异常日志,变被动响应为主动运维。
+智能工作流引擎
+基于 AWS EventBridge 与 Cloudflare Cron 的任务调度,支持 Cron 表达式与事件触发。轻松编排复杂业务逻辑,实现数据同步与定时任务的自动化闭环。
+
+--- Slide 11 ---
+核心功能:云上跑 - 企业智能中枢(PaaS + BaaS)
+针对个人:专业问题技能包 | 针对企业:
+云知识库(PaaS)+ 云数据中台(BaaS)
+—— 打造一站式企业级AI应用基础设施
+知识库管理
+支持企业核心业务知识的结构化沉淀,提供严谨的版本控制与灵活的权限分级体系,确保知识资产的安全与高效复用,让AI应用具备企业专属的业务智慧。
+Token 用量管理
+提供按部门、业务线、用户及项目的多维度用量精细化管控。支持额度分配、实时监控与超额预警,帮助企业有效规划和控制AI调用成本,避免资源浪费。
+模型能力管理
+构建多模型统一调度路由,支持国产大模型优先适配策略。系统可根据任务类型智能匹配最优模型,在保证响应速度与回答质量的同时,实现算力成本的最优解。
+分级权限体系 (RBAC + ACL)
+采用企业级安全架构,融合RBAC角色权限与ACL细粒度访问控制。所有关键操作均纳入全链路审计追踪,全方位保障企业敏感数据资产安全,满足合规性与业务隔离的双重需求。
+SOP 业务规范引擎
+将复杂的企业业务逻辑转化为标准化、可配置的SOP流程。通过规则引擎实现业务流转的自动化,减少人工干预带来的偏差,让AI应用能够严格遵循企业业务准则,稳定高效地服务业务场景。
+
+--- Slide 12 ---
+FmodeCore 核心AI库 & Skills 规则库
+FmodeCore · 全模型兼容底座
+内置数十套深度优化的 AI 开发规则库,打破不同大模型的接口壁垒,实现跨模型的统一调度与能力对齐,让开发者无需重复适配底层逻辑。
+主流模型原生支持
+fmode-1.6-cn / GLM-4 / Kimi / Claude / GPT-4V / Whisper 等多模态模型
+开发工具无缝集成
+Claude Code / Cursor / Windsurf / OpenCode 等工程化开发环境适配
+Skills · AI 能力的“包管理器”
+将复杂的业务逻辑与 AI 能力封装为标准化的技能模块,提供开箱即用的解决方案,让 AI 能力像调用 API 一样简单、高效且可复用。
+全场景能力模板
+覆盖文本生成、视觉理解、语音识别、数据处理、文件存储等数十种高频 AI 应用场景。
+行业范式类比
+如同前端 npm、Python pip,模块化封装让能力复用成为可能,加速业务落地。
+双引擎驱动:重构企业 AI 应用的开发范式
+FmodeCore 提供了强大的底层模型兼容性,Skills 则提供了上层的模块化能力复用。两者结合,不仅让企业在技术选型上拥有“模型自由”,更通过标准化的能力组件,将 AI 应用的开发周期大幅缩短,从底层架构赋能业务实现智能化的快速迭代与规模化落地。
+
+--- Slide 13 ---
+企业 AI 转型路径:1-7-90 天陪跑落地模型
+DAY 01
+极速交付:业务SOP上线
+Agentic 业务SOP生成
+无需漫长开发,当天产出可用的业务智能体。全员直接上手,实现“说话即完成工作”,业务价值即刻可见。
+DAY 07
+闭环跑通:核心业务落地
+核心痛点场景全覆盖
+业务数据闭环自动跑通,无需定制开发软件。快速验证业务效果,在实际业务流中完成迭代与调优,夯实落地基础。
+DAY 90
+进化升级:智能中枢构建
+深度融合AI底座能力
+打造企业专属坚实智能中枢,整合版本控制、私有知识库与API网关等能力,建立可复用、可扩展的长期技术底座。
+传统模式困境:不确定性与被动等待
+传统开发周期长、交付成果与业务脱节,落地效果不可控;FDE模式下业务人员往往处于被动等待状态,需求响应滞后,难以快速应对市场变化。
+Software 3.0:业务驱动的敏捷变革
+让业务人员成为主角,通过自然语言直接完成工作,实现“1天看到成果,7天跑通闭环,90天构建中枢”。彻底重构人机协作流程,以极低的边际成本释放企业AI生产力。
+
+--- Slide 14 ---
+竞争优势:与 AI Coding 工具的差异化
+Claude / Cursor:传统 AI 辅助模式
+定位为代码编写助手,仅解决局部编码问题,缺乏工程化落地的完整能力。
+FmodeStudio 3.0:企业级驾驭工程工作站
+面向业务的全栈工程化平台,从需求到交付的一站式企业级解决方案。
+后端能力断层,仅存 Demo 表象
+只能生成前端演示代码,无实际后端逻辑与数据交互能力。开发过程中仍需人工搭建数据库与接口,无法形成可用的业务闭环。
+全栈工程自动生成,业务即服务
+内置云函数引擎与数据库自动生成能力,根据业务描述一键构建完整后端服务。配合 Skills 规则库,让 AI 直接生成可运行的业务系统,而非孤立代码。
+无生产级管控,安全性不足
+仅支持本地运行,缺乏企业级权限体系(RBAC/ACL)与 Token 鉴权。无知识库版本控制,生成内容不可追溯,难以适配企业合规要求。
+生产级合规与智能体编排
+提供企业级安全规范,支持 Agent 统一编排与管控。集成企业知识库与版本控制,让每一次生成都符合 SOP,确保交付成果的稳定性与可维护性。
+结果:Demo 阶段,落地遥遥无期
+代码可用率低,需大量人工介入,项目周期漫长。
+成果:商用就绪,1 天极速落地
+Vibe Everything 一键部署,跳过试错,价值即刻上线。
+
+--- Slide 15 ---
+适用客户
+大中型企业
+支持私有化部署模式,确保核心业务数据自主可控。为企业打造专属智能中枢,打通内部系统壁垒,构建安全、高效且可深度定制的数字化底座。
+创业公司
+实现1天极速交付MVP产品,让创意快速落地。大幅降低技术研发与试错成本,帮助初创团队敏捷响应市场变化,在激烈的竞争中抢占宝贵的时间窗口。
+传统企业
+轻量化数字化转型方案,无需重金组建全栈技术团队。业务人员可直接上手配置使用,降低转型门槛,加速传统业务向智能化、数据化的产业升级进程。
+软件外包
+重构开发流程与资源配置,将传统6个月的项目交付周期极致压缩至1-7天。显著提升项目周转效率,降低人力成本,为外包业务带来更强的市场竞争力。
+独立开发者
+Vibe Everything一站式全栈引擎,提供从前端到后端的开箱即用能力。无需繁琐的环境配置,实现零运维负担的高效开发,让个人开发者聚焦于创意实现。
+学生群体
+配套省重点教材支撑的AGI全栈开发实战体系。帮助学生跨越技术门槛,快速掌握前沿开发范式,在校园阶段积累具备落地能力的工程化开发经验。
+自由职业者
+沉淀可复用的全栈技能包,快速响应市场需求。高效交付各类定制化项目,在提升服务质量的同时,最大化个人技术服务的商业价值与工作灵活性。
+
+--- Slide 16 ---
+商业与生态
+开源版
+免费 · 面向个人学习
+为开发者与学生群体提供零门槛的AI应用构建工具,打破技术壁垒,助力个人技术探索与创新实践。
+专业版
+订阅制 · 团队协作
+适配敏捷研发团队,支持多人实时协同开发与项目管理,灵活的订阅模式有效降低企业技术投入成本。
+企业版
+年费制 · 私有化部署
+面向中大型企业,支持本地化独立部署与深度功能定制,全方位保障核心业务数据安全与流程自主可控。
+Cloud PaaS
+按量计费 · 云端中枢
+弹性可扩展的云端智能服务中枢,按需调用算力与模型资源,为业务创新提供灵活高效的底层基础设施。
+未来全栈
+课程制 · 人才供给
+系统化AI全栈开发实战课程,从技术理论到工程落地,为行业输送懂业务、能落地的即插即用型人才。
+工程工具基座:驾驭工程工作站
+以FmodeStudio为核心,提供高效的AI应用构建引擎,降低开发门槛,让技术团队专注于业务逻辑与价值创新。
+云端服务中枢:PaaS+BaaS架构
+打通云端算力与业务数据,构建稳定、可扩展的企业级智能服务平台,实现业务系统的轻量化与敏捷迭代。
+人才生态闭环:AI全栈实战培养
+从工具使用者到创造者的能力跃迁,通过实战化课程体系,为企业数字化转型提供持续的高质量人才支撑。
+核心赋能:3.0 开发范式 + 直接能用的复合型人才
+打破技术工具与人才能力的双重壁垒,为企业提供从先进工程化开发模式到实战型技术人才的一站式解决方案,彻底重构AI应用的生产方式,加速业务向智能化未来的深度跃迁。
+
+--- Slide 17 ---
+快速开始
+一行命令,即刻启动 Software 3.0 开发环境
+# 极速体验(无需全局安装,推荐)
+npx -y @fmode/studio
+# 或本地全局安装,长期使用
+npm install -g @fmode/studio && fmode-studio
+零门槛 · 全能力
+告别繁琐的环境配置与依赖冲突,基于容器化技术的 Fmode Studio 让开发者从准备工作中解放出来。无论是原型验证还是生产级开发,只需一行代码即可获得完整、一致的 AI 原生应用开发运行时。
+技术支持通道
+support@fmode.cn
+工作日 9:00-18:00 专属工程师
+快速响应您的开发问题
+官方文档中心
+https://fmode.cn
+查阅最新 API 手册与最佳实践
+获取产品更新日志与版本动态
+开发者社区互动
+fmode-studio
+加入官方微信交流群
+与全球开发者共同探讨技术趋势
+
+--- Slide 18 ---
+FmodeStudio 驾驭工程站
+让人类驾驭 AI,为企业驾驭 AI

+ 1 - 0
产品介绍/README.md

@@ -0,0 +1 @@
+版本库管理是不包含PPTX的,避免二进制文件占用版本空间

+ 717 - 0
产品介绍/未来飞马-让企业驾驭AI-202603.txt

@@ -0,0 +1,717 @@
+
+--- Slide 1 ---
+纯前端算法优先
+ / 
+全生命周期覆盖
+ 
+/
+ 
+重教育生态绑定
+ 
+/
+ 
+纯国产环境支持
+驾驭工程
+——
+让人类驾驭
+A
+gent
+未来飞马
+
+--- Slide 2 ---
+品牌理念
+Brand Concept
+未来飞马
+经历
+10
+年商业验证的HpaPaaS高产能平台,遇到
+AI
+场景下各类繁杂编排问题及交互协议,诞生了一套
+CLI+
+SDK+API+MCP+Agents
+的最佳实践,这就是
+未来飞马
+——
+新一代企业驾驭工程平台
+。
+愿景
+简化
+AI
+,驾驭
+AI
+Simplfying AI,  Harnessing AI.
+使命
+企业创新的千里马,智能转型的独角兽。
+让每个企业和
+OPC
+,无门槛得驾驭AI。
+价值观
+    未
+ 
+来已来的预见力    来
+ 
+去自如的执行力
+    飞
+ 
+越桎梏的创造力    马
+ 
+踏飞燕的自驱力
+
+--- Slide 3 ---
+2016
+年
+2018
+年
+2022
+年
+AI+
+食安督导
+ 
+行业前三
+1000
+家门店
+ 
+千万人次
+/
+日
+Top500
+技术咨询
+帮助新技术创新落地
+国资混改企业
+IT
+转型
+业绩
+5
+倍
+ IT
+成本
+50%
+驾驭工程
+ 
+AI Infra
+技术创投、
+OPC
+社群
+AI+
+深度学习
+AI+
+创新产品
+AGI+
+企业转型
+AGI+
+产教融合
+江西康复医学会
+ 
+社会康复专委会
+ 
+委员
+刘雨飏
+懂业务的
+程序员
+未来飞马  创始人
+Z0 Venture Capital GP
+中国大数据产业生态联盟
+ 
+专家委员
+华为技术有限公司
+ HCDE
+专家
+江西省数字经济学会
+ 
+智能教育专委会
+ 
+委员
+2025
+年
+
+--- Slide 4 ---
+让
+企业
+驾驭AI
+Harness Engineering,AGI商业化的临界点突破
+被忽略掉的
+奇点
+
+--- Slide 5 ---
+CONTENTS
+01
+行业困境
+AI的“Q值困境”与集体迷茫
+02
+解决方案
+Harness Engineering,驾驭AI的整车系统
+03
+实践探索
+未来飞马的双Harness落地案例
+04
+本质思考
+重构人机关系,开启AGI商业文明
+
+--- Slide 6 ---
+两个改变文明走向的技术故事 (一)
+可控核聚变:从氢弹到稳定能源
+核聚变的终极难题并非能量产生,而是能量约束。核心指标
+Q值(能量增益因子)
+的突破,关键在于掌握了“稳定约束等离子体的方法”。
+托卡马克磁约束系统的出现,让这股原本毁灭性的能量得以持续、稳定、可控地输出价值,真正开启了商业化的大门。
+托卡马克磁约束核聚变实验装置
+核心突破:从“不可控”到“可控”
+通过磁约束技术将上亿度的等离子体束缚在真空室内,解决了材料耐受与能量持续输出的矛盾,是人类迈向“人造太阳”的关键一步。
+核心临界点
+——
+投入比产出
+更高
+
+--- Slide 7 ---
+两个改变文明走向的技术故事 (二)
+图:量子纠缠示意图,体现量子计算的核心物理特性
+量子计算:从量子优势到商用难题
+核心洞察:商用的关键在于“驾驭不确定性”
+尽管谷歌已宣布实现“量子优势”,但真实商用场景仍面临投入产出比倒挂的挑战。
+真正的突破点并非单纯堆砌量子比特,而是建立
+“量子纠错与容错系统”
+。唯有驾驭量子态的不确定性,才能在真实场景中低成本、稳定地解决问题。
+核心临界点
+——
+错误比
+准确更高
+
+--- Slide 8 ---
+破题:当前AI行业的「Q值困境」
+AI商业增益因子 (Q值) =
+AI带来的商业收益 ÷ AI全链路投入成本
+全链路成本包含:开发、运维、纠错、合规及组织适配成本
+80%
+中大型企业已部署AI工具
+德勤2026 Q1报告
+15%
+实现规模化商业价值
+绝大多数项目Q值 < 1
+>60%
+收益不如人工/传统软件
+投入产出比严重失衡
+核心困境:技术能力与商业驾驭的断层
+我们造出了强大的模型,却未跨过AGI商业化的临界点——就像70年前的氢弹,能量巨大却无法安全、可控地转化为生产力。
+
+--- Slide 9 ---
+痛点拆解:AI速赢之后的集体困境
+几乎所有企业都经历了从“AI速赢”到陷入困境的相同路径。
+速赢带来的短暂兴奋之后,是一系列难以逾越的障碍。
+
+--- Slide 10 ---
+快速开发了
+Demo
+,然后呢?
+
+--- Slide 11 ---
+快速开发了
+Demo
+,
+然后呢?
+用人去驾驭
+AI
+写的代码,是一条
+死胡同!
+
+--- Slide 12 ---
+痛点一:AI生成的应用,从demo到生产,隔着一条鸿沟
+Demo阶段:快速高效
+AI生成代码能力强大,开发速度极快。通常仅需
+20天
+即可完成一套系统的原型开发,验证核心功能。
+生产阶段:复杂耗时
+需解决规模化、安全、合规、容灾等问题。工程师往往需要
+3-5个月
+重写代码,导致效率未提,成本反升。
+核心矛盾分析
+AI 目前仅解决了“代码能不能跑”的问题,却无法解决企业级应用“能不能
+安全、合规、稳定
+地跑”的工程难题。
+
+--- Slide 13 ---
+痛点二:AI Agent,从跑通到实装,成本直接爆炸
+Demo 阶段
+AI Agent 看似无所不能,能自动拆解并完成复杂任务,展示出强大的潜力。
+实装阶段
+Token 成本因防幻觉飙升;需人工监控纠错;易误操作引发业务风险,最终沦为成本黑洞。
+核心矛盾
+只赋予 Agent 工具调用能力,却未设定明确的规则与边界,导致行为不可控。
+总结:缺乏约束的 Agent 规模化应用,是企业成本失控的“隐形杀手”
+
+--- Slide 14 ---
+痛点三:速赢的壁垒,一夜就被抹平
+速赢阶段
+通过AI获得短期竞争优势,抢占市场红利,看似风光无限。
+壁垒消失
+同行迅速模仿,使用相同模型和工具,差异化优势瞬间被抹平。
+最终结果
+行业重回价格和供应链内卷,AI拉高了全行业成本,未构建真正护城河。
+警示:
+仅依赖通用模型的“速赢”策略无法持久,真正的护城河在于数据资产沉淀与业务场景的深度融合。
+
+--- Slide 15 ---
+问题的本质:我们始终没有找到驾驭AI的方法
+核心症结:工具与驾驭的脱节
+问题并不在于模型不够强大、Prompt不够精妙,或是工具链不够完善,而在于我们缺乏一套系统的“驾驭AI的方法”。
+经典比喻:失控的跑车
+我们造了一辆时速300公里的跑车,却没有驾照、交通规则和刹车系统——它要么原地轰油门,要么一上路就翻车。
+解决方案:Harness Engineering
+这套“方向盘、刹车、交通规则”,就是我们今天要探讨的
+驾驭工程
+——让AI从“脱缰野马”变为“得力助手”。
+示意图:没有驾驭系统的AI如同没有方向盘的跑车
+
+--- Slide 16 ---
+解法:Harness Engineering,AGI商业化的「
+马镫
+」
+Harness Engineering 是解决当前 AI 商业化困境的核心方案
+如同核聚变的磁约束系统让能量可控,Harness 驾驭系统让 AI 强大的能力被稳定、安全地约束与引导,从而持续输出可预期的商业价值。
+DRIVING AGI COMMERCIALIZATION
+
+--- Slide 17 ---
+AI工程化的三代范式跃迁
+第一代:Prompt工程
+核心:教AI怎么说
+解决AI能否听懂人话的问题,通过优化指令提升回答质量。
+第二代:Context工程
+核心:教AI知道什么
+结合RAG技术引入知识库,解决AI幻觉问题,确保说对话。
+第三代:Harness工程
+核心:教AI按规则做
+构建标准化运行环境,明确边界与规则,确保稳定交付商业价值。
+演进趋势:
+从单一的指令优化,走向知识增强,最终实现全流程工程化协同与商业落地。
+
+--- Slide 18 ---
+Harness的本质:Agent = 基础模型 + Harness驾驭层
+
+--- Slide 19 ---
+Harness的本质:Agent = 基础模型 + Harness驾驭层
+核心公式:Agent = 基础模型 + Harness驾驭层
+价值定位:决定能力下限,避免无效浪费
+模型决定AI能力的上限,而Harness决定AI能力的下限,确保其能力被用在正确的地方,避免浪费在幻觉和无效输出上。
+实践验证:低成本模型的越级表现
+一套好的Harness体系,能让低成本的国产模型,完成甚至超过GPT-4的工作效果,实现算力与成本的最优解。
+
+--- Slide 20 ---
+实践:未来飞马的双Harness落地探索
+未来飞马
+公司定位:AGI时代的“
+马具
+系统”
+未来飞马不做大模型,而是致力于将大模型的能力安全、稳定、低成本地输送到企业场景,构建连接AI与业务的高效基础设施。
+核心成果:双Harness全链路体系
+构建业界罕见的双Harness工程体系,针对性解决企业AI落地过程中面临的工程化与业务适配两大核心痛点,实现高效赋能。
+Engineering for Impact · 让AI能力可信赖地流动
+
+--- Slide 21 ---
+第一套Harness:Harness for Vibe Coding
+解决问题:跨越Demo与生产的鸿沟
+传统AI生成多为demo原型,难以直接投入生产使用,Harness填补了这一关键空白。
+核心机制:最佳实践沉淀为规则
+将企业级开发全链路规范(需求、建模、安全、合规等)转化为AI可读的标准化规则,约束生成过程。
+最终效果:生产级应用直出
+AI生成的代码不再是玩具,而是符合企业标准、具备健壮性,可直接部署上线的生产级应用。
+Harness for Vibe Coding 规则约束流程示意
+
+--- Slide 22 ---
+案例:跨境电商
+店铺智能管理
+传统开发模式
+投入
+1
+名
+FDE
+工程师
+开发与维护
+耗时
+30
+天
+完成系统上线
+跨境电商供应链流通环节示意
+Harness 智能化模式
+仅需
+21天
+完成开发、测试、部署全流程
+无缝对接
+业务团队
+,
+60
+天
+跑通
+价值单点
+上线
+核心成果收益
+开发成本
+↓ 70%
+交付效率
+↑ 10倍
+技术赋能业务,实现降本增效的跨越式发展
+
+--- Slide 23 ---
+渠道
+一:
+货架电商
+——
+亚马逊为例
+跨境电商核心阵地
+亚马逊是跨境电商数据最密集、竞争最激烈的主战场,运营效率决定生死。
+亚马逊 Agent 核心能力
+Listing优化
+关键词自动挖掘与埋词
+退货管理
+自动化处理与损失最小化
+评论管理
+差评预警与自动回复
+“不是让AI帮你干活,而是让增长虾团队成为你在每个平台的常驻代理人,替你盯盘、报警、优化、成交。”
+增长虾智能运营解决方案 | 亚马逊站群管理
+
+--- Slide 24 ---
+渠道
+二:
+广告投放
+——
+以
+Shopee
+为例
+东南亚增长最快的
+跨境电商平台之一
+市场高速增长
+东南亚是全球增长最快的跨境电商市场之一,Shopee凭借本土化运营策略,月活用户数持续领先。
+核心能力全覆盖
+我们的Shopee Agent不仅覆盖与亚马逊相同的三大核心运营模块,更针对性地额外集成了关键的智能客服系统能力。
+“东南亚市场的差异化竞争力,往往不在产品本身,而在于谁的
+内容广告投放
+响应更快、更懂当地用户。”
+
+--- Slide 25 ---
+第二套Harness:Harness for Agent
+解决痛点:实装成本与可控性
+针对AI Agent从跑通到落地实装过程中,面临的高昂试错成本与不可控的执行风险难题。
+核心机制:标准化封装与管控
+封装MCP控制平面与Skill模块,定制业务规则、成本阈值、权限边界及全链路审计追踪。
+应用效果:规则内高效运行
+确保Agent每一步操作合规,实现低成本消耗、高执行准确率与业务高可控性的平衡。
+
+--- Slide 26 ---
+案例:跨境电商VOC
+虾(
+2
+月)
+旧方案:Vibe Coding + 
+海外模型
+月成本
+高
+选品准确率
+全靠人工看数据
+AI商业增益(Q)
+< 1 (
+消耗
+)
+痛点:成本高昂,且模型微调困难,效果提升瓶颈明显
+新方案:Harness + 国产模型
+月成本
+低
+(↓70%)
+选品准确率
+AI 
+70
+% 
+(↑70%)
+AI商业增益(Q)
+1.6 (
+倍增
+)
+价值:低成本国产模型替代,通过Harness实现精准控制与效果跃升
+核心成果:通过模型底座切换与Harness全链路优化,实现成本降低70%的同时,商业价值提升1.6倍。
+
+--- Slide 27 ---
+项目背景
+某泳装品牌希望建立持续的市场情报体系,打破信息孤岛。
+系统运行成果
+每日自动推送竞品价格、评分预警,即时响应市场变化
+每周输出关键词趋势报告,捕捉流行风向
+每月生成深度竞品对标分析,辅助战略决策
+业务量化改变
+团队开发款式数量从平均
+6个
+提升到
+10个
+,且工作效率大幅提升,流程更轻松。
+泳装跨境电商VOC
+虾
+
+--- Slide 28 ---
+工作模式:从“养虾”到自主运行
+养虾期(第1个月)
+工程师与业务负责人共同定义需求,系统上线并开始数据积累,每日复盘迭代,确保系统“吃饱”数据。
+成熟期(第2个月起)
+系统进入自主运行状态,定时自动推送分析报告,业务团队可通过自然语言随时追问细节,释放人力。
+自我革命
+:10
+倍速的
+提升
+当 AI 开始替人类做采购决策,我们不仅要倾听用户之声 (VOC),更需要关注并理解 AI 的决策逻辑与声音 (VoAI)。
+
+--- Slide 29 ---
+什么是VOC?为什么它是一切的起点?
+
+--- Slide 30 ---
+VOC:基于真实行为的原始洞察
+什么是 VOC?
+VOC(Voice of Customer)是直接从真实用户评论、社交媒体反馈中提炼出的原始洞察,是用户心声的直接表达。
+“用户不说谎——他们每一条评论,都是一封写给您产品团队的信。”
+核心价值:真实可靠
+它是基于用户真实行为的洞察,而非基于假设的调研。这种源于真实场景的数据,能帮助团队做出更精准的决策。
+用户反馈与互动示意
+
+--- Slide 31 ---
+VOC回答四个核心业务问题
+品类数据
+核心问题:
+哪个品类在增长?增速多少?
+业务价值:
+选品决策、资源分配
+产品数据
+核心问题:
+竞品卖什么?定价如何?
+   	      主打什么卖点?
+业务价值:
+新品开发、差异化定位
+用户画像
+核心问题:
+谁在买?在哪里买?买完说什么?
+业务价值:
+精准营销、内容策略
+场景画像
+核心问题:
+什么场景下用?解决什么问题?
+业务价值:
+卖点提炼、内容创作
+
+--- Slide 32 ---
+营销团队人机协作
+:
+以
+新品上市方案
+为例
+数据输入
+品类VOC报告
+竞品深度分析
+品牌调性文档
+AI自主生成
+目标人群画像与卖点
+渠道策略矩阵规划
+30天内容日历与节奏
+方案输出
+可直接提案的完整方案
+全链路执行细节
+总耗时 < 2小时
+人类角色(决策与把控)
+提供品牌DNA、审核方向、做最终决策,确保品牌调性一致。
+AI角色(执行与生成)
+海量数据分析、方案框架搭建、内容素材批量产出,提升效率。
+
+--- Slide 33 ---
+案例:香薰行业VOC
+虾(
+2
+天)
+项目背景:
+欧鼎香薰希望洞察亚马逊欧美市场香薰品类现状,为新品开发寻找方向。
+核心发现:
+趋势:
+Candle Warmer品类在TikTok播放量达2700万,增长迅速。
+痛点:
+30.5%差评集中在“化学气味”,用户厌恶人工香精。
+卖点:
+用户最看重“香味高级”与“外观精致”。
+策略建议:
+开发“天然有机精油 + 高颜值瓶身”新品,并推出礼品套装提升客单价。
+图:Candle Warmer 产品示例
+总结:通过VOC分析,精准锁定“天然+颜值”的产品升级机会点。
+Lucy
+说:
+“
+这相当于我们把好的工作习惯经验教给虾,让虾(智能体)去跑,跑出来验证
+——
+他就像应届生,一步一步教他
+”
+
+--- Slide 34 ---
+升华:驾驭工程的本质,是人机关系的重构
+过去的关系
+人适应AI,人是AI的保姆和校对员,处于被动配合的地位。
+未来的关系
+AI适应人,人是规则的制定者和方向的掌舵者,AI是高效的执行者和能力实现者。
+核心主张:让人类驾驭AI,而不是被AI驾驭
+
+--- Slide 35 ---
+WebGL
+、
+Live2D
+、
+Video/Canvas
+、唇型驱动、面部特征分析、微表情、情感分析
+多模态交互
+文本:
+GLM
+、
+Doubao
+豆包
+图片
+/
+视频:文生图,图生图、图生视频
+多模态:音频、数字人视频
+跨协议模型
+语音识别
+ASR
+、语言合成
+TTS
+、情感语音角色定制、
+MCP
+插件协议、网络接入协议
+插件库生态
+CLI
+:可编码的端侧
+交互
+适配
+GUI
+,
+CLI
+,
+AUI
+,
+AIUI
+,各类应用场景的端侧交互体验。支持网页端、小程序、智能硬件的用户接口交互配置。支持意图管理、记忆管理、异步思考与工作流调用等灵活的沟通能力和执行
+能力。
+驾驭技能
+Harness for Skills/MCP/API
+
+--- Slide 36 ---
+APIG
+融合数据服务接口
+根据用户编排的工作流、智能体问答环节,可以自动生成用于数据持久化的
+CRUD
+代码,并提供基于
+PostgreSQL
+的数据库接口便于通过云函数,进一步定制开发。
+数据持久迁移
+UML
+驱动的数据库设计,能有效得通过
+AI
+帮助客户完成
+Text2SQL
+的转化,实现高性能复杂查询的编写及
+SQL
+优化(索引、触发器)等。
+复杂业务逻辑
+2000+
+张
+结构化数据表及
+ER
+设计方案
+250+
+套
+行业常用数据库全案模板
+125+
+个
+传统互联网:
+短信服务、身份服务、四要素认证、
+OCR
+识别、支付接口、
+OBS
+存储、
+边缘函数。
+AI
+智能体:
+非结构化问卷、开放式访谈、多轮次话题、破冰与主动触达、多流程交互任务。
+微服务接入:
+AI
+辅助后端开发
+驾驭业务
+Harness for Business
+
+--- Slide 37 ---
+端侧算法优先
+大模型与智能体应用,依赖于大量矩阵及向量计算,导致传统模式中心化算力成本高昂。因此纯前端优先的算法,可以充分调用边缘算力,重构
+AI
+大规模应用的成本结构。
+WASM
+前后端同构的数据加密算法、多模态数据的压缩与解压算法、轻量级线程优化并行计算、
+DAG
+调度与
+WebWorker
+等
+同构
+/
+加密
+/
+压缩
+/
+调度
+/
+并行
+WebGPU
+Text Embeddings
+、
+Lite
+轻量级模型、向量相似度(余弦、欧氏距离)、多模态检索、计算密集型任务
+嵌入
+/
+轻量
+/
+向量
+/
+多模态
+面向
+C
+端或工业级海量数据的智能体应用,通过
+C
+端或边缘计算节点,解决中心化服务器性能瓶颈,优化成本结构。
+重构成本路径
+减少后端数据请求,优化一轮
+RTT(Round-Trip Time)
+延迟,响应更加及时。且增强了弱网环境及离线操作的体验。
+优化响应速度
+RAG
+知识库向量经过点对点加密传输,离线加载到本地后,可以通过
+P2P
+身份认证,进行知识向量数据的激活与向量检索。
+P2P
+隐私数据保护
+驾驭终端
+Harness for Terminal Device
+
+--- Slide 38 ---
+一个盒子:孵化硅基生命
+给
+AI
+一具身体
+
+--- Slide 39 ---
+驾驭
+工程
+,
+点亮
+AGI商业
+奇点
+文明飞跃的本质
+人类文明的每一次飞跃,本质上都是对“驾驭能力”的突破——从掌控火、电到能量,能力边界不断拓展。
+AGI 商业新纪元
+当下我们正学会驾驭智能,Harness Engineering 将成为核心引擎,正式开启 AGI 驱动的商业文明时代。
+AI 的终极意义
+技术的终极目标是解放人类。让 AI 承担重复性劳动,释放人类潜能,专注于更具价值的创造与创新。
+“ 从工具革命到智能革命,驾驭智能即是驾驭未来 ”
+
+--- Slide 40 ---
+未来飞马,让人类驾驭AI
+未来飞马 (Fmode)
+让每个企业和
+OPC
+,无门槛得驾驭
+AI
+。
+Simplfying AI,  Harnessing AI
+· 2026 Vision

+ 630 - 0
产品独立站搭建手册-Claude版.md

@@ -0,0 +1,630 @@
+# 用 Claude Code 搭建企业产品独立站 — 零代码使用手册
+
+> **适用人群**:没有编程基础的市场、运营、产品经理  
+> **所需工具**:Claude Code(命令行版)+ 产品介绍 PPT  
+> **产出成果**:一个被 AI 搜索引擎收录的多语言产品官网  
+> **全程耗时**:约 1-2 小时(含 AI 自动生成时间)
+
+---
+
+## 目录
+
+1. [准备工作:你需要什么](#1-准备工作你需要什么)
+2. [第一步:准备产品资料](#2-第一步准备产品资料)
+3. [第二步:让 AI 学习你的产品](#3-第二步让-ai-学习你的产品)
+4. [第三步:让 AI 研究 SEO 策略](#4-第三步让-ai-研究-seo-策略)
+5. [第四步:让 AI 设计网站架构](#5-第四步让-ai-设计网站架构)
+6. [第五步:让 AI 编写网站](#6-第五步让-ai-编写网站)
+7. [第六步:检查网站效果](#7-第六步检查网站效果)
+8. [第七步:发现样式问题并修复](#8-第七步发现样式问题并修复)
+9. [第八步:部署上线(可选)](#9-第八步部署上线可选)
+10. [常见问题排查](#10-常见问题排查)
+11. [附录 A:给 AI 的完整提示词合集](#附录-a给-ai-的完整提示词合集)
+12. [附录 B:我们的实战案例复盘](#附录-b我们的实战案例复盘)
+13. [附录 C:GEO 优化清单](#附录-cgeo-优化清单)
+14. [附录 D:关键技术概念解释](#附录-d关键技术概念解释)
+
+---
+
+## 1. 准备工作:你需要什么
+
+### 硬件/软件要求
+
+| 项目 | 要求 |
+|------|------|
+| 电脑 | Windows / Mac 均可 |
+| 网络 | 能正常访问互联网 |
+| Claude Code | 已安装并登录 |
+| Node.js | Claude Code 自带,无需单独安装 |
+
+### 材料要求
+
+| 材料 | 格式 | 说明 |
+|------|------|------|
+| 产品介绍 PPT | `.pptx` | 产品定位、功能、品牌故事等 |
+| 品牌手册 | `.pptx` 或 `.pdf` | 愿景、使命、价值观等 |
+
+> **[此处插入截图:准备就绪的文件夹,内含 PPT 文件]**
+
+### 确认 Claude Code 已启动
+
+打开终端(Windows 按 `Win+R`,输入 `cmd`,回车),输入:
+
+```
+claude --dangerously-skip-permissions
+```
+
+看到以下界面说明启动成功:
+
+> **[此处插入截图:Claude Code 启动后的欢迎界面]**
+
+---
+
+## 2. 第一步:准备产品资料
+
+### 操作目标
+
+将你的 PPT 产品资料放到一个文件夹里,让 Claude Code 能找到它们。
+
+### 具体步骤
+
+**步骤 2.1:创建文件夹**
+
+在电脑上创建一个文件夹来存放所有材料。例如:
+
+```
+D:\我的项目\产品介绍\
+```
+
+将你的产品 PPT 文件放入这个文件夹。
+
+> **[此处插入截图:文件夹中放置了 PPT 文件]**
+
+**步骤 2.2:确认 Claude Code 的工作目录**
+
+在 Claude Code 中,输入以下命令查看当前工作目录:
+
+```
+你现在在哪个文件夹工作?
+```
+
+Claude 会告诉你当前的工作路径。记下这个路径,后续需要用到。
+
+> **[此处插入截图:Claude 回复当前工作路径]**
+
+---
+
+## 3. 第二步:让 AI 学习你的产品
+
+### 操作目标
+
+让 Claude 读取你的 PPT 资料,深入理解你的产品、品牌和业务。
+
+### 具体步骤
+
+**步骤 3.1:发送第一个提示词**
+
+将以下提示词**完整复制**到 Claude Code 对话框中,**替换 `你的产品介绍文件夹路径`** 为实际的文件夹路径:
+
+```
+请读取我放在 [你的产品介绍文件夹路径] 目录下的所有 PPT 文件,
+深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。
+然后帮我总结以下内容:
+1. 产品的核心定位是什么?
+2. 产品解决什么痛点?
+3. 产品有哪些核心功能?
+4. 目标客户是谁?
+```
+
+> **[此处插入截图:在 Claude Code 中粘贴提示词]**
+
+**步骤 3.2:确认 AI 的理解**
+
+Claude 会输出对产品的理解摘要。**仔细阅读,确认理解正确**。
+
+如果 AI 有理解偏差,直接告诉它:"第 2 点不太对,正确的理解应该是……"
+
+> **[此处插入截图:Claude 输出的产品理解摘要]**
+
+---
+
+## 4. 第三步:让 AI 研究 SEO 策略
+
+### 操作目标
+
+让 Claude 搜索互联网上关于 GEO(生成式引擎优化,即让 AI 搜索引擎收录你的网站)的最佳实践。
+
+### 为什么这步很重要?
+
+传统 SEO 是让 Google 收录你的网站。但现在越来越多用户用 ChatGPT、豆包等 AI 工具搜索信息。GEO 就是让你的网站在 AI 回答中被引用和推荐的技巧。
+
+### 具体步骤
+
+**步骤 4.1:复制以下提示词**
+
+```
+请帮我做三件事:
+
+1. 搜索 GEO(Generative Engine Optimization)的最佳实践和最新策略
+
+2. 搜索 Astro 框架制作多语言网站的 SEO 最佳实践
+
+3. 基于你对我们产品的理解,梳理目标用户可能会搜索什么内容、
+   问什么问题,建立一个问题库
+
+然后把以上内容整理成一个 GEO 优化方案。
+```
+
+> **[此处插入截图:粘贴 GEO 研究提示词]**
+
+**步骤 4.2:等待 AI 完成研究**
+
+Claude 会自动搜索多个网页,阅读内容,然后整理出一份完整的 GEO 方案。这个过程大约需要 1-3 分钟。
+
+> **[此处插入截图:Claude 输出的 GEO 优化方案摘要]**
+
+**步骤 4.3:确认方案**
+
+阅读 AI 输出的内容,重点关注:
+- **关键词列表**:这些是用户搜索时会用的词
+- **问题库**:这些是用户可能会问的问题
+- **内容建议**:这些是网站需要包含的内容
+
+---
+
+## 5. 第四步:让 AI 设计网站架构
+
+### 操作目标
+
+让 Claude 规划网站的页面结构、导航、每个页面的内容。
+
+### 具体步骤
+
+**复制以下提示词,一次性发送:**
+
+```
+基于你对产品资料的学习和 GEO 研究,现在帮我规划完整的网站架构。
+
+请完成以下工作:
+
+1. 设计网站的页面地图(sitemap),列出所有页面
+2. 设计中英文双语的 URL 结构
+3. 规划每个页面的核心内容
+4. 列出所有需要做的 GEO 优化措施
+5. 把规划写入一个 ARCHITECTURE.md 文件
+
+输出格式要清晰,让我这个不懂技术的人也能看明白。
+```
+
+> **[此处插入截图:Claude 输出的网站架构设计]**
+
+**我得到的结果示例:**
+
+| 页面 | URL(中文) | URL(英文) | 内容 |
+|------|------------|------------|------|
+| 首页 | /zh/ | /en/ | 产品亮点、核心能力、客户群体 |
+| 驾驭工程 | /zh/product/harness-engineering/ | /en/product/harness-engineering/ | 核心概念详解 |
+| Vibe Coding | /zh/product/vibe-coding/ | /en/product/vibe-coding/ | AI 编程产品 |
+| FAQ | /zh/faq/ | /en/faq/ | 常见问题 |
+| 术语表 | /zh/glossary/ | /en/glossary/ | 专业术语解释 |
+| ... | ... | ... | ... |
+
+> 完整规划请见项目文件夹中的 `ARCHITECTURE.md`
+
+---
+
+## 6. 第五步:让 AI 编写网站
+
+### 操作目标
+
+让 Claude 自动生成整个网站的代码。
+
+### 具体步骤
+
+**步骤 6.1:发送生成指令**
+
+复制以下提示词,**确保一次性完整发送**:
+
+```
+现在请开始实际的网站搭建。
+
+要求:
+1. 使用 Astro 框架
+2. 支持中英文双语(/zh/ 和 /en/)
+3. 包含完整的 GEO 优化(结构化数据、hreflang、FAQ schema 等)
+4. 创建一个 website 目录存放所有代码
+5. 所有代码一次性生成,确保完整可运行
+
+请在开始前先创建任务清单,然后逐步执行每个任务,
+直到网站可以正常构建和预览。
+```
+
+> **[此处插入截图:粘贴网站生成提示词]**
+
+**步骤 6.2:等待代码生成**
+
+Claude 会自动完成以下工作:
+1. 创建项目结构
+2. 编写所有页面(首页、产品页、博客、FAQ 等)
+3. 配置 SEO/GEO 优化
+4. 设置中英文双语
+5. 自动安装依赖包
+6. 构建并启动网站
+
+整个过程约需 10-20 分钟。
+
+> **[此处插入截图:Claude 正在生成代码的进度显示]**
+
+**步骤 6.3:网站生成完成**
+
+构建成功后会看到类似输出:
+
+```
+38 page(s) built in 2.32s
+Complete!
+```
+
+> **[此处插入截图:构建成功的输出信息]**
+
+---
+
+## 7. 第六步:检查网站效果
+
+### 操作目标
+
+在浏览器中查看生成的网站。
+
+### 具体步骤
+
+**步骤 7.1:让 Claude 打开浏览器**
+
+在 Claude Code 中输入:
+
+```
+帮我用浏览器打开网站首页看看效果
+```
+
+> **[此处插入截图:浏览器中打开的网站首页]**
+
+**步骤 7.2:检查清单**
+
+请逐项检查以下内容:
+
+| 检查项 | 正常标准 | ✅/❌ |
+|--------|---------|-------|
+| 页面排版 | 文字、图片排列整齐,无重叠 | |
+| 导航菜单 | 能正常展开,链接可点击 | |
+| 语言切换 | 点"EN"能切换到英文版 | |
+| 手机显示 | 手机浏览器中正常显示 | |
+| 页面加载速度 | 2 秒内打开 | |
+
+---
+
+## 8. 第七步:发现样式问题并修复
+
+这是本次实战中实际遇到的问题,供你参考。
+
+### 问题描述
+
+网站打开后只有文字,排版完全乱了。
+
+> **[此处插入截图:排版错乱的网站]**
+
+### 原因分析
+
+Claude 使用的技术方案中引用了海外 CDN 资源(Google Fonts、Partytown 等),国内网络无法访问。
+
+### 修复步骤
+
+**直接复制以下提示词给 Claude:**
+
+```
+网页打开后排版是乱的,只有文字没有样式。
+请你检查是否引用了海外 CDN 资源(如 Google Fonts、Partytown 等),
+把这些都替换为国内可用的替代方案或完全移除。
+修复后重新构建并打开浏览器给我看。
+
+另外,请建立一条规则记住:以后在国内网络环境下做项目,
+禁止使用任何海外 CDN 资源。
+```
+
+> **[此处插入截图:粘贴修复提示词]**
+
+Claude 会自动:
+1. 切换到 Tailwind CSS v3(国内稳定版本)
+2. 移除 Partytown 组件
+3. 移除 Google Fonts 引用
+4. 重新安装依赖并构建
+5. 建立持久化规则,以后不会再犯
+
+> **[此处插入截图:修复后排版正常的网站]**
+
+---
+
+## 9. 第八步:部署上线(可选)
+
+### 操作目标
+
+将网站发布到互联网上,让所有人都能访问。
+
+### 推荐方案
+
+| 平台 | 费用 | 适合人群 | 操作难度 |
+|------|------|---------|---------|
+| **Vercel** | 免费额度够用 | 所有人 | ⭐ 最简单 |
+| **Cloudflare Pages** | 免费 | 有小技术基础 | ⭐⭐ |
+| **GitHub Pages** | 免费 | 有 GitHub 账号 | ⭐⭐ |
+
+### 使用 Vercel 部署(推荐新手)
+
+**提示词**:
+
+```
+帮我把这个网站部署到 Vercel 上。
+```
+
+Claude 会引导你完成以下步骤:
+1. 注册 Vercel 账号(用 GitHub 账号登录)
+2. 安装 Vercel CLI
+3. 一键部署
+
+### 绑定自己的域名
+
+**提示词**:
+
+```
+网站部署好了,我想绑定自己的域名 www.我的公司.com,
+请告诉我怎么做?
+```
+
+---
+
+## 10. 常见问题排查
+
+### Q1:Claude 生成的代码有错误,网站打不开
+
+**解决方法**:直接把错误信息复制给 Claude,说:
+
+```
+构建时报错了,错误信息如下:
+[粘贴错误信息]
+请帮我修复。
+```
+
+### Q2:网站内容需要修改
+
+**解决方法**:告诉 Claude 具体要改什么:
+
+```
+请把首页的标题从"XX"改为"YY",并添加一段关于我们新产品的介绍。
+```
+
+### Q3:想增加新的页面
+
+**解决方法**:
+
+```
+请帮我在网站上增加一个"客户案例"页面,列出以下 3 个案例:
+1. [案例1名称]:[简述]
+2. [案例2名称]:[简述]
+3. [案例3名称]:[简述]
+```
+
+### Q4:想让网站更好看
+
+**解决方法**:
+
+```
+首页的配色太单调了,能否换成更现代的风格?
+主题色改为蓝色系 (#2563eb),搭配紫色点缀。
+```
+
+### Q5:Claude 操作到一半停了
+
+**解决方法**:直接说:
+
+```
+继续刚才未完成的工作。
+```
+
+---
+
+## 附录 A:给 AI 的完整提示词合集
+
+以下是可以直接复制使用的完整提示词模板。使用时,将 `[方括号]` 中的内容替换为你的实际信息。
+
+### A.1 产品学习提示词
+
+```
+请读取我放在 [文件夹路径] 目录下的所有 PPT 文件,
+深度理解我们的产品定位、品牌理念、核心功能、目标客户和竞争优势。
+然后帮我总结产品的核心定位、解决的痛点、核心功能和目标客户。
+```
+
+### A.2 GEO 研究提示词
+
+```
+请搜索 GEO(Generative Engine Optimization)的最佳实践。
+然后基于你对我们产品的理解:
+1. 梳理目标用户可能会搜索的内容和问题
+2. 建立一个问题库
+3. 整理关键词列表
+4. 制定完整的内容策略
+```
+
+### A.3 网站架构设计提示词
+
+```
+基于产品学习和GEO研究,帮我规划完整的网站架构:
+1. 网站页面地图(sitemap)
+2. 中英文双语URL结构
+3. 每个页面的核心内容
+4. GEO优化措施清单
+```
+
+### A.4 网站生成提示词
+
+```
+请使用 Astro 框架,帮我创建一个完整的产品官网。
+要求:
+- 支持中英文双语(/zh/ 和 /en/)
+- 包含完整的GEO优化
+- 所有代码放在 website 目录下
+- 确保在国内网络环境下所有资源可用
+- 完成后自动构建并用浏览器打开
+```
+
+### A.5 样式修复提示词
+
+```
+网页排版乱了,请检查是否有海外CDN依赖并修复。
+以后在国内环境做项目,禁止使用海外CDN资源。
+```
+
+### A.6 内容修改提示词
+
+```
+请修改 [页面名称] 页面的以下内容:
+- [修改项1]
+- [修改项2]
+```
+
+---
+
+## 附录 B:我们的实战案例复盘
+
+### B.1 任务全景
+
+| 阶段 | 输入 | 输出 | 耗时 |
+|------|------|------|------|
+| 产品学习 | 2 个 PPTX 文件(共 58 页) | 产品理解摘要 | ~3 分钟 |
+| SEO 研究 | "搜索 GEO 最佳实践" | GEO 优化方案 + 问题库 | ~5 分钟 |
+| 架构设计 | "设计网站架构" | 完整网站地图 + URL 结构 | ~5 分钟 |
+| 代码生成 | "使用 Astro 框架搭建" | 38 个页面 + 全部配置 | ~15 分钟 |
+| 样式修复 | "页面排版乱了" | 切换到 Tailwind v3 方案 | ~5 分钟 |
+| **总计** | | | **~35 分钟** |
+
+### B.2 产出统计
+
+| 指标 | 数值 |
+|------|------|
+| 页面总数 | 38 个(中英双语) |
+| 代码文件 | 40+ 个 |
+| 博客文章 | 3 篇 GEO 优化文章 |
+| FAQ 条目 | 10 个(含结构化数据) |
+| 术语定义 | 13 个(中英双语) |
+| SEO Schema 类型 | 6 种(Organization, FAQPage, TechArticle, BreadcrumbList, SoftwareApplication, Product) |
+| 支持语言 | 中文(zh-CN)+ 英文(en-US) |
+
+### B.3 人机分工
+
+| 人类做的事 | AI 做的事 |
+|-----------|----------|
+| 📋 提供产品 PPT 资料 | 📖 读取和分析 PPT |
+| ✅ 审核 AI 理解和方案 | 🔍 搜索 SEO 最佳实践 |
+| ✅ 检查网站效果 | 🏗️ 设计网站架构 |
+| 🐛 发现排版问题 | 💻 编写全部代码 |
+| 💬 反馈问题给 AI | 🔧 自动修复技术问题 |
+| | 🚀 构建和启动网站 |
+
+---
+
+## 附录 C:GEO 优化清单
+
+以下是我们为网站实施的所有 GEO(生成式引擎优化)措施。你可以把这个清单交给 AI,让它逐项检查:
+
+### C.1 结构化数据(让 AI 读懂你的内容)
+
+- [x] 网站首页:Organization schema(告诉 AI 这是哪家公司)
+- [x] FAQ 页面:FAQPage schema(让 AI 直接引用你的问答)
+- [x] 博客文章:TechArticle schema(标注作者、发布时间等)
+- [x] 产品页面:SoftwareApplication schema(标注产品信息)
+- [x] 所有页面:BreadcrumbList schema(标注页面层级关系)
+
+### C.2 多语言 SEO
+
+- [x] hreflang 标签:告知搜索引擎中文版和英文版页面对应关系
+- [x] x-default 标签:指定默认语言版本
+- [x] 规范链接(canonical URL):避免重复内容问题
+- [x] 多语言站点地图(sitemap):列出所有语言版本
+
+### C.3 AI 爬虫友好
+
+- [x] llms.txt:专门给 AI 爬虫的站点说明文件
+- [x] robots.txt:明确允许 ChatGPT、Google AI 等爬虫访问
+- [x] 术语表页面:为专业术语提供权威定义(帮助 AI 理解概念)
+- [x] 每篇博客标注"作者 + 发布时间"(增加可信度)
+
+### C.4 内容策略
+
+- [x] 为核心概念建立专属页面(如"驾驭工程"概念页)
+- [x] FAQ 回答直接、权威、结构化
+- [x] 博客覆盖高频搜索问题
+- [x] 内容互联(文章之间互相引用链接)
+
+---
+
+## 附录 D:关键技术概念解释
+
+> 以下内容面向非技术读者,用"白话"解释涉及的技术概念。
+
+### D.1 Astro 是什么?
+
+**一句话解释**:Astro 是一个"静态网站生成器",它能像搭积木一样把网站的各个部分拼在一起,最终输出为纯 HTML 文件,加载极快。
+
+**类比**:传统的网站像"现场炒菜"——用户访问时服务器现做。Astro 像"预制菜"——提前做好,用户来了直接端上桌,快得多。
+
+### D.2 Tailwind CSS 是什么?
+
+**一句话解释**:一个"样式工具箱",通过给 HTML 标签添加简短的类名来控制外观,不需要写 CSS 代码。
+
+**类比**:传统写样式像"从零设计一套家具",Tailwind 像"宜家的标准化配件"——你只需要选择搭配,不用自己画图纸。
+
+### D.3 GEO 是什么?
+
+**一句话解释**:Generative Engine Optimization,生成式引擎优化。它不是让网站排在搜索结果前 10 名,而是让你的内容被 ChatGPT、豆包等 AI 在回答中引用和推荐。
+
+**类比**:传统 SEO 像在图书馆的卡片目录中排名靠前;GEO 像是让你的书成为图书馆员回答读者问题时必引用的那本参考书。
+
+### D.4 JSON-LD 结构化数据是什么?
+
+**一句话解释**:在网页中嵌入一段"机器可读的标签",告诉搜索引擎和 AI"这段文字是 FAQ 问答"、"这个页面是产品介绍"。
+
+**类比**:就像给超市货架上的每件商品贴上条形码。人类看包装文字就知道是什么,但扫码器需要条形码才能快速识别。JSON-LD 就是给 AI 的"条形码"。
+
+### D.5 hreflang 是什么?
+
+**一句话解释**:告诉搜索引擎"这个页面有中文版和英文版,中文版在这里,英文版在那里",避免被当作重复内容惩罚。
+
+**类比**:就像一本书有中英文两个版本,你在封面上标注"中文版"和"English Edition",读者不会困惑为什么有两本书。
+
+### D.6 i18n 是什么?
+
+**一句话解释**:Internationalization(国际化)的缩写——i 和 n 之间有 18 个字母,所以叫 i18n。指的是让你的网站支持多种语言。
+
+---
+
+## 总结
+
+你现在拥有了一套完整的方法:
+
+1. **准备好产品 PPT** → 放到文件夹
+2. **打开 Claude Code** → 粘贴本手册的提示词
+3. **审核 AI 输出** → 必要时反馈调整
+4. **获得成品网站** → 浏览器直接看效果
+
+**最重要的原则**:
+- ✅ 提示词要完整清晰,一次性说清楚需求
+- ✅ 每一步确认 AI 理解正确再继续
+- ✅ 遇到问题直接反馈,AI 会自己修复
+- ✅ 让 AI 建立规则,下次不再犯同类错误
+
+---
+
+> **版本记录**
+> - v1.0 (2026-05-31):初版,基于未来飞马(Fmode)产品官网实战编写
+> - 适用 Claude Code 版本:2026 年 5 月版
+>
+> **反馈与改进**
+> 如果你在使用过程中有任何问题或建议,可以直接告诉 Claude Code:
+> "请回顾这次的协作过程,帮我改进这本手册。"

Some files were not shown because too many files changed in this diff