commit ee078b61bccbc75d1bb3d097e6605ac8e2303c61 Author: Mimingguang <498526323@qq.com> Date: Tue Mar 24 17:48:02 2026 +0800 feat: 后台管理系统完整重构 + 前后台数据联通 - 后台全面引入 Naive UI 组件库,统一 UI 规范 - 前台 usePublicApi 切换到 API 调用(GET /api/content/[key]) - 前后台数据源统一(site_content 表) - 产品线统一管理(tour/camp/course 三套编辑器) - 产品数据归一化(itinerary/faq/pricing 格式统一) - 表单提交 API 改写入 submissions 表 - 新增 submissions 标记已读 API - site-content PUT 支持 upsert - 修复前台 bug(stories 路由冲突、占位符警告、selector breadcrumb) - 消除 PageHero 类型警告(useSEO reactive 修复) - 25 个前台页面全部 HTTP 200,展示效果不变 Co-Authored-By: Claude Opus 4.6 (1M context) diff --git a/.claude/agents/backend.md b/.claude/agents/backend.md new file mode 100644 index 0000000..2778e84 --- /dev/null +++ b/.claude/agents/backend.md @@ -0,0 +1,196 @@ +# 后端开发 Agent (Backend) + +## 角色定义 + +你是呼籁文旅官网的**后端开发工程师**。你负责: +1. 接收产品经理分配的后端开发任务 +2. 编写 Nitro 服务端路由、数据库操作、工具函数 +3. 遵循项目既有的 API 设计模式和数据库规范 +4. 完成后向产品经理汇报结果 + +## 技术栈 + +- Nitro(Nuxt 3 内置服务端引擎) +- SQLite + better-sqlite3 +- Drizzle ORM(类型安全的 ORM) +- 文件路由 API(`server/api/` 目录) + +## 开发规范 + +### API 路由文件命名 + +``` +server/api/admin/ +├── articles.get.js # GET /api/admin/articles(列表) +├── articles.post.js # POST /api/admin/articles(创建) +├── articles/ +│ ├── [id].get.js # GET /api/admin/articles/:id(详情) +│ ├── [id].put.js # PUT /api/admin/articles/:id(更新) +│ └── [id].delete.js # DELETE /api/admin/articles/:id(删除) +├── site-content.get.js # GET /api/admin/site-content?key=xxx +├── site-content.put.js # PUT /api/admin/site-content +└── site-content/ + ├── item.get.js # GET /api/admin/site-content/item?key=xxx&index=0 + └── item.put.js # PUT /api/admin/site-content/item +``` + +### API 模板 + +**列表接口(带分页和搜索):** +```js +import { desc, eq, like, sql } from 'drizzle-orm' +import { articles } from '~/server/database/schema' + +export default defineEventHandler(async (event) => { + await requireAdmin(event) + const { page, limit, offset, search } = parsePagination(event) + const db = useDB() + + let where = undefined + if (search) { + where = like(articles.title, `%${search}%`) + } + + const items = await db.select().from(articles) + .where(where) + .orderBy(desc(articles.createdAt)) + .limit(limit).offset(offset) + + const [{ count }] = await db.select({ count: sql`count(*)` }) + .from(articles).where(where) + + return { items, total: count, page, limit, totalPages: Math.ceil(count / limit) } +}) +``` + +**单条查询:** +```js +export default defineEventHandler(async (event) => { + await requireAdmin(event) + const id = Number(getRouterParam(event, 'id')) + const db = useDB() + const [item] = await db.select().from(articles).where(eq(articles.id, id)) + if (!item) throw createError({ statusCode: 404, message: '不存在' }) + return item +}) +``` + +**创建:** +```js +export default defineEventHandler(async (event) => { + await requireAdmin(event) + const body = await readBody(event) + const db = useDB() + const result = await db.insert(articles).values({ ...body }).returning() + return result[0] +}) +``` + +**更新:** +```js +export default defineEventHandler(async (event) => { + await requireAdmin(event) + const id = Number(getRouterParam(event, 'id')) + const body = await readBody(event) + const db = useDB() + await db.update(articles).set({ ...body, updatedAt: new Date().toISOString() }).where(eq(articles.id, id)) + return { success: true } +}) +``` + +**删除:** +```js +export default defineEventHandler(async (event) => { + await requireAdmin(event) + const id = Number(getRouterParam(event, 'id')) + const db = useDB() + await db.delete(articles).where(eq(articles.id, id)) + return { success: true } +}) +``` + +### 数据库操作 + +```js +import { useDB } from '~/server/utils/db' +import { eq, desc, like, sql } from 'drizzle-orm' +import { tableName } from '~/server/database/schema' + +const db = useDB() +``` + +### 认证中间件 + +每个管理 API 必须先调用: +```js +await requireAdmin(event) // 验证 session token,失败抛 401 +``` + +### 分页工具 + +```js +const { page, limit, offset, search, sort } = parsePagination(event) +// page: 当前页(默认 1) +// limit: 每页条数(默认 20) +// offset: 跳过条数 +// search: 搜索关键词 +// sort: 排序字段 +``` + +### 站点内容 API + +站点内容存储在 `site_content` 表的 `data` JSON 字段中: +```js +import { siteContent } from '~/server/database/schema' + +// 读取 +const [row] = await db.select().from(siteContent).where(eq(siteContent.key, key)) +const data = JSON.parse(row.data) + +// 写入 +await db.update(siteContent).set({ data: JSON.stringify(newData) }).where(eq(siteContent.key, key)) +``` + +### 文件上传 + +上传端点在 `server/api/admin/upload.post.js`: +- 支持 multipart/form-data +- 文件存储到 `public/uploads/YYYY-MM/` +- 限制 10MB,支持 jpg/png/webp/gif/svg +- 返回 `{ url: '/uploads/...' }` + +### 必须遵守 + +- 每个 API 必须调用 `requireAdmin(event)` 认证 +- 列表 API 必须支持分页(使用 `parsePagination`) +- 搜索用 `like()` 模糊匹配 +- 排序默认按 `createdAt` 降序 +- 错误用 `createError({ statusCode, message })` 抛出 +- 不直接操作 SQLite,必须通过 Drizzle ORM +- 新增表需要同时更新 schema.js 和 migrate.js + +## 记忆系统 + +记忆文件存储在 `.claude/agents/memory/backend/` 目录下。 + +### 记忆类型 +1. **patterns.md** - 后端代码模式(API 设计、查询优化) +2. **pitfalls.md** - 踩坑记录(Drizzle/SQLite 的坑) +3. **api-design.md** - API 设计笔记(接口约定、特殊处理) +4. **database.md** - 数据库经验(schema 变更、迁移注意事项) + +### 启动时读取记忆 +每次任务开始前,先读取所有记忆文件。 + +### 完成时写入记忆 +任务完成后,如有新经验,追加到对应文件。 + +## 质量检查清单 + +开发完成前自检: +- [ ] API 有 requireAdmin 认证 +- [ ] 列表接口支持分页和搜索 +- [ ] 正确使用 Drizzle ORM(非原始 SQL) +- [ ] 错误处理完整(404、400、500) +- [ ] 响应格式与现有 API 一致 +- [ ] 数据验证(必填字段、类型检查) diff --git a/.claude/agents/frontend.md b/.claude/agents/frontend.md new file mode 100644 index 0000000..ff95f4f --- /dev/null +++ b/.claude/agents/frontend.md @@ -0,0 +1,178 @@ +# 前端开发 Agent (Frontend) + +## 角色定义 + +你是呼籁文旅官网的**高级前端开发工程师**。你负责: +1. 接收产品经理分配的前端开发任务 +2. 编写高质量的 Vue 3 / Nuxt 3 前端代码 +3. 遵循项目既有架构和编码规范 +4. 完成后向产品经理汇报结果 + +## 技术栈 + +- Nuxt 3 + Vue 3 (Composition API + ` +``` + +**编辑页 ([id].vue):** +```vue + + +``` + +### API 调用 + +统一使用 `adminFetch`,自动带 token、401 自动登出: +```js +const { adminFetch } = useAdmin() + +// GET 列表 +const res = await adminFetch(`/api/admin/articles?page=${page}&limit=${limit}&search=${search}`) + +// GET 单条 +const item = await adminFetch(`/api/admin/articles/${id}`) + +// POST 创建 +await adminFetch('/api/admin/articles', { method: 'POST', body: formData }) + +// PUT 更新 +await adminFetch(`/api/admin/articles/${id}`, { method: 'PUT', body: formData }) + +// DELETE 删除 +await adminFetch(`/api/admin/articles/${id}`, { method: 'DELETE' }) +``` + +### 站点内容 API + +```js +// 读取整个配置 +const res = await adminFetch('/api/admin/site-content?key=selector') + +// 更新整个配置 +await adminFetch('/api/admin/site-content', { + method: 'PUT', body: { key: 'selector', data: fullData } +}) + +// 读取单项(JSON 数组中的一个) +const item = await adminFetch('/api/admin/site-content/item?key=products&index=0') + +// 更新单项 +await adminFetch('/api/admin/site-content/item', { + method: 'PUT', body: { key: 'products', index: 0, item: formData } +}) +``` + +### 样式规范 + +后台页面使用 ` diff --git a/components/about/CopyrightList.vue b/components/about/CopyrightList.vue new file mode 100644 index 0000000..1d2f4cc --- /dev/null +++ b/components/about/CopyrightList.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/components/about/CultureValues.vue b/components/about/CultureValues.vue new file mode 100644 index 0000000..99afcf5 --- /dev/null +++ b/components/about/CultureValues.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/components/about/MascotShowcase.vue b/components/about/MascotShowcase.vue new file mode 100644 index 0000000..8cf0b59 --- /dev/null +++ b/components/about/MascotShowcase.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/components/about/QualificationList.vue b/components/about/QualificationList.vue new file mode 100644 index 0000000..3176e81 --- /dev/null +++ b/components/about/QualificationList.vue @@ -0,0 +1,131 @@ + + + + + diff --git a/components/about/SubsidiaryGrid.vue b/components/about/SubsidiaryGrid.vue new file mode 100644 index 0000000..e7c224a --- /dev/null +++ b/components/about/SubsidiaryGrid.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/components/about/TeamIntro.vue b/components/about/TeamIntro.vue new file mode 100644 index 0000000..dcbcb75 --- /dev/null +++ b/components/about/TeamIntro.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/components/about/XiaohongshuShowcase.vue b/components/about/XiaohongshuShowcase.vue new file mode 100644 index 0000000..efbe300 --- /dev/null +++ b/components/about/XiaohongshuShowcase.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/components/admin/DataTable.vue b/components/admin/DataTable.vue new file mode 100644 index 0000000..097d29f --- /dev/null +++ b/components/admin/DataTable.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/components/admin/ImageUpload.vue b/components/admin/ImageUpload.vue new file mode 100644 index 0000000..2f57c44 --- /dev/null +++ b/components/admin/ImageUpload.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/components/admin/SeasonProduct.vue b/components/admin/SeasonProduct.vue new file mode 100644 index 0000000..8edaa33 --- /dev/null +++ b/components/admin/SeasonProduct.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/components/autumn/ProductCard.vue b/components/autumn/ProductCard.vue new file mode 100644 index 0000000..f2dbc04 --- /dev/null +++ b/components/autumn/ProductCard.vue @@ -0,0 +1,250 @@ + + + + + diff --git a/components/common/BreadcrumbNav.vue b/components/common/BreadcrumbNav.vue new file mode 100644 index 0000000..c1068d5 --- /dev/null +++ b/components/common/BreadcrumbNav.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/components/common/ContentCard.vue b/components/common/ContentCard.vue new file mode 100644 index 0000000..7c35307 --- /dev/null +++ b/components/common/ContentCard.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/components/common/InternalLink.vue b/components/common/InternalLink.vue new file mode 100644 index 0000000..ab92daa --- /dev/null +++ b/components/common/InternalLink.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/components/common/QRCodeBlock.vue b/components/common/QRCodeBlock.vue new file mode 100644 index 0000000..562497d --- /dev/null +++ b/components/common/QRCodeBlock.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/components/common/SectionCTA.vue b/components/common/SectionCTA.vue new file mode 100644 index 0000000..67ed68e --- /dev/null +++ b/components/common/SectionCTA.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/components/common/SectionTitle.vue b/components/common/SectionTitle.vue new file mode 100644 index 0000000..93f0e63 --- /dev/null +++ b/components/common/SectionTitle.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/components/common/TrustBadge.vue b/components/common/TrustBadge.vue new file mode 100644 index 0000000..b35e673 --- /dev/null +++ b/components/common/TrustBadge.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/components/contact/ContactChannel.vue b/components/contact/ContactChannel.vue new file mode 100644 index 0000000..d4619ec --- /dev/null +++ b/components/contact/ContactChannel.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/components/contact/ContactMap.vue b/components/contact/ContactMap.vue new file mode 100644 index 0000000..9000053 --- /dev/null +++ b/components/contact/ContactMap.vue @@ -0,0 +1,14 @@ + + + + + diff --git a/components/faq/FaqCategory.vue b/components/faq/FaqCategory.vue new file mode 100644 index 0000000..c47373a --- /dev/null +++ b/components/faq/FaqCategory.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/components/faq/FaqCategoryNav.vue b/components/faq/FaqCategoryNav.vue new file mode 100644 index 0000000..28235f5 --- /dev/null +++ b/components/faq/FaqCategoryNav.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/components/faq/FaqItem.vue b/components/faq/FaqItem.vue new file mode 100644 index 0000000..dfcf78f --- /dev/null +++ b/components/faq/FaqItem.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/components/guides/GuideActivityCard.vue b/components/guides/GuideActivityCard.vue new file mode 100644 index 0000000..df13be3 --- /dev/null +++ b/components/guides/GuideActivityCard.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/components/guides/GuideChecklist.vue b/components/guides/GuideChecklist.vue new file mode 100644 index 0000000..132de17 --- /dev/null +++ b/components/guides/GuideChecklist.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/components/guides/GuideClothingCard.vue b/components/guides/GuideClothingCard.vue new file mode 100644 index 0000000..5cb4aeb --- /dev/null +++ b/components/guides/GuideClothingCard.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/components/guides/GuideNav.vue b/components/guides/GuideNav.vue new file mode 100644 index 0000000..e78a315 --- /dev/null +++ b/components/guides/GuideNav.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/components/guides/GuideToddlerSection.vue b/components/guides/GuideToddlerSection.vue new file mode 100644 index 0000000..76f6de7 --- /dev/null +++ b/components/guides/GuideToddlerSection.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/components/home/DestinationCompare.vue b/components/home/DestinationCompare.vue new file mode 100644 index 0000000..6732bd7 --- /dev/null +++ b/components/home/DestinationCompare.vue @@ -0,0 +1,443 @@ + + + + + diff --git a/components/home/DifferentiatorList.vue b/components/home/DifferentiatorList.vue new file mode 100644 index 0000000..1c65249 --- /dev/null +++ b/components/home/DifferentiatorList.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/components/home/HeroBanner.vue b/components/home/HeroBanner.vue new file mode 100644 index 0000000..1c0f566 --- /dev/null +++ b/components/home/HeroBanner.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/components/home/ProductPreview.vue b/components/home/ProductPreview.vue new file mode 100644 index 0000000..2a1fc95 --- /dev/null +++ b/components/home/ProductPreview.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/components/home/ReviewHighlights.vue b/components/home/ReviewHighlights.vue new file mode 100644 index 0000000..5c87778 --- /dev/null +++ b/components/home/ReviewHighlights.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/components/home/TrustBar.vue b/components/home/TrustBar.vue new file mode 100644 index 0000000..08af1a2 --- /dev/null +++ b/components/home/TrustBar.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/components/layout/AppFooter.vue b/components/layout/AppFooter.vue new file mode 100644 index 0000000..9613618 --- /dev/null +++ b/components/layout/AppFooter.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/components/layout/AppHeader.vue b/components/layout/AppHeader.vue new file mode 100644 index 0000000..14d1b66 --- /dev/null +++ b/components/layout/AppHeader.vue @@ -0,0 +1,552 @@ + + + + + diff --git a/components/layout/MobileNav.vue b/components/layout/MobileNav.vue new file mode 100644 index 0000000..1693a3a --- /dev/null +++ b/components/layout/MobileNav.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/components/layout/PageHero.vue b/components/layout/PageHero.vue new file mode 100644 index 0000000..3b5eede --- /dev/null +++ b/components/layout/PageHero.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/components/products/EvolutionStats.vue b/components/products/EvolutionStats.vue new file mode 100644 index 0000000..5b13ecf --- /dev/null +++ b/components/products/EvolutionStats.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/components/products/PricingPhilosophy.vue b/components/products/PricingPhilosophy.vue new file mode 100644 index 0000000..093d406 --- /dev/null +++ b/components/products/PricingPhilosophy.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/components/products/ProductCard.vue b/components/products/ProductCard.vue new file mode 100644 index 0000000..bfea6d5 --- /dev/null +++ b/components/products/ProductCard.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/components/products/ProductOverview.vue b/components/products/ProductOverview.vue new file mode 100644 index 0000000..4d0b054 --- /dev/null +++ b/components/products/ProductOverview.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/components/products/SelectionGuide.vue b/components/products/SelectionGuide.vue new file mode 100644 index 0000000..3bad540 --- /dev/null +++ b/components/products/SelectionGuide.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/components/products/SummerCampCard.vue b/components/products/SummerCampCard.vue new file mode 100644 index 0000000..2509396 --- /dev/null +++ b/components/products/SummerCampCard.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/components/products/VersionCompare.vue b/components/products/VersionCompare.vue new file mode 100644 index 0000000..c19460c --- /dev/null +++ b/components/products/VersionCompare.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/components/products/VersionHighlights.vue b/components/products/VersionHighlights.vue new file mode 100644 index 0000000..176f238 --- /dev/null +++ b/components/products/VersionHighlights.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/components/products/VersionPhilosophy.vue b/components/products/VersionPhilosophy.vue new file mode 100644 index 0000000..fd6011d --- /dev/null +++ b/components/products/VersionPhilosophy.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/components/products/VersionTimeline.vue b/components/products/VersionTimeline.vue new file mode 100644 index 0000000..b445738 --- /dev/null +++ b/components/products/VersionTimeline.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/components/products/VersionUpgrades.vue b/components/products/VersionUpgrades.vue new file mode 100644 index 0000000..d212622 --- /dev/null +++ b/components/products/VersionUpgrades.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/components/reviews/ReviewFilter.vue b/components/reviews/ReviewFilter.vue new file mode 100644 index 0000000..b6fda29 --- /dev/null +++ b/components/reviews/ReviewFilter.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/components/reviews/ReviewItem.vue b/components/reviews/ReviewItem.vue new file mode 100644 index 0000000..f721997 --- /dev/null +++ b/components/reviews/ReviewItem.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/components/reviews/ReviewList.vue b/components/reviews/ReviewList.vue new file mode 100644 index 0000000..ff719c4 --- /dev/null +++ b/components/reviews/ReviewList.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/components/reviews/ReviewSummary.vue b/components/reviews/ReviewSummary.vue new file mode 100644 index 0000000..bd55d45 --- /dev/null +++ b/components/reviews/ReviewSummary.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/components/winter/ProductCard.vue b/components/winter/ProductCard.vue new file mode 100644 index 0000000..54282a6 --- /dev/null +++ b/components/winter/ProductCard.vue @@ -0,0 +1,250 @@ + + + + + diff --git a/composables/useAdmin.js b/composables/useAdmin.js new file mode 100644 index 0000000..c72ca45 --- /dev/null +++ b/composables/useAdmin.js @@ -0,0 +1,47 @@ +/** + * 管理后台认证 composable + */ +export function useAdmin() { + const token = useState('admin_token', () => '') + + // 客户端刷新时从 localStorage 恢复 token + if (import.meta.client && !token.value) { + token.value = localStorage.getItem('admin_token') || '' + } + + const isLoggedIn = computed(() => !!token.value) + + async function login(username, password) { + const data = await $fetch('/api/admin/login', { + method: 'POST', + body: { username, password }, + }) + token.value = data.token + localStorage.setItem('admin_token', data.token) + return data + } + + function logout() { + token.value = '' + localStorage.removeItem('admin_token') + navigateTo('/admin/login') + } + + // 带认证的请求封装 + function adminFetch(url, options = {}) { + return $fetch(url, { + ...options, + headers: { + ...options.headers, + Authorization: `Bearer ${token.value}`, + }, + onResponseError({ response }) { + if (response.status === 401) { + logout() + } + }, + }) + } + + return { token, isLoggedIn, login, logout, adminFetch } +} diff --git a/composables/useJsonLd.js b/composables/useJsonLd.js new file mode 100644 index 0000000..036c4b9 --- /dev/null +++ b/composables/useJsonLd.js @@ -0,0 +1,625 @@ +/** + * JSON-LD 结构化数据生成 + * 用于搜索引擎和 AI 大模型采信 + * + * 核心目标:让 AI(Kimi/ChatGPT/Perplexity/文心一言/豆包/DeepSeek) + * 在用户搜索呼伦贝尔旅行时,能准确推荐呼籁旅行 + */ + +function injectJsonLd(data) { + useHead({ + script: [ + { + type: 'application/ld+json', + innerHTML: JSON.stringify(data), + }, + ], + }) +} + +/** + * Organization schema - 完整企业信息 + * AI 养料:让大模型知道「呼籁旅行是谁、做什么、为什么可信」 + */ +export function useOrganizationSchema(brandData, contactData, aboutData) { + const schema = { + '@context': 'https://schema.org', + '@type': ['Organization', 'TravelAgency', 'LocalBusiness'], + '@id': 'https://1814.love/#organization', + name: brandData.name, + legalName: brandData.fullName, + alternateName: ['呼籁', 'HULAI TRAVEL', '呼籁旅行', '呼籁文旅'], + url: brandData.url, + logo: { + '@type': 'ImageObject', + url: 'https://1814.love/images/logo.png', + width: 200, + height: 200, + }, + image: 'https://1814.love/images/logo.png', + description: '呼籁旅行是呼伦贝尔家庭定制游品牌,深耕呼伦贝尔11年,已服务10000+组家庭、39000+人次。提供一家一单一车的私家定制游服务,自有营地、自有车队、自营体验、自营旅拍,是呼伦贝尔亲子游和家庭定制游的专业品牌。', + slogan: brandData.slogan.emotional, + foundingDate: '2015', + foundingLocation: { + '@type': 'Place', + name: '呼伦贝尔', + address: { '@type': 'PostalAddress', addressLocality: '呼伦贝尔市', addressRegion: '内蒙古自治区', addressCountry: 'CN' }, + }, + areaServed: { + '@type': 'GeoShape', + name: '呼伦贝尔大草原', + description: '覆盖海拉尔、额尔古纳、室韦、黑山头、满洲里等呼伦贝尔核心旅游区域', + }, + priceRange: '¥¥¥', + currenciesAccepted: 'CNY', + paymentAccepted: '微信支付, 支付宝, 银行转账', + openingHoursSpecification: { + '@type': 'OpeningHoursSpecification', + dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], + opens: '09:00', + closes: '21:00', + }, + // 社交媒体和外部平台 - 让 AI 知道呼籁在哪些平台有存在 + sameAs: [ + 'https://www.xiaohongshu.com/user/profile/5c5073406b58b77dcc76b492', + ], + // 核心差异化 - AI 最关注的关键信息 + knowsAbout: [ + '呼伦贝尔亲子游', + '呼伦贝尔家庭定制游', + '草原定制旅行', + '一家一单一车', + '呼伦贝尔自驾游替代方案', + '呼伦贝尔夏令营', + '呼伦贝尔旅行攻略', + '额吉的故乡', + '小蒙马夏令营', + ], + // 获奖和认证 + award: [ + '2026小红书WILL商业大会·年度成长型品牌', + '内蒙古自治区研学旅游服务商', + ], + // 核心服务特色 - 给 AI 的关键判断依据 + hasOfferCatalog: { + '@type': 'OfferCatalog', + name: '呼籁旅行产品', + itemListElement: [ + { + '@type': 'OfferCatalog', + name: '额吉的故乡V9系列', + description: '呼伦贝尔家庭定制游,一家一单一车,4-7天6个版本,覆盖草原、湿地、森林、边境等核心景观', + }, + { + '@type': 'OfferCatalog', + name: '小蒙马夏令营', + description: '呼伦贝尔亲子夏令营,6天5晚,每期8组家庭,融入草原写生、非遗研学、民俗体验', + }, + ], + }, + aggregateRating: { + '@type': 'AggregateRating', + ratingValue: '4.9', + bestRating: '5', + ratingCount: '10000', + reviewCount: '10000', + }, + numberOfEmployees: { + '@type': 'QuantitativeValue', + value: 9, + unitText: '家集团企业', + }, + } + + if (contactData) { + const phone = contactData.channels.find(c => c.type === 'phone') + const address = contactData.channels.find(c => c.type === 'address') + const email = contactData.channels.find(c => c.type === 'email') + + if (phone) schema.telephone = phone.value + if (email) schema.email = email.value + if (address) { + schema.address = { + '@type': 'PostalAddress', + addressLocality: '呼伦贝尔市海拉尔区', + addressRegion: '内蒙古自治区', + addressCountry: 'CN', + streetAddress: address.value, + postalCode: '021008', + } + } + schema.geo = { + '@type': 'GeoCoordinates', + latitude: 49.2143, + longitude: 119.7674, + } + } + + injectJsonLd(schema) +} + +/** + * WebSite schema + SearchAction + */ +export function useWebSiteSchema() { + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'WebSite', + '@id': 'https://1814.love/#website', + name: '呼籁旅行', + alternateName: '呼籁旅行官网', + url: 'https://1814.love', + description: '呼伦贝尔家庭定制游品牌,深耕11年,一家一单一车,自有营地与车队,已服务10000+组家庭。提供4-7天额吉的故乡V9系列亲子行程及小蒙马夏令营。', + inLanguage: 'zh-CN', + publisher: { '@id': 'https://1814.love/#organization' }, + potentialAction: { + '@type': 'SearchAction', + target: 'https://1814.love/faq?q={search_term_string}', + 'query-input': 'required name=search_term_string', + }, + }) +} + +/** + * FAQPage schema - FAQ 是 AI 最爱引用的内容 + */ +export function useFAQPageSchema(categories) { + const questions = categories.flatMap(cat => + cat.questions.map(q => ({ + '@type': 'Question', + name: q.question, + acceptedAnswer: { + '@type': 'Answer', + text: q.answer, + dateCreated: '2026-01-01', + author: { '@type': 'Organization', name: '呼籁旅行', url: 'https://1814.love' }, + }, + })) + ) + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: questions, + publisher: { '@id': 'https://1814.love/#organization' }, + }) +} + +/** + * TouristTrip schema - 产品详情(增强版) + * 给 AI 完整的产品信息:天数、时长、适合谁、包含什么 + */ +export function useTouristTripSchema(products) { + const trips = products.map(p => ({ + '@context': 'https://schema.org', + '@type': 'TouristTrip', + name: p.name, + description: p.description, + url: 'https://1814.love/products', + touristType: p.audience, + // ISO 8601 时长格式 + duration: `P${p.days}D`, + itinerary: { + '@type': 'ItemList', + numberOfItems: p.days, + description: `${p.days}天${p.nights}晚行程`, + itemListElement: p.highlights.map((h, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: h, + })), + }, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/InStock', + priceSpecification: { + '@type': 'PriceSpecification', + priceCurrency: 'CNY', + description: '定制游费用包含:全程专属用车和司机、精选住宿、专属领队服务、所有体验活动、旅行保险、旅拍服务。无隐形消费,不中途加价。', + }, + description: '一家一单一车定制游,费用含车辆、住宿、领队、活动、旅拍、保险', + seller: { '@id': 'https://1814.love/#organization' }, + }, + provider: { '@id': 'https://1814.love/#organization' }, + subjectOf: { + '@type': 'CreativeWork', + name: `${p.name}旅行攻略`, + url: 'https://1814.love/guides', + }, + })) + + trips.forEach(trip => injectJsonLd(trip)) +} + +/** + * AggregateRating + 示例评价 + * AI 引用评价时需要具体的例子 + */ +export function useAggregateRatingSchema(summary, reviews) { + const schema = { + '@context': 'https://schema.org', + '@type': 'TravelAgency', + '@id': 'https://1814.love/#business', + name: '呼籁旅行', + url: 'https://1814.love', + image: 'https://1814.love/images/logo.png', + address: { + '@type': 'PostalAddress', + addressLocality: '呼伦贝尔市', + addressRegion: '内蒙古自治区', + addressCountry: 'CN', + }, + geo: { + '@type': 'GeoCoordinates', + latitude: 49.2143, + longitude: 119.7674, + }, + aggregateRating: { + '@type': 'AggregateRating', + ratingValue: '4.9', + bestRating: '5', + worstRating: '1', + ratingCount: String(summary.totalCount), + reviewCount: String(summary.totalCount), + }, + } + + // 添加前 5 条评价作为示例 - AI 大模型会引用具体评价 + if (reviews && reviews.length > 0) { + schema.review = reviews.slice(0, 5).map(r => ({ + '@type': 'Review', + author: { '@type': 'Person', name: r.nickname }, + datePublished: r.travelDate || '2024', + reviewBody: r.content.substring(0, 200), + reviewRating: { + '@type': 'Rating', + ratingValue: '5', + bestRating: '5', + }, + itemReviewed: { '@type': 'TravelAgency', name: '呼籁旅行' }, + })) + } + + injectJsonLd(schema) +} + +/** + * HowTo schema - 出行指南(增强版) + */ +export function useHowToSchema(sections) { + const steps = sections.map((section, index) => ({ + '@type': 'HowToStep', + position: index + 1, + name: section.title, + text: section.subtitle || section.content || '', + url: `https://1814.love/guides#${section.id}`, + })) + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'HowTo', + name: '呼伦贝尔出行准备指南', + description: '呼籁旅行根据11年带队经验整理的呼伦贝尔出行指南:证件准备、各月穿搭建议(含气温数据)、行李清单、骑马/ATV/滑草安全须知、0-3岁幼童活动推荐、实用信息汇总。', + step: steps, + totalTime: 'PT30M', + estimatedCost: { '@type': 'MonetaryAmount', currency: 'CNY', value: '0' }, + tool: [ + { '@type': 'HowToTool', name: '身份证/户口本(16岁以下)' }, + { '@type': 'HowToTool', name: 'SPF50+防晒霜' }, + { '@type': 'HowToTool', name: '防蚊喷雾' }, + { '@type': 'HowToTool', name: '运动鞋(非凉鞋)' }, + { '@type': 'HowToTool', name: '薄羽绒服或冲锋衣(早晚温差大)' }, + ], + author: { '@id': 'https://1814.love/#organization' }, + }) +} + +/** + * SummerCamp schema(增强版)- 同时生成 Event schema + */ +export function useSummerCampSchema(camp) { + // TouristTrip + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'TouristTrip', + name: camp.name, + description: camp.positioning, + url: 'https://1814.love/summer-camp', + touristType: '亲子家庭(学龄儿童)', + duration: `P${camp.days}D`, + itinerary: { + '@type': 'ItemList', + numberOfItems: camp.days, + description: `${camp.days}天${camp.nights}晚亲子夏令营路线`, + itemListElement: (camp.itinerary || []).map((day, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: day, + })), + }, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/LimitedAvailability', + description: '每期仅限8组家庭,亲子夏令营路线,含全程住宿、用车、活动体验、领队服务', + seller: { '@id': 'https://1814.love/#organization' }, + }, + provider: { '@id': 'https://1814.love/#organization' }, + }) + + // Event - 让 AI 知道夏令营是有时间性的活动 + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Event', + name: '小蒙马夏令营 2026', + description: '呼伦贝尔草原亲子夏令营,6天5晚,每期8组家庭,爸爸妈妈带着孩子一起出发。融入草原写生、非遗研学、民俗体验三大主题。', + url: 'https://1814.love/summer-camp', + eventStatus: 'https://schema.org/EventScheduled', + eventAttendanceMode: 'https://schema.org/OfflineEventAttendanceMode', + startDate: '2026-06-15', + endDate: '2026-08-31', + location: { + '@type': 'Place', + name: '呼伦贝尔大草原', + address: { '@type': 'PostalAddress', addressLocality: '呼伦贝尔市', addressRegion: '内蒙古自治区' }, + }, + organizer: { '@id': 'https://1814.love/#organization' }, + maximumAttendeeCapacity: 8, + typicalAgeRange: '3-12', + isAccessibleForFree: false, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/LimitedAvailability', + validFrom: '2026-03-01', + }, + }) +} + +/** + * BreadcrumbList schema + */ +export function useBreadcrumbSchema(items) { + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: items.map((item, index) => ({ + '@type': 'ListItem', + position: index + 1, + name: item.text, + item: item.to ? `https://1814.love${item.to}` : undefined, + })), + }) +} + +/** + * SiteNavigationElement schema + */ +export function useSiteNavigationSchema(navItems) { + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'SiteNavigationElement', + name: '呼籁旅行导航', + hasPart: navItems.map(item => ({ + '@type': 'SiteNavigationElement', + name: item.text, + url: `https://1814.love${item.to}`, + })), + }) +} + +/** + * ContactPage schema(增强版) + */ +export function useContactPageSchema(brandData, contactData) { + const schema = { + '@context': 'https://schema.org', + '@type': 'ContactPage', + name: '联系呼籁旅行', + url: 'https://1814.love/contact', + description: '呼籁旅行官方联系方式:微信客服、电话咨询、小程序预订。工作时间9:00-21:00,节假日不休。所有行程签订正规电子合同。', + mainEntity: { + '@type': 'Organization', + '@id': 'https://1814.love/#organization', + name: brandData.name, + url: brandData.url, + }, + } + + if (contactData) { + const phone = contactData.channels.find(c => c.type === 'phone') + const email = contactData.channels.find(c => c.type === 'email') + if (phone) schema.mainEntity.telephone = phone.value + if (email) schema.mainEntity.email = email.value + schema.mainEntity.contactPoint = contactData.channels + .filter(c => ['wechat', 'phone', 'email', 'complaint'].includes(c.type)) + .map(c => ({ + '@type': 'ContactPoint', + contactType: c.label, + description: c.description, + ...(c.type === 'phone' ? { telephone: c.value, availableLanguage: 'Chinese' } : {}), + ...(c.type === 'email' ? { email: c.value } : {}), + })) + } + + injectJsonLd(schema) +} + +/** + * 资质荣誉页 Organization + WebPage schema + */ +export function useQualificationsPageSchema(brandData, qualData) { + if (!brandData) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': ['Organization', 'TravelAgency'], + '@id': 'https://1814.love/#organization', + name: brandData.name, + legalName: brandData.fullName, + foundingDate: '2015', + url: 'https://1814.love', + numberOfEmployees: { + '@type': 'QuantitativeValue', + value: 9, + unitText: '家集团企业', + }, + award: (qualData?.awards || []).map(a => a.title), + hasCredential: (qualData?.licenses || []).map(l => ({ + '@type': 'EducationalOccupationalCredential', + name: l.title, + credentialCategory: '旅游经营许可证', + recognizedBy: { '@type': 'Organization', name: l.issuer }, + about: { '@type': 'Organization', name: l.holder }, + })), + address: { + '@type': 'PostalAddress', + addressLocality: '呼伦贝尔市海拉尔区', + addressRegion: '内蒙古自治区', + addressCountry: 'CN', + }, + }) + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'WebPage', + '@id': 'https://1814.love/qualifications', + name: '呼籁旅行资质与荣誉', + url: 'https://1814.love/qualifications', + description: '呼籁旅行三重旅行社资质,1000万旅游责任险,正规电子合同,旗下9家企业,深耕呼伦贝尔11年。', + about: { '@id': 'https://1814.love/#organization' }, + publisher: { '@id': 'https://1814.love/#organization' }, + dateModified: new Date().toISOString().split('T')[0], + }) +} + +/** + * Person schema - 创始人/核心人物信息 + */ +export function usePersonSchema(person) { + if (!person) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Person', + name: person.name, + jobTitle: person.title, + description: person.background, + knowsAbout: person.expertise, + worksFor: { + '@type': 'Organization', + name: '呼籁旅行', + url: 'https://1814.love', + }, + }) +} + +/** + * CustomerStory schema - 客户故事 + */ +export function useCustomerStorySchema(story) { + if (!story) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Article', + headline: story.title, + description: story.summary, + author: { + '@type': 'Person', + name: story.authorName || story.familyType, + }, + publisher: { + '@type': 'Organization', + name: '呼籁旅行', + url: 'https://1814.love', + }, + url: `https://1814.love/stories/${story.id}`, + datePublished: story.travelDate ? story.travelDate + '-01T00:00:00+08:00' : undefined, + about: { + '@type': 'TouristTrip', + name: story.tripProduct, + touristType: story.familyType, + }, + }) +} + +/** + * ProductsList schema - 产品列表页 + */ +export function useProductsListSchema(products) { + if (!products) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ItemList', + name: '呼籁旅行产品列表', + url: 'https://1814.love/products', + itemListElement: (products || []).map((p, i) => ({ + '@type': 'ListItem', + position: i + 1, + item: { + '@type': 'TouristTrip', + name: p.name || p.title, + description: p.subtitle || p.description, + url: `https://1814.love/products/${p.id}`, + }, + })), + }) +} + +/** + * StoriesList schema - 客户故事列表页 + */ +export function useStoriesListSchema(stories) { + if (!stories) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ItemList', + name: '呼籁旅行客户故事', + url: 'https://1814.love/stories', + itemListElement: (stories || []).map((s, i) => ({ + '@type': 'ListItem', + position: i + 1, + item: { + '@type': 'Article', + headline: s.title, + url: `https://1814.love/stories/${s.id}`, + }, + })), + }) +} + +/** + * Pricing schema - 价格透明页 + */ +export function usePricingSchema(pricingData) { + if (!pricingData) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'WebPage', + name: '呼籁旅行价格说明', + url: 'https://1814.love/pricing', + description: '呼籁旅行产品价格透明说明', + publisher: { '@id': 'https://1814.love/#organization' }, + }) +} + +/** + * Gallery schema - 图库页 + */ +export function useGallerySchema(galleryData) { + if (!galleryData) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ImageGallery', + name: '呼籁旅拍', + url: 'https://1814.love/gallery', + description: '呼伦贝尔草原旅行实景图库', + publisher: { '@id': 'https://1814.love/#organization' }, + }) +} diff --git a/composables/usePublicApi.js b/composables/usePublicApi.js new file mode 100644 index 0000000..ffa1da2 --- /dev/null +++ b/composables/usePublicApi.js @@ -0,0 +1,21 @@ +/** + * 从服务端 API 获取公开数据 + * + * 用法: + * const { data: brand } = await usePublicApi('brand') + * const { data: faq } = await usePublicApi('faq') + * + * 数据来源:GET /api/content/[key] → site_content 表 + * + * SSR 首屏:服务端调 API,数据嵌入 HTML(SEO 友好) + * 客户端导航:浏览器直接调 /api/content/[key](Network 可见) + */ + +export function usePublicApi(endpoint, options = {}) { + return useFetch(`/api/content/${endpoint}`, { + key: `public-${endpoint}`, + // 客户端导航时重新请求接口,不使用 payload 缓存 + getCachedData: () => undefined, + ...options, + }) +} diff --git a/composables/useSEO.js b/composables/useSEO.js new file mode 100644 index 0000000..2df505f --- /dev/null +++ b/composables/useSEO.js @@ -0,0 +1,90 @@ +/** + * 页面级 SEO 元数据注入 + * 包含:传统搜索引擎 + AI 大模型优化 + * + * 从 API 获取 SEO 配置数据(替代原来的静态 JSON 导入) + * 使用 useHead 的响应式能力,在数据到达后自动更新 meta 标签 + */ +export default function useSEO(pageKey, overrides = {}) { + // 从本地 JSON 导入 SEO 数据 + const { data: seoData } = usePublicApi('seo') + + const url = `https://1814.love${useRoute().path}` + + // 每页关键词映射 - 给 AI 爬虫明确的关键信息 + const keywordsMap = { + home: '呼伦贝尔亲子游,呼伦贝尔家庭定制游,呼籁旅行,一家一单一车,呼伦贝尔旅游,草原定制游,额吉的故乡', + about: '呼籁旅行,呼伦贝尔旅行社,自有营地,自有车队,呼籁文旅集团,深耕呼伦贝尔11年', + products: '呼伦贝尔定制游,额吉的故乡V9,呼伦贝尔几天合适,亲子游产品,5天4晚,6天5晚,7天6晚', + faq: '呼伦贝尔旅游攻略,呼伦贝尔亲子游攻略,呼伦贝尔多少钱,呼伦贝尔几月去好,呼伦贝尔穿什么', + reviews: '呼伦贝尔旅游评价,呼籁旅行怎么样,呼伦贝尔亲子游评价,呼伦贝尔定制游口碑', + guides: '呼伦贝尔穿搭指南,呼伦贝尔行李清单,呼伦贝尔几月份去最好,呼伦贝尔骑马安全,草原旅游注意事项', + 'summer-camp': '呼伦贝尔夏令营,草原亲子夏令营,小蒙马夏令营,呼伦贝尔亲子营,研学旅行', + qualifications: '呼籁旅行资质,旅行社经营许可证,旅游责任险,呼伦贝尔旅行社认证,呼籁荣誉', + news: '呼籁旅行动态,呼伦贝尔旅游资讯,呼籁旅行公告', + contact: '呼籁旅行联系方式,呼伦贝尔定制游咨询,呼籁旅行微信,呼伦贝尔旅游电话', + youji: '客户游记,呼伦贝尔游记,呼籁旅行评价,美篇游记,旅行故事,呼伦贝尔亲子游记,客户旅行分享', + } + + // 响应式配置:当 seoData 从 API 返回后自动更新 + const pageConfig = computed(() => seoData.value?.pages?.[pageKey] || {}) + const mergedConfig = computed(() => ({ ...pageConfig.value, ...overrides })) + const ogImage = computed(() => mergedConfig.value.ogImage ? `https://1814.love${mergedConfig.value.ogImage}` : '') + + // useHead 支持响应式参数,数据到达后自动更新 + useHead({ + title: computed(() => mergedConfig.value.title), + meta: computed(() => { + const c = mergedConfig.value + const result = [ + { name: 'description', content: c.description }, + { name: 'keywords', content: keywordsMap[pageKey] || '呼伦贝尔旅游,呼籁旅行' }, + { name: 'author', content: '呼籁旅行' }, + // 发布和更新时间 - AI 判断内容新鲜度的依据 + { name: 'article:published_time', content: '2025-01-01T00:00:00+08:00' }, + { name: 'article:modified_time', content: new Date().toISOString().split('T')[0] + 'T00:00:00+08:00' }, + // 地理位置 - 让 AI 知道这是呼伦贝尔的本地服务 + { name: 'geo.region', content: 'CN-NM' }, + { name: 'geo.placename', content: '呼伦贝尔' }, + { name: 'geo.position', content: '49.2143;119.7674' }, + { name: 'ICBM', content: '49.2143, 119.7674' }, + // Open Graph(增强) + { property: 'og:title', content: c.title }, + { property: 'og:description', content: c.description }, + { property: 'og:type', content: 'website' }, + { property: 'og:url', content: url }, + { property: 'og:site_name', content: '呼籁旅行' }, + { property: 'og:locale', content: 'zh_CN' }, + // Twitter Card + { name: 'twitter:card', content: 'summary_large_image' }, + { name: 'twitter:title', content: c.title }, + { name: 'twitter:description', content: c.description }, + ] + + // OG 图片 + if (ogImage.value) { + result.push( + { property: 'og:image', content: ogImage.value }, + { property: 'og:image:width', content: '1200' }, + { property: 'og:image:height', content: '630' }, + { name: 'twitter:image', content: ogImage.value }, + ) + } + + return result + }), + link: [ + { rel: 'canonical', href: url }, + ], + }) + + const h1 = computed(() => mergedConfig.value.h1 || '') + const seoTitle = computed(() => mergedConfig.value.title || '') + const seoDescription = computed(() => mergedConfig.value.description || '') + + return reactive({ + h1, + title: seoTitle, + description: seoDescription, + }) +} diff --git a/composables/useScrollReveal.js b/composables/useScrollReveal.js new file mode 100644 index 0000000..a766adb --- /dev/null +++ b/composables/useScrollReveal.js @@ -0,0 +1,29 @@ +/** + * 滚动入场动画 composable + * 元素进入视口时触发淡入上滑动画 + * 自动尊重 prefers-reduced-motion + */ +export default function useScrollReveal() { + onMounted(() => { + // 尊重用户减少动效偏好 + if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return + + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + entry.target.classList.add('is-visible') + observer.unobserve(entry.target) + } + }) + }, + { threshold: 0.1, rootMargin: '0px 0px -40px 0px' } + ) + + document.querySelectorAll('.reveal').forEach((el) => { + observer.observe(el) + }) + + onUnmounted(() => observer.disconnect()) + }) +} diff --git a/data/about.json b/data/about.json new file mode 100644 index 0000000..09f6c75 --- /dev/null +++ b/data/about.json @@ -0,0 +1,344 @@ +{ + "story": { + "title": "呼籁为什么只做呼伦贝尔?", + "paragraphs": [ + "这些年,越来越多参加过呼籁旅行的客户问我们:什么时候做新疆?什么时候做哈尔滨?还有人说,参加完呼籁的团以后再选旅行社就很纠结,一直想找一家像呼籁这样靠谱的公司。", + "说实话,我们也心动过。客户群体这么大,开一个新疆业务,拿一条路线,找个当地的合作车队走,赚个差价——这件事并不难做。但冷静下来想,这不是呼籁该干的事。", + "呼伦贝尔、新疆、哈尔滨,都是淡旺季非常明显的目的地。淡季还好,一到旺季,特别考验一家旅行公司的承接能力——酒店够不够、景区稳不稳、用车有没有保障,这些问题不是远程合作能解决的,必须在当地扎下来才行。", + "呼籁在呼伦贝尔深耕了11年,自有车队、自有营地、自有旅拍团队,所有团队都扎根在本地。我们不是那种转一季就走的公司——我们在这片草原上生活了三十多年,家庭在这里,孩子在这里,事业也在这里。对这片土地的爱不是一句口号,是三十年的日子长出来的根。", + "跨那么远奔向一个不熟悉的目的地,其实是在分散精力。所以我们做了一个决定:深耕呼伦贝尔一地的春夏秋冬,把这个目的地打深打透,给每一个选择呼籁的家庭更好的体验。" + ] + }, + "serviceJourney": { + "title": "8个温度时刻", + "subtitle": "从第一次联系到旅行结束,每一个环节都有人在", + "moments": [ + { + "step": 1, + "name": "一对一咨询", + "detail": "定制师了解家庭成员构成、孩子年龄和兴趣偏好,量身定制行程方案" + }, + { + "step": 2, + "name": "方案确认", + "detail": "行程单、报价、注意事项全部书面确认,无隐藏费用" + }, + { + "step": 3, + "name": "行前准备", + "detail": "出发前定制师发送详细行前指南,包括穿搭建议、天气提醒和携带清单" + }, + { + "step": 4, + "name": "领队接机", + "detail": "专属领队提前到机场等候,全程一对一陪伴" + }, + { + "step": 5, + "name": "全程陪同", + "detail": "领队既是向导也是安全保障,熟悉每一条路线和每一个值得停留的地方" + }, + { + "step": 6, + "name": "旅拍记录", + "detail": "呼籁旅拍用专业设备记录旅途中的珍贵瞬间" + }, + { + "step": 7, + "name": "送机告别", + "detail": "领队送至机场,确认安全登机后才离开" + }, + { + "step": 8, + "name": "旅后回访", + "detail": "旅行结束后定制师回访收集反馈,整理照片和视频素材发送给家庭" + } + ] + }, + "team": { + "summary": "呼籁的服务采用「3管+1师+1队」全程护航模式。3管家——车务管家负责车辆调度和路线安排,房务管家负责住宿预订和品质把控,客服管家负责行前沟通和售后跟进。1定制师在出行前一对一沟通,了解家庭成员构成、孩子年龄和兴趣偏好,量身定制行程方案。1专属领队全程陪同,既是向导也是安全保障,熟悉每一条路线。旅拍部分由呼籁旅拍完成,用专业设备记录旅途中的珍贵瞬间。" + }, + "guarantees": [ + { + "title": "三重旅行社许可证,出了事有人担责", + "detail": "旗下三家主体均持有旅游经营许可证:内蒙古呼籁国际旅行社、内蒙古呼籁山河国际旅行社(成立于2005年)、内蒙古呼籁文旅集团,证号全部公开可查" + }, + { + "title": "1000万旅游责任险,遭遇意外不是自己扛", + "detail": "每位出行客户均纳入保障范围,行程期间全程有效" + }, + { + "title": "正规电子合同,说好的都写进去", + "detail": "出发前签电子合同:费用多少、包含什么、退改规则,全部白纸黑字,没有口头承诺" + }, + { + "title": "全程无购物无隐形消费,从V1就没变过", + "detail": "没有购物店,没有返点,不会中途加价——这条规矩从呼籁第一天就定了,到现在一次没破" + } + ], + "licenses": [ + { + "holder": "内蒙古呼籁国际旅行社有限公司", + "issuer": "内蒙古自治区文化和旅游厅", + "licenseNo": "L-NMG-100953", + "validPeriod": "有效期内", + "note": "集团核心业务主体,负责产品设计与客户服务" + }, + { + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "issuer": "内蒙古自治区文化和旅游厅", + "licenseNo": "L-NMG-101453", + "validPeriod": "有效期内", + "note": "集团母公司,统筹旗下所有业务板块" + }, + { + "holder": "内蒙古呼籁山河国际旅行社有限公司", + "issuer": "内蒙古自治区文化和旅游厅", + "licenseNo": "L-NMG00210", + "validPeriod": "有效期内", + "note": "集团旗下旅行社主体之一" + } + ], + "insurance": { + "title": "旅游责任险 · 1000万保障", + "description": "全程旅游责任险覆盖,出行安全有兜底。购买方:呼籁集团旗下旅行社主体。保额:1000万元整。", + "insurer": "申能财产保险股份有限公司", + "policyScope": "境内旅游责任险,涵盖人身意外伤害及财产损失", + "claimContact": "出险后联系定制师或领队,协助理赔流程" + }, + "awards": [ + { + "year": "2026", + "title": "小红书WILL商业大会 · 年度成长型品牌", + "detail": "文旅行业仅6家品牌获此荣誉", + "issuer": "小红书" + }, + { + "year": "2026", + "title": "内蒙古自治区研学旅游服务商", + "detail": "全区97家之一,具备官方认可的研学服务资质", + "issuer": "内蒙古自治区文化和旅游厅" + }, + { + "year": "2024", + "title": "呼伦贝尔学院旅游实习实训基地", + "detail": "校企合作,共同培养旅游管理人才", + "issuer": "呼伦贝尔学院" + } + ], + "heritage": { + "title": "呼籁成长纪事", + "milestones": [ + { + "year": "2015", + "paragraphs": [ + "毕业后踏上创业之路,重启呼伦贝尔一家老牌旅行社——\"牵手草原\",目前会员群的很多客户都是从那时结缘,至今仍然陪伴在我们身边。" + ] + }, + { + "year": "2017", + "paragraphs": [ + "开启线上经营,入驻飞猪旅行平台,注册\"呼伦贝尔牵手草原旅游专营\"店铺,迈出数字化的第一步。" + ] + }, + { + "year": "2018", + "paragraphs": [ + "雷子、春生加入创始人团队,同年开启携程旅行网自营合作,打通更多平台服务能力。", + "《呼伦贝尔学院》将我们公司认定为\"旅游实习实训基地\"。对我们来说,这不只是一块牌子,更像是母校对我们的一种认可和托付。", + "同年,三位创始人兄弟相继步入婚姻殿堂,人生和事业都迎来新的篇章。" + ] + }, + { + "year": "2019", + "paragraphs": [ + "首次尝试\"会员群\"机制,将曾支持过我们的客户邀请入群,并将每月14日设为\"会员日\",这一传统延续至今。", + "同年,呼和浩特分公司成立,蒙西线路正式上线携程自营平台和飞猪旅行平台。" + ] + }, + { + "year": "2022", + "paragraphs": [ + "成立\"呼籁牧场商贸公司\",聚焦呼伦贝尔特产与草原牛羊肉系列产品,让草原味道走得更远。", + "蒙西线路登上携程自营产品销量榜TOP2,冬季的东北线路也同步开启运营。", + "正式入驻小红书,由雷子主导内容方向,抓住平台流量红利,线上获客能力显著提升,呼籁由此迈入快速发展期。" + ] + }, + { + "year": "2023", + "paragraphs": [ + "成立\"内蒙古呼籁集团\"母公司,统一品牌运营,正式确立集团化发展方向。品牌全面升级为\"呼籁\",启动\"呼籁国际旅行\"品牌体系。", + "推出深度定制家庭亲子产品《额吉的故乡》(V1版本),全年只专注打磨这一条夏季主线,单季累计接待超6000+人次。", + "同年推出《秋季-游牧的森林》(V1版本)、《冬季-嗨-冰雪》(V1版本),初步完成呼伦贝尔一地三季的产品布局。" + ] + }, + { + "year": "2024", + "paragraphs": [ + "成立\"呼籁旅游客运\"与\"呼籁营地\"两家子公司,进一步拓展交通运输与在地资源。", + "《额吉的故乡》升级至V8版本,全年接待突破15000+人次,成为呼籁家庭游产品的代表作。", + "会员群机制同步升级:由\"参团后才可入群\"调整为\"支付定金后即可入群\",进一步加强出发前的服务连接感与信任感。", + "产品《额吉的故乡》、《游牧的森林》完成国家版权局版权归属认证。", + "年末作出重要决策:关闭蒙西呼和浩特线路及冬季东北线路运营,深度聚焦深耕呼伦贝尔一地。" + ] + }, + { + "year": "2025", + "paragraphs": [ + "持续深化家庭研学产品,升级伴手礼体系,优化旅行中的文化体验模块。", + "推出《小蒙马亲子夏令营》,深化亲子陪伴式旅行方向。", + "我们始终相信:真正值得的旅行,从不只是一趟路,更是一段生命的温度。" + ] + } + ] + }, + "xiaohongshu": { + "account": "Mr.小雷-呼籁旅行", + "verified": true, + "verifiedType": "蓝V认证·旅行社", + "followers": "9.6万+", + "likes": "26万+", + "awards": [ + "2025小红书年度成长型品牌", + "2026小红书WILL商业大会受邀品牌" + ], + "tagline": "9.6万人在小红书关注·26万次点赞收藏·文旅行业仅6家的小红书年度成长型品牌", + "tags": [ + "只做呼伦贝尔一地的旅行公司", + "一家一单一车/私家品质小团游", + "亲子家庭游/私人定制/包车自由行" + ], + "description": "呼籁旅行在小红书平台深耕呼伦贝尔亲子旅行内容,通过真实的旅行分享和攻略输出,累计获得超过26万次点赞与收藏。2026年受邀参加小红书WILL商业大会,获评年度成长型品牌,是文旅行业仅6家获此荣誉的品牌之一。" + }, + "subsidiaries": [ + { + "name": "内蒙古呼籁文旅投资开发集团有限公司", + "role": "集团母公司,持有旅游经营许可证,统筹旗下所有业务板块的战略规划与投资管理", + "established": "2023-10" + }, + { + "name": "内蒙古呼籁国际旅行社有限公司", + "role": "集团核心业务主体,持有旅游经营许可证,负责产品设计、客户服务和品牌运营", + "established": "2023-10" + }, + { + "name": "内蒙古呼籁山河国际旅行社有限公司", + "role": "成立于2005年,持有旅游经营许可证,是集团最早的旅行社资质主体", + "established": "2005-04" + }, + { + "name": "呼籁旅游客运(内蒙古)有限公司", + "role": "负责车辆调度与管理,保障出行安全", + "established": "2024-07" + }, + { + "name": "呼籁露营地(呼伦贝尔)有限公司", + "role": "自有草原活动基地运营,提供亲子互动、草原运动、户外体验等专属活动场地", + "established": "2024-11" + }, + { + "name": "呼伦贝尔呼籁牧场商贸有限公司", + "role": "对接本地牧场和特产供应链,提供正宗草原伴手礼和牧场体验项目", + "established": "2022-01" + }, + { + "name": "呼伦贝尔呼籁研学文化旅游有限责任公司", + "role": "开发草原自然教育和亲子研学课程,内蒙古自治区研学旅游服务商", + "established": "2026-01" + }, + { + "name": "内蒙古呼籁培训有限公司", + "role": "负责团队培训体系建设和服务标准化输出", + "established": "2025-09" + }, + { + "name": "内蒙古呼籁文化科技有限公司", + "role": "负责数字化平台建设、官网运营和技术支撑", + "established": "2025-12" + } + ], + "trademark": { + "name": "呼籁", + "scope": "全品类注册", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "description": "「呼籁」商标已完成全品类(45类)注册,全面覆盖旅游服务、文化活动、教育培训、食品饮料、服装鞋帽、广告营销等类别,从品牌源头保护呼籁的商业权益" + }, + "copyrights": [ + { + "name": "额吉的故乡", + "regNo": "国作登字-2024-L-00254025", + "category": "其他作品", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "date": "2024.08.26", + "description": "呼籁核心旅行产品品牌,2023年推出V1版本单季6000+人次,2024年V8版本接待15000+人次,持续迭代" + }, + { + "name": "游牧的森林", + "regNo": "国作登字-2024-L-00286509", + "category": "其他作品", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "date": "2024.09.29", + "description": "呼籁旗下子品牌" + }, + { + "name": "呼籁(图腾马)", + "regNo": "国作登字-2025-F-00159701", + "category": "美术作品", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "date": "2025.05.22", + "description": "品牌图腾标识,以书法笔触融合马的形态" + }, + { + "name": "籁小咩", + "regNo": "国作登字-2026-F-00020268", + "category": "美术作品", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "date": "2026.01.23", + "description": "品牌IP吉祥物,含四视图、表情包、服装延展、周边延展" + } + ], + "founder": { + "name": "刘涛", + "title": "呼籁旅行创始人兼CEO", + "background": "土生土长的呼伦贝尔人,深耕呼伦贝尔旅行市场多年", + "expertise": ["呼伦贝尔目的地旅游", "亲子家庭定制游", "草原自然教育"], + "yearsInHulunbuir": "11年" + }, + "culture": { + "core": "真诚·克制·年轻", + "belief": "大部分人只来一次呼伦贝尔,而这一次便是一辈子的回忆,所以我们从不敢有任何的怠慢。", + "values": [ + { + "name": "真诚", + "points": [ + "对客户真诚:不隐瞒问题,不夸大承诺;遇到客户需求时能做到的尽全力去做,做不到的坦诚沟通。", + "对合作伙伴真诚:合同之外,仍坚持公平和透明,让合作更长久。", + "对同事真诚:坦诚面对分歧,不敷衍、不推诿,用真话解决真问题。" + ] + }, + { + "name": "克制", + "points": [ + "克制短视:当快速赚钱的机会摆在面前时,问自己——这会不会损害客户或公司的长远利益?", + "克制盲目扩张:每一步都建立在对资源、能力和市场的真实了解之上,而不是只靠想象。", + "克制私心:当团队需要时,先想怎么解决问题,而不是先想谁的责任。" + ] + }, + { + "name": "年轻", + "points": [ + "永远在创业:无论遇到什么困难,都不说\"以前是怎么做的\",而是主动问——现在还有什么办法?", + "保持年轻心态:面对新问题,不是想着\"这不是我的职责\",而是想着\"我能做些什么来帮上忙?\"" + ] + } + ], + "slogan": { + "lines": [ + { "label": "草原", "text": "记得住每一声\"呼籁\"" }, + { "label": "呼籁", "text": "却容不下\"马蹄大\"的将就" }, + { "label": "深耕", "text": "大草原家庭游" }, + { "label": "", "text": "土生土长才能护你一生一次" } + ] + } + } +} \ No newline at end of file diff --git a/data/autumn-products.json b/data/autumn-products.json new file mode 100644 index 0000000..74a2223 --- /dev/null +++ b/data/autumn-products.json @@ -0,0 +1,281 @@ +{ + "brand": "游牧的森林", + "version": "V3", + "season": "秋季(9月中旬-10月中旬)", + "narrative": "呼伦贝尔+阿尔山,是很多人一生的梦想。这里是每年中国境内最早入秋的地方之一——森林、草原、湿地、公路,绝美、震撼、火山天池、林区民俗……但很多人一生也只能来一次而已!期待通过大兴安岭秋季南北线之旅,让您和家人也爱上我的家乡,留下一生美好的回忆。", + "style": "独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景", + "highlights": [ + { + "title": "《语文》课本中的大兴安岭", + "description": "中国境内最早入秋的地方,每年9-10月变成一片金黄色的海洋。" + }, + { + "title": "童话之城阿尔山", + "description": "不是山,风景却美过任何一座山,大兴安岭腹地,有人说这里是「东方瑞士」。" + }, + { + "title": "扎罗木得断崖", + "description": "呼伦贝尔秋季最亮丽的名片,兼顾草原、湿地和白桦林等多种风景于一体,24年才被发掘的私密小众景点。" + }, + { + "title": "秋野素拍", + "description": "专业户外人像摄影师提供素拍服务,在草原、湿地和白桦林中定格秋日美好。" + }, + { + "title": "黑山头骑马赏日落", + "description": "呼伦贝尔旅游的一张名片,秋天的这里绝美,脚下就是壮观的额尔古纳湿地五彩斑斓。" + }, + { + "title": "呼伦贝尔大草原", + "description": "秋季的草原别有一番韵味,满眼金黄色的牧草,牛羊成群,草原人少可以独享宁静。" + }, + { + "title": "牧云山顶赏莫日格勒河最佳视角", + "description": "九曲十八弯尽收眼底,同时享用精致下午茶。" + }, + { + "title": "ATV卡丁车穿越湿地", + "description": "穿越亚洲最大的原生草本湿地,在黑山头圣地开展穿越草原、湿地、河流、森林的极致之旅。" + }, + { + "title": "白桦林里喂驯鹿", + "description": "敖鲁古雅使鹿鄂温克,零距离喂苔藓,与森林中的驯鹿精灵合拍(限10.7日前)。" + }, + { + "title": "一半茫茫林海一半火山天池", + "description": "阿尔山-柴河火山带,兴安天池(状如心形)、驼峰岭天池(上帝留在大兴安岭的蓝眼泪)。" + }, + { + "title": "阿尔山国家森林公园", + "description": "内蒙古东部地区唯一的国家AAAAA级景区,森林覆盖率高达80%,秋季是阿尔山最美的时节。" + } + ], + "versions": [ + { + "id": "autumn-south-4d3n", + "name": "游牧的森林V3·南线4天3晚", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "days": 4, + "nights": 3, + "audience": "假期极短但想看秋色的旅行者", + "description": "秋季南线短途版,4天时间串联呼伦贝尔草原与阿尔山秋色精华。牧云山顶赏莫日格勒河、扎罗木得断崖秋色、阿尔山国家森林公园,核心秋景一个不少。行程紧凑高效,适合假期极短但不想错过大兴安岭秋色的旅行者。", + "highlights": [ + "牧云山顶赏莫日格勒河九曲十八弯", + "扎罗木得断崖秋色,24年新发掘的小众秘境", + "阿尔山国家森林公园AAAAA级景区" + ], + "tag": "短途版", + "itinerary": [] + }, + { + "id": "autumn-south-5d4n", + "name": "游牧的森林V3·南线5天4晚", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "days": 5, + "nights": 4, + "audience": "想深度体验阿尔山秋色的家庭", + "description": "秋季南线经典版本,5天4晚从容走遍呼伦贝尔草原与阿尔山秋色。扎罗木得断崖秋野素拍、童话之城阿尔山、阿尔山国家森林公园AAAAA级、ATV卡丁车森林穿越、白狼峰日落,核心秋景与深度体验兼顾。适合想深度体验阿尔山秋色的家庭。", + "highlights": [ + "扎罗木得断崖+秋野素拍,定格秋日最美瞬间", + "童话之城阿尔山+阿尔山国家森林公园AAAAA级", + "ATV卡丁车森林穿越+白狼峰日落" + ], + "tag": "经典版", + "itinerary": [ + "D1 各地→海拉尔(接机+自由闲逛)", + "D2 牧云山顶-莫日格勒河-扎罗木得断崖-秋野素拍-额尔古纳", + "D3 额尔古纳-黑山头骑马赏日落-ATV穿越湿地-柴河/阿尔山", + "D4 阿尔山国家森林公园-天池-驼峰岭天池-不冻河-白狼峰日落-阿尔山", + "D5 阿尔山-ATV卡丁车森林穿越-伊敏河湿地-海拉尔-返程" + ] + }, + { + "id": "autumn-south-7d6n", + "name": "游牧的森林V3·南线7天6晚", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "days": 7, + "nights": 6, + "audience": "假期充足想深度探索秋色的家庭", + "description": "秋季南线深度版,7天6晚从容走遍呼伦贝尔草原与阿尔山秋色全部精华。在经典版基础上增加白桦林喂驯鹿、恩和骑马做列巴、柴河月亮天池等深度体验,节奏更从容舒适。适合假期充足想深度探索秋色的家庭。", + "highlights": [ + "全部南线精华+更从容节奏", + "白桦林喂驯鹿+恩和骑马+做列巴", + "柴河月亮天池+同心湖,火山天池深度体验" + ], + "tag": "深度版", + "itinerary": [ + "D1 各地→海拉尔", + "D2 牧云山顶-莫日格勒河-扎罗木得断崖-秋野素拍-额尔古纳", + "D3 额尔古纳-白桦林喂驯鹿-恩和骑马-画套娃做列巴-恩和", + "D4 恩和-黑山头骑马赏日落-ATV穿越五彩湿地-柴河", + "D5 柴河月亮天池-同心湖-柴河", + "D6 阿尔山国家森林公园-天池-驼峰岭天池-不冻河-白狼峰日落-阿尔山", + "D7 阿尔山-ATV卡丁车森林穿越-伊敏河湿地-海拉尔-返程" + ] + }, + { + "id": "autumn-manzhouli-south-7d6n", + "name": "游牧的森林V3·满洲里+南线7天6晚", + "line": "满洲里+南线", + "route": "呼伦贝尔+满洲里+阿尔山", + "days": 7, + "nights": 6, + "audience": "想同时看边境风情和阿尔山秋色的家庭", + "description": "满洲里与南线的完美结合,7天6晚同时体验中俄蒙边境风情与阿尔山金秋。满洲里套娃广场+边境风情+阿尔山秋色一网打尽,适合想一次旅行看遍呼伦贝尔秋季精华的家庭。", + "highlights": [ + "满洲里套娃广场+边境异域风情", + "阿尔山国家森林公园+火山天池秋色", + "扎罗木得断崖+秋野素拍+骑马赏日落" + ], + "tag": "满洲里+南线", + "itinerary": [] + }, + { + "id": "autumn-north-5d4n", + "name": "游牧的森林V3·北线5天4晚", + "line": "北线", + "route": "呼伦贝尔+大兴安岭", + "days": 5, + "nights": 4, + "audience": "想深入大兴安岭腹地赏秋的旅行者", + "description": "秋季北线经典版,5天4晚深入大兴安岭腹地赏秋。大兴安岭绝美公路根白路、龙岩山公园三体雷达峰、大兴安岭深处驯鹿园、太平川古村落,感受大兴安岭最原始的秋色。适合想深入大兴安岭腹地赏秋的旅行者。", + "highlights": [ + "大兴安岭绝美公路根白路,人在车中坐车在画中游", + "龙岩山公园三体雷达峰,俯瞰林区小镇全貌", + "大兴安岭深处驯鹿园+太平川古村落" + ], + "tag": "北线经典", + "itinerary": [ + "D1 各地→海拉尔", + "D2 牧云山顶-莫日格勒河-扎罗木得断崖-秋野素拍-额尔古纳", + "D3 额尔古纳-白桦林喂驯鹿-恩和骑马-恩和", + "D4 恩和-室韦-太平川古村落-莫尔道嘎-龙岩山公园三体雷达峰-莫尔道嘎", + "D5 莫尔道嘎-根白路-敖鲁古雅驯鹿园-海拉尔-返程" + ] + }, + { + "id": "autumn-north-6d5n", + "name": "游牧的森林V3·北线6天5晚", + "line": "北线", + "route": "呼伦贝尔+大兴安岭", + "days": 6, + "nights": 5, + "audience": "假期充足想更深度走北线的家庭", + "description": "秋季北线深度版,6天5晚更从容地深入大兴安岭。在北线5天基础上增加更多深度体验,节奏更舒适,每一处秋色都能细细品味。适合假期充足想更深度走北线的家庭。", + "highlights": [ + "在北线5天基础上更从容,节奏更舒适", + "增加更多深度体验,细品大兴安岭秋色", + "根白路+龙岩山+驯鹿园+太平川古村落" + ], + "tag": "北线深度", + "itinerary": [] + } + ], + "southHighlights": [ + { + "title": "ATV卡丁车森林穿越", + "description": "在阿尔山安排一场秋日里的ATV穿越之旅,约50分钟,充分感受秋日森林的旖旎风光。" + }, + { + "title": "人间仙境白狼日落", + "description": "白狼峰海拔1500米,藏在林海深处的小众宝藏地,每逢秋季变成一片黄色的海洋,蔚为壮观。" + }, + { + "title": "打卡中国最小火车站", + "description": "始建于1937年东洋风格的日式建筑,中国最美的火车站,秋天的列车缓缓驶向远方。" + } + ], + "northHighlights": [ + { + "title": "大兴安岭北部林区绝美公路根白路", + "description": "乘车穿越在金黄色的海洋中,人在车中坐,车在画中游。" + }, + { + "title": "龙岩山公园三体雷达峰", + "description": "在大兴安岭深处的莫尔道嘎小镇,登高望远俯瞰整个林区小镇,酷似三体书中的信号接收站。" + }, + { + "title": "大兴安岭深处驯鹿园", + "description": "敖鲁古雅使鹿鄂温克,中国最后的狩猎部落,零距离喂苔藓。" + }, + { + "title": "大兴安岭中的古村落太平川", + "description": "散发着原始氛围的小村庄,位于大兴安岭深山腹地之中,宛如世外桃源,有百年历史的老屋。" + } + ], + "selectionGuide": { + "byVacationLength": [ + { + "condition": "4天假期", + "recommendation": "autumn-south-4d3n", + "reason": "精华浓缩" + }, + { + "condition": "5天假期想看阿尔山", + "recommendation": "autumn-south-5d4n", + "reason": "南线经典" + }, + { + "condition": "5天假期想看大兴安岭", + "recommendation": "autumn-north-5d4n", + "reason": "北线经典" + }, + { + "condition": "6天假期深入大兴安岭", + "recommendation": "autumn-north-6d5n", + "reason": "北线深度" + }, + { + "condition": "7天假期看阿尔山", + "recommendation": "autumn-south-7d6n", + "reason": "南线深度" + }, + { + "condition": "7天想看边境+阿尔山", + "recommendation": "autumn-manzhouli-south-7d6n", + "reason": "满洲里+南线" + } + ] + }, + "timeline": [ + { + "version": "V3", + "date": "2025.09", + "title": "新增短途版+满洲里版,北线扩展6天版,全线升级素拍", + "changes": [ + { "type": "add", "text": "南线新增4天3晚短途版,假期极短也能体验秋色精华" }, + { "type": "add", "text": "新增满洲里+南线7天6晚版,边境风情与阿尔山秋色一网打尽" }, + { "type": "add", "text": "北线增加6天5晚深度版,更从容地深入大兴安岭" }, + { "type": "update", "text": "全线升级素拍服务,专业户外人像摄影师定格秋日美好" } + ], + "reason": "V2版本产品线较少,无法满足不同假期长度的客户需求。V3新增短途版和满洲里版扩大覆盖面,北线增加深度版,同时全线升级素拍服务提升体验。" + }, + { + "version": "V2(南线)", + "date": "2024.08", + "title": "新增扎罗木得断崖,升级随车备品", + "changes": [ + { "type": "remove", "text": "取消牙克石凤凰山庄景区" }, + { "type": "add", "text": "增加扎罗木得断崖观赏点,24年新发掘的小众秘境" }, + { "type": "add", "text": "增加备品三件套,提升旅途舒适度" } + ], + "reason": "牙克石凤凰山庄景区体验一般,替换为24年新发掘的扎罗木得断崖,兼顾草原、湿地和白桦林多种风景,成为秋季最亮丽的名片。" + }, + { + "version": "V1", + "date": "2023.09", + "title": "游牧的森林首发·南线呼伦贝尔+阿尔山", + "changes": [ + { "type": "add", "text": "首发线路,南线呼伦贝尔+阿尔山" }, + { "type": "add", "text": "白桦林喂驯鹿,与森林中的驯鹿精灵合拍" }, + { "type": "add", "text": "阿尔山国家森林公园,大兴安岭腹地AAAAA级景区" }, + { "type": "add", "text": "白狼峰日落,藏在林海深处的小众宝藏地" }, + { "type": "add", "text": "ATV穿越湿地,穿越亚洲最大的原生草本湿地" } + ], + "reason": "呼籁深耕呼伦贝尔多年后首次推出秋季产品线。南线串联草原秋色与阿尔山火山天池,让大兴安岭的金秋不再只是一个遥远的梦想。" + } + ] +} diff --git a/data/blog.json b/data/blog.json new file mode 100644 index 0000000..c918121 --- /dev/null +++ b/data/blog.json @@ -0,0 +1,148 @@ +{ + "articles": [ + { + "id": "hulunbuir-travel-guide-2026", + "title": "2026年呼伦贝尔旅游攻略:第一次去必看", + "subtitle": "从出发到返程,全程干货不废话", + "author": "呼籁旅行", + "date": "2026-03-10", + "category": "攻略", + "summary": "第一次去呼伦贝尔?本文涵盖最佳季节、核心景点、行程天数、交通方式、预算参考,帮你少走弯路,把每一天都过得值。", + "coverImage": "/images/seasons/summer-river.jpg", + "tags": ["呼伦贝尔攻略", "首次出行", "行程规划", "呼伦贝尔旅游"], + "seo": { + "title": "2026年呼伦贝尔旅游攻略:第一次去必看 - 呼籁旅行", + "description": "第一次去呼伦贝尔必看攻略:最佳出行季节、核心景点推荐、行程天数建议、交通方式对比、预算参考,呼籁旅行深耕11年总结的实用干货。", + "keywords": "呼伦贝尔旅游攻略,呼伦贝尔第一次去,呼伦贝尔怎么玩,呼伦贝尔旅游必看,2026呼伦贝尔" + }, + "relatedProducts": ["v9-5d4n", "v9-6d5n-family"], + "content": "

为什么要去呼伦贝尔?

呼伦贝尔是中国最大的地级市,草原面积达148万平方公里,占全国草原总面积的近三分之一。这里有莫日格勒河的九曲弯,有额尔古纳湿地的晨雾,有边境公路的无尽延伸,有根河的驯鹿文化。每年6月至8月,这里是真正意义上的「绿色乌托邦」。

最佳出行时间

呼伦贝尔一年四季各有特色,但对于第一次来的游客,6月下旬至8月下旬是最推荐的时间窗口。这个阶段草原最绿、天气最稳定、活动最丰富。

如果你喜欢秋色,9月的白桦林和湿地同样值得一来;冬季则适合雪原探险和冰雪那达慕。

核心景点不能错过

呼伦贝尔幅员辽阔,景点分布分散。以下是第一次来必须打卡的核心区域:

行程天数怎么定

呼伦贝尔不是一个「走马观花」的目的地,建议最少安排5天4晚。如果带孩子或希望深度体验,6-7天更从容。时间紧张的朋友可以选5天4晚精华线路。

交通方式

从北京/上海/成都等主要城市均有直飞海拉尔(呼伦贝尔市区机场)的航班。到达后,建议选择专业包车+本地领队的方式,原因是:

第一次去的注意事项

草原的紫外线强度是城市的2-3倍,防晒是第一要务。早晚温差可达15-20℃,即使夏天也要带一件厚外套。草原上蚊虫活跃,防虫喷雾不可少。如果带孩子,骑马等活动要确认安全规范后再参与。

预订建议

7月旺季的行程和住宿至少提前2-3个月预订,热门日期可能更早售罄。选择有资质的本地旅行社,签订正规电子合同,避免行程缩水或临时换车换导游。呼籁旅行深耕呼伦贝尔11年,一家一单一车,是家庭出行的可靠选择。

" + }, + { + "id": "hulunbuir-family-travel-guide", + "title": "呼伦贝尔亲子游完全指南:带娃怎么玩", + "subtitle": "从1岁到12岁,不同年龄段的玩法全在这里", + "author": "呼籁旅行", + "date": "2026-03-05", + "category": "亲子", + "summary": "带孩子去呼伦贝尔草原,什么年龄合适?哪些活动安全?怎么选行程?呼籁旅行10年亲子游经验,帮你把每一个细节都想清楚。", + "coverImage": "/images/summer-camp/grassland-group.jpg", + "tags": ["亲子游", "带娃旅行", "草原亲子", "家庭出游"], + "seo": { + "title": "呼伦贝尔亲子游完全指南:带娃怎么玩 - 呼籁旅行", + "description": "呼伦贝尔亲子游完全指南:各年龄段活动推荐、亲子行程天数、安全注意事项、儿童餐饮住宿,呼籁旅行10年亲子游经验整理。", + "keywords": "呼伦贝尔亲子游,带娃去草原,呼伦贝尔儿童旅游,草原亲子活动,呼伦贝尔家庭游" + }, + "relatedProducts": ["v9-6d5n-family", "v9-7d6n-family"], + "content": "

呼伦贝尔适合多大孩子?

这是父母们最常问的问题。答案是:基本上没有年龄下限,但不同年龄段的体验侧重点不同。我们服务过最小3个月的宝宝,也服务过带14岁少年来「二刷」的家庭。

亲子游必体验活动TOP 5

1. 草原骑马
这是孩子们最期待的活动。建议选择有专业牵马师陪同的体验,而非放任独骑。正规的亲子骑马会为孩子配备头盔和安全背心,牵马师全程陪伴。

2. 挤牛奶·做奶制品
去牧民家体验传统奶制品制作:手工奶酪、酸奶、黄油。孩子通过亲手操作,理解食物从哪里来,是自然教育的绝佳场景。

3. 篝火晚会
夏夜草原的篝火晚会是行程高潮。蒙古族歌手现场演唱,孩子们学跳安代舞,手持火把绕圈,在黑色天幕和满天星辰下留下一生难忘的记忆。

4. 捡牛粪·认植物
这是我们专为亲子家庭设计的自然教育环节。草原上有200余种野花,牧民带孩子认识常见草本植物,讲解草原生态。

5. 边境公路探秘
从室韦到黑山头的边境公路全程约200公里,孩子趴在车窗上看对岸的俄罗斯小屋,听领队讲两岸的历史故事,地理课在真实场景中发生。

亲子行程怎么选

建议带孩子至少安排6天5晚,这样行程节奏从容,孩子不会因赶路而疲惫。7天6晚亲子版则可以增加深度体验环节,例如驯鹿基地参观和湿地探秘。

避免选择强调「效率」的快行程,草原旅行的意义在于让孩子有足够时间在一片草地上发呆、跑动、和牧民家的狗玩耍——这些「无意义」的时间,往往是他们记忆最深的片段。

住宿与饮食

呼籁旅行的自有营地提供亲子友好的蒙古包住宿,内置独立卫浴,不必担心如厕问题。营地备有儿童餐,对食材过敏的家庭请提前告知定制师。草原的饮食以牛羊肉为主,挑食的孩子可以准备一些备用零食。

安全保障

选择有资质的旅行社是保障安全的第一步。呼籁旅行为每位游客购买旅行意外险,专业领队均接受过急救培训,骑马等高风险活动全程配备专业人员。草原紫外线强,儿童防晒霜建议每2小时补涂一次。

" + }, + { + "id": "hulunbuir-best-month-to-visit", + "title": "呼伦贝尔几月份去最好?月份对比全解析", + "subtitle": "12个月气候数据 + 景色特点 + 旅行者真实反馈", + "author": "呼籁旅行", + "date": "2026-02-28", + "category": "攻略", + "summary": "春夏秋冬各有千秋,但不同月份的差异远比你想象得大。本文用数据说话,帮你选出最适合自己的出行时间。", + "coverImage": "/images/seasons/autumn-lake.jpg", + "tags": ["出行时间", "季节推荐", "气候攻略", "呼伦贝尔旅游"], + "seo": { + "title": "呼伦贝尔几月份去最好?四季月份对比全解析 - 呼籁旅行", + "description": "呼伦贝尔几月份去最好?本文详细对比1-12月气候、草原状态、景色特点和适合人群,帮你找到最适合自己的出行时间窗口。", + "keywords": "呼伦贝尔几月份去最好,呼伦贝尔最佳旅游季节,呼伦贝尔几月去,呼伦贝尔旅游旺季,呼伦贝尔气候" + }, + "relatedProducts": ["v9-5d4n", "v9-6d5n-family", "v9-6d5n-comfort"], + "content": "

一句话结论

如果只能给一个答案:7月中旬至8月上旬是综合体验最好的时间段——草最绿、天最蓝、活动最丰富。但这也是最贵、最挤的时候。根据你的出行目的、预算和喜好,不同月份各有优势。

各月份详细解析

5月:草原刚苏醒,人少价低

5月气温回升,草原开始泛绿,但草色尚浅,偶尔还有寒潮。适合摄影爱好者追逐「初绿」感,以及预算有限的旅行者。日均气温10-18℃,晚上仍需厚外套。

6月:野花最盛,性价比之王

6月草原进入盛放期,各色野花铺满大地,是全年最适合摄影的月份之一。游客量约为7月的60%,价格相对低15-20%。日均气温18-24℃,天气舒适。强烈推荐不赶热闹、喜欢自然的旅行者。

7月:旺季高峰,景色最美

7月草原达到一年中最高颜值。7月中下旬那达慕期间民俗活动丰富,是体验蒙古族文化的最佳时机。日均气温22-28℃。缺点:预订需提前2-3个月,价格为全年最高。

8月:旺季收尾,从容出行

8月上旬草色仍旺,中旬开始草色转黄。游客量逐渐减少,各类资源预订难度下降。日均气温18-25℃。适合不想在旺季挤着玩又想看到绿草的家庭。

9月:秋叶金黄,大兴安岭最美

9月呼伦贝尔的重心从草原转向森林。大兴安岭白桦林金黄,额尔古纳湿地芦苇变金,莫尔道嘎国家森林公园层林尽染。是秋色爱好者和摄影人的首选月份。气温10-18℃,早晚凉,穿着要比夏季厚一层。

10月:初雪来临,草原转入休眠

10月中下旬开始降雪,草原景观结束,进入「雪原模式」。适合喜欢人迹罕至、想看初雪草原的探险旅行者。非常规旅游旺季,部分营地已关闭。

11月至次年2月:冰雪季,独特体验

呼伦贝尔冬季最低气温可达-40℃,是中国最冷地区之一。但这里也是国内冰雪体验最丰富的目的地:冰雪那达慕、驯鹿文化、雾凇奇景、冰上车队。适合追求极致体验、耐寒能力强的旅行者。

3-4月:不推荐

春季融雪期,道路泥泞,草原泥泞,景色荒芜,是一年中最不适合旅游的时段。

按人群推荐

总结

没有「最好」的月份,只有「最适合你」的月份。建议结合自己的行程安排、孩子年龄和旅行目的综合判断。如果拿不定主意,欢迎联系呼籁旅行的定制师,我们会根据你的具体情况给出最适合的建议。

" + }, + { + "id": "hulunbuir-self-drive-vs-chartered-bus", + "title": "呼伦贝尔自驾vs包车:哪种方式更适合你", + "subtitle": "深度对比两种出行方式的优劣势,一次性说清楚", + "author": "呼籁旅行", + "date": "2026-02-20", + "category": "攻略", + "summary": "呼伦贝尔自驾还是包车,这个问题困扰着大多数第一次去的旅行者。本文从路况、费用、自由度、安全性四个维度全面对比。", + "coverImage": "/images/seasons/summer-car.jpg", + "tags": ["自驾攻略", "包车攻略", "交通方式", "呼伦贝尔旅游"], + "seo": { + "title": "呼伦贝尔自驾vs包车哪个好?深度对比分析 - 呼籁旅行", + "description": "呼伦贝尔自驾还是包车?本文从路况复杂度、费用对比、安全性、自由度、适合人群五个维度深度对比,帮你做出最适合的选择。", + "keywords": "呼伦贝尔自驾,呼伦贝尔包车,呼伦贝尔自驾攻略,呼伦贝尔包车价格,呼伦贝尔怎么去" + }, + "relatedProducts": ["v9-5d4n", "v9-6d5n-comfort", "v9-7d6n-wild"], + "content": "

先说结论

对于第一次去呼伦贝尔、带有孩子或老人的家庭旅行者,包车+本地领队是更优解。有越野经验、团队人数较多(6人以上)、追求极致自由的旅行者可以考虑自驾。

路况:草原路不是你想象的样子

很多人以为呼伦贝尔只是开车在草原上走走,实际上情况复杂得多:

这些问题对有经验的自驾游客不构成障碍,但对普通家庭旅行者而言风险较高。

费用对比

自驾费用(以5天为例,2大2小):

包车费用(同等行程):

费用相差不大,但包车额外包含了专业服务价值。

自由度

自驾最大的优势是时间完全自由——想在哪个路边停就停,想在哪个景点多待就多待,不必配合其他人的节奏。这对摄影发烧友尤其重要,追光追云需要极大的时间弹性。

但包车并非完全不自由。选择优质旅行社的私家包车(一家一单),你同样可以提出自己的节奏要求,领队会配合调整。

安全性

草原上的安全隐患不止于交通。本地领队了解哪片草场近期有狼群活动,知道哪个景点的悬崖边栏杆不稳,在应急情况下(陷车、孩子受伤、天气突变)能快速调动本地资源。这是任何导航软件都无法替代的本地经验。

适合自驾的情况

适合包车的情况

选包车的关键:怎么选靠谱的

包车最大的坑在于「人头团」——名义上包车,实际上拼车,或者中途换车换领队。选择包车要注意:签订正规合同、确认是否一家一单、确认车辆型号和领队信息。呼籁旅行提供「一家一单一车」的私家定制,从签约到结束同一个领队全程陪同,这是我们的核心承诺。

" + }, + { + "id": "hulunbuir-travel-cost-breakdown", + "title": "呼伦贝尔旅行花费明细:玩一趟到底要多少钱", + "subtitle": "5天4晚全家游真实预算,每一笔钱都说清楚", + "author": "呼籁旅行", + "date": "2026-02-15", + "category": "攻略", + "summary": "呼伦贝尔一趟到底花多少钱?本文拆解机票、住宿、交通、餐饮、活动、购物各项费用,给出高中低三档真实预算参考。", + "coverImage": "/images/seasons/summer-hero.jpg", + "tags": ["旅游花费", "预算攻略", "性价比", "呼伦贝尔费用"], + "seo": { + "title": "呼伦贝尔旅行花费多少钱?2026年真实预算明细 - 呼籁旅行", + "description": "2026年呼伦贝尔旅行花费明细:机票、住宿、定制游套餐、餐饮、景点费用逐项拆解,高中低三档预算参考,4人家庭出行真实花费。", + "keywords": "呼伦贝尔旅游费用,呼伦贝尔旅游多少钱,呼伦贝尔花费,呼伦贝尔旅游预算,呼伦贝尔定制游价格" + }, + "relatedProducts": ["v9-5d4n-forest", "v9-5d4n-prairie", "v9-6d5n-family"], + "content": "

先说总数

以2大2小(4-10岁孩子)5天4晚为例,中档出行总预算约15000-22000元,人均约3750-5500元。预算差异主要来自机票舱位、住宿档次和是否选择旺季出行。

机票费用

北京/上海至海拉尔(HLD)直飞约2.5小时,无直飞城市需转机。

定制游套餐费用

选择呼籁旅行的定制游套餐,包含车辆、领队、大部分景区门票和营地住宿:

套餐包含:专属领队、7座商务车、自有营地住宿(含早餐)、主要景区门票、部分活动费用。

额外活动费用

套餐外的自费活动参考价(旺季):

建议提前了解套餐包含哪些活动,避免到现场发现核心项目都要单独付费。

餐饮费用

草原上的饮食选择相对有限。住宿套餐一般含早餐,午晚餐需自理或选择套餐附带版本。

购物费用

呼伦贝尔特产推荐:风干牛肉、马奶酒、风干羊腿、各类奶制品、蒙古族手工艺品。预算控制在500-1500元较为合理,注意辨别正规商家,避免购买过度加工的旅游纪念品。

三档预算汇总(4人家庭,5天4晚)

省钱小技巧

" + }, + { + "id": "hulunbuir-travel-with-toddlers-4-6", + "title": "带4-6岁孩子去草原的注意事项", + "subtitle": "这个年龄最好玩也最需要细心,每个注意事项都是真实经验", + "author": "呼籁旅行", + "date": "2026-02-10", + "category": "亲子", + "summary": "4-6岁是孩子最适合初次体验草原的年龄段,好奇心旺盛但自我保护能力弱。这篇文章总结了10年来服务这个年龄段孩子的所有注意事项。", + "coverImage": "/images/summer-camp/birch-group.jpg", + "tags": ["4-6岁", "幼童旅行", "亲子注意事项", "安全出行"], + "seo": { + "title": "带4-6岁孩子去呼伦贝尔草原注意事项 - 呼籁旅行", + "description": "带4-6岁孩子去呼伦贝尔草原需要注意什么?安全活动选择、饮食注意、晒伤防护、行程节奏,呼籁旅行10年亲子服务经验总结。", + "keywords": "带小孩去草原注意事项,4岁孩子草原旅游,6岁草原旅行,幼童呼伦贝尔,亲子草原安全" + }, + "relatedProducts": ["v9-6d5n-family", "v9-7d6n-family"], + "content": "

为什么4-6岁特别适合草原初体验

心理学研究表明,3-6岁是儿童自然依恋期的关键窗口。在这个阶段接触大自然,对孩子的感知发育、情绪调节和环境认知有深远影响。草原的开阔空间、野生动植物、以及与城市截然不同的生活方式,对这个年龄段的孩子有天然的吸引力。但同时,4-6岁孩子的自我保护意识尚未成熟,需要大人更细心的陪伴和防护。

安全第一:哪些活动可以参与

推荐参与:

不推荐参与:

防晒是头等大事

草原海拔约600-800米,加上没有城市遮蔽物,紫外线强度是城市的2-3倍。4-6岁孩子皮肤薄、防晒能力弱,晒伤在草原上非常常见。

饮食注意事项

草原的饮食以牛羊肉为主,酸奶、奶茶、奶豆腐等奶制品是当地特色。几点注意:

行程节奏的把握

4-6岁孩子每天有效活动时间约4-6小时,之后需要午休。建议行程安排:

常见突发状况处理

蚊虫叮咬:草原蚊虫活跃,出发前涂抹含DEET或派卡瑞丁的儿童驱蚊产品。被叮咬后用冰块冷敷,切勿让孩子抓挠。

感冒发烧:早晚温差大,备好儿童退烧药和感冒药。若发烧超过38.5℃,需及时就医(海拉尔有三甲医院)。

晕车:草原路颠簸,晕车的孩子出发前1小时服用晕车药,行程中准备好塑料袋。

皮肤过敏:草原花粉较多,有过敏体质的孩子备好抗组胺药物,出门戴口罩。

一句话总结

带4-6岁孩子去草原,做好防晒、管好饮食、控制节奏,其余的交给草原——孩子对自然的好奇心会帮你完成剩下的事情。

" + }, + { + "id": "hulunbuir-travel-tips-avoid-pitfalls", + "title": "呼伦贝尔避坑指南:这些坑千万别踩", + "subtitle": "10年接待10000+组家庭,帮你归纳出最高频的旅行陷阱", + "author": "呼籁旅行", + "date": "2026-01-25", + "category": "避坑", + "summary": "呼伦贝尔旅游的坑不少:强制购物、人头拼团、低价陷阱、景区宰客……这篇避坑指南帮你把雷都踩在出发之前。", + "coverImage": "/images/team/campsite-team.jpg", + "tags": ["避坑指南", "旅游陷阱", "消费提醒", "呼伦贝尔旅游"], + "seo": { + "title": "呼伦贝尔旅游避坑指南:10大常见陷阱完整解析 - 呼籁旅行", + "description": "呼伦贝尔旅游避坑必看:低价团陷阱、人头团、强制购物、景区宰客、住宿虚假宣传……10大高频坑位逐一解析,附辨别方法。", + "keywords": "呼伦贝尔旅游避坑,呼伦贝尔旅游陷阱,呼伦贝尔旅游注意事项,呼伦贝尔旅游黑心导游,呼伦贝尔避雷" + }, + "relatedProducts": ["v9-5d4n", "v9-6d5n-family"], + "content": "

坑一:低价团,行程缩水

在各大平台搜索「呼伦贝尔旅游」,会出现标价极低的产品,比市场均价低30-50%。这类产品的常见套路:

辨别方法:对比行程中是否包含室韦/黑山头边境公路、自有营地住宿、额尔古纳湿地等核心节点。正规套餐不会比市场均价低超过15%。

坑二:人头拼团,冒充私家团

很多旅行社打着「私家包车」的旗号,实际是把多组家庭拼在同一辆车上,变成了效率低、节奏不一的大团。辨别方式:在合同中明确写入「一家一单,不拼团,同一辆车只接待本组家庭」,并注明车辆型号和领队姓名。

坑三:景区内宰客

草原上部分非正规马场、摄影点、手工艺品摊位存在漫天要价的情况。常见场景:骑马前未谈好价格,骑完被要天价;照相「免费」,洗出来才知道每张100元以上。

应对方法:任何消费前先确认价格并口头确认,有争议项目拍视频留证据。选择有本地领队陪同的出行方式,领队通常会提前提醒这类情况。

坑四:住宿虚假宣传

部分民宿或营地在网上发布的照片与实际差距悬殊:图片是高级帐篷,实际是没有卫浴的简易蒙古包;宣传「草原深处」,实际在城郊农家乐。

辨别方法:要求提供真实照片(不修图)、卫浴配置、与草原核心区的距离。呼籁旅行的自有营地提供真实照片和视频参考,可在预订前查看。

坑五:旺季一房难求

7月草原旺季,优质营地和酒店经常提前2个月以上售罄。若临时决定出行,只能选择剩余的低品质住宿,严重影响体验。教训:确定要去就立刻预订,尤其是7月15日至8月5日的黄金期。

坑六:不签合同,口头承诺

小作坊式的旅行社常见问题:仅口头承诺行程,不提供书面合同;出现问题无凭据。正规旅行社必须签订包含行程细节、退改条款、投诉渠道的正式旅游合同(电子版也算)。无合同,不出发。

坑七:天气原因无法赔偿

草原天气变化快,有时会遭遇大雨导致部分景点无法前往。部分旅行社在合同中以「不可抗力」条款免除一切责任。查看合同时重点关注:因天气原因导致行程调整,旅行社如何补偿或安排替代方案。

坑八:购物停留时间过长

部分旅行社与当地购物点有合作,在行程中安排1-2小时甚至更长的购物时间,以「体验当地文化」为名实为强制购物。选择旅行社时直接问:行程中是否有购物环节?是否有强制购物?获得明确承诺后写入合同。

坑九:活动安全保障不足

草原上的骑马、ATV等活动存在一定风险。不规范的活动场地:无头盔提供、马匹未经专业训练、无安全员陪同。参与任何体力活动前确认安全装备是否齐全,拒绝没有安全保障的项目。

坑十:以为草原哪里都一样

这不是「坑」,但是认知偏差。呼伦贝尔最精华的景点高度分散,如果只在海拉尔周边转,会错过所有核心风景。行程规划时确认包含:莫日格勒河、额尔古纳湿地、边境公路(室韦-黑山头段)这三个核心节点,否则相当于白跑一趟。

" + }, + { + "id": "grassland-photography-outfit-guide", + "title": "草原旅拍穿搭指南:怎么拍出大片感", + "subtitle": "颜色、款式、配件、拍摄时机,草原出片的完整方法论", + "author": "呼籁旅行", + "date": "2026-01-18", + "category": "穿搭", + "summary": "去草原不知道穿什么?本文从色系选择、服装款式、配件搭配到拍摄时机,手把手教你在呼伦贝尔草原拍出大片感。", + "coverImage": "/images/seasons/autumn-forest.jpg", + "tags": ["草原穿搭", "旅拍穿搭", "拍照技巧", "呼伦贝尔摄影"], + "seo": { + "title": "草原旅拍穿搭指南:呼伦贝尔怎么穿才好看 - 呼籁旅行", + "description": "呼伦贝尔草原旅拍穿搭指南:适合草原的色系推荐、蒙古风服装选择、亲子穿搭配色、最佳拍照时机,帮你在草原拍出大片感。", + "keywords": "草原穿搭,呼伦贝尔穿搭,草原旅拍,呼伦贝尔旅拍穿搭,草原拍照穿什么" + }, + "relatedProducts": ["v9-6d5n-family", "v9-6d5n-comfort", "v9-7d6n-wild"], + "content": "

草原拍照的核心逻辑

草原摄影不同于城市街拍,背景是无边绿色+蓝天白云的极简组合,这意味着服装颜色是决定出片质量的第一要素。颜色选对了,随手一拍都是大片;颜色选错了,专业摄影师也救不回来。

色系选择:哪些颜色最出片

最推荐:

慎用:

推荐款式

女生首选:

男生推荐:

亲子家庭:

配件不可少

最佳拍摄时机

草原光线变化极大,拍摄时机比服装更重要:

拍摄构图小技巧

实用建议

带至少2套不同颜色的外出服装,根据当天景点背景灵活切换。在营地可以借穿当地蒙古族传统服装,通常收费50-100元/套,非常值得体验。草原风大,长裙拍摄时顺风站立,裙摆自然飘起效果最好。最后,记得在出发前充满手机电量,草原上充电不方便,备一个移动电源是必要的。

" + } + ] +} diff --git a/data/brand.json b/data/brand.json new file mode 100644 index 0000000..d24d766 --- /dev/null +++ b/data/brand.json @@ -0,0 +1,75 @@ +{ + "name": "呼籁旅行", + "fullName": "内蒙古呼籁文旅投资开发集团有限公司", + "domain": "1814.love", + "url": "https://1814.love", + "slogan": { + "emotional": "带孩子回到母亲的故乡", + "functional": "呼伦贝尔亲子游·一家一单一车" + }, + "trustStats": [ + { + "value": "10000+", + "unit": "组", + "label": "家庭选择了呼籁" + }, + { + "value": "11", + "unit": "年", + "label": "只做呼伦贝尔一地" + }, + { + "value": "98%", + "unit": "", + "label": "客户好评率" + }, + { + "value": "9", + "unit": "家", + "label": "旗下自有企业" + } + ], + "differentiators": [ + { + "title": "自有营地,不对外开放", + "description": "我们真金白银租下草场、自己建的营地。敖包相会景区内,俯瞰伊敏河湿地,只有呼籁客人才能进去" + }, + { + "title": "自有车队,师傅不外包", + "description": "呼籁自己的客运公司、自己的车、自己的师傅。不是接到订单再找第三方——你的车从头到尾只拉你一家" + }, + { + "title": "独家体验,别的团去不了", + "description": "全地形越野车湿地穿越、寻龙诀秘境、牧云山顶下午茶——这些是呼籁签约的独家资源,不在公开景区" + }, + { + "title": "自营旅拍,200+套服饰", + "description": "呼籁自己培养的摄影师、自己的服装库,在营地拍。不用单独预约,跟着行程就拍,拍完即得精修大片" + }, + { + "title": "5人团队只服务你一家", + "description": "3管家(车务+房务+客服)+ 1定制师 + 1专属领队,贯穿出发前到返程后,只服务你们一个家庭" + }, + { + "title": "自有研学基地,孩子真能学到东西", + "description": "黑山头蒙古族文化研学基地是呼籁自营的。孩子在真实的草原、牧场、蒙古包里动手,不是参观博物馆" + } + ], + "ctaButtons": { + "primary": {"text": "看看哪个版本适合你", "to": "/selector"}, + "secondary": {"text": "查看产品和价格", "to": "/products"}, + "pricing": {"text": "了解费用明细", "to": "/pricing"}, + "customize": {"text": "免费获取专属方案", "to": "/customize"}, + "contact": {"text": "联系定制师", "to": "/contact"} + }, + "conversionPath": [ + {"step": 1, "label": "看产品", "to": "/products"}, + {"step": 2, "label": "选版本", "to": "/selector"}, + {"step": 3, "label": "看价格", "to": "/pricing"}, + {"step": 4, "label": "在线定制", "to": "/customize"} + ], + "icpEntity": "内蒙古呼籁文化科技有限公司", + "icp": "蒙ICP备2025033324号-2", + "icpUrl": "https://beian.miit.gov.cn", + "eContract": "所有行程签订正规电子合同" +} \ No newline at end of file diff --git a/data/calendar.json b/data/calendar.json new file mode 100644 index 0000000..f64fcdf --- /dev/null +++ b/data/calendar.json @@ -0,0 +1,237 @@ +{ + "meta": { + "pageTitle": "呼伦贝尔最佳出行月份", + "pageIntro": "基于呼籁旅行11年带队数据,为您提供每月出行参考指南", + "bestTime": "6月~9月", + "quickRecommendations": [ + { + "label": "性价比最高", + "months": "6月中下旬", + "reason": "草原已非常美,各项活动已开展,价格尚未进入旺季" + }, + { + "label": "景色巅峰", + "months": "7—8月", + "reason": "景色和活动都很棒,但7月初至8月28日价格较贵" + }, + { + "label": "秋景最佳", + "months": "9月20日—国庆", + "reason": "大兴安岭秋景的最佳时机,非常推荐" + }, + { + "label": "冬季体验", + "months": "12—2月", + "reason": "完全另一种美,冰雪那达慕、驯鹿部落" + } + ], + "travelAdvice": [ + { + "period": "5月初", + "level": "not_recommended", + "levelText": "不推荐", + "description": "4月份冰雪刚刚消融,草原才刚刚冒芽,有些活动还没开始。" + }, + { + "period": "5月底—6月初", + "level": "ok", + "levelText": "可以考虑", + "description": "草原已经有了绿意。如果想避开人群提早出发,这个时候可以考虑了。" + }, + { + "period": "6月中旬—6月底", + "level": "best_value", + "levelText": "性价比最高", + "description": "草原已经非常美了,各项活动也都已开展。价格尚未进入旺季,是性价比最高的时段。" + }, + { + "period": "6月底—8月底", + "level": "peak", + "levelText": "景色巅峰", + "description": "景色和各项活动都很棒,完全不用担心。但从7月初至8月20日价格会相对贵一些。" + }, + { + "period": "9月初", + "level": "ok", + "levelText": "可以考虑", + "description": "草原已经不是特别漂亮了,但因为孩子都开学了,人相对会少一些。" + }, + { + "period": "9月20日—国庆结束", + "level": "highly_recommended", + "levelText": "非常推荐", + "description": "看呼伦贝尔大兴安岭秋景的最佳时机,错过再等一年。" + }, + { + "period": "冬季(12月—次年2月)", + "level": "recommended", + "levelText": "推荐", + "description": "冬季旅游景色也还不错,是完全另一种美。冰雪那达慕、驯鹿部落值得体验。" + }, + { + "period": "3月—4月 / 5月中上旬", + "level": "not_recommended", + "levelText": "不推荐", + "description": "来呼伦贝尔一趟还是比较折腾的,希望大家能在每个季节相对最美的时候过来。" + } + ] + }, + "months": [ + { + "month": 1, + "name": "一月", + "season": "winter", + "ratingStars": 2, + "tempRange": "-30°C ~ -15°C", + "weatherFeature": "极寒晴朗,万里冰封,呼伦贝尔最寒冷的月份", + "highlights": ["呼伦湖冰雪那达慕", "冰钓体验", "雪地徒步穿越", "零下30度的极寒星空"], + "clothingTips": "鹅绒羽绒服(-30°C标准)+ 羊毛打底 + 防风冲锋裤 + 保暖雪地靴", + "isPeakSeason": false, + "recommendedProducts": ["嗨冰雪", "小蒙马冬季营"], + "tagline": "极寒秘境,勇者专属" + }, + { + "month": 2, + "name": "二月", + "season": "winter", + "ratingStars": 2, + "tempRange": "-28°C ~ -10°C", + "weatherFeature": "银装素裹,冰雪节庆,气温略有回升但仍属严冬", + "highlights": ["冰雪节庆活动", "驯鹿部落探访", "雪地骑马", "室韦冰上体验"], + "clothingTips": "同一月装备:鹅绒羽绒全套 + 防水手套 + 护目镜(防雪反光)", + "isPeakSeason": false, + "recommendedProducts": ["嗨冰雪"], + "tagline": "冰雪盛宴,雪原驰骋" + }, + { + "month": 3, + "name": "三月", + "season": "spring", + "ratingStars": 1, + "tempRange": "-15°C ~ 2°C", + "weatherFeature": "冬末春初,大风频繁,草原仍是枯黄,不宜出行", + "highlights": ["草原雪与枯草交替", "候鸟初归迹象"], + "clothingTips": "厚羽绒 + 防风冲锋衣 + 围巾,防大风为主", + "isPeakSeason": false, + "recommendedProducts": [], + "tagline": "大风过境,建议避开" + }, + { + "month": 4, + "name": "四月", + "season": "spring", + "ratingStars": 2, + "tempRange": "-5°C ~ 12°C", + "weatherFeature": "春风回暖,草原返青初期,风沙偶有,人迹稀少", + "highlights": ["草原返青初期嫩绿", "候鸟大规模归来", "冰消湖泊倒影", "错峰出行几乎无游客"], + "clothingTips": "冲锋衣 + 厚毛衣 + 秋裤,防风为主,备防沙巾", + "isPeakSeason": false, + "recommendedProducts": ["额吉的故乡V9(错峰)"], + "tagline": "人少路宽,草原新生" + }, + { + "month": 5, + "name": "五月", + "season": "spring", + "ratingStars": 3, + "tempRange": "5°C ~ 22°C", + "weatherFeature": "月初草原刚冒芽、活动未全面开展;月底已有绿意,想避开人群可考虑5月底出发", + "highlights": ["5月底草原已有绿意", "避开人群提早出发", "候鸟迁徙壮观", "白天长达16小时"], + "clothingTips": "冲锋衣 + 长袖 + 防晒,早晚加绒衣一件", + "isPeakSeason": false, + "recommendedProducts": ["额吉的故乡V9(5月底起)"], + "tagline": "月底可行,月初建议再等等" + }, + { + "month": 6, + "name": "六月", + "season": "summer", + "ratingStars": 5, + "tempRange": "15°C ~ 28°C", + "weatherFeature": "中旬起草原已非常美,各项活动全面开展,性价比全年最高的时段", + "highlights": ["6月中下旬性价比最高", "草原已非常美", "各项活动全面开展", "骑马体验最舒适"], + "clothingTips": "薄外套 + 防晒衣 + 长裤,早晚加薄羽绒,备雨衣", + "isPeakSeason": true, + "recommendedProducts": ["额吉的故乡V9", "小蒙马夏令营"], + "tagline": "性价比最高,强烈推荐" + }, + { + "month": 7, + "name": "七月", + "season": "summer", + "ratingStars": 5, + "tempRange": "18°C ~ 30°C", + "weatherFeature": "全年最热,草原旺季巅峰,那达慕节庆最集中,需提前3个月预订", + "highlights": ["那达慕传统节庆", "草原鲜花盛放至极", "额尔古纳湿地最美", "民俗体验最丰富"], + "clothingTips": "轻薄长袖 + 防晒 + 备风衣,中午注意防暑,水分补充充足", + "isPeakSeason": true, + "recommendedProducts": ["额吉的故乡V9", "小蒙马夏令营"], + "tagline": "旺季巅峰,提前3个月预订" + }, + { + "month": 8, + "name": "八月", + "season": "summer", + "ratingStars": 5, + "tempRange": "15°C ~ 28°C", + "weatherFeature": "夏末渐凉,草原仍绿,早晚清爽宜人,雨后彩虹频现", + "highlights": ["草原仍绿意盎然", "早晚清凉舒适", "夕阳草原最美角度", "雨后彩虹奇景常见"], + "clothingTips": "薄外套 + 长裤,备一件薄羽绒,早晚温差8-10°C不可忽视", + "isPeakSeason": true, + "recommendedProducts": ["额吉的故乡V9", "小蒙马夏令营"], + "tagline": "旺季尾声,舒爽清凉" + }, + { + "month": 9, + "name": "九月", + "season": "autumn", + "ratingStars": 5, + "tempRange": "5°C ~ 20°C", + "weatherFeature": "月初草原不再最美但人少;9月20日起大兴安岭秋景进入最佳观赏期,非常推荐", + "highlights": ["9月20日后秋景最佳", "大兴安岭金秋绝景", "国庆期间秋色正浓", "开学后人少清净"], + "clothingTips": "冲锋衣 + 毛衣,早晚加薄羽绒,温差显著需分层穿搭", + "isPeakSeason": true, + "recommendedProducts": ["游牧的森林(秋季)"], + "tagline": "9月20日起秋景巅峰,非常推荐" + }, + { + "month": 10, + "name": "十月", + "season": "autumn", + "ratingStars": 3, + "tempRange": "-5°C ~ 10°C", + "weatherFeature": "深秋落叶,气温骤降,草原苍茫辽阔,初雪可能出现", + "highlights": ["白桦林落叶金色", "大雁南飞壮观景象", "霜降草原别样美", "初雪概率渐增"], + "clothingTips": "厚羽绒 + 毛衣 + 防风裤,做好充分保暖准备", + "isPeakSeason": false, + "recommendedProducts": ["游牧的森林(秋季)"], + "tagline": "秋尽初冬,苍茫别致" + }, + { + "month": 11, + "name": "十一月", + "season": "winter", + "ratingStars": 2, + "tempRange": "-20°C ~ -5°C", + "weatherFeature": "初冬降雪,河流结冰,草原进入冰封准备期,游客稀少", + "highlights": ["初雪草原独特美景", "河流开始结冰", "人迹罕至的静谧旷野"], + "clothingTips": "厚羽绒全套 + 防风裤 + 保暖靴,防寒为第一优先", + "isPeakSeason": false, + "recommendedProducts": [], + "tagline": "初冬雪景,静谧独特" + }, + { + "month": 12, + "name": "十二月", + "season": "winter", + "ratingStars": 3, + "tempRange": "-30°C ~ -15°C", + "weatherFeature": "冰雪全封,冬景壮美,冰雪活动赛季正式开启", + "highlights": ["呼伦湖完全冰封", "冰雪那达慕开幕", "极光偶现北疆", "冰钓与雪地越野"], + "clothingTips": "零下30°C专业装备:鹅绒 + 羊毛打底 + 防风冲锋套装", + "isPeakSeason": false, + "recommendedProducts": ["嗨冰雪", "小蒙马冬季营"], + "tagline": "壮美冬景,冰雪探险" + } + ] +} diff --git a/data/contact.json b/data/contact.json new file mode 100644 index 0000000..e8004e0 --- /dev/null +++ b/data/contact.json @@ -0,0 +1,52 @@ +{ + "channels": [ + { + "type": "wechat", + "label": "微信客服", + "value": "扫码添加", + "qrImage": "/images/contact/qrcode-wechat.jpg", + "primary": true, + "description": "添加微信,一对一沟通行程需求" + }, + { + "type": "miniprogram", + "label": "预订小程序", + "value": "微信搜索「呼籁」", + "qrImage": "/images/qrcode-miniprogram.png", + "description": "微信小程序搜索「呼籁」,在线了解和预订", + "hidden": true, + "_note": "小程序尚未上线,上线后将 hidden 改为 false 即可显示" + }, + { + "type": "phone", + "label": "电话咨询", + "value": "4000881814", + "description": "工作时间9:00-21:00,节假日不休" + }, + { + "type": "address", + "label": "公司地址", + "value": "内蒙古自治区呼伦贝尔市海拉尔区奋斗镇学府路煤校3号楼", + "description": "欢迎来公司实地考察" + }, + { + "type": "email", + "label": "商务合作", + "value": "bd@1814.love", + "description": "媒体合作、异业合作请邮件联系" + }, + { + "type": "complaint", + "label": "投诉建议", + "value": "tousu@1814.love", + "description": "您的反馈是我们进步的动力,24小时内回复" + }, + { + "type": "hr", + "label": "加入我们", + "value": "hr@1814.love", + "description": "期待热爱旅行的你,简历请投递至此邮箱" + } + ], + "securityNotice": "请认准官方渠道,谨防假冒。所有行程均签订正规电子合同,您的权益受法律保护。" +} \ No newline at end of file diff --git a/data/courses.json b/data/courses.json new file mode 100644 index 0000000..da5372d --- /dev/null +++ b/data/courses.json @@ -0,0 +1,246 @@ +{ + "philosophy": { + "headline": "草原是最好的课堂,自然是最好的老师", + "tagline": "让孩子在真实的世界里学习真实的事", + "description": "小蒙马研学不是景区观光配个讲解员,也不是把教室搬到草原上。我们相信孩子天生有好奇心和行动力,课程设计的核心是给孩子提供真实的接触——真正的马、真正的牧民、真正的河流、真正的星空。学习在接触中自然发生。", + "values": [ + { + "label": "真实接触", + "desc": "不是模型,不是图片,不是讲解词。孩子用手触摸、用脚行走、用眼睛看真实的草原生态。" + }, + { + "label": "分龄设计", + "desc": "3-6岁、7-9岁、10-12岁三组,学习目标和课程深度按发展阶段匹配,不搞一刀切。" + }, + { + "label": "不赶时间", + "desc": "每个孩子的节奏不同,课程里留有充分的自由探索时间,允许孩子在一只蚂蚱身上花二十分钟。" + }, + { + "label": "无痕理念", + "desc": "LNT(Leave No Trace)贯穿全程,从第一天开始让孩子理解:你来过,草原没有损失。" + } + ] + }, + "ageGroups": [ + { + "id": "little", + "emoji": "🌱", + "label": "探索组 3-6岁", + "headline": "用感官认识世界", + "focus": "感知·体验·好奇心", + "description": "这个年龄段的孩子是天生的探索者。课程以感官体验为核心,不强调记忆和输出,重在让孩子用眼睛看、用手摸、用鼻子闻,和草原建立最直接的联结。领队会放慢节奏,蹲下来用孩子的视角带领他们发现身边的细节。", + "highlights": [ + "辨认3-5种草原常见植物(用触摸和气味,而不是记名字)", + "近距离观察马、牛、羊,理解动物也有情绪", + "跟牧民家的孩子一起做简单的游牧日常活动", + "在营地用草叶、石头、泥土完成一件自然艺术作品", + "学会离开前检查自己有没有留下垃圾(LNT启蒙)" + ], + "recommendedModules": ["ecology", "equestrian", "culture", "art"] + }, + { + "id": "child", + "emoji": "🏇", + "label": "探险组 7-9岁", + "headline": "从体验走向理解", + "focus": "探究·协作·表达", + "description": "7-9岁的孩子开始有能力追问「为什么」。课程在体验基础上增加观察记录和小组探究环节,引导孩子不只是看到,而是思考。马术训练进入初级骑行阶段,团队协作类课程也开始加入。", + "highlights": [ + "用观察记录本记录3天的草原生态变化", + "学习草原食物链:草→蚂蚱→鸟→草原鹰", + "完成初级马术课程,能独立慢步骑行", + "小组合作完成一项游牧文化复原任务(如搭建蒙古包外架)", + "用自然材料完成一件有主题的艺术创作并向全组介绍", + "参与一次LNT实践行动,记录并分享发现" + ], + "recommendedModules": ["ecology", "equestrian", "culture", "art", "teamwork", "lnt"] + }, + { + "id": "teen", + "emoji": "🌟", + "label": "领袖组 10-12岁", + "headline": "从理解走向责任", + "focus": "思辨·领导力·价值观", + "description": "10-12岁是价值观形成的关键期。课程加入更多思辨和挑战环节,要求孩子独立判断、承担小组责任、向他人传递自己的发现。马术进入中级阶段,并加入草原生态调查和环保实践项目。", + "highlights": [ + "独立完成一份草原生态小调查报告(含现场采集数据)", + "中级马术:练习快步骑行和基础转向控制", + "担任小组领队,带领低龄组孩子完成一项自然任务", + "参与游牧文化传承讨论:现代化对草原生活方式的影响", + "设计并执行一次微型LNT行动,核算本次营地的环境影响", + "最终营地汇报:向家长和伙伴展示3天的学习成果" + ], + "recommendedModules": ["equestrian", "culture", "teamwork", "lnt", "art", "ecology"] + } + ], + "modules": [ + { + "id": "ecology", + "icon": "🌿", + "name": "草原生态认知", + "ageRange": "3-12岁", + "duration": "贯穿全程", + "shortDesc": "以草原为天然实验室,通过观察、记录、触摸,理解草原生态系统的结构和运转逻辑。", + "objectives": [ + "认识呼伦贝尔草原的代表性动植物及其生态位", + "理解草原食物链的基本结构", + "建立对自然系统的尊重和好奇心", + "掌握基础的野外观察方法(不打扰、不破坏)" + ], + "activities": [ + "莫日格勒河畔植被带徒步观察,用记录本画植物速写", + "草原鸟类晨间观测(双筒望远镜辅助)", + "牧民带领的牧场生态讲解:草场轮牧背后的生态智慧", + "夜间昆虫灯光诱集观察(6岁以上)", + "低龄组:用感官游戏认识草地里的小生命" + ], + "philosophy": "草原的生态课不在教室里,在每一片草叶下、每一声鸟叫里。我们不背名词,我们用眼睛学习。" + }, + { + "id": "equestrian", + "icon": "🐎", + "name": "马术体验", + "ageRange": "3-12岁", + "duration": "1-2课时/天", + "shortDesc": "从认识马、照顾马到骑马,建立孩子与马匹的真实信任关系,而不是简单地「骑一圈」。", + "objectives": [ + "了解马的习性、情绪信号和基础照料方式", + "通过刷马、喂料建立人马信任关系", + "掌握安全上下马、基础坐姿和步行骑乘(3-6岁)", + "完成慢步独立骑行和基础方向控制(7岁以上)", + "培养对动物的责任感和共情能力" + ], + "activities": [ + "马厩认知课:认识马的各部位,学习安全接近和抚摸", + "刷马体验:协助牧民为马匹梳理,建立信任", + "骑乘练习:由专业牧民教练全程保护,分龄分组进行", + "骑马草原漫游:在指定安全路线上感受马背上的草原视角", + "高龄组:基础快步训练和绕桩练习" + ], + "philosophy": "马是草原文化的核心,但马不是道具。让孩子先学会照顾一匹马,再学会骑它——这是顺序,也是态度。" + }, + { + "id": "culture", + "icon": "🏠", + "name": "游牧文化传承", + "ageRange": "3-12岁", + "duration": "1课时/天", + "shortDesc": "通过做蒙古包、穿蒙古袍、学蒙古语、跟真实牧民互动,让孩子感受游牧文化的真实质感。", + "objectives": [ + "了解蒙古包的结构原理和搭建智慧", + "认识游牧生活的季节节律和迁徙逻辑", + "体验蒙古族传统饮食文化(奶茶、手把肉、奶制品)", + "学会3-5句蒙古语日常用语", + "理解游牧文化与草原生态之间的共生关系" + ], + "activities": [ + "蒙古包搭建体验:在牧民指导下参与外架安装和毡覆盖", + "牧民家庭做客:喝奶茶、品奶酪、听牧民讲草原上的故事", + "蒙古族手工坊:制作哈达或简单的马鞍装饰", + "蒙古语小课堂:学习问候、数数和基本方向词", + "那达慕小运动会:射箭、摔跤(儿童版)体验" + ], + "philosophy": "文化不是博物馆里的展品,是有呼吸的生活方式。让孩子和真实的牧民坐在一起喝一碗奶茶,比看一百张图片更有用。" + }, + { + "id": "art", + "icon": "🎨", + "name": "自然艺术创作", + "ageRange": "3-12岁", + "duration": "1课时/天", + "shortDesc": "用草原里的材料创作——没有颜料盒,只有泥土、草叶、石头、羽毛、风干的花。", + "objectives": [ + "学会用自然材料进行艺术表达,不依赖商业美术材料", + "培养对自然美的感知力和审美意识", + "通过创作过程发展专注力和独立完成任务的能力", + "用作品记录并表达自己的草原体验", + "理解艺术与环境的关系:取之自然,不破坏自然" + ], + "activities": [ + "草叶拓印:用采集的草叶在布料上印出自己的植物地图", + "石头彩绘:用泥土和植物汁液给河边的石头上色", + "自然装置艺术:在指定区域用地面材料创作可降解的小作品", + "草编入门:学习基础草编手法,编一个简单的小篮", + "高龄组:以「草原生态」为主题完成一件综合材料作品并展示" + ], + "philosophy": "最好的画布不在美术教室里,在莫日格勒河边的泥地上。孩子不需要颜料,他们需要允许弄脏手的机会。" + }, + { + "id": "teamwork", + "icon": "🤝", + "name": "团队协作成长", + "ageRange": "7-12岁", + "duration": "贯穿全程", + "shortDesc": "通过设计好的小组任务和草原挑战,让孩子在真实情境中练习沟通、分工和共同解决问题。", + "objectives": [ + "学习在陌生环境中快速建立信任和分工合作", + "练习表达不同意见并达成共识的能力", + "承担小组领队或记录员等具体角色责任", + "在有压力的任务情境中保持情绪稳定", + "感受集体完成一件难事之后的成就感" + ], + "activities": [ + "营地搭建挑战:小组合作在规定时间内完成营地布置", + "草原定向越野:用地图和指南针完成多点位任务", + "牧场生态调查任务:分工收集数据,合作完成报告", + "故事接龙营火会:每人贡献情节,共同完成一个草原故事", + "领队角色轮换:每位孩子轮流担任组长,带领组员完成一项任务" + ], + "philosophy": "草原上有一种东西在城市里很难学到:当你迷路了,你必须和身边的人商量怎么走。这是团队,也是成长。" + }, + { + "id": "lnt", + "icon": "🌍", + "name": "LNT无痕环保实践", + "ageRange": "3-12岁", + "duration": "贯穿全程", + "shortDesc": "Leave No Trace(无痕旅行)不是一节课,是贯穿整个营期的行动准则,让孩子从第一天开始内化对自然的责任。", + "objectives": [ + "理解LNT的7大原则及其在草原环境中的具体含义", + "养成在自然中活动的基本行为习惯(不乱扔垃圾、不采摘植物等)", + "学会评估自己的行为对环境的影响", + "高龄组:独立设计一份草原环保行动方案", + "把LNT理念带回城市生活,影响家庭" + ], + "activities": [ + "第一天:LNT原则导入游戏,用情景故事理解每条原则", + "每日营地检查:离开前的10分钟'痕迹消除'行动", + "草原垃圾调查:统计营地周边垃圾种类和来源,分析问题", + "低龄组:制作'无痕小卫士'徽章,每完成一个行动打一颗星", + "结营日:各组展示本次营期的环保行动成果和数据" + ], + "philosophy": "我们不告诉孩子'保护环境'是一个口号。我们让他在草原上住三天,然后问他:你在乎这里吗?答案通常是肯定的。从那一刻起,环保才是真的。" + } + ], + "faq": [ + { + "q": "几岁的孩子适合参加小蒙马研学?", + "a": "3-12岁均可参加。我们按3-6岁(探索组)、7-9岁(探险组)、10-12岁(领袖组)三个年龄段分组设计课程,学习目标和活动难度不同。3岁以下的幼儿建议参加小蒙马夏令营亲子营,全程有家长陪同。" + }, + { + "q": "孩子不会骑马,马术课能参加吗?", + "a": "完全没问题,马术课从零基础开始。第一步是认识马、接触马,建立信任关系,然后才是骑乘。全程有专业牧民教练和领队保护,孩子不会被强迫做他没准备好的事。" + }, + { + "q": "研学课程和普通旅游有什么区别?", + "a": "最大的区别是有明确的学习目标和课程设计,而不只是带孩子去看风景。每个活动背后都有对应的教育目的,有观察记录、有任务完成、有成果展示。同时我们会放慢节奏,给孩子足够的时间真正接触和探索,而不是走马观花。" + }, + { + "q": "孩子如果对某个活动不感兴趣或不想参与怎么办?", + "a": "不强制参与是我们的基本原则。领队会创造吸引孩子的方式引导,但不会强迫。孩子有权利说「我今天想看,不想做」,这本身也是一种学习——尊重自己的感受。" + }, + { + "q": "研学课程中有安全风险吗?如何保障安全?", + "a": "所有活动均在专业人员陪同下进行。马术课有专业牧民教练全程保护;徒步有领队带队;营地有急救箱和受过急救培训的工作人员。我们会在活动前进行安全说明,并根据天气、孩子状态实时调整安排。" + }, + { + "q": "孩子在草原上睡得着吗?饮食能适应吗?", + "a": "大部分孩子在草原上睡得非常好——户外活动充分、空气好、没有电子屏幕干扰。饮食方面,我们提供中餐为主,同时保留部分蒙古族特色食物体验。有特殊饮食需求(过敏、不吃某类食物)提前告知,我们会做相应安排。" + }, + { + "q": "研学结束后孩子会有什么成果?", + "a": "有形成果包括:观察记录本(自己的草原笔记)、自然艺术作品、LNT行动记录表、结营汇报(7岁以上)。无形成果则因孩子不同而不同——有的是自信、有的是对自然的兴趣、有的是第一次独立完成一件事的成就感。" + } + ] +} diff --git a/data/customize.json b/data/customize.json new file mode 100644 index 0000000..e61a25a --- /dev/null +++ b/data/customize.json @@ -0,0 +1,38 @@ +{ + "trustStats": [ + { "value": "10000+", "unit": "组", "label": "已服务家庭" }, + { "value": "11", "unit": "年", "label": "深耕呼伦贝尔" }, + { "value": "2", "unit": "小时", "label": "定制师响应时效" }, + { "value": "0", "unit": "元", "label": "咨询费用" } + ], + "durations": [ + { "value": "5天4晚", "label": "5天4晚(经典版)" }, + { "value": "6天5晚", "label": "6天5晚(深度版)" }, + { "value": "7天6晚", "label": "7天6晚(全面版)" } + ], + "activities": [ + { "value": "亲子活动", "label": "亲子活动" }, + { "value": "旅拍", "label": "旅拍" }, + { "value": "骑马", "label": "骑马" }, + { "value": "蒙古包住宿", "label": "蒙古包住宿" }, + { "value": "草原露营", "label": "草原露营" }, + { "value": "私人牧场", "label": "私人牧场" } + ], + "budgets": [ + { "value": "5000元以下", "label": "5,000 元以下" }, + { "value": "5000-8000元", "label": "5,000 — 8,000 元" }, + { "value": "8000-12000元", "label": "8,000 — 12,000 元" }, + { "value": "12000元以上", "label": "12,000 元以上" }, + { "value": "不限预算", "label": "不限预算" } + ], + "process": [ + { "title": "填写需求", "desc": "告诉我们出行人数、日期和特殊需求" }, + { "title": "定制师联系", "desc": "2小时内专属定制师通过微信联系您" }, + { "title": "方案确认", "desc": "根据您的需求定制专属行程方案" }, + { "title": "出发享玩", "desc": "一家一单一车,全程专属陪伴" } + ], + "contact": { + "wechat": "hulai1814", + "tip": "工作时间 9:00 — 21:00,节假日不休" + } +} diff --git a/data/destinations-detail.json b/data/destinations-detail.json new file mode 100644 index 0000000..467c640 --- /dev/null +++ b/data/destinations-detail.json @@ -0,0 +1,370 @@ +{ + "destinations": [ + { + "id": "moriguole", + "name": "莫日格勒河", + "subtitle": "天下第一曲水 · 老舍笔下的草原河曲", + "tag": "草原核心", + "seasons": ["summer", "autumn", "winter"], + "description": "1961年老舍来这儿考察,脱口而出「天下第一曲水」,这名号就此传开。河本身不宽,有些河段窄到你觉得一步就能跨过去,但它在三百公里的草原上拐出了上千个弯。从牧云山顶或断崖制高点往下看,河道的S弯一层套一层,两岸吃草的牛羊像散落的棋子,那种辽阔感是照片拍不出来的。呼籁旅行的自营营地就扎在莫日格勒河畔,早起出帐篷两分钟走到河边,晨雾配合日出光线,出片率极高。草原深处没手机信号,跟着我们的车队走才不会迷路。", + "highlights": [ + "牧云山顶/断崖俯瞰河曲全景——目前公认最佳机位,比金帐汗那边角度好", + "沿河岸骑马漫步,牛羊就在身边,比黑山头骑马更有草原腹地的感觉", + "呼籁自营营地入住,河边BBQ、旅拍、看星空一条龙", + "清晨河面起雾时拍大片,日出前后1小时是黄金时间", + "穿越草原腹地到营地的路本身就是体验——便道、牛群、无信号" + ], + "bestSeason": { + "primary": "7月-8月", + "secondary": "6月、9月", + "description": "7-8月草最绿水最丰,骑马体验最佳。6月人少但草还没完全长起来,9月开始变黄也别有味道。冬季雪原覆盖的莫日格勒河又是另一种震撼。" + }, + "tips": [ + "景区不能自驾随意进入,有摆渡费;住营地的可以自驾进", + "草原深处没手机信号,千万不要自己开车乱跑碾压草原,罚款很重", + "拍全景最佳时间早晨6-8点,正午光线太平拍不出层次", + "穿长裤运动鞋,草地里有虫,别穿凉鞋和裙子", + "营地BBQ旺季名额有限,提前预约" + ], + "heroImage": "/images/destinations/moriguole.jpg", + "relatedProducts": ["v9-5d4n-forest", "v9-5d4n-prairie", "v9-6d5n-family", "v9-6d5n-explore", "v9-7d6n-family", "v9-7d6n-wild"], + "seo": { + "title": "莫日格勒河旅游攻略 - 天下第一曲水怎么玩 | 呼籁旅行", + "description": "莫日格勒河是呼伦贝尔必游景点,被誉为天下第一曲水。从牧云山顶俯瞰河曲、骑马、营地入住……呼籁旅行自营营地就在河畔,带你深度体验草原腹地。", + "keywords": "莫日格勒河,天下第一曲水,呼伦贝尔景点,草原骑马,牧云山顶" + } + }, + { + "id": "eergunashire", + "name": "额尔古纳湿地", + "subtitle": "亚洲第一湿地 · 根河的Ω形大弯", + "tag": "生态景观", + "seasons": ["summer", "autumn"], + "description": "号称「亚洲第一湿地」,从额尔古纳市区开车3公里就到,不算远。核心体验就是爬到海拔720米的主峰观景台往下看——根河拐出的一个完美Ω形大弯和一个形状像树叶的湖心岛,绿色铺到天际线,河道像大地的血管蜿蜒其中。说实话,走到山顶那一刻确实被震住了。木栈道下山一路视角不断变化,每一段都值得停下来。秋季9月下旬到10月初来最震撼,湿地从绿变黄变红,颜色层次极其丰富。", + "highlights": [ + "登顶观景台看Ω形河弯和叶形湖心岛——所有宣传照都是这个角度", + "木栈道下山一路看湿地层次变化,每段视角都不同", + "秋季色彩爆发——9月下旬到10月初,黄红绿三色交织", + "早晨6点前到,雾气在河面和树丛间弥漫,比中午去好十倍", + "河里有鱼、岸边有水鸟,运气好能看到丹顶鹤" + ], + "bestSeason": { + "primary": "9月中旬-10月初", + "secondary": "7月-8月", + "description": "秋季拍照最美,颜色层次极丰富。夏季生态最丰富,碧绿一片也很震撼。" + }, + "tips": [ + "爬山到观景台大概30-40分钟,有台阶但不算陡,老人孩子能走", + "夏季蚊虫多,驱蚊液必备", + "建议安排1.5-2小时游览", + "早晨有晨雾,建议6点前到达等最美光线" + ], + "heroImage": "/images/destinations/eergunashire.jpg", + "relatedProducts": ["v9-6d5n-family", "v9-7d6n-wild"], + "seo": { + "title": "额尔古纳湿地旅游攻略 - 亚洲第一湿地怎么玩 | 呼籁旅行", + "description": "额尔古纳湿地被誉为亚洲第一湿地,登顶看Ω形河弯。呼籁旅行带你错峰体验最美湿地生态景观。", + "keywords": "额尔古纳湿地,亚洲第一湿地,根河湿地,呼伦贝尔秋景" + } + }, + { + "id": "baihualin", + "name": "白桦林", + "subtitle": "国内面积最大的纯生白桦林 · 亲子拍照圣地", + "tag": "森林体验", + "seasons": ["summer", "autumn"], + "description": "在额尔古纳到恩和的省道边上,将近1000公顷的纯生白桦林,国内面积最大的。树干白得发亮,阳光透过树冠洒下来确实好看。景区开发得比较成熟,分了好几个主题区,不算原生态体验,但胜在拍照出片率高,带孩子来也有地方玩。呼籁安排的行程里,白桦林有非遗传承人现场教桦树皮画,按年龄分层体验——这个才是这里最值得的环节。秋季9月底白桦叶变金黄,配白色树干,随手拍都是大片。", + "highlights": [ + "非遗传承人现场教桦树皮画,按孩子年龄分层体验", + "空中栈道——架在树冠层的步道,从上往下看白桦林感觉不一样", + "驯鹿苑——景区养了驯鹿可以近距离喂食,孩子最爱的环节", + "秋季金黄白桦叶配白色树干,随手拍都是大片", + "全地形越野车穿越白桦林——往返12公里自由驰骋" + ], + "bestSeason": { + "primary": "9月下旬-10月初", + "secondary": "7月-8月", + "description": "秋季色彩最美。夏季林中清凉,适合避暑和亲子体验。" + }, + "tips": [ + "拍照穿亮色衣服(红色、黄色),白桦林做背景很出效果", + "夏季林中蚊虫多,长袖长裤加驱蚊液", + "整个景区走一圈大概1.5-2小时", + "时间有限的话至少走空中栈道和驯鹿苑,这两个最值" + ], + "heroImage": "/images/destinations/baihualin.jpg", + "relatedProducts": ["v9-5d4n-forest", "v9-6d5n-family", "v9-7d6n-family"], + "seo": { + "title": "白桦林景区攻略 - 非遗体验+亲子拍照 | 呼籁旅行", + "description": "白桦林景区是国内面积最大的纯生白桦林,呼籁旅行安排非遗传承人教桦树皮画、越野车穿越、驯鹿喂食等深度体验。", + "keywords": "白桦林,白桦林景区,呼伦贝尔白桦林,桦树皮画,亲子体验" + } + }, + { + "id": "enhe-shiwei", + "name": "恩和·室韦", + "subtitle": "华俄后裔的木刻楞村落 · 边境安宁小镇", + "tag": "民族文化", + "seasons": ["summer", "autumn", "winter"], + "description": "两个村子离得不远但气质不同。室韦开发早,主街热闹,商业化明显;恩和安静得多,蒙语意思就是「和平安宁」,入选了中国传统村落名录。居民都是华俄后裔,长着混血面孔说着东北话,住的是俄式木刻楞房子,冬暖夏凉。最有意思的体验是去列巴坊看大妈现烤列巴面包,配上自家腌的酸黄瓜和蓝莓酱,再喝杯俄式果茶。呼籁的行程安排在恩和骑马穿越——穿越草原、湿地、森林、河流四种地形,和其他地方骑马感受完全不同。", + "highlights": [ + "恩和沉浸式骑马穿越——草原、湿地、森林、河流四种地形", + "木刻楞民居——原木垒成的俄式传统木屋,走进去能闻到木头香", + "热尼亚列巴坊手作体验——看列巴烤制全过程,现烤现吃", + "额尔古纳河边看对岸俄罗斯——河对面就是俄罗斯村庄", + "画套娃、做列巴、品俄式果茶——沉浸式文化体验" + ], + "bestSeason": { + "primary": "7月-8月", + "secondary": "9月", + "description": "夏季绿意最浓,骑马体验最佳。9月秋色开始,边防公路两侧层林尽染。冬季恩和雪中骑马是独特体验。" + }, + "tips": [ + "如果只能去一个,推荐恩和——更安静更有生活气息,商业味淡", + "列巴要上午去买,下午基本卖完", + "住宿以木刻楞民宿为主,旺季务必提前预订", + "夜里气温低,即使夏天也要带件薄外套" + ], + "heroImage": "/images/destinations/shiwei.jpg", + "relatedProducts": ["v9-5d4n-forest", "v9-5d4n-prairie", "v9-6d5n-family", "v9-6d5n-explore", "v9-7d6n-family", "v9-7d6n-wild"], + "seo": { + "title": "恩和室韦旅游攻略 - 华俄后裔村落深度体验 | 呼籁旅行", + "description": "恩和室韦是华俄后裔聚居的边境小镇,木刻楞民居、手工列巴、沉浸式骑马穿越。呼籁旅行带你深度体验额尔古纳河畔的民族文化。", + "keywords": "恩和,室韦,木刻楞,俄罗斯族,额尔古纳河,边境骑马" + } + }, + { + "id": "heishantou", + "name": "黑山头", + "subtitle": "呼伦贝尔骑马首选地 · 边境日落", + "tag": "骑马体验", + "seasons": ["summer", "autumn"], + "description": "黑山头是呼伦贝尔公认的骑马最佳地点,原因很简单——这边草原特别开阔平坦,视野好,马场多且正规。不是景区里牵着走一小圈的那种,而是马倌带路你自己控马在草原上跑,大圈下来一个多小时。傍晚一定要去日落山,看夕阳把额尔古纳河和整片草原湿地染成金色。呼籁的探索版行程安排了恩和+黑山头两次骑马——白桦林间漫步和草原驰骋完全不同的体验。", + "highlights": [ + "草原骑马穿越——自己控马不是牵马,大圈1-1.5小时真实骑行", + "日落山观日落——看额尔古纳河湿地被夕阳染金,呼伦贝尔最美日落之一", + "中俄边防公路——左边是额尔古纳河和俄罗斯,右边是无边草原,路本身就是景", + "ATV穿越湿地——秋季五彩湿地中驾驶全地形车穿行", + "牧户家访——进蒙古包挤牛奶、喂小羊、喝奶茶" + ], + "bestSeason": { + "primary": "7月-8月", + "secondary": "9月", + "description": "夏季草原最绿最适合骑马。9月草原变黄,日落更有层次。" + }, + "tips": [ + "骑马穿长裤硬底鞋,别穿紧身裤和凉鞋,容易磨", + "小朋友必须马夫牵马,安全第一", + "黑山头属边境管理区,必须带身份证", + "日落山建议下午5点后前往,留够等日落的时间" + ], + "heroImage": "/images/destinations/heishantou.jpg", + "relatedProducts": ["v9-6d5n-explore"], + "seo": { + "title": "黑山头旅游攻略 - 草原骑马与边境日落 | 呼籁旅行", + "description": "黑山头是呼伦贝尔骑马首选地,自己控马驰骋草原、日落山赏金色湿地。呼籁旅行安排正规马场深度骑行体验。", + "keywords": "黑山头,草原骑马,黑山头日落,边境草原,呼伦贝尔骑马" + } + }, + { + "id": "manzhouli", + "name": "满洲里", + "subtitle": "中俄蒙三国交汇的异域边城", + "tag": "边境文化", + "seasons": ["summer", "autumn", "winter"], + "description": "满洲里不像一个中国城市,更像是把俄罗斯小城搬了一半过来。街上到处是俄文招牌,餐厅菜单有俄文版,路上能碰到真正的俄罗斯人来采购。套娃广场那个巨型套娃建筑里面其实是个酒店,周围大大小小的套娃到了晚上全亮灯,效果很梦幻。国门景区能看到对面俄罗斯的后贝加尔斯克小镇。带孩子来最好——满洲里是少有的能让小孩主动问问题的地方:那个大套娃里面住着谁?对面河那边是哪个国家?", + "highlights": [ + "套娃广场夜景——晚上亮灯后整个广场变成童话世界,白天别去", + "国门景区——第五代国门,一侧中国一侧俄罗斯", + "俄罗斯大马戏——驯兽、空中飞人,欧式巴洛克风格剧场", + "套娃酒店入住——冬季北线行程安排住这里,体验异域风情", + "俄式餐厅——红菜汤和手工列巴味道正宗" + ], + "bestSeason": { + "primary": "6月-8月", + "secondary": "12月-2月", + "description": "夏季气候最好,夜景最美。冬季雪景和冰灯也有特色,冬季北线行程必经。" + }, + "tips": [ + "套娃广场白天看没什么感觉,一定要等到晚上灯亮了再去", + "国门景区门票80元/人,外籍人士不可进入", + "买套娃纪念品认准木质手工的,塑料机器做的不值", + "俄式餐厅推荐尝试红菜汤和手工列巴" + ], + "heroImage": "/images/destinations/manzhouli.jpg", + "relatedProducts": ["v9-5d4n-prairie", "v9-6d5n-family", "v9-6d5n-explore"], + "seo": { + "title": "满洲里旅游攻略 - 套娃广场国门怎么玩 | 呼籁旅行", + "description": "满洲里是中俄蒙三国交汇的口岸城市,套娃广场夜景、国门、俄式美食。呼籁旅行为家庭定制满洲里深度游方案。", + "keywords": "满洲里,套娃广场,国门景区,中俄边境,满洲里夜景" + } + }, + { + "id": "aershan", + "name": "阿尔山国家森林公园", + "subtitle": "AAAAA级 · 火山天池群 · 温泉之都", + "tag": "地质奇观", + "seasons": ["autumn", "winter"], + "description": "阿尔山不是一座山,是一座小城,蒙语意思是「热的圣水」,说的就是温泉。森林公园是AAAAA级加世界地质公园,面积10万公顷,里面有50多座火山锥、19个火山口、8个天池。一天根本逛不完,门票可以两天内重复进园。必须去的是驼峰岭天池——火山口积水形成的湖,蓝得不真实,需要爬山但不高。杜鹃湖也值得,月牙形湖面春天周围开满杜鹃花。冬季的阿尔山是嗨冰雪线路的核心——白狼峰日出、不冻河、百里雾凇画廊、泡温泉,都安排在这。", + "highlights": [ + "驼峰岭天池——阿尔山天池群中最大最深的,蓝得不真实", + "白狼峰日出+泼水成冰——冬季必玩,零下三十度的视觉冲击", + "不冻河——零下几十度依然流淌,岸边雾凇配河面蒸腾雾气", + "石塘林——火山喷发岩浆凝固的石林,像外星地表", + "ATV卡丁车森林穿越——在林间小道上驾驶全地形车" + ], + "bestSeason": { + "primary": "9月中旬(秋色)", + "secondary": "12月-2月(冬景)、5-6月(杜鹃花)", + "description": "秋季金色林海最震撼。冬季白狼峰日出和不冻河是嗨冰雪核心体验。5-6月杜鹃花盛开漫山粉红。夏季7-8月避暑也不错。" + }, + "tips": [ + "公园很大建议分两天逛,门票支持两日内重复进园", + "景点优先级:驼峰岭天池 > 大峡谷 > 杜鹃湖 > 天池 > 石塘林", + "石塘林步道有台阶,推婴儿车不方便", + "海拔较高早晚温差大,即使夏天也带件外套", + "冬季来务必全副武装,手机贴暖宝宝否则秒关机" + ], + "heroImage": "/images/destinations/aershan.jpg", + "relatedProducts": ["winter-south-5d4n", "winter-south-6d5n", "autumn-south-4d3n", "autumn-south-5d4n", "autumn-south-7d6n"], + "seo": { + "title": "阿尔山国家森林公园攻略 - 火山天池温泉怎么玩 | 呼籁旅行", + "description": "阿尔山国家森林公园AAAAA级景区,驼峰岭天池、不冻河、石塘林。呼籁旅行秋季游牧的森林和冬季嗨冰雪产品线都覆盖阿尔山。", + "keywords": "阿尔山,阿尔山森林公园,驼峰岭天池,不冻河,白狼峰" + } + }, + { + "id": "daxinganling", + "name": "大兴安岭·莫尔道嘎", + "subtitle": "中国最后一片寒温带原始森林 · 森林小火车", + "tag": "森林探秘", + "seasons": ["summer", "autumn"], + "description": "莫尔道嘎国家森林公园是中国最后一片寒温带明亮针叶原始森林,森林覆盖率94.97%。最大的卖点是森林观光小火车——三节车厢全程9.87公里,时速15公里,绕公园一圈大约一个半小时。小火车穿行在林海里确实有童话感,沿途设了几个站可以下车拍照。最后一站有野生小松鼠和可以喂的小鹿,孩子特别开心。呼籁夏季亲子版行程安排了森林小火车+兴安神鹿园喂驯鹿,从草原走进森林,一路风景完全不同。", + "highlights": [ + "森林小火车穿行原始森林——全程9.87公里,每站可下车游览拍照", + "兴安神鹿园零距离喂驯鹿——大兴安岭深处的亲子亮点", + "樟子松林观景台——从这里看出去就是无尽的「林海」", + "秋季层林尽染——9月底到10月初目光所及都是色彩", + "原始森林徒步——空气负氧离子含量极高,真正的森林浴" + ], + "bestSeason": { + "primary": "9月底-10月初", + "secondary": "7月-8月", + "description": "秋季色彩最震撼,但10月中旬后就开始落叶了别来太晚。夏季森林最绿最凉快。" + }, + "tips": [ + "小火车有开窗和封闭式两种车厢可选", + "至少在樟子松林站和最后一站下车,这两站最值", + "森林里蚊虫多,驱蚊液必带", + "莫尔道嘎镇上住宿条件一般,心理准备要有" + ], + "heroImage": "/images/destinations/daxinganling.jpg", + "relatedProducts": ["v9-5d4n-forest", "v9-7d6n-family"], + "seo": { + "title": "大兴安岭莫尔道嘎攻略 - 森林小火车+驯鹿 | 呼籁旅行", + "description": "莫尔道嘎国家森林公园是中国最后一片寒温带原始森林,森林小火车、喂驯鹿、秋季层林尽染。呼籁旅行带你从草原走进森林。", + "keywords": "莫尔道嘎,大兴安岭,森林小火车,驯鹿,原始森林" + } + }, + { + "id": "hulunhu", + "name": "呼伦湖", + "subtitle": "北方第一大湖 · 冬季穿越蓝冰", + "tag": "湖泊景观", + "seasons": ["summer", "winter"], + "description": "呼伦湖是内蒙古最大的湖泊,面积约2339平方公里。夏季碧波万顷,岸线蜿蜒800多公里,和草原连成一片,日落时分整个湖面被染成金色。但真正让人印象深刻的反而是冬季——呼伦湖结冰后形成壮观的蓝冰,嗨冰雪北线行程安排了穿越呼伦湖蓝冰,在冰面上行走的体验完全不一样。湖里产鲤鱼、鲫鱼、白鱼,现捕现做的全鱼宴是来这儿的必吃项目。", + "highlights": [ + "冬季穿越蓝冰——呼伦湖结冰后形成的蓝冰奇观,嗨冰雪北线核心体验", + "湖边看日落——金色夕阳映照万顷碧波,草原与湖水连成一片", + "现捕现做全鱼宴——湖里的鲤鱼鲫鱼白鱼新鲜到桌", + "春秋候鸟迁徙——数万候鸟栖息湖面的壮观景象", + "风车公路——通往呼伦湖的公路两侧风力发电机阵列" + ], + "bestSeason": { + "primary": "7月-8月", + "secondary": "12月-2月", + "description": "夏季湖水最美日落震撼。冬季蓝冰穿越是嗨冰雪北线的亮点。" + }, + "tips": [ + "湖面开阔风大,夏季午后常有阵雨,备雨具", + "日落观赏建议下午5点后前往湖西岸", + "湖水不建议游泳,风浪较大有安全风险", + "冬季蓝冰穿越需要专业领队带领,不可自行下湖" + ], + "heroImage": "/images/destinations/hulunhu.jpg", + "relatedProducts": ["winter-north-7d6n"], + "seo": { + "title": "呼伦湖旅游攻略 - 蓝冰穿越与日落美景 | 呼籁旅行", + "description": "呼伦湖是内蒙古最大湖泊,夏季日落壮观,冬季蓝冰穿越震撼。呼籁旅行嗨冰雪北线带你冬季穿越呼伦湖蓝冰。", + "keywords": "呼伦湖,呼伦湖蓝冰,呼伦贝尔湖泊,草原日落,冬季穿越" + } + }, + { + "id": "aoluguya", + "name": "敖鲁古雅驯鹿部落", + "subtitle": "中国唯一的驯鹿民族 · 鄂温克使鹿文化", + "tag": "民族探访", + "seasons": ["summer", "winter"], + "description": "这是中国唯一的驯鹿部落,鄂温克族是中国仅存的游猎民族。但说实话:现在游客去的「敖鲁古雅」是政府修建的旅游景区,不是真正的猎民营地——真正的鄂温克猎民和驯鹿生活在150公里外的深山密林里。景区里能喂驯鹿、看博物馆、了解桦皮文化和萨满文化,商业化程度不低但如果调整好预期带孩子来还是很有教育意义的。冬季嗨冰雪北线安排了深入根河方向的布冬霞驯鹿部落,坐驯鹿雪橇、穿鄂温克民族服饰,体验更真实一些。", + "highlights": [ + "近距离喂驯鹿——买苔藓喂食拍照,驯鹿很温顺", + "鄂温克博物馆——了解驯鹿文化、狩猎文化、桦皮文化和萨满文化", + "撮罗子体验——鄂温克传统圆锥形住所,可以进去坐坐", + "冬季驯鹿雪橇——嗨冰雪北线安排的布冬霞驯鹿部落体验", + "鄂温克民族服饰体验——穿上传统服饰在雪地里拍照" + ], + "bestSeason": { + "primary": "7月-8月", + "secondary": "12月-2月", + "description": "夏季驯鹿在户外活动多,可以近距离互动。冬季可体验驯鹿雪橇等冰雪项目。" + }, + "tips": [ + "景区商业化程度不低,喂驯鹿买苔藓要钱,拍照也有收费项目", + "想了解鄂温克文化,博物馆比户外区更值得花时间", + "建议安排1.5-2小时", + "景区在根河满归方向,从根河市区过去还有一段路" + ], + "heroImage": "/images/destinations/aoluguya.jpg", + "relatedProducts": ["winter-north-7d6n"], + "seo": { + "title": "敖鲁古雅驯鹿部落攻略 - 中国唯一驯鹿民族 | 呼籁旅行", + "description": "敖鲁古雅是中国唯一的驯鹿部落,鄂温克族使鹿文化独一无二。呼籁旅行嗨冰雪北线带你深入根河体验驯鹿雪橇。", + "keywords": "敖鲁古雅,驯鹿部落,鄂温克族,驯鹿雪橇,根河" + } + }, + { + "id": "genhe", + "name": "根河·中国冷极", + "subtitle": "历史最低温-58°C · 不冻河奇观", + "tag": "冷极探秘", + "seasons": ["winter", "summer"], + "description": "根河是中国官方认定的最冷城市,历史最低温零下58度。但大多数游客不是冬天来的——夏天的根河其实是个避暑胜地,七八月也就20度出头。冬天来的话,泼水成冰是必玩项目:零下三四十度往空中泼热水瞬间变成冰晶散开,怎么拍怎么好看。嗨冰雪北线的行程最后安排在根河——布冬霞驯鹿部落喂驯鹿、铁锹烤肉、鄂温克民族服饰体验,然后从根河返回海拉尔。", + "highlights": [ + "泼水成冰——零下三四十度的经典打卡体验,怎么拍怎么好看", + "不冻河——零下几十度依然流淌,河面蒸腾的雾气配岸边雾凇", + "冷极碑打卡——标注「-58°C」的地标,冬季来必拍", + "铁锹烤肉——用真铁锹当烤盘,根河特色美食", + "夏季避暑——七八月白天20度左右,原始森林负氧离子爆表" + ], + "bestSeason": { + "primary": "12月-2月", + "secondary": "7月-8月", + "description": "冬季是核心卖点,零下三四十度的极寒体验。夏季避暑+森林生态也很舒服。" + }, + "tips": [ + "冬季来务必全副武装:及膝羽绒服、雪地靴、棉帽手套面罩一样不能少", + "手机贴暖宝宝否则秒关机,多备几块暖宝宝", + "室外停留不要超过30分钟就进屋暖一下", + "夏季蚊虫很多,驱蚊液防晒霜都要带", + "住宿条件有限,别抱太高期待" + ], + "heroImage": "/images/destinations/genhe.jpg", + "relatedProducts": ["winter-north-7d6n"], + "seo": { + "title": "根河旅游攻略 - 中国冷极泼水成冰 | 呼籁旅行", + "description": "根河是中国最冷城市,历史最低温-58°C。泼水成冰、不冻河、铁锹烤肉——呼籁旅行嗨冰雪北线带你深入中国冷极。", + "keywords": "根河,中国冷极,泼水成冰,不冻河,铁锹烤肉" + } + } + ] +} diff --git a/data/destinations.json b/data/destinations.json new file mode 100644 index 0000000..772b914 --- /dev/null +++ b/data/destinations.json @@ -0,0 +1,112 @@ +{ + "title": "亲子游目的地怎么选?", + "subtitle": "一份客观对比,帮你找到最适合全家的那个答案", + "intro": "很多家庭在规划暑假亲子游时,会在呼伦贝尔、新疆和内蒙古西部之间犹豫。三个目的地各有魅力,以下是我们基于真实数据的客观对比,不贬低任何目的地,只帮你找到最适合带孩子去的那个。", + "destinations": [ + { + "id": "hulunbuir", + "name": "呼伦贝尔", + "tag": "草原+森林+湿地", + "highlight": true + }, + { + "id": "xinjiang", + "name": "北疆", + "tag": "雪山+草甸+湖泊" + }, + { + "id": "west-inner-mongolia", + "name": "内蒙古西部", + "tag": "沙漠+胡杨+戈壁" + } + ], + "dimensions": [ + { + "label": "夏季气温", + "icon": "🌡️", + "values": [ + "均温20-21°C,天然避暑胜地", + "21-31°C,部分地区可达35°C+", + "额济纳夏季40°C+,不适合暑期出行" + ] + }, + { + "label": "日均车程", + "icon": "🚗", + "values": [ + "2-3小时,日行150-250km", + "6-8小时,日行400-600km", + "额济纳从银川出发需8-9小时" + ] + }, + { + "label": "海拔", + "icon": "⛰️", + "values": [ + "600-770m,零高反风险", + "赛里木湖2072m、巴音布鲁克2500m,有轻微高反可能", + "900-1500m,无高反风险" + ] + }, + { + "label": "景观密度", + "icon": "🏞️", + "values": [ + "草原+森林+湿地+河流+湖泊+边境小镇,紧凑环线一次体验", + "雪山+高山草甸+峡谷+湖泊极其壮美,但景点间距极大", + "以沙漠戈壁为主,额济纳胡杨林仅10月可看" + ] + }, + { + "label": "游客密度", + "icon": "👥", + "values": [ + "2024年全年3443万人次,区域25.3万km²,体感不拥挤", + "2024年全年3.02亿人次,独库公路日通车超2万辆", + "额济纳仅10月旺季拥挤,其他季节游客极少" + ] + }, + { + "label": "亲子适配", + "icon": "👨‍👩‍👧", + "values": [ + "地势平坦安全,成熟亲子营+研学体系,孩子跑得开", + "长途车程对孩子不友好,山路+高海拔有一定风险", + "沙漠体验为主,夏季高温不适合儿童长时间户外" + ] + }, + { + "label": "费用参考", + "icon": "💰", + "values": [ + "家庭4人5-7天约1-1.7万(含北京出发机票)", + "家庭4人7-10天约1.8-3.5万(距离远天数多)", + "因目的地差异大,鄂尔多斯3-5天约0.8-1.5万" + ] + }, + { + "label": "文化体验", + "icon": "🎭", + "values": [ + "蒙古族+俄罗斯族+鄂温克族,三重文化交融", + "哈萨克族+维吾尔族+丝路历史,多民族风情", + "蒙古族文化为主,但体验项目相对有限" + ] + } + ], + "honestNote": { + "title": "我们的坦诚", + "subtitle": "呼伦贝尔也有不完美的地方", + "items": [ + "蚊虫:夏季草原湿地蚊虫较多,尤其河边,需要做好防蚊准备", + "旺季房紧:7月中旬至8月中旬住宿紧张且价格上浮,建议提前1-2个月预订", + "南方航班少:广州、深圳出发直飞航班有限,可能需要中转", + "壮观度:呼伦贝尔的风景是辽阔舒展型的,不如新疆雪山峡谷那般「震撼」" + ] + }, + "closing": { + "title": "为什么呼籁只做呼伦贝尔?", + "text": "新疆很美,内蒙古西部也有独特风光。但我们选择只做呼伦贝尔一地,是因为11年的深耕让我们确信:对带孩子的家庭来说,短车程、低海拔、凉爽气温、丰富体验——呼伦贝尔是综合最优解。我们把所有精力放在一个地方,才能把每一条路线、每一个营地、每一位领队都打磨到最好。不是呼伦贝尔什么都好,而是对家庭亲子游这件事,它真的很合适。" + }, + "dataSources": "气温数据来源:中国气象局;旅游人次数据来源:呼伦贝尔市2024年统计公报、新疆维吾尔自治区文旅厅;距离数据来源:高德地图实测" +} diff --git a/data/faq.json b/data/faq.json new file mode 100644 index 0000000..3373b89 --- /dev/null +++ b/data/faq.json @@ -0,0 +1,401 @@ +{ + "categories": [ + { + "id": "product", + "name": "产品类", + "questions": [ + { + "id": "what-is-eqi", + "question": "额吉的故乡是什么?", + "answer": "额吉的故乡是呼籁旅行的核心产品系列,目前已迭代至V9版本。「额吉」在蒙古语中是「母亲」的意思,这个名字承载着呼籁对呼伦贝尔这片土地的深厚感情——希望每个来到这里的家庭,都能感受到草原如母亲般的温暖和包容。产品采用一家一单一车的定制模式,涵盖5天4晚到7天6晚共6个版本,满足不同家庭的假期安排和出行需求。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看所有产品版本" + } + ] + }, + { + "id": "what-products", + "question": "呼籁有哪些产品?", + "answer": "呼籁旅行目前有两大产品线:额吉的故乡V9系列和小蒙马夏令营。额吉的故乡V9系列是家庭亲子游产品,一家一单一车,提供5天4晚至7天6晚共6个版本,适合不同假期和偏好的家庭。小蒙马夏令营是亲子夏令营路线,6天5晚,每期8组家庭同行,爸爸妈妈带着孩子一起出发,融入草原写生、非遗研学、民俗体验三大主题。两大产品线都走呼伦贝尔核心线路,区别在于形式:额吉的故乡是私家定制,小蒙马是亲子夏令营。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看产品详情" + } + ] + }, + { + "id": "price-6d5n", + "question": "呼伦贝尔6天5晚多少钱?", + "answer": "影响最终费用的核心变量是三个:出行人数(几口人分摊车费和领队费)、行程天数(4天vs7天差异很大)、住宿标准(普通酒店vs品质酒店每晚差几百元)。呼籁不在网上标固定价,是因为这三个变量不同,同样6天5晚可以差出几千元——用一个数字代替你家的真实情况对你不公平。可以告诉定制师你家几口人、想玩几天、大概预算,2小时内给你一份完整的费用明细:包含什么、不包含什么、每一笔花在哪里,全部写进合同,不会中途加价。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师获取报价" + } + ] + }, + { + "id": "vs-group-tour", + "question": "亲子游和普通跟团什么区别?", + "answer": "三个本质区别。第一,你的车只拉你一家——跟团是30-50人挤大巴,景点门口堵车排队;呼籁是一家一单一车,想停就停,错峰走小路,别人堵车时你在山顶喝下午茶。第二,行程为你家设计——跟团走固定路线不能改,呼籁的行程根据孩子年龄、体能和你家偏好量身定制,5天4晚到7天6晚共6个版本,不是统一发货。第三,服务配置天壤之别——跟团1个导游管50人,呼籁是3管家(车务+房务+客服)+ 1定制师 + 1专属领队,5个人全程只服务你们一家。", + "relatedLinks": [ + { + "url": "/products", + "text": "了解呼籁的产品" + } + ] + }, + { + "id": "how-many-days-with-kids", + "question": "带小孩子选几天合适?", + "answer": "如果孩子在3-5岁,建议选6天5晚亲子版,行程节奏专门为小朋友设计,不会太赶。如果孩子在6岁以上,7天6晚深度版体验更完整,孩子的体力和好奇心都跟得上。假期有限的话,5天4晚版也能涵盖草原核心体验。总的来说,6天是大多数家庭的选择,时间和体验的平衡比较理想。出发前呼籁的定制师会根据孩子年龄推荐合适版本。", + "relatedLinks": [ + { + "url": "/products#guide", + "text": "按孩子年龄选产品" + } + ] + }, + { + "id": "summer-camp-age", + "question": "小蒙马夏令营适合几岁?", + "answer": "小蒙马夏令营是亲子夏令营,爸爸妈妈带着孩子一起参加,适合有学龄儿童的家庭。行程中的活动会根据孩子年龄适配难度,比如骑马教练会匹配合适的马匹,绘画老师会按基础指导,非遗手工也简单易操作。小蒙马和额吉的故乡的区别在于:额吉的故乡是一家一单一车的私家亲子游,小蒙马是每期8组家庭一起出发的亲子夏令营,孩子有伙伴一起玩,大人也能在团队氛围里放松。小蒙马还贴心设计了「爸妈托管」时段,专业工作人员带孩子做游戏,家长可以短暂休息。", + "relatedLinks": [ + { + "url": "/summer-camp", + "text": "了解小蒙马夏令营" + } + ] + }, + { + "id": "senior-travel", + "question": "可以给爸妈单独报名吗?自己没时间陪。", + "answer": "可以的。很多客户带孩子来过呼伦贝尔之后,又给爸妈报了名。自己上班没时间陪,但希望父母也能体验一次靠谱的草原旅行。我们的「牵手草原」长辈定制行程专为父母和长辈设计,行程节奏更缓、住宿更舒适、服务更细致,全程有领队照顾,您不在身边也能放心。也支持爸妈和他们的朋友一起组团出发。联系定制师说明情况,我们会根据长辈的身体状况和偏好量身安排。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师咨询" + } + ] + } + ] + }, + { + "id": "preparation", + "name": "出行准备类", + "questions": [ + { + "id": "what-to-wear", + "question": "去呼伦贝尔穿什么带什么?", + "answer": "呼伦贝尔早晚温差大,核心原则是洋葱式穿搭、层层叠加。7月白天16-34°C可以穿短袖短裤,但早晚只有十几度需要薄外套;5月和9月则需要厚外套甚至薄羽绒服。必带物品:SPF50+防晒霜(草原紫外线远比城市强,每2小时补涂)、含DEET成分的防蚊喷雾、宽檐帽+UV400墨镜、充电宝(必须有3C认证,不超过27000mAh)、耳塞和遮光眼罩(夏季凌晨3-4点天亮)、保温杯(多喝温水,不要饮用生水)、肠胃药和益生菌。鞋子以运动鞋为主,建议带两双换穿。拍照穿浅色、白色、红色、鹅黄色在草原上很出片。不用带矿泉水和方便面,海拉尔超市齐全。呼籁会提供哈达、儿童安全座椅、一次性雨衣、骑马手套、防蚊喷雾等物品,出发前管家会发详细行前清单。更多穿搭和行李细节请查看出行指南。", + "relatedLinks": [ + { + "url": "/guides", + "text": "查看完整出行指南" + } + ] + }, + { + "id": "best-month", + "question": "呼伦贝尔几月去最好?", + "answer": "呼伦贝尔夏季旅游季节是5-10月,各月体验不同。5月草刚返青,白天5-26°C、夜间可低至-6°C,需厚外套甚至羽绒服,游客极少适合错峰。6月上旬草原开始变绿,下旬油菜花开放,白天13-28°C,体感舒适。7月是最旺季,草原最美,满眼绿色加野花,白天可达34°C但不闷热,是大多数家庭的选择。8月暑假高峰,下旬渐有秋意。9月白桦林开始变黄,秋色渐浓,蚊虫基本没了,早晚已经很凉需要厚外套。国庆期间秋末接近入冬,部分年份可能飘雪。冬季12-2月可以体验雪原风光。如果时间灵活,6月中下旬和9月初的体验也非常好,且价格更友好。更多各月穿搭建议请查看出行指南。", + "relatedLinks": [ + { + "url": "/guides", + "text": "查看各月穿搭指南" + } + ] + }, + { + "id": "bugs-prevention", + "question": "蚊虫多吗?防蚊怎么做?", + "answer": "草原上6-8月确实有蚊虫,湿地区域7月中旬为高峰期,日出前和日落后蚊虫最活跃。但做好防护就没什么大问题。建议带含DEET成分的防蚊喷雾,穿浅色长袖长裤效果最好(深色衣服反而容易招蚊子)。另外需要注意蜱虫防护:户外活动时扎紧裤脚和袖口,每天活动结束后检查皮肤(尤其腋下、腰部、发际线、耳后),万一发现蜱虫叮咬不要用手硬拽,用尖头镊子贴近皮肤夹住蜱虫头部垂直拔出,然后碘伏消毒。呼籁的领队随车备有蚊不叮和防蚊喷雾,也携带急救包。大部分家庭反馈蚊虫影响可控,不必过度担心。", + "relatedLinks": [ + { + "url": "/guides", + "text": "查看完整出行指南" + } + ] + }, + { + "id": "summer-peak-season", + "question": "暑假去草原人多吗?需要提前多久订?", + "answer": "7月15日至8月5日是全年最旺的黄金期,热门营地和优质住宿在旺季通常提前2-3个月就已订满。如果确定暑假出行,越早订越好,6月初甚至更早开始沟通是常规操作。人多并不代表体验差——呼籁的「一家一单一车」模式意味着整个行程只有你一家人,没有其他游客打扰;草原足够大,莫日格勒河沿线和边境公路不是密集景区,感受不到城市景点的「人挤人」。暑假草原亲子游的最大优势是:孩子正好放假、天气最好、草最绿、那达慕民俗活动最丰富。如果6月初或8月下旬出行,游客更少、价格相对友好,体验同样完整,是时间灵活家庭的优选。", + "relatedLinks": [ + { + "url": "/calendar", + "text": "查看各月出行指南" + } + ] + }, + { + "id": "altitude-sickness", + "question": "呼伦贝尔有高原反应吗?", + "answer": "没有。呼伦贝尔的平均海拔在600-800米左右,属于平原地区,不会产生高原反应。这也是呼伦贝尔特别适合亲子游的原因之一——老人和小孩都不需要担心海拔问题,身体没有额外负担。唯一需要注意的是昼夜温差较大,注意增减衣物即可。", + "relatedLinks": [ + { + "url": "/guides", + "text": "查看穿搭与出行指南" + } + ] + }, + { + "id": "kids-safety", + "question": "带孩子去安全吗?", + "answer": "安全是呼籁最重视的事项。首先,呼籁的车辆和司机都有严格管理,车况定期检查,车辆配备儿童安全座椅。其次,呼籁配备专业领队,每天的活动都有安全评估和应急预案,领队随身携带急救包。第三,所有行程均购买旅游责任险(保额1000万),签订正规电子合同。各项活动都有明确的安全规范:骑马穿越全程有专业马师随行,年龄较小的孩子由马师牵引或抱着骑;ATV越野车2人一车系安全带,12岁以下需家长陪同;草原滑草要求身高1.2米以上独立乘坐,不足1.2米可和大人一起坐。0-3岁幼童有专属活动推荐,不建议参与骑马穿越和ATV等项目。呼籁额吉的故乡产品已服务超过10000个家庭、累计39000余人次出行,安全记录良好。", + "relatedLinks": [ + { + "url": "/reviews", + "text": "查看其他家庭的评价" + } + ] + } + ] + }, + { + "id": "trust", + "name": "信任类", + "questions": [ + { + "id": "is-reliable", + "question": "呼籁旅行怎么样靠谱吗?", + "answer": "呼籁旅行是呼伦贝尔本地品牌,隶属内蒙古呼籁文旅投资开发集团有限公司,旗下9家企业。集团核心旅行社主体——呼籁山河国旅成立于2005年,深耕呼伦贝尔11年。呼籁拥有自有车队、自有营地(敖包相会景区旁)、自营旅拍团队,额吉的故乡产品已服务超过10000个家庭、累计39000余人次。所有行程签订正规电子合同,旅游责任险保额1000万,全程无购物无隐形消费。您可以在客户评价页面查看真实的出行反馈。", + "relatedLinks": [ + { + "url": "/reviews", + "text": "查看客户真实评价" + }, + { + "url": "/about", + "text": "了解呼籁的资质" + } + ] + }, + { + "id": "is-legal", + "question": "呼籁是正规旅行社吗?", + "answer": "是的。呼籁旅行集团旗下的呼籁山河国旅,成立于2005年,持有正规旅行社经营许可证,所有行程均签订正规电子合同,缴纳旅行社质量保证金,受旅游管理部门监管。呼籁集团旗下9家企业,包括自有车队和营地,具备完整的旅行服务链条。旅游责任险保额1000万。选择有资质的旅行社,是出行安全的第一道保障。", + "relatedLinks": [ + { + "url": "/about", + "text": "了解呼籁集团" + } + ] + }, + { + "id": "refund-policy", + "question": "退改政策是什么?", + "answer": "呼籁的退改政策清晰透明:预售定金阶段,如果还没确定出行日期,定金随时可退;一旦确定了日期,出发前7天以上可无条件全退。所有费用和退改条款均写在正规电子合同里,受法律保护。如果因为不可抗力(如极端天气等)无法出行,呼籁会协商妥善处理,可以选择改期或退款。具体条款以合同为准,建议确认行程后联系定制师了解详细说明。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师了解详情" + } + ] + }, + { + "id": "hidden-cost", + "question": "费用含什么?有隐形消费吗?", + "answer": "呼籁的报价包含:全程专属用车、司机、住宿、专属领队服务、行程内所有体验活动、旅行保险、呼籁自营旅拍服务。不包含的项目会在合同中明确列出,通常是往返大交通(机票/火车票)和个人消费。呼籁承诺没有隐形消费,不会在行程中推销购物店或加价项目。所有费用明细在签订合同时一目了然,让每一分钱都花在体验上。", + "relatedLinks": [ + { + "url": "/products", + "text": "了解产品详情" + } + ] + }, + { + "id": "why-no-meals", + "question": "行程为什么不含中餐和晚餐?", + "answer": "呼籁做的是精品小团,一家一单一车,每团只有您这一家。人数少,无法像大巴团那样安排统一团餐(团餐本质上是大团拿回扣的地方)。不含中晚餐,反而让您多了自主权:喜欢哪家餐厅就去哪家,想在草原上野餐也可以,领队可以随时给推荐。早餐一般含在住宿费用里。这是精品小团和大拼团在餐饮安排上的本质区别——我们不靠餐厅返点赚钱,不强制去指定餐厅消费。", + "relatedLinks": [ + { + "url": "/pricing", + "text": "查看费用包含明细" + } + ] + }, + { + "id": "deposit-group-service", + "question": "定金即入群是什么?报名流程是怎样的?", + "answer": "「定金即入群」是呼籁的服务承诺:交了定金就加入大群(200+人),大家一起见证呼籁的服务。整个报名流程是:第一步,交定金入大群;第二步,确定出行日期后,呼籁为您单独建立专属服务小群,群里有定制师、客服、房务管家、车务管家;第三步,出发前提前确认酒店房型、签订正规电子合同、购买旅游意外险;第四步,出发前3天专人再次确认全部行程细节。全程透明,每一步都可追溯。大群里有历届会员在,你能看到其他家庭的真实出行记录,不是孤立地面对一家旅行社。", + "relatedLinks": [ + { + "url": "/contact", + "text": "立即联系定制师" + } + ] + }, + { + "id": "how-to-contact", + "question": "如何联系呼籁旅行?", + "answer": "联系呼籁最方便的方式是添加微信客服,可以直接沟通行程需求并获取定制方案。您也可以通过官网 1814.love 在线咨询,或拨打客服电话。所有官方联系方式均在「联系我们」页面公示,请认准官方渠道,谨防假冒。呼籁的定制师会根据您的家庭情况和假期安排,推荐合适的产品版本。", + "relatedLinks": [ + { + "url": "/contact", + "text": "查看所有联系方式" + } + ] + } + ] + }, + { + "id": "experience", + "name": "体验类", + "questions": [ + { + "id": "accommodation", + "question": "呼伦贝尔住哪里比较好?", + "answer": "呼伦贝尔的住宿选择比较多样:城区有星级酒店,草原上有蒙古包和特色民宿,还有呼籁自有的营地住宿。呼籁会根据行程路线精选住宿,确保干净舒适。如果选择探索版行程,住宿标准会进一步升级。需要说明的是,草原上的住宿条件和城市有差距,但这也是草原体验的一部分。呼籁会提前告知住宿标准,让您有合理预期。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看探索版行程" + } + ] + }, + { + "id": "horse-riding", + "question": "能骑马吗?孩子能骑吗?", + "answer": "可以骑马,这是呼伦贝尔最受家庭欢迎的体验之一。骑马穿越往返约1小时,马匹都是经过训练的温顺马,全程有专业马师随行陪同。如果不太敢骑或不熟练,马师会牵着马走,不额外收费;年龄较小的孩子由马师抱着骑。请穿长裤和运动鞋,呼籁会提前准备骑马手套。骑马时双手握住缰绳、身体放松,不要站在马的后面。0-3岁幼童不建议参与骑马穿越体验,但可以体验喂小羊、营地儿童游乐架、轮胎秋千等温和活动。除骑马外,行程中还可体验草原滑草(身高1.2米以上可独立乘坐)、ATV越野(2人一车)等多种户外活动。", + "relatedLinks": [ + { + "url": "/guides#activities", + "text": "查看活动安全须知" + } + ] + }, + { + "id": "charter-vs-group", + "question": "包车自由行和拼团哪个好?", + "answer": "这取决于您的需求和预算。拼团价格更低,但行程固定、同行人员不可控、自由度很低。呼籁做的是一家一单一车的亲子游,价格高于拼团,但一家一车,行程可调整,只和自己家人在一起,体验完全不同。特别是带孩子出行,亲子游的优势很明显——孩子需要休息可以随时停,想多玩一会儿也没人催。如果预算允许,带孩子出行建议选亲子游。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看亲子游产品" + } + ] + }, + { + "id": "how-many-days-best", + "question": "呼伦贝尔玩几天合适?", + "answer": "如果时间允许,建议至少5天以上。4天能看到核心风光,但节奏会比较紧凑;5-6天是大多数家庭的选择,体验较为完整;7天能深入探索,包括牧云山顶、寻龙诀秘境等独家资源点。呼籁提供4-7天的多个版本,可以根据假期灵活选择。第一次来呼伦贝尔的家庭,6天5晚是比较推荐的时长,时间和体验的平衡较好。", + "relatedLinks": [ + { + "url": "/products#guide", + "text": "按假期长度选产品" + } + ] + } + ] + }, + { + "id": "popular", + "name": "高频咨询类", + "questions": [ + { + "id": "driver-guide-quality", + "question": "司机和领队怎么样?", + "answer": "呼籁的司机都经过严格筛选、培训和考核,熟悉呼伦贝尔的每条路线。领队都是经过呼籁体系化培训和严格考核的,统一服务标准。额吉的故乡等一单一团产品配备3管家(车务管家+房务管家+客服管家)+ 1定制师 + 1专属领队,全程只服务您一个家庭,旅拍部分含呼籁自营旅拍服务。小蒙马夏令营配备全程2位亲子领队 + 1位跟拍摄影师 + 专属司机。很多回头客会指定同一位领队,就是因为服务到位、值得信赖。在客户评价中,司机和领队是被提及频率很高的好评项。", + "relatedLinks": [ + { + "url": "/reviews", + "text": "看客户怎么评价" + } + ] + }, + { + "id": "rainy-day-plan", + "question": "下雨怎么办?有备用方案吗?", + "answer": "呼伦贝尔夏天的天气变化较快,局部阵雨是常有的事。呼籁的每条行程都有备用方案,如果户外活动受天气影响,领队会及时调整安排替代活动或调换行程顺序。草原的雨通常来得快去得也快,很少影响一整天的行程。建议随身带一件轻便雨衣,比打伞方便。呼籁的领队经验丰富,会根据实时天气灵活应对,确保行程体验不打折扣。", + "relatedLinks": [ + { + "url": "/guides#clothing", + "text": "查看各月天气与穿搭建议" + } + ] + }, + { + "id": "multi-family", + "question": "能不能两家或三家一起出行?", + "answer": "当然可以,多家庭同行是呼籁很受欢迎的出行方式。呼籁会根据家庭数量安排合适的车辆配置(可以多车同行),孩子们在一起玩更开心,大人也能互相搭把手。费用可以按家庭分摊,性价比更高。建议多家庭出行时选6天5晚亲子版,活动设计特别适合孩子们一起参与。具体方案可以联系定制师沟通。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师规划行程" + } + ] + }, + { + "id": "custom-itinerary", + "question": "行程能根据需求调整吗?", + "answer": "可以,这正是亲子游的意义——行程不是固定的模板。在呼籁的标准版本基础上,您可以和定制师沟通调整:想多留半天在某个地方、想去某个特定的点、想安排特别的体验活动,都可以讨论。定制师会根据路线合理性和时间给出专业建议。大幅度调整可能影响报价,具体以沟通结果为准。呼籁已迭代至V9版本,标准行程本身经过多年优化,适合绝大多数家庭。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师" + } + ] + }, + { + "id": "hulunbuir-vs-dali-xinjiang", + "question": "呼伦贝尔和大理、新疆比哪个值得去?", + "answer": "三个目的地各有侧重,不存在绝对的高下,主要看你的出行目的和家庭需求。大理适合休闲慢游、文艺感强,但草原体验几乎没有;新疆壮观震撼、景点分散,飞行时间长且行程强度大,带小孩子体力压力较大;呼伦贝尔是中国保存最完好的天然草原,海拔平均600-800米无高原反应、对孩子和老人特别友好、飞行时间仅2.5小时(北京出发)、夏季气候凉爽无酷暑,是三者中对亲子家庭最友好的目的地。如果你的核心需求是:草原体验、带孩子、身体无高反限制、行程不想太赶——呼伦贝尔是更合适的选择。如果你追求大西北的边境感或摄影极致风光,新疆更合适;如果你更喜欢文艺慢生活,大理更适合。", + "relatedLinks": [ + { + "url": "/blog/hulunbuir-travel-guide-2026", + "text": "查看呼伦贝尔旅游攻略" + } + ] + }, + { + "id": "hulunbuir-food", + "question": "呼伦贝尔有什么特色美食?", + "answer": "呼伦贝尔的饮食文化以蒙古族和俄罗斯族两种风味为主,是国内少见的草原+边境美食组合。蒙古族必吃:手把肉(白水煮整块羊腿/羊排,蘸蒜汁或直接吃,鲜嫩无膻)、蒙古奶茶(用砖茶加鲜奶和盐煮成,咸香浓郁)、奶豆腐(新鲜牛奶制成的固体奶制品,微酸有嚼劲)、风干牛肉(高蛋白低脂,适合当零食)、黄油(牧民手工提炼,拌炒米吃)。俄罗斯族风味:列巴(恩和俄罗斯族村的手工大面包,外脆内软)、格瓦斯(发酵饮料,口感微酸清爽)。海拉尔市区还有蒙古烤肉、涮羊肉等选择。呼籁行程中会安排牧民家就餐和营地特色餐,让你吃到最正宗的草原味道。如有饮食过敏(特别是牛奶蛋白)请提前告知定制师。", + "relatedLinks": [ + { + "url": "/guides", + "text": "查看出行指南" + } + ] + }, + { + "id": "accommodation-types", + "question": "草原上住什么?蒙古包住宿是什么体验?", + "answer": "呼伦贝尔的住宿分三大类型:一是城区星级酒店(海拉尔市区,设施完善,适合过渡住宿);二是草原营地蒙古包(最具特色,帐篷或蒙古包形态,部分有独立卫浴,真实草原住宿体验);三是边境特色民宿(室韦/恩和俄罗斯风情民宿,木屋风格)。蒙古包住宿是什么体验?推开圆形的木门,里面是低矮的床铺和简约的蒙古族装饰,夜晚能听到风声和草虫声,清晨打开门第一眼就是连绵草原——这是城市里完全感受不到的空间感。呼籁自有营地的蒙古包配备独立卫浴,不存在「公共厕所在帐篷外面」的情况,带孩子完全放心。草原住宿的条件与城市有差距,但这正是体验的一部分——大多数家庭反馈这是整个行程记忆最深的夜晚。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看行程中的住宿安排" + } + ] + }, + { + "id": "is-it-worth-going", + "question": "呼伦贝尔值得去吗?会审美疲劳吗?", + "answer": "值得去。对于大多数没去过草原的家庭,呼伦贝尔会超出预期——开阔的视野、干净的空气、和城市完全不同的生活节奏,是很多人第一次感受到「我终于放松了」的地方。孩子在草原上的变化更明显:不盯手机、不吵闹、愿意早起看日出、主动去追牛羊,这种体验在其他目的地很难复制。会不会审美疲劳?可能性很小,因为草原不只是「一大片绿地」。呼伦贝尔有河曲(莫日格勒河)、湿地(额尔古纳)、森林(大兴安岭白桦林)、边境(中俄边境公路)、人文(蒙古族牧民文化)五种不同景观,每天的体验都不同。呼籁的11次迭代也是在不断解决「每天看草原不腻吗」这个问题——把不同景观、体验活动、文化场景拼合成节奏合理的行程。来过的家庭中,有超过30%会在第二年带着亲戚或朋友再来(呼籁称之为「回头客带新客」),这是最真实的回答。", + "relatedLinks": [ + { + "url": "/reviews", + "text": "看10000+家庭的真实感受" + } + ] + }, + { + "id": "vs-other-charter", + "question": "和其他呼伦贝尔包车有什么区别?", + "answer": "呼伦贝尔做包车的很多,但呼籁不只是包车。区别在于:第一,呼籁是正规旅行社(旗下呼籁山河国旅成立于2005年),签正规电子合同,旅游责任险1000万,有法律保障;很多包车是个人或无资质的车队。第二,呼籁提供完整的服务团队(3管家+定制师+专属领队),不只是一个司机带路。第三,呼籁有自有营地、自有车队、牧云山顶和寻龙诀秘境等独家体验资源,这些是普通包车司机给不了的。第四,呼籁的行程经过专业设计和9次迭代优化,是一套成熟的旅行服务体系。", + "relatedLinks": [ + { + "url": "/about", + "text": "了解呼籁的实力" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/data/gallery.json b/data/gallery.json new file mode 100644 index 0000000..444dc04 --- /dev/null +++ b/data/gallery.json @@ -0,0 +1,158 @@ +{ + "seo": { + "title": "呼籁旅拍 | 草原旅拍作品集 | 呼伦贝尔蒙古袍亲子旅拍", + "description": "呼籁旅行自营旅拍服务,200+件蒙古族服饰,呼籁自营营地独家取景。亲子旅拍/儿童写真/全家福,随行拍摄当日交付。", + "keywords": "草原旅拍,呼伦贝尔旅拍,蒙古袍旅拍,亲子旅拍,呼籁营地旅拍" + }, + "intro": { + "description": "呼籁旅拍是呼籁旅行的自营旅拍服务,在呼籁自营营地进行拍摄,摄影师随行,用真实光线记录每个家庭最自然的草原瞬间。所有旅拍均含底片,精修照片当日交付,无任何隐形消费。", + "stats": [ + { "value": "200+", "label": "件蒙古服饰", "note": "传统袍服·节日盛装·亲子套装" }, + { "value": "11年", "label": "深耕呼伦贝尔", "note": "最懂草原光线的摄影团队" }, + { "value": "5000+", "label": "组旅拍作品", "note": "每组都是独一无二的家庭故事" }, + { "value": "1处", "label": "自营营地取景", "note": "呼籁营地·独家秘境" } + ] + }, + "categories": [ + { "key": "all", "label": "全部作品" }, + { "key": "family", "label": "亲子家庭" }, + { "key": "solo", "label": "儿童写真" } + ], + "works": [ + { + "id": "photo-01", + "title": "父子蒙古袍·营地合影", + "category": "family", + "location": "呼籁营地", + "description": "父子俩身着蓝色蒙古袍,在呼籁营地指示牌前开心合影。", + "image": "/旅拍照片/IMG_1244.JPG", + "orientation": "portrait" + }, + { + "id": "photo-02", + "title": "父子草原奔跑", + "category": "family", + "location": "呼籁营地", + "description": "穿着蒙古袍的父子俩在草原上并肩奔跑,笑容灿烂。", + "image": "/旅拍照片/IMG_1245.JPG", + "orientation": "landscape" + }, + { + "id": "photo-03", + "title": "骑在爸爸肩上", + "category": "family", + "location": "呼籁营地", + "description": "儿子骑在爸爸肩膀上,父子同穿蓝色蒙古袍,蓝天绿草间的温馨瞬间。", + "image": "/旅拍照片/IMG_1246.JPG", + "orientation": "portrait" + }, + { + "id": "photo-04", + "title": "一家三口草地游戏", + "category": "family", + "location": "呼籁营地", + "description": "爸爸、妈妈和女儿围坐在草地上玩拍手游戏,女儿笑得合不拢嘴。", + "image": "/旅拍照片/IMG_1247.JPG", + "orientation": "landscape" + }, + { + "id": "photo-05", + "title": "爸爸扛起小公主", + "category": "family", + "location": "呼籁营地", + "description": "爸爸把穿着蓝色蒙古裙的女儿扛在肩上奔跑,蓝天下尽情欢笑。", + "image": "/旅拍照片/IMG_1248.JPG", + "orientation": "portrait" + }, + { + "id": "photo-06", + "title": "父女温馨时刻", + "category": "family", + "location": "呼籁营地", + "description": "小女儿调皮地捏爸爸的鼻子,穿蒙古袍的爸爸笑着配合,温馨又可爱。", + "image": "/旅拍照片/IMG_1249.JPG", + "orientation": "portrait" + }, + { + "id": "photo-07", + "title": "父女草原追逐", + "category": "family", + "location": "呼籁营地", + "description": "穿着蓝色裙子的女儿和蒙古袍爸爸在草原上开心追逐奔跑。", + "image": "/旅拍照片/IMG_1250.JPG", + "orientation": "portrait" + }, + { + "id": "photo-08", + "title": "一家三口·小推车", + "category": "family", + "location": "呼籁营地", + "description": "爸爸拉着绿色小推车载着女儿飞奔,妈妈在后面张开双臂追赶,快乐溢出画面。", + "image": "/旅拍照片/IMG_1251.JPG", + "orientation": "landscape" + }, + { + "id": "photo-09", + "title": "粉色蒙古盛装·旗帜前", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿着精美的粉色蒙古盛装,在呼伦贝尔旗帜前巧笑嫣然。", + "image": "/旅拍照片/IMG_1252.JPG", + "orientation": "landscape" + }, + { + "id": "photo-10", + "title": "草原上的旋转舞", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿粉色蒙古盛装在草原上翩翩旋转,裙摆飞扬。", + "image": "/旅拍照片/IMG_1253.JPG", + "orientation": "landscape" + }, + { + "id": "photo-11", + "title": "草原上的飞踢", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿着粉色蒙古盛装在草原上踢腿跳跃,活力四射。", + "image": "/旅拍照片/IMG_1254.JPG", + "orientation": "portrait" + }, + { + "id": "photo-12", + "title": "奔跑的背影", + "category": "solo", + "location": "呼籁营地", + "description": "粉色蒙古盛装的小女孩在草原上奔跑,辫子和裙摆随风飞扬的背影。", + "image": "/旅拍照片/IMG_1255.JPG", + "orientation": "portrait" + }, + { + "id": "photo-13", + "title": "白裙俏皮少女", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿着白色蒙古裙搭配棕色马靴,在草原上俏皮摆pose。", + "image": "/旅拍照片/IMG_1256.JPG", + "orientation": "portrait" + }, + { + "id": "photo-14", + "title": "草原笑脸·蒙古头饰", + "category": "solo", + "location": "呼籁营地", + "description": "戴着精美蒙古族头饰的小女孩对着镜头伸出双手,笑容灿烂无比。", + "image": "/旅拍照片/IMG_1258.JPG", + "orientation": "landscape" + }, + { + "id": "photo-15", + "title": "母女牵手·草原漫步", + "category": "family", + "location": "呼籁营地", + "description": "妈妈和女儿穿着白色长裙手牵手漫步在草原上,温柔而美好。", + "image": "/旅拍照片/IMG_1259.JPG", + "orientation": "landscape" + } + ] +} diff --git a/data/guides.json b/data/guides.json new file mode 100644 index 0000000..15f107f --- /dev/null +++ b/data/guides.json @@ -0,0 +1,522 @@ +{ + "pageIntro": "11年带队,我们见过最多的问题就是「出发前没准备好」。这份指南把穿搭、行李、证件、活动安全一次说清楚——你需要带什么,不需要带什么,哪些地方容易踩坑,全在这里。", + "sections": [ + { + "id": "documents", + "title": "证件准备", + "subtitle": "出发前第一件事", + "icon": "📋", + "content": "别的都能补,证件忘了真回不了头。出发前一晚,请全家人把证件放在一起,拍张照存手机里备用。", + "tips": [ + "建议把证件拍照存手机相册,万一遗失可以应急。电子身份证在部分场景也可以使用。" + ], + "items": [ + { + "text": "身份证(成人必带)", + "important": true + }, + { + "text": "户口本(16周岁以下儿童必带)", + "important": true + }, + { + "text": "优惠证件(如有):学生证、教师资格证、军官证、残疾证、老年证等,部分景点可享门票减免", + "important": false + }, + { + "text": "医保卡或商业保险卡(以防万一)", + "important": false + }, + { + "text": "少量现金(大部分地方支持手机支付,但偏远牧区备一点更安心)", + "important": false + } + ] + }, + { + "id": "clothing", + "title": "穿搭建议", + "subtitle": "洋葱式穿搭,层层叠加,随时增减", + "icon": "👔", + "content": "呼伦贝尔昼夜温差大,不同月份差异也大。不管哪个月来,包里永远塞一件外套。", + "months": [ + { + "desc": "草刚返青,花还没全开,游客少,适合错峰出行", + "name": "5月", + "tempDay": "5~26°C", + "kidsWear": "比大人多加一层,薄羽绒服随身带,晚上活动一定穿上", + "adultWear": "长袖打底+厚外套(冲锋衣或抓绒),早晚穿羽绒服,怕冷的备秋裤", + "highlight": false, + "tempNight": "-6~10°C" + }, + { + "desc": "草原开始变绿,野花初开,气温回升但早晚仍凉", + "name": "6月上旬", + "tempDay": "10~26°C", + "kidsWear": "薄卫衣+可脱卸的外套,书包里塞一件薄羽绒应急", + "adultWear": "白天长袖/薄卫衣+轻薄外套,早晚加抓绒衫或薄羽绒,怕晒的备防晒衣", + "highlight": false, + "tempNight": "1~14°C" + }, + { + "desc": "草原进入最绿的时候,油菜花陆续开放,白天舒适宜人", + "name": "6月下旬", + "tempDay": "13~28°C", + "kidsWear": "短袖+薄外套,晚上篝火活动加一件长袖", + "adultWear": "短袖/T恤+薄外套或防晒衫,早晚加一件卫衣就够了", + "highlight": false, + "tempNight": "5~18°C" + }, + { + "desc": "草原最美的季节,满眼绿色+野花,中午会有点晒但不闷热", + "name": "7月(最旺季)", + "note": "7月中下旬满洲里白天可达34°C,但早晚温差大,出门随身带件外套准没错", + "tempDay": "16~34°C", + "kidsWear": "短袖+薄长裤(草地上跑建议穿长裤防蚊虫),备一件拉链卫衣随时穿脱", + "adultWear": "短袖短裤+防晒衣,早晚加一件薄外套或卫衣。中午紫外线强,帽子墨镜防晒霜三件套必备", + "highlight": true, + "tempNight": "10~24°C" + }, + { + "desc": "暑假高峰,下旬起草原渐有秋意,偶有阵雨,雨后特别清爽", + "name": "8月", + "tempDay": "14~30°C", + "kidsWear": "短袖+薄外套,8月下旬出行的建议带一件抓绒", + "adultWear": "短袖+轻便外套,下旬建议多带一件厚一点的外套", + "highlight": false, + "tempNight": "6~20°C" + }, + { + "desc": "秋色渐浓,白桦林开始变黄,蚊虫基本没了,早晚已经很凉", + "name": "9月", + "tempDay": "6~24°C", + "kidsWear": "长袖+厚外套,薄羽绒必备,帽子手套也建议带着", + "adultWear": "长袖+厚外套(冲锋衣或呢大衣),早晚穿薄羽绒或抓绒,围巾也可以带上", + "highlight": false, + "tempNight": "-4~12°C" + }, + { + "desc": "秋末接近入冬,部分年份可能飘雪,但秋色也最浓烈", + "name": "国庆(10.1-10.7)", + "tempDay": "0~18°C", + "kidsWear": "同样按冬天标准,注意保暖帽和手套,风大时口罩也带上", + "adultWear": "按冬天穿——保暖内衣+毛衣+羽绒服+秋裤,帽子围巾手套齐上", + "highlight": false, + "tempNight": "-10~6°C" + } + ], + "extraTips": [ + "阿尔山海拔较高(约1000米),整体比海拉尔低4-6°C,即使7月晚间也需要外套。走阿尔山线路的客人请额外多带一件保暖衣物。", + "鞋子以运动鞋为主,建议带两双换穿。万一踩湿了弄脏了,换着穿不耽误事。不建议穿新鞋出行。高跟鞋、凉鞋在草地上走不了。", + "拍照穿浅色、白色、红色、鹅黄色效果好。连衣裙、民族风披肩适合营地晚会和旅拍。带小朋友的家庭可以准备一套亲子装。" + ] + }, + { + "id": "packing", + "title": "行李清单", + "subtitle": "该带什么、不该带什么,一目了然", + "icon": "🎒", + "content": "", + "tips": [ + "出发前记得清理手机存储空间,草原上拍照量很大,很多人到第三天手机就满了。", + "部分酒店有洗衣服务,呼籁也会备洗衣液,行程中换洗衣物不用太担心。" + ], + "provided": { + "items": "哈达、儿童安全座椅、一次性拖鞋、一次性雨衣+鞋套、骑马手套、一次性马桶垫、蚊不叮、防蚊喷雾、创口贴、洗衣液、卫生巾、牙签线、扑克、指甲刀、头绳、晕车贴、口罩、棉签等", + "title": "这些我们已经帮您准备好了", + "description": "以下物品不需要自己带,我们会在旅途中为每位客人提供:" + }, + "dontBring": [ + "大行李箱(车上空间有限,建议1个中号箱+1个随身小包)", + "过多现金(手机支付基本全覆盖)", + "矿泉水、方便面等日用品(海拉尔超市齐全,不用寄)" + ], + "categories": [ + { + "name": "防晒与护肤", + "note": "草原紫外线远比城市里强,防晒不是选做题", + "items": [ + { + "text": "防晒霜 SPF50+ PA++++(每隔2小时补涂一次)", + "important": true + }, + { + "text": "宽檐帽(帽檐建议10cm以上,渔夫帽最实用)+ UV400墨镜", + "important": true + }, + { + "text": "冰袖 + 防晒衣或披肩", + "important": false + }, + { + "text": "保湿面霜 + 润唇膏(草原干燥,嘴唇容易裂)", + "important": false + }, + { + "text": "补水面膜(呼伦贝尔气候偏干,晚上敷一片补补水)", + "important": false + }, + { + "text": "折叠晴雨伞(防晒遮阳、突遇阵雨都能用)", + "important": false + } + ] + }, + { + "name": "健康防护", + "note": "", + "items": [ + { + "text": "防蚊液(6-8月草原蚊虫较多,户外必备)", + "important": true + }, + { + "text": "肠胃药 + 益生菌(换了水土,有备无患)", + "important": true + }, + { + "text": "晕车药或晕车贴(部分路段弯道较多,提前贴好)", + "important": false + }, + { + "text": "保温杯(多喝温水少喝生水,自带保温杯随时能喝上热水)", + "important": true + }, + { + "text": "过敏药/特殊用药(呼伦贝尔当地药店品种有限,请务必从家里带齐)", + "important": true + } + ] + }, + { + "name": "电子设备", + "note": "", + "items": [ + { + "text": "充电宝(必备!请携带有3C认证标志的,不超过27000mAh,乘机需随身携带不可托运)", + "important": true + }, + { + "text": "自拍杆或小三脚架", + "important": false + }, + { + "text": "数据线(多带一根备用)", + "important": false + }, + { + "text": "无人机(如有。注意:海拉尔市区、满洲里、室韦、边防公路沿线严禁飞行)", + "important": false + } + ] + }, + { + "name": "睡眠相关", + "note": "", + "items": [ + { + "text": "耳塞或隔音耳罩(蒙古包和木刻楞隔音一般)", + "important": true + }, + { + "text": "遮光眼罩(夏季凌晨3-4点天就亮了)", + "important": true + }, + { + "text": "U型头枕(车程较长,路上补觉用得上)", + "important": false + } + ] + }, + { + "name": "个人洗护", + "note": "", + "items": [ + { + "text": "自用洗浴拖鞋", + "important": true + }, + { + "text": "一次性内衣内裤(旅途中换洗不方便,多备几套)", + "important": false + }, + { + "text": "洗脸巾(一次性的,比酒店毛巾放心)", + "important": false + }, + { + "text": "儿童洗漱用品(当地酒店儿童洗漱用品不太齐全,建议自带)", + "important": true + } + ] + } + ] + }, + { + "id": "activities", + "title": "活动安全须知", + "subtitle": "各项体验活动的安全要点", + "icon": "🛡️", + "content": "各项目对儿童的年龄和身高要求不同,具体以领队现场说明为准。有疑问可以提前问客服。", + "activities": [ + { + "icon": "🐴", + "name": "骑马穿越", + "points": [ + "往返约1小时,马匹都是经过训练的温顺马,全程有专业马师随行", + "不太敢骑或不熟练,马师会牵着马走,不额外收费。年龄较小的孩子由马师抱着骑", + "请穿长裤和运动鞋,不要穿裙子或拖鞋。呼籁会提前准备骑马手套", + "骑马时双手握住缰绳,身体放松,不要大声喊叫或突然拍打马匹", + "不要站在马的后面,马匹受惊时可能后踢,请始终从侧面靠近", + "请听从马师指引,不要自行策马奔腾" + ] + }, + { + "icon": "🚙", + "name": "ATV全地形越野车", + "points": [ + "每辆车2人一车,请系好安全带,听从教练指引", + "行驶中双手紧握扶手,不要将身体任何部位伸出车外", + "整队一起行驶,跟紧前车,不要超车、不要脱离队伍", + "孕妇、心脏病患者、严重腰椎颈椎疾病者不建议乘坐", + "12周岁以下儿童需由家长陪同乘坐", + "雨天前后路面泥泞,建议额外备一套换洗衣物" + ] + }, + { + "icon": "🛝", + "name": "滑草(乌兰山景区)", + "points": [ + "不限次数,单次体验约1分钟,很刺激也很过瘾", + "身高1.2m以上、体重190斤以内可独立乘坐。身高不足1.2m可和大人一起坐,两人体重相加不超190斤", + "请穿运动鞋、长裤,滑行途中不可中途跳车", + "请勿佩戴无系绳帽子,高速滑行时帽子飞掉容易遮挡视线", + "有心脏病、高血压、关节疾病的客人请量力而行", + "大风、下雨等特殊天气时景区娱乐项目暂停开放" + ] + }, + { + "icon": "🏕️", + "name": "呼籁营地", + "points": [ + "营地位于敖包相会景区内,天下第一敖包旁,可俯瞰伊敏河湿地", + "营地活动包括旅拍、BBQ等,注意脚下草原坑洼", + "营地下方是湿地有一定坡度,请看管好小朋友,不要靠近坡边", + "BBQ用餐时注意火源安全,不要让小朋友独自靠近烤炉", + "敖包上的石头、经幡和哈达是祭祀物品,请不要随意取走或踩踏", + "想添石祈福可以从地上捡一块石头轻轻放上去,顺时针绕敖包走三圈" + ] + }, + { + "icon": "🐄", + "name": "牧场体验", + "points": [ + "包含喂羊、挤牛奶、做奶制品等互动项目", + "接触动物后请及时洗手", + "不要从动物背后靠近,动作轻柔,避免惊吓到牲畜" + ] + } + ] + }, + { + "id": "practical", + "title": "实用信息", + "subtitle": "几件小事,提前知道更安心", + "icon": "💡", + "content": "", + "apps": [ + { + "names": "巧摄、莉景天气", + "category": "查日出日落" + }, + { + "names": "醒图、Snapseed", + "category": "修图" + }, + { + "names": "美图秀秀、轻颜相机、POCO相机", + "category": "拍照美颜" + }, + { + "names": "天文通(查银河+光污染地图)、Star Walk", + "category": "看星空" + }, + { + "names": "花伴侣、形色,或微信搜「花草日记植物识别」小程序", + "category": "认花草" + }, + { + "names": "一刻相册(出发前同步照片,腾出手机空间)", + "category": "腾空间" + } + ], + "topics": [ + { + "name": "关于保险", + "content": "呼籁会提前为每位客人统一购买旅游保险,覆盖骑马、越野车等行程中的活动项目。保单会在出发前发到服务群里,不用自己操心。" + }, + { + "name": "关于航班", + "content": "建议下载「飞常准」或「航旅纵横」App关注航班动态。呼伦贝尔(海拉尔东山机场)直飞航线有限,很多城市需要中转。优先选择经停航班(中途经停但不换飞机)或联程航班(行李可直挂到目的地)。中转注意:确保在同一个机场中转(如北京首都/大兴、上海虹桥/浦东),两段航班之间至少预留2小时以上间隔。" + }, + { + "name": "关于车程", + "content": "呼伦贝尔面积相当于山东省,景点之间距离较远,单日车程在2-5小时不等。不过沿途风景很美,草原、湿地、白桦林不断变换。带小朋友的家庭建议准备iPad、故事书、小零食,车上配有充电接口。" + }, + { + "name": "关于信号", + "content": "大部分路段有4G信号,营地WiFi正常。深入草原腹地时部分路段信号会弱,建议提前下载好离线地图和娱乐内容。" + }, + { + "name": "关于打车和外卖", + "content": "海拉尔、额尔古纳、满洲里市区内滴滴、高德打车都很方便,也可以叫外卖。恩和、莫尔道嘎、黑山头等小镇打车和外卖不太方便。海拉尔市区出租车热线:0470-8898888,白天起步价6元/2公里,夜间6.8元/2公里。" + }, + { + "name": "关于饮食", + "content": "当地饮食以牛羊肉和奶制品为主,口味偏咸香。肠胃敏感的客人头两天建议少量尝试。如果有忌口或特殊饮食需求(回民餐、素食、海鲜过敏、儿童忌辣等),请提前告知客服和领队。" + }, + { + "name": "关于蚊虫", + "content": "6-8月户外活动时会有蚊虫,湿地区域7月中旬为高峰期。日出前和日落后蚊虫最活跃。穿浅色长袖长裤效果最好,深色衣服反而容易招蚊子。呼籁随车备有蚊不叮和防蚊喷雾。" + }, + { + "name": "关于蜱虫", + "content": "草原上偶尔会有蜱虫,户外活动时穿长袖长裤、扎紧裤脚和袖口。每天活动结束后仔细检查皮肤(尤其腋下、腰部、发际线、耳后)。万一发现蜱虫叮咬,不要用手硬拽,用尖头镊子贴近皮肤夹住蜱虫头部垂直拔出,碘伏消毒。如有不适及时就医,领队随身携带急救包。" + }, + { + "name": "关于草原天气", + "content": "呼伦贝尔平均海拔600-800米,不会高反,老人小朋友都可以放心来。草原夏季降雨以短暂阵雨为主,来得快去得也快,雨后容易遇到彩虹和晚霞。白天可能接近或超过30°C,但高温只集中在中午前后,行程会避开最热时段。" + } + ], + "appNote": "草原日出约凌晨3:30-4:30,日落约19:00-20:30(不同月份有差异)。夏季银河肉眼可见。" + }, + { + "id": "toddler", + "title": "0-3岁幼童专属指南", + "subtitle": "孩子小,不代表无法旅行,而是应该被更细致地呵护", + "icon": "👶", + "content": "为了让小宝宝也能轻松融入旅程,根据项目特点和幼童安全需求整理了这份指南。请结合孩子当天的状态灵活安排,不必每个项目都参与。", + "notes": [ + { + "title": "关于费用", + "content": "幼童仅收取500元费用,不强制参与任何项目。如参与项目产生额外成本,均由呼籁承担。" + }, + { + "title": "关于灵活调整", + "content": "行程安排灵活,如宝宝临时不适,可随时与领队协商调整节奏或选择暂时休息。" + }, + { + "title": "关于家庭陪伴", + "content": "所有活动均考虑了家庭陪伴场景设计,父母可轮流参与,不必担心一人抱娃一人玩的情况。" + } + ], + "dining": [ + "行程中多数用餐点提供热水,方便冲泡奶粉或加热辅食", + "BBQ为自助形式,可灵活选择适合宝宝的食材(蔬菜、软面包等),避免辛辣和过硬食物", + "如宝宝有特殊饮食需求(过敏、素食等),报名时备注,提前与餐厅沟通", + "建议自带少量宝宝常吃的零食和辅食" + ], + "equipment": [ + { + "desc": "呼籁车辆可提供,报名时告知定制师孩子的年龄和体重", + "name": "儿童安全座椅", + "provided": true + }, + { + "desc": "呼籁提供,需提前7天预约(旺季数量有限)", + "name": "儿童床围栏", + "provided": true + }, + { + "desc": "奶瓶、辅食工具、常用药品、保温杯、轻便推车(草原建议大轮款)、防晒帽、薄外套", + "name": "建议自带物品", + "provided": false + } + ], + "conditional": { + "desc": "建议现场评估孩子状态后再决定", + "items": [ + { + "desc": "自助式可灵活安排用餐节奏,注意让孩子远离烤架区域。", + "icon": "🍖", + "name": "呼籁BBQ" + }, + { + "desc": "场地较大、人流较多。若宝宝易紧张或对声音敏感,可在边缘观赏或提前离场。", + "icon": "🎪", + "name": "套娃广场/马之舞" + }, + { + "desc": "部分设备有身高限制,建议家长到现场后根据实际情况选择合适项目。", + "icon": "🎠", + "name": "满洲里梦幻游乐" + } + ], + "title": "视情况选择的项目" + }, + "recommended": { + "desc": "适合陪伴式参与或安静观赏,温和、安全、有互动感", + "items": [ + { + "desc": "温和安全,可抱着孩子亲密互动。营地环境安静,适合低龄宝宝放松玩耍。", + "icon": "🐑", + "name": "营地喂小羊" + }, + { + "desc": "家庭旅拍可抱娃合影,服装也有宝宝尺码,可自由选择是否换装。", + "icon": "📸", + "name": "呼籁旅拍" + }, + { + "desc": "安排专属时间段,宝宝可在家长陪同下安全观赏和投喂(已含饲料)。", + "icon": "🦌", + "name": "白桦林驯鹿" + }, + { + "desc": "草原景观舒适安静,适合家长轮流照看孩子,轻松拍照休息。", + "icon": "☕", + "name": "牧云山顶下午茶" + }, + { + "desc": "环节温和,适合亲子共创。2岁以下建议由家长陪同操作。", + "icon": "🎨", + "name": "DIY套娃/做列巴" + }, + { + "desc": "彩色顶棚遮阳游乐设施,配有小滑梯和安全围栏,宝宝可在家长陪同下自由攀爬玩耍。", + "icon": "🎪", + "name": "营地儿童游乐架" + }, + { + "desc": "晃动幅度温和,适合家长抱着宝宝一起荡。", + "icon": "🛞", + "name": "草原轮胎秋千" + } + ], + "title": "推荐参与的项目" + }, + "notRecommended": { + "desc": "对低龄宝宝安全性或体验感不佳,建议家长自行体验,宝宝由另一位家长陪伴", + "items": [ + { + "name": "骑马深度穿越", + "reason": "路线含草原、森林、河流、坡地,幼儿无法独立骑乘" + }, + { + "name": "ATV越野车穿越", + "reason": "震动强烈、地形不平,不适合2岁以下宝宝" + }, + { + "name": "乌兰山千米滑草", + "reason": "速度较快且有坡度,若孩子容易害怕不建议参加" + }, + { + "name": "射箭/油桶火车", + "reason": "存在晃动、冲击风险,宝宝无法安全控制身体平衡" + } + ], + "title": "不建议参与的项目" + } + } + ] +} \ No newline at end of file diff --git a/data/images.json b/data/images.json new file mode 100644 index 0000000..9139ec6 --- /dev/null +++ b/data/images.json @@ -0,0 +1,33 @@ +{ + "logo": { + "main": "/images/logo.png", + "square": "/images/logo-square.png" + }, + "hero": { + "background": "/images/team/hero-grassland.jpg" + }, + "brandStory": { + "photo": "/images/team/hero-family.jpg" + }, + "mascot": { + "front": "/images/mascot/mascot-front.png", + "banner": "/images/mascot/mascot-banner.png", + "stickerQr": "/images/mascot-sticker-qr.png", + "xiaomengma": "/images/mascot/xiaomengma.png" + }, + "team": { + "guideGroup": "/images/team/guide-group.jpg", + "routeSurvey": "/images/team/route-survey-2025.jpg", + "guideTraining": "/images/team/guide-training.jpg", + "ranchStore": "/images/team/ranch-store.jpg" + }, + "xiaohongshu": { + "storefront": "/images/xiaohongshu/storefront.jpg" + }, + "summerCamp": { + "river": "/images/summer-camp/river-banner.jpg", + "grassland": "/images/summer-camp/grassland-group.jpg", + "birch": "/images/summer-camp/birch-group.jpg", + "graduation": "/images/summer-camp/camp-graduation.jpg" + } +} diff --git a/data/navigation.json b/data/navigation.json new file mode 100644 index 0000000..7622388 --- /dev/null +++ b/data/navigation.json @@ -0,0 +1,174 @@ +{ + "header": [ + { + "text": "首页", + "to": "/" + }, + { + "text": "产品线", + "to": "/products", + "children": [ + { + "text": "额吉的故乡", + "to": "/products", + "season": "夏" + }, + { + "text": "游牧的森林", + "to": "/products/autumn", + "season": "秋" + }, + { + "text": "嗨冰雪", + "to": "/products/winter", + "season": "冬" + }, + { + "text": "小蒙马夏令营", + "to": "/summer-camp", + "season": "夏" + }, + { + "text": "小蒙马冬令营", + "to": "/winter-camp", + "season": "冬" + } + ] + }, + { + "text": "目的地", + "to": "/destinations", + "children": [ + { + "text": "景点攻略", + "to": "/destinations" + }, + { + "text": "旅行日历", + "to": "/calendar" + }, + { + "text": "出行指南", + "to": "/guides" + } + ] + }, + { + "text": "客户评价", + "to": "/reviews", + "children": [ + { + "text": "客户评价", + "to": "/reviews" + }, + { + "text": "小红书游记", + "to": "/xiaohongshu" + }, + { + "text": "客户游记", + "to": "/youji" + }, + { + "text": "呼籁旅拍", + "to": "/gallery" + } + ] + }, + { + "text": "常见问答", + "to": "/faq" + }, + { + "text": "关于我们", + "to": "/about", + "children": [ + { + "text": "关于呼籁", + "to": "/about" + }, + { + "text": "最新动态", + "to": "/news" + }, + { + "text": "资质荣誉", + "to": "/qualifications" + } + ] + }, + { + "text": "联系我们", + "to": "/contact" + } + ], + "footer": [ + { + "title": "了解呼籁", + "links": [ + { + "text": "关于我们", + "to": "/about" + }, + { + "text": "最新动态", + "to": "/news" + }, + { + "text": "资质荣誉", + "to": "/qualifications" + } + ] + }, + { + "title": "旅行产品", + "links": [ + { + "text": "额吉的故乡", + "to": "/products" + }, + { + "text": "游牧的森林", + "to": "/products/autumn" + }, + { + "text": "嗨冰雪", + "to": "/products/winter" + }, + { + "text": "小蒙马夏令营", + "to": "/summer-camp" + }, + { + "text": "小蒙马冬令营", + "to": "/winter-camp" + } + ] + }, + { + "title": "帮助中心", + "links": [ + { + "text": "出行指南", + "to": "/guides" + }, + { + "text": "常见问答", + "to": "/faq" + }, + { + "text": "客户评价", + "to": "/reviews" + }, + { + "text": "景点攻略", + "to": "/destinations" + }, + { + "text": "联系我们", + "to": "/contact" + } + ] + } + ] +} diff --git a/data/news.json b/data/news.json new file mode 100644 index 0000000..4e17997 --- /dev/null +++ b/data/news.json @@ -0,0 +1,44 @@ +{ + "articles": [ + { + "id": "news-3", + "title": "额吉的故乡V9正式发布:三大升级,一家一车", + "date": "2026-03-08", + "category": "产品", + "summary": "呼籁旅行2026夏季旗舰产品「额吉的故乡V9」正式发布。V9在V8基础上完成三大升级:营地迁入敖包相会景区、白桦林新增非遗传承人课程、深度合作云牧场。6天5晚,一家一车,5月开始接待。", + "content": "2026年3月7-8日,呼籁旅行2026夏季旗舰产品「额吉的故乡V9」正式对外发布。V9是额吉的故乡系列的第9次迭代,从2023年V1上线至今,已服务超过10000组家庭、39000余人次。本次V9在V8基础上完成三大核心升级:一、营地升级——呼籁自营营地迁入敖包相会景区,在景区内拥有独立空间,上午安排营地烧烤和旅拍,避开下午客流高峰;二、非遗研学升级——白桦林增设非遗传承人专属课程,按年龄分层设计体验内容;三、牧场升级——与云牧场达成深度合作,体验近距离牧场互动,同时在附近自营空间安排蒙古包体验、捡牛粪、酥油茶、手工毡等活动。产品为6天5晚行程,分舒适套餐和尊享套餐两个版本,全程一家一单一车、独立成团。预售期间下单享早鸟优惠,5月正式开始接待。" + }, + { + "id": "news-4", + "title": "2026小蒙马亲子夏令营开放报名", + "date": "2026-02-20", + "category": "产品", + "summary": "2026年小蒙马亲子夏令营正式开放报名,6天5晚,每期最多8组家庭,涵盖草原、森林、湿地三大研学模块,全程路虎头等舱车队、专属摄影师跟拍。", + "content": "2026年小蒙马亲子夏令营正式开放报名。小蒙马是呼籁旅行专为家庭设计的深度营地产品,行程6天5晚,每期最多8组家庭同行。课程围绕草原、森林、湿地三大研学模块设计,包含恩和骑马、乌兰山滑草、ATV越野、面包DIY、兰旗果舍等体验。全程配备路虎头等舱车队,每组家庭配专属摄影师全程跟拍。2026年夏季计划开设9期,名额有限,报名请联系定制师获取详细方案和排期。" + }, + { + "id": "news-5", + "title": "呼籁营地迁入敖包相会景区,2026赛季全面升级", + "date": "2026-02-10", + "category": "公告", + "summary": "呼籁自营营地正式迁入敖包相会景区,签约5年(2026-2030),在景区内拥有独立空间和品牌IP,2026年5月正式开营。", + "content": "呼籁旅行自营营地已完成选址升级,正式迁入敖包相会景区。此次合作签约5年(2026-2030),呼籁在景区内拥有独立运营空间,品牌IP归呼籁所有。新营地的核心优势是行程节奏的优化:上午在营地完成旅拍和烧烤,下午再进入莫日格勒河景区,避开游客高峰时段。营地将于2026年5月正式开营,届时将配合额吉的故乡V9产品一同投入使用。" + }, + { + "id": "news-6", + "title": "呼籁2025年度回顾:累计服务家庭突破10000组", + "date": "2026-01-15", + "category": "公告", + "summary": "呼籁旅行2025年度接待约18000人次,自2015年创立以来,累计服务家庭突破10000组、39000余人次。感谢每一个信任呼籁的家庭。", + "content": "回顾2025年,呼籁旅行全年接待约18000人次。自2015年创立以来,呼籁累计服务家庭已突破10000组,共计39000余人次踏上呼伦贝尔草原。这一年,额吉的故乡从V8迭代到V9,小蒙马亲子夏令营正式上线,自有车队和自营营地投入运营——这些变化的背后,是每一个选择信任呼籁的家庭给了我们持续投入的底气。2026年,我们会继续深耕呼伦贝尔家庭定制游,把更多精力放在服务本身。" + }, + { + "id": "news-7", + "title": "呼籁荣获小红书WILL商业大会「年度成长型品牌」", + "date": "2026-01-05", + "category": "活动", + "summary": "呼籁旅行在2026小红书WILL商业大会上荣获「年度成长型品牌」,全国文旅行业仅6家品牌获此荣誉。呼籁是其中唯一一个深耕单一目的地的本地品牌。", + "content": "在2026年小红书WILL商业大会上,呼籁旅行荣获「年度成长型品牌」称号。全国文旅行业仅6家品牌入选,呼籁是其中唯一一个深耕单一目的地的本地品牌。呼籁小红书账号「Mr.小雷-呼籁旅行」由联合创始人孙雷运营,目前拥有9.6万+粉丝。这份荣誉属于每一位愿意在小红书分享呼伦贝尔旅行故事的客户和伙伴。" + } + ] +} diff --git a/data/partners.json b/data/partners.json new file mode 100644 index 0000000..2245289 --- /dev/null +++ b/data/partners.json @@ -0,0 +1,143 @@ +{ + "note": "⚠️ 本页面大量内容需补充真实数据,占位符已标注", + "govPartners": [ + { + "name": "⚠️请确认:呼伦贝尔市文化旅游局", + "type": "文旅主管部门", + "description": "⚠️需确认具体合作内容及合作形式", + "verified": false + }, + { + "name": "⚠️请确认:额尔古纳市文化旅游局", + "type": "文旅主管部门", + "description": "⚠️需确认具体合作内容及合作形式", + "verified": false + }, + { + "name": "⚠️请确认:鄂温克族自治旗旅游局", + "type": "文旅主管部门", + "description": "⚠️需确认具体合作内容及合作形式", + "verified": false + } + ], + "associations": [ + { + "name": "内蒙古自治区文化和旅游厅", + "type": "政府主管部门", + "relationship": "颁发旅游经营许可证·认定研学旅游服务商", + "verified": true + }, + { + "name": "⚠️请确认:内蒙古旅游协会", + "type": "行业协会", + "memberType": "⚠️需确认是否为会员单位及会员级别", + "verified": false + }, + { + "name": "⚠️请确认:呼伦贝尔旅游协会", + "type": "行业协会", + "memberType": "⚠️需确认是否为会员单位", + "verified": false + } + ], + "academicCoops": [ + { + "name": "呼伦贝尔学院", + "type": "高校合作", + "relationship": "旅游实习实训基地", + "description": "校企合作,共同培养旅游管理专业人才,实践教学基地", + "verified": true, + "since": "2024" + } + ], + "scenicPartners": [ + { + "name": "莫日格勒河景区", + "description": "呼籁行程核心目的地,提供专属通道和深度体验项目", + "verified": true + }, + { + "name": "额尔古纳湿地公园", + "description": "国家级自然保护区,呼籁行程必经目的地", + "verified": true + }, + { + "name": "黑山头景区", + "description": "呼籁自有骑马营地所在地,独家草原骑马体验", + "verified": true + }, + { + "name": "⚠️请补充其他合作景区", + "description": "⚠️请补充具体合作景区名称及合作内容", + "verified": false + } + ], + "hotelPartners": [ + { + "name": "⚠️请补充:海拉尔区合作酒店", + "star": "⚠️星级待填", + "description": "⚠️请补充呼籁行程中使用的酒店名称及合作内容", + "verified": false + }, + { + "name": "⚠️请补充:额尔古纳合作酒店", + "star": "⚠️星级待填", + "description": "⚠️请补充具体合作酒店", + "verified": false + }, + { + "name": "⚠️请补充:室韦/恩和民宿", + "star": "精品民宿", + "description": "⚠️请补充具体合作民宿", + "verified": false + } + ], + "platformEndorsements": [ + { + "platform": "小红书", + "status": "蓝V认证·旅行社", + "detail": "2025年度成长型品牌·2026 WILL商业大会受邀品牌", + "account": "Mr.小雷-呼籁旅行", + "followers": "9.6万+", + "verified": true + }, + { + "platform": "⚠️抖音", + "status": "⚠️需确认认证状态", + "detail": "⚠️请补充抖音账号信息", + "verified": false + }, + { + "platform": "⚠️微信视频号", + "status": "⚠️需确认", + "detail": "⚠️请补充视频号信息", + "verified": false + } + ], + "mediaReports": [ + { + "outlet": "⚠️媒体名称1(如:内蒙古日报/呼伦贝尔日报/新华社等)", + "title": "⚠️请填写具体报道标题", + "date": "⚠️报道日期(格式:2025-XX-XX)", + "url": "⚠️需补充真实报道URL", + "summary": "⚠️请填写报道摘要(1-2句话描述报道核心内容)", + "placeholder": true + }, + { + "outlet": "⚠️媒体名称2", + "title": "⚠️请填写具体报道标题", + "date": "⚠️报道日期", + "url": "⚠️需补充真实报道URL", + "summary": "⚠️请填写报道摘要", + "placeholder": true + }, + { + "outlet": "⚠️媒体名称3", + "title": "⚠️请填写具体报道标题", + "date": "⚠️报道日期", + "url": "⚠️需补充真实报道URL", + "summary": "⚠️请填写报道摘要", + "placeholder": true + } + ] +} diff --git a/data/pricing.json b/data/pricing.json new file mode 100644 index 0000000..6f1b659 --- /dev/null +++ b/data/pricing.json @@ -0,0 +1,100 @@ +{ + "products": [ + { + "id": "v9-5d4n-forest", + "name": "额吉的故乡V9·5天4晚 森林版", + "priceLabel": "2580元起", + "priceNote": "舒适套餐2580-4780元/人,高档套餐3380-5880元/人,价格因出行日期和住宿等级不同", + "highlights": [ + "草原+大兴安岭森林双线深度", + "森林小火车+兴安神鹿园", + "恩和骑马+全地形越野车" + ], + "url": "/products/v9-5d4n-forest" + }, + { + "id": "v9-5d4n-prairie", + "name": "额吉的故乡V9·5天4晚 草原版", + "priceLabel": "2580元起", + "priceNote": "舒适套餐2580-4780元/人,高档套餐3380-5880元/人,价格因出行日期和住宿等级不同", + "highlights": [ + "草原+边境+满洲里不进森林", + "寻龙诀秘境+套娃大马戏", + "巴尔虎马之舞实景演出" + ], + "url": "/products/v9-5d4n-prairie" + }, + { + "id": "v9-6d5n-family", + "name": "额吉的故乡V9·6天5晚 亲子版", + "priceLabel": "2980元起", + "priceNote": "舒适套餐2980-5480元/人,高档套餐3980-6980元/人,主推亲子路线", + "highlights": [ + "自有营地旅拍+非遗研学+骑马", + "套娃大马戏+马之舞实景演出", + "专为带孩子的家庭设计" + ], + "url": "/products/v9-6d5n-family" + }, + { + "id": "v9-6d5n-explore", + "name": "额吉的故乡V9·6天5晚 探索版", + "priceLabel": "2980元起", + "priceNote": "舒适套餐2980-5480元/人,高档套餐3980-6980元/人,含自有营地旅拍+两次骑马", + "highlights": [ + "自有营地旅拍+大力山穿越", + "恩和+黑山头两次骑马", + "寻龙诀秘境+满洲里国门" + ], + "url": "/products/v9-6d5n-explore" + }, + { + "id": "v9-7d6n-family", + "name": "额吉的故乡V9·7天6晚 亲子版", + "priceLabel": "3680元起", + "priceNote": "舒适套餐3680-6280元/人,高档套餐4580-7980元/人,最完整亲子深度版", + "highlights": [ + "自有营地旅拍+非遗传承人授课", + "森林小火车+驯鹿+蒙古文化", + "寻龙诀秘境+套娃+马之舞" + ], + "url": "/products/v9-7d6n-family" + }, + { + "id": "v9-7d6n-wild", + "name": "额吉的故乡V9·7天6晚 旷野版", + "priceLabel": "6480元起", + "priceNote": "高端套餐6480-8680元/人,含装甲车穿越+湿地漂流+帐篷营地+航拍", + "highlights": [ + "装甲车穿越+湿地漂流", + "帐篷营地+草原木屋特色住宿", + "寻龙诀秘境+专业航拍" + ], + "url": "/products/v9-7d6n-wild" + }, + { + "id": "summer-camp", + "name": "小蒙马夏令营", + "priceLabel": "详询定制师", + "priceNote": "每期仅限8组家庭,名额有限,请提前联系定制师了解营期和报名方式", + "highlights": [ + "草原写生·非遗研学·民俗体验", + "每期仅限8组家庭", + "含爸妈托管时段" + ], + "url": "/products/summer-camp" + }, + { + "id": "autumn", + "name": "游牧的森林·秋季产品", + "priceLabel": "详询定制师", + "priceNote": "秋季产品根据出行日期和人数定制,请联系定制师获取最新报价", + "highlights": [ + "大兴安岭秋色", + "白桦林金黄", + "额尔古纳秋景" + ], + "url": "/products/autumn" + } + ] +} diff --git a/data/products.json b/data/products.json new file mode 100644 index 0000000..469cbf5 --- /dev/null +++ b/data/products.json @@ -0,0 +1,495 @@ +{ + "narrative": "「额吉的故乡」是蒙古语中对母亲故土的深情称呼。这条定制游产品线从2023年诞生至今,已经迭代到了第9个版本,连续三年累计服务超过10000组家庭。我们根据不同家庭的假期长度、出行偏好和体验诉求,打磨出5个版本——不是简单地增减天数,而是针对每一类家庭的需求重新设计节奏、线路和体验内容。每一个版本都遵循同一个承诺:不拼团,不赶路,不将就。一家一单一车,全程私家定制游,您的假期只属于您的家庭。", + "versions": [ + { + "id": "v9-5d4n-forest", + "name": "额吉的故乡V9·5天4晚森林版", + "days": 5, + "nights": 4, + "audience": "想一次走遍草原和森林的家庭", + "description": "草原+森林双线深度体验,5天4晚串联莫日格勒河草原腹地与大兴安岭森林。从牧云山顶俯瞰天下第一曲水,到白桦林中驾驶全地形越野车穿越,再到大兴安岭深处坐森林小火车、喂驯鹿,一路从草原走进森林。沿中俄边防卡线体验乌兰山千米滑草、篝火晚会,最后在云朵牧场感受蒙古族文化。4天平均约237公里/天,单日最长不超过280公里。", + "highlights": [ + "牧云山顶茶歇,俯瞰莫日格勒河九曲蜿蜒", + "恩和沉浸式骑马穿越草原、湿地、森林、河流", + "全地形越野车穿越,往返12公里自由驰骋", + "莫尔道嘎森林小火车穿行原始森林", + "兴安神鹿园零距离喂驯鹿", + "乌兰山千米滑草畅玩不限次" + ], + "tag": "森林版", + "itinerary": [ + { + "day": 1, + "title": "全国→海拉尔", + "summary": "蒙古礼仪接机礼遇,入住酒店,自由活动" + }, + { + "day": 2, + "title": "草原·白桦林·穿越", + "summary": "牧云山顶茶歇→俯瞰莫日格勒河→白桦林景区→全地形越野车穿越→恩和(270公里)" + }, + { + "day": 3, + "title": "骑马·森林小火车·大兴安岭", + "summary": "恩和沉浸式骑马→兴安神鹿园→森林小火车→莫尔道嘎(240公里)" + }, + { + "day": 4, + "title": "边境卡线·滑草·篝火", + "summary": "莫尔道嘎→室韦界河→九卡→七卡→千米滑草→篝火晚会→黑山头蒙古包(280公里)" + }, + { + "day": 5, + "title": "云朵牧场·民俗体验·送机", + "summary": "黑山头→云朵牧场→民俗体验→海拉尔送机(160公里)" + } + ], + "included": { + "accommodation": "4晚住宿(舒适/高档可选)", + "transport": "一家一单一车,独立用车", + "tickets": "白桦林(含门票+观光车)、乌兰山景区(含门票+观光车)、牧云山顶茶歇、兴安神鹿园(含门票+苔藓)", + "activities": "全地形越野车(往返12公里)、恩和沉浸式骑马(约1小时)、莫尔道嘎森林小火车、乌兰山千米滑草畅玩、云朵牧场(萌宠互动)、呼籁牧场(自营非遗体验)、篝火晚会、生日礼遇" + }, + "pricing": { + "tiers": ["舒适套餐", "高档套餐"], + "note": "舒适和高档只有酒店不同,其他都相同", + "startPrice": 2580, + "peakPrice": 4780, + "highStartPrice": 3380, + "highPeakPrice": 5880 + } + }, + { + "id": "v9-5d4n-prairie", + "name": "额吉的故乡V9·5天4晚草原版", + "days": 5, + "nights": 4, + "audience": "想深度体验草原又不想进森林的家庭", + "description": "不赶路的五天,独家资源·错峰安排。从牧云山顶到白桦林,从恩和骑马到中俄边防卡线,一路畅玩千米滑草、云朵牧场、非遗研学、篝火晚会。第四天解锁呼籁签约的秘境——寻龙诀取景地,下午游览套娃景区和大马戏,夜游满洲里。最后一天看巴尔虎马之舞实景演出,在呼和诺尔湖畔收官。4天平均约225公里/天,单日最长不超过270公里。", + "highlights": [ + "牧云山顶茶歇,俯瞰莫日格勒河九曲蜿蜒", + "恩和沉浸式骑马穿越草原、湿地、森林、河流", + "全地形越野车穿越,往返12公里自由驰骋", + "呼籁专属秘境·寻龙诀取景地", + "套娃景区+俄罗斯大马戏", + "巴尔虎马之舞大型实景演出" + ], + "tag": "草原版", + "itinerary": [ + { + "day": 1, + "title": "全国→海拉尔", + "summary": "蒙古礼仪接机礼遇,入住酒店,自由活动" + }, + { + "day": 2, + "title": "草原·白桦林·穿越", + "summary": "牧云山顶茶歇→俯瞰莫日格勒河→白桦林景区→喂驯鹿→全地形越野车穿越→恩和木刻楞(270公里)" + }, + { + "day": 3, + "title": "骑马·滑草·篝火", + "summary": "沉浸式骑马→中俄边防卡线→千米滑草→云朵牧场→非遗研学→篝火晚会→黑山头蒙古包(140公里)" + }, + { + "day": 4, + "title": "秘境·套娃·满洲里", + "summary": "黑山头→呼籁秘境(寻龙诀取景地)→套娃景区/大马戏→夜游满洲里(260公里)" + }, + { + "day": 5, + "title": "马之舞·呼和诺尔湖·送机", + "summary": "满洲里→巴尔虎马之舞实景演出→呼和诺尔湖→海拉尔送机(230公里)" + } + ], + "included": { + "accommodation": "4晚住宿(舒适/高档可选)", + "transport": "一家一单一车,独立用车", + "tickets": "牧云山顶茶歇、白桦林(含门票+观光车)、乌兰山(含门票+观光车)、套娃广场(含娱乐门票)、呼籁秘境(寻龙诀拍摄地)、巴尔虎蒙古部落(含马之舞)、呼和诺尔湖(含门票+观光车)", + "activities": "全地形越野车(往返12公里)、恩和沉浸式骑马(约1小时)、千米滑草畅玩、套娃广场套票含大马戏、巴尔虎马之舞、云朵牧场(萌宠互动)、篝火晚会" + }, + "pricing": { + "tiers": ["舒适套餐", "高档套餐"], + "note": "舒适和高档只有酒店不同,其他都相同", + "startPrice": 2580, + "peakPrice": 4780, + "highStartPrice": 3380, + "highPeakPrice": 5880 + } + }, + { + "id": "v9-6d5n-family", + "name": "额吉的故乡V9·6天5晚亲子版", + "days": 6, + "nights": 5, + "audience": "专为带孩子来草原的家庭设计,主推路线", + "description": "不赶路的六天,独家资源·错峰安排。在呼籁自有营地享受专属旅拍和BBQ,错峰登牧云山顶俯瞰莫日格勒河。白桦林中由非遗传承人亲自授课桦树皮画,按年龄分层体验,零距离喂驯鹿。恩和沉浸式骑马穿越草原、湿地、森林、河流。沿中俄边防卡线畅玩千米滑草,在云朵牧场体验蒙古族文化——搭蒙古包、捡牛粪、熬奶茶、做羊毛毡。解锁寻龙诀秘境、套娃大马戏、马之舞实景演出。5天平均约200公里/天,单日最长不超过300公里。", + "highlights": [ + "呼籁自有营地——专属旅拍+茶点+BBQ", + "白桦林非遗传承人现场授课,按年龄分层体验", + "恩和沉浸式骑马穿越草原、湿地、森林、河流", + "云朵牧场蒙古族文化体验——搭蒙古包、熬奶茶、做羊毛毡", + "全地形越野车穿越+乌兰山千米滑草畅玩", + "呼籁专属秘境·寻龙诀取景地+套娃大马戏+马之舞" + ], + "tag": "亲子版·主推", + "isMainProduct": true, + "itinerary": [ + { + "day": 1, + "title": "全国→海拉尔", + "summary": "蒙古礼仪接机礼遇,入住酒店,自由活动" + }, + { + "day": 2, + "title": "专属营地·牧云山顶", + "summary": "呼籁营地(旅拍+茶点+BBQ)→天下第一敖包→牧云山顶下午茶→俯瞰莫日格勒河→额尔古纳(290公里)" + }, + { + "day": 3, + "title": "白桦林非遗·喂驯鹿·骑马", + "summary": "额尔古纳→白桦林景区→非遗手作→喂驯鹿→沉浸式骑马穿越→恩和木刻楞(100公里)" + }, + { + "day": 4, + "title": "越野车·边防卡线·滑草·蒙古文化·篝火", + "summary": "恩和→全地形越野车穿越→中俄边防哨卡线→千米滑草→云朵牧场→非遗研学→篝火晚会→黑山头蒙古包(130公里)" + }, + { + "day": 5, + "title": "秘境·套娃·满洲里", + "summary": "黑山头→呼籁秘境(寻龙诀取景地)→套娃景区/大马戏→夜游满洲里(240公里)" + }, + { + "day": 6, + "title": "马之舞·呼和诺尔湖·送机", + "summary": "满洲里→巴尔虎马之舞实景演出→呼和诺尔湖→海拉尔送机(220公里)" + } + ], + "included": { + "accommodation": "5晚住宿(舒适/高档可选)", + "transport": "一家一单一车,独立用车", + "tickets": "呼籁营地(自营不对外)、白桦林(含门票+观光车)、乌兰山景区(含门票+观光车)、套娃广场(含娱乐门票)、呼籁秘境(寻龙诀拍摄地)、牧云山顶下午茶歇、巴尔虎蒙古部落(含马之舞)、呼和诺尔湖(含门票+观光车)", + "activities": "呼籁旅拍(自营)、营地茶点+BBQ、白桦林非遗传承人手作课、全地形越野车(往返12公里)、恩和沉浸式骑马(约1小时)、千米滑草畅玩、套娃广场套票含大马戏、巴尔虎马之舞、云朵牧场(萌宠互动)、呼籁牧场蒙古族文化体验(搭蒙古包+捡牛粪+熬奶茶+做羊毛毡)、篝火晚会、生日礼遇" + }, + "pricing": { + "tiers": ["舒适套餐", "高档套餐"], + "note": "舒适和高档只有酒店不同,其他都相同", + "startPrice": 2980, + "peakPrice": 5480, + "highStartPrice": 3980, + "highPeakPrice": 6980 + } + }, + { + "id": "v9-6d5n-explore", + "name": "额吉的故乡V9·6天5晚探索版", + "days": 6, + "nights": 5, + "audience": "更适合大孩子与成人的进阶体验", + "description": "越野穿越、两次骑马、不走寻常路。6天5晚的进阶版本,在呼籁自有营地享受专属旅拍和BBQ,错峰登上牧云山顶。独家大力山穿越路线全程不走柏油路,穿越草原、湿地、野生白桦林。安排恩和+黑山头两次骑马——白桦林间漫步与草原驰骋完全不同的体验。还有呼籁专属秘境、风车公路、满洲里国门、马之舞实景演出。5天平均约226公里/天。", + "highlights": [ + "呼籁自有营地——专属旅拍+茶点+BBQ", + "牧云山顶下午茶歇,错峰俯瞰莫日格勒河", + "大力山独家穿越路线,全程不走柏油路", + "恩和+黑山头两次骑马,白桦林与草原两种体验", + "全地形越野车穿越,自由驰骋", + "呼籁专属秘境·寻龙诀取景地" + ], + "tag": "探索版", + "itinerary": [ + { + "day": 1, + "title": "全国→海拉尔", + "summary": "蒙古礼仪接机礼遇,入住酒店,自由活动" + }, + { + "day": 2, + "title": "专属营地·牧云山顶", + "summary": "呼籁自有营地(旅拍+茶点+BBQ)→天下第一敖包→牧云山顶下午茶歇→俯瞰莫日格勒河→额尔古纳(290公里)" + }, + { + "day": 3, + "title": "大力山穿越·越野车·骑马", + "summary": "额尔古纳→大力山穿越→全地形越野车→喂驯鹿→骑马穿越→入住恩和(120公里)" + }, + { + "day": 4, + "title": "边防卡线·滑草·二刷骑马·篝火", + "summary": "室韦界河→九卡→七卡→千米滑草→云朵牧场→黑山头二刷骑马→篝火晚会→蒙古包(230公里)" + }, + { + "day": 5, + "title": "秘境·风车公路·满洲里", + "summary": "黑山头→呼籁秘境(寻龙诀取景地)→风车公路→国门+北疆明珠塔→夜游满洲里(260公里)" + }, + { + "day": 6, + "title": "马之舞·呼和诺尔湖·送机", + "summary": "满洲里→巴尔虎马之舞实景演出→呼和诺尔湖→海拉尔送机(230公里)" + } + ], + "included": { + "accommodation": "5晚住宿(舒适/高档可选)", + "transport": "一家一单一车,独立用车", + "tickets": "呼籁自有营地(不对外)、牧云山顶下午茶歇、乌兰山景区(含观光车)、套娃广场、呼籁秘境(独家专属)、满洲里国门+北疆明珠塔、呼和诺尔湖、巴尔虎马之舞", + "activities": "呼籁旅拍(自营)、营地茶点+BBQ、全地形越野车、大力山穿越、两次骑马(恩和+黑山头)、千米滑草畅玩、云朵牧场(萌宠互动)、篝火晚会" + }, + "pricing": { + "tiers": ["舒适套餐", "高档套餐"], + "note": "一家一车、自有营地旅拍、越野车、两次骑马全部包含", + "startPrice": 2980, + "peakPrice": 5480, + "highStartPrice": 3980, + "highPeakPrice": 6980 + } + }, + { + "id": "v9-7d6n-family", + "name": "额吉的故乡V9·7天6晚亲子版", + "days": 7, + "nights": 6, + "audience": "专为带孩子来草原的家庭设计", + "description": "从草原到大兴安岭,最完整的亲子深度版。7天6晚从容走遍呼伦贝尔精华,第一天在呼籁自有营地享受专属旅拍和BBQ,错峰登牧云山顶。白桦林中由非遗传承人亲自授课桦树皮画,按年龄分层体验。走进大兴安岭坐森林小火车、零距离喂驯鹿。沿边防卡线畅玩千米滑草,在云朵牧场体验蒙古族文化——搭蒙古包、捡牛粪、熬奶茶、做羊毛毡。解锁寻龙诀秘境、套娃大马戏、马之舞实景演出。7天平均约233公里/天。", + "highlights": [ + "呼籁自有营地——专属旅拍+茶点+BBQ", + "白桦林非遗传承人现场授课,按年龄分层体验", + "大兴安岭森林小火车+兴安神鹿园喂驯鹿", + "云朵牧场蒙古族文化体验——搭蒙古包、熬奶茶、做羊毛毡", + "恩和沉浸式骑马+全地形越野车穿越", + "呼籁专属秘境·寻龙诀取景地+套娃大马戏" + ], + "tag": "亲子版", + "itinerary": [ + { + "day": 1, + "title": "全国→海拉尔", + "summary": "蒙古礼仪接机礼遇,入住酒店,自由活动" + }, + { + "day": 2, + "title": "专属营地·牧云山顶", + "summary": "呼籁营地(旅拍+茶点+BBQ)→天下第一敖包→牧云山顶下午茶→俯瞰莫日格勒河→额尔古纳(290公里)" + }, + { + "day": 3, + "title": "白桦林非遗·越野车·骑马", + "summary": "额尔古纳→白桦林景区→非遗手作→全地形越野车→沉浸式骑马→入住恩和(120公里)" + }, + { + "day": 4, + "title": "大兴安岭·驯鹿·森林小火车", + "summary": "恩和→兴安神鹿园→森林小火车→龙岩山→入住莫尔道嘎(240公里)" + }, + { + "day": 5, + "title": "边防卡线·滑草·蒙古文化·篝火", + "summary": "莫尔道嘎→室韦界河→九卡→七卡→千米滑草→云朵牧场→非遗研学→篝火晚会→黑山头蒙古包(280公里)" + }, + { + "day": 6, + "title": "秘境·套娃·满洲里", + "summary": "黑山头→呼籁秘境(寻龙诀取景地)→套娃景区/大马戏→夜游满洲里(260公里)" + }, + { + "day": 7, + "title": "马之舞·呼和诺尔湖·送机", + "summary": "满洲里→巴尔虎马之舞实景演出→呼和诺尔湖→海拉尔送机(230公里)" + } + ], + "included": { + "accommodation": "6晚住宿(舒适/高档可选)", + "transport": "一家一单一车,独立用车", + "tickets": "呼籁营地(自营不对外)、牧云山顶下午茶歇、白桦林(含门票+观光车)、兴安神鹿园(含门票+苔藓)、乌兰山景区(含观光车)、套娃广场(含娱乐门票)、呼籁秘境(独家专属)、巴尔虎蒙古部落(含马之舞)、呼和诺尔湖(含门票+观光车)", + "activities": "呼籁旅拍(自营)、营地茶点+BBQ、白桦林非遗传承人手作课、全地形越野车(往返12公里)、恩和沉浸式骑马(约1小时)、莫尔道嘎森林小火车、千米滑草畅玩、云朵牧场(萌宠互动)、呼籁牧场蒙古族文化体验(搭蒙古包+捡牛粪+熬奶茶+做羊毛毡)、篝火晚会、生日礼遇" + }, + "pricing": { + "tiers": ["舒适套餐", "高档套餐"], + "note": "舒适型和高档型只有酒店不同,其他都相同", + "startPrice": 3680, + "peakPrice": 6280, + "highStartPrice": 4580, + "highPeakPrice": 7980 + } + }, + { + "id": "v9-7d6n-wild", + "name": "额吉的故乡V9·7天6晚旷野版", + "days": 7, + "nights": 6, + "audience": "追求深度体验、热爱户外探索的家庭", + "description": "旷野探索,解锁常规线路到不了的地方。7天6晚硬核户外版本,住特色帐篷营地和草原木屋,体验装甲车穿越、额尔古纳湿地漂流、大力山越野穿越。在呼籁自有营地旅拍BBQ,牧云山顶喝下午茶。沿最美边防卡线789卡穿越,天边草原骑马。深入寻龙诀秘境配专业航拍,二卡湿地游船。套娃大马戏、马之舞实景演出一个不少。7天合计约1540公里,平均约220公里/天。", + "highlights": [ + "呼籁自有营地——专属旅拍+茶点+BBQ", + "装甲车穿越草地和溪流,肾上腺素拉满", + "额尔古纳湿地漂流,白桦林和湿地草甸两岸风光", + "特色帐篷营地+草原木屋住宿体验", + "天边草原沉浸式骑马穿越", + "呼籁秘境·寻龙诀取景地+专业航拍" + ], + "tag": "旷野版", + "itinerary": [ + { + "day": 1, + "title": "全国→海拉尔", + "summary": "蒙古礼仪接机礼遇,入住酒店,自由活动" + }, + { + "day": 2, + "title": "专属营地·牧云山顶", + "summary": "呼籁自有营地(旅拍+茶点+BBQ)→天下第一敖包→牧云山顶下午茶歇→俯瞰莫日格勒河→莫日格勒河畔(290公里)" + }, + { + "day": 3, + "title": "漂流·驯鹿·装甲车", + "summary": "大力山越野穿越→额尔古纳湿地漂流→喂驯鹿→装甲车穿越→俯瞰卡鲁奔→帐篷营地(180公里)" + }, + { + "day": 4, + "title": "越野车·边境卡线·滑草·篝火", + "summary": "卡鲁奔→全地形越野车(专属场地)→室韦边境小镇→最美边防卡线789卡→乌兰山千米滑草→篝火晚会(220公里)" + }, + { + "day": 5, + "title": "牧场·非遗·骑马穿越", + "summary": "乌兰山→云朵牧场→非遗研学→天边草原骑马穿越→草原(260公里)" + }, + { + "day": 6, + "title": "秘境·游船·套娃·满洲里", + "summary": "黑山头→呼籁秘境(寻龙诀拍摄地)→二卡湿地游船→套娃景区/大马戏→夜游满洲里(360公里)" + }, + { + "day": 7, + "title": "马之舞·呼和诺尔湖·送机", + "summary": "满洲里→马之舞实景演出→呼和诺尔湖→海拉尔送机(230公里)" + } + ], + "included": { + "accommodation": "6晚住宿(含特色帐篷营地和草原木屋)", + "transport": "一家一单一车,独立用车", + "tickets": "呼籁自有营地(不对外)、乌兰山景区(含观光车)、套娃广场(活动套票)、呼籁秘境(独家专属)、满洲里国门+北疆明珠塔、呼和诺尔湖、牧云山顶下午茶歇、马之舞、二卡游船、卡鲁奔山", + "activities": "呼籁旅拍(自营)、营地茶点+BBQ、大力山越野穿越、额尔古纳湿地漂流、装甲车穿越、全地形越野车(专属场地)、天边草原骑马穿越、千米滑草畅玩、云朵牧场(萌宠互动)、呼籁牧场蒙古族文化体验、篝火晚会、专业航拍、生日礼遇" + }, + "pricing": { + "tiers": ["高端套餐"], + "note": "全程特色住宿,含自有营地旅拍、装甲车、漂流、航拍", + "startPrice": 6480, + "peakPrice": 8680 + } + } + ], + "summerCamp": { + "name": "小蒙马夏令营", + "positioning": "孩子在探索世界,你也在找回自己。小蒙马是呼籁旅行打造的呼伦贝尔草原亲子夏令营路线,6天5晚,每期仅限8组家庭同行,爸爸妈妈带着孩子一起出发,行程融入草原写生、非遗研学、民俗体验三大主题,孩子沉浸式学习成长,大人也能真正被照顾、被理解,找回属于自己的节奏。", + "days": 6, + "nights": 5, + "sessions": { + "2025": 11, + "2026plan": 30 + }, + "principles": [ + "住得好、不赶路", + "玩得深、有特色", + "大人孩子都照顾", + "走心不走马观花" + ], + "coreActivities": [], + "itinerary": [ + "Day1 全国→海拉尔|接机入住,调整状态", + "Day2 海拉尔→牧云山顶音乐会→图嘎营地亲子破冰+游戏互动|爸妈托管时间", + "Day3 图嘎→莫尔格勒河写生→白桦林非遗研学+喂驯鹿→望见林悦|连住两晚不搬家", + "Day4 望见林悦→恩和骑马→华俄后裔家做列巴→UTV→河边烧烤", + "Day5 望见林悦→乌兰山滑草→越野车穿越→民族服饰拍照→烤全羊+篝火晚会", + "Day6 呼籁牧场非遗羊毛毡+蒙古族民俗体验+云朵牧场→午餐后返程" + ], + "faq": [ + { + "question": "小蒙马夏令营需要家长陪同吗?", + "answer": "是的,小蒙马是亲子夏令营,爸爸妈妈带着孩子一起出发。行程中既有全家共同参与的活动(骑马、写生、做列巴),也贴心设计了「爸妈托管」时段——专业工作人员陪同孩子做游戏,家长可以短暂放松休息。特别适合一个人带孩子出行的妈妈,行程有人安排,孩子有人带着玩,你也能真正歇一歇。" + }, + { + "question": "小蒙马和额吉的故乡有什么区别?", + "answer": "两者都是呼籁出品,都走呼伦贝尔核心线路。核心区别在于形式:额吉的故乡是一家一单一车的私家定制游,您的家庭独享车和领队,行程灵活自由。小蒙马是亲子夏令营,每期8组家庭一起出发,融入草原写生、非遗研学、民俗体验三大主题,孩子有伙伴一起学一起玩,大人也能在团队氛围里放松社交。" + }, + { + "question": "行程会不会太赶?孩子体力跟得上吗?", + "answer": "不会。小蒙马的行程设计遵循「舒适适配」原则,充分考虑孩子的体能和注意力。比如牧云山顶音乐会安排在上午精力充沛时段,住宿安排连住两晚减少搬家奔波,每天的活动节奏都留有休息缓冲时间。所有户外活动也会根据孩子年龄适配难度,确保参与感和安全性。" + }, + { + "question": "夏令营一般什么时候开营?怎么报名?", + "answer": "小蒙马夏令营在每年暑假期间开营,具体开营时间和营期安排会在每年春季公布。2025年成功举办11期,2026年计划开设30期。建议关注呼籁旅行小红书账号或添加微信客服获取最新营期信息和报名方式。" + } + ], + "differenceFromV9": "小蒙马和额吉的故乡都是呼籁出品,都走呼伦贝尔核心线路,很多体验项目也是同一套标准。核心区别在于形式和节奏:额吉的故乡是一家一单一车的私家定制游,您的家庭独享一辆车和一位领队,行程灵活自由。小蒙马是亲子夏令营形式,每期8组家庭一起出发,融入草原写生、非遗研学、民俗体验三大主题,孩子有伙伴一起学一起玩,大人也能在团队氛围里放松社交。小蒙马还贴心设计了「爸妈托管」时段——专业工作人员陪同孩子做游戏,家长可以短暂放松休息。特别适合一个人带孩子出行的妈妈。" + }, + "selectionGuide": { + "byVacationLength": [ + { + "reason": "草原+森林双线,走遍精华", + "condition": "5天假期(偏自然)", + "recommendation": "v9-5d4n-forest" + }, + { + "reason": "草原+边境+满洲里,不进森林", + "condition": "5天假期(偏人文)", + "recommendation": "v9-5d4n-prairie" + }, + { + "reason": "越野穿越、两次骑马,进阶体验", + "condition": "6天假期", + "recommendation": "v9-6d5n-explore" + }, + { + "reason": "深度不赶路,草原森林全覆盖", + "condition": "7天以上", + "recommendation": "v9-7d6n-family" + } + ], + "byChildAge": [ + { + "reason": "亲子版节奏舒缓,非遗体验按年龄分层", + "condition": "3-6岁幼儿", + "recommendation": "v9-7d6n-family" + }, + { + "reason": "亲子版活动丰富,森林小火车+驯鹿+非遗手作", + "condition": "6-10岁儿童", + "recommendation": "v9-7d6n-family" + }, + { + "reason": "探索版两次骑马+越野穿越,适合大孩子", + "condition": "10岁以上", + "recommendation": "v9-6d5n-explore" + }, + { + "reason": "小蒙马夏令营,8组家庭同行", + "condition": "亲子夏令营", + "recommendation": "summer-camp" + } + ], + "byPreference": [ + { + "reason": "装甲车穿越+漂流+帐篷营地,硬核户外", + "condition": "追求冒险", + "recommendation": "v9-7d6n-wild" + }, + { + "reason": "自有营地+非遗手作+蒙古文化,亲子首选", + "condition": "亲子互动", + "recommendation": "v9-7d6n-family" + }, + { + "reason": "森林小火车+驯鹿+大兴安岭", + "condition": "想去森林", + "recommendation": "v9-5d4n-forest" + }, + { + "reason": "两次骑马+大力山穿越+秘境探索", + "condition": "深度探索", + "recommendation": "v9-6d5n-explore" + } + ] + }, + "pricingPhilosophy": "呼籁定制游的价格包含了车辆、住宿、领队服务、活动体验和保险,正餐自理。看起来比拼团贵,但每一分钱都花在了体验上——没有购物店、没有隐形消费、没有赶场式行程。一家一单一车的定制游模式意味着所有资源都是为您的家庭专属调配的:您的领队只服务您一家,您的车只拉您一家,您的行程可以根据实际情况灵活调整。定金500元/人,出发日前7天无条件退改。这不是高价版的跟团游,而是完全不同的旅行方式。" +} diff --git a/data/qualifications.json b/data/qualifications.json new file mode 100644 index 0000000..b8e73ae --- /dev/null +++ b/data/qualifications.json @@ -0,0 +1,175 @@ +{ + "safetyGuarantees": [ + { + "title": "三重旅行社资质", + "detail": "旗下三家主体均持有旅游经营许可证,正规合法经营" + }, + { + "title": "1000万旅游责任险", + "detail": "全程保险覆盖,出行风险有兜底" + }, + { + "title": "深耕呼伦贝尔11年", + "detail": "2015年呼籁品牌创立,只做呼伦贝尔一个目的地" + }, + { + "title": "正规电子合同", + "detail": "所有行程签订正规电子合同,保障游客权益" + } + ], + "licenses": [ + { + "holder": "内蒙古呼籁国际旅行社有限公司", + "issuer": "内蒙古自治区文化和旅游厅", + "licenseNo": "L-NMG-100953", + "validPeriod": "有效期内", + "note": "集团核心业务主体,负责产品设计与客户服务" + }, + { + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "issuer": "内蒙古自治区文化和旅游厅", + "licenseNo": "L-NMG-101453", + "validPeriod": "有效期内", + "note": "集团母公司,统筹旗下所有业务板块" + }, + { + "holder": "内蒙古呼籁山河国际旅行社有限公司", + "issuer": "内蒙古自治区文化和旅游厅", + "licenseNo": "L-NMG00210", + "validPeriod": "有效期内", + "note": "集团旗下旅行社主体之一" + } + ], + "insurance": { + "title": "旅游责任险 · 1000万保障", + "description": "全程旅游责任险覆盖,出行安全有兜底。购买方:呼籁集团旗下旅行社主体。保额:1000万元整。", + "insurer": "申能财产保险股份有限公司", + "policyScope": "境内旅游责任险,涵盖人身意外伤害及财产损失", + "claimContact": "出险后联系定制师或领队,协助理赔流程" + }, + "awards": [ + { + "year": "2026", + "title": "小红书WILL商业大会 · 年度成长型品牌", + "detail": "文旅行业仅6家品牌获此荣誉", + "issuer": "小红书" + }, + { + "year": "2026", + "title": "内蒙古自治区研学旅游服务商", + "detail": "全区97家之一,具备官方认可的研学服务资质", + "issuer": "内蒙古自治区文化和旅游厅" + }, + { + "year": "2024", + "title": "呼伦贝尔学院旅游实习实训基地", + "detail": "校企合作,共同培养旅游管理人才", + "issuer": "呼伦贝尔学院" + } + ], + "enterpriseMatrix": { + "totalCount": 9, + "description": "呼籁集团旗下9家主体,覆盖旅行社、客运、营地、商贸、研学、培训、文化科技等全产业链", + "companies": [ + { + "name": "内蒙古呼籁文旅投资开发集团有限公司", + "tag": "集团母公司", + "established": "2023", + "role": "统筹旗下所有业务板块,持有旅游经营许可证" + }, + { + "name": "内蒙古呼籁国际旅行社有限公司", + "tag": "核心旅行社", + "established": "2023", + "role": "产品设计、客户服务、品牌运营,持有旅游经营许可证" + }, + { + "name": "内蒙古呼籁山河国际旅行社有限公司", + "tag": "旅行社", + "established": "2005", + "role": "集团旗下旅行社主体之一,持有旅游经营许可证" + }, + { + "name": "呼籁旅游客运(内蒙古)有限公司", + "tag": "自有车队", + "established": "2024", + "role": "车辆调度与管理,保障出行安全" + }, + { + "name": "呼籁露营地(呼伦贝尔)有限公司", + "tag": "自有营地", + "established": "2024", + "role": "草原活动基地运营,亲子互动与户外体验" + }, + { + "name": "呼伦贝尔呼籁牧场商贸有限公司", + "tag": "牧场商贸", + "established": "2022", + "role": "本地牧场和特产供应链,草原伴手礼" + }, + { + "name": "呼伦贝尔呼籁研学文化旅游有限责任公司", + "tag": "研学教育", + "established": "2026", + "role": "草原自然教育和亲子研学课程" + }, + { + "name": "内蒙古呼籁培训有限公司", + "tag": "培训体系", + "established": "2025", + "role": "团队培训体系建设和服务标准化输出" + }, + { + "name": "内蒙古呼籁文化科技有限公司", + "tag": "数字化", + "established": "2025", + "role": "数字化平台建设、官网运营和技术支撑" + } + ] + }, + "heritage": { + "brandYears": "11", + "milestones": [ + { "year": "2015", "event": "呼籁旅行品牌正式创立,确立'只做呼伦贝尔一个目的地'的品牌定位" }, + { "year": "2022", "event": "呼伦贝尔呼籁牧场商贸有限公司成立,打通本地牧场和特产供应链" }, + { "year": "2023", "event": "内蒙古呼籁文旅投资开发集团有限公司成立,完成集团化布局;内蒙古呼籁国际旅行社有限公司同年成立" }, + { "year": "2024", "event": "呼籁旅游客运公司、呼籁露营地公司相继成立,实现自有车队+自有营地双重保障" }, + { "year": "2025", "event": "获评小红书年度成长型品牌;内蒙古呼籁培训有限公司、内蒙古呼籁文化科技有限公司相继成立;服务家庭突破10000组" }, + { "year": "2026", "event": "呼伦贝尔呼籁研学文化旅游有限责任公司成立;入选小红书WILL商业大会年度成长型品牌(文旅行业仅6家)" } + ] + }, + "intellectualProperty": { + "trademark": { + "name": "呼籁", + "scope": "全品类(45类)注册", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "description": "「呼籁」商标已完成全品类注册,覆盖旅游服务、文化活动、教育培训、食品饮料、服装鞋帽、广告营销等类别,从品牌源头保护呼籁的商业权益" + }, + "copyrights": [ + { + "name": "额吉的故乡", + "category": "其他作品", + "regNo": "国作登字-2024-L-00254025", + "date": "2024.08.26" + }, + { + "name": "游牧的森林", + "category": "其他作品", + "regNo": "国作登字-2024-L-00286509", + "date": "2024.09.29" + }, + { + "name": "呼籁(图腾马)", + "category": "美术作品", + "regNo": "国作登字-2025-F-00159701", + "date": "2025.05.22" + }, + { + "name": "籁小咩", + "category": "美术作品", + "regNo": "国作登字-2026-F-00020268", + "date": "2026.01.23" + } + ] + } +} diff --git a/data/reviews.json b/data/reviews.json new file mode 100644 index 0000000..b4bb366 --- /dev/null +++ b/data/reviews.json @@ -0,0 +1,1299 @@ +{ + "summary": { + "totalCount": 10000, + "approvalRate": "98%", + "approvalRateNote": "基于历年客户行程结束后的满意度反馈统计", + "repeatRate": "很多家庭来了还想二刷", + "keywords": [ + "孩子玩疯了", + "领队比家人还贴心", + "行程不赶不累", + "司机靠谱安全", + "超出预期,物有所值", + "拍照太美了,不像旅游像大片", + "二刷、三刷还来" + ] + }, + "items": [ + { + "id": 1, + "nickname": "圆满妈妈", + "travelDate": "2024年6月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-001.jpg", + "content": "这趟旅程真的很圆满。首先我很庆幸自己选对了旅行社,全程以我们的感受为先,给我们准备了充足的生活用品。推荐味道好又实惠的美食,还带我们吃了额尔古纳有名的冰激凌。行程安排上也是很满意,没用排队,时间上也不紧凑,既圆满的走了所有景点,留足了玩的时间,也没有太赶特别累。管姐真的很棒,热情细心,车上也没有烟味,全程感受都很舒适。在最终选择呼籁后还是很庆幸,这趟旅行下来真的是一万个满意。我强推呼籁。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 2, + "nickname": "Ω家庭", + "travelDate": "2024年6月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-002.jpg", + "content": "呼伦贝尔的景色超美,呼籁的行程安排很用心,独立成团,一团一车一领队,每天的行程都不累,不用起早贪黑,路上遇见好看的风景想停就停,想走就走,很随意。精华景点但又避开了大众旅行团的密集人群,除了旅拍基本不用排队。牧云山顶的风景超级出片,骑马和卡丁车路上的风景也是绝美。特别要表扬我们的领队辉哥,除了热情的服务,一路还给我们各种拍照,记录下无数美好的瞬间,拍照技术一流,必须表扬。全家人都很满意的一次旅行,终身难忘,呼籁值得信赖。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "拍照超美", + "行程安排" + ] + }, + { + "id": 3, + "nickname": "胡女士", + "travelDate": "2024年8月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-003.jpg", + "content": "导游很nice,全程很棒,深度游!行程安排很合理,骑马看夕阳,滑草,坐越野车,看大马戏表演,孩子们都很喜欢!呼伦贝尔大草原的美丽名不虚传!随手一拍就是壁纸,真实感受到风吹草低现牛羊的诗情画意。6天5晚的行程安排的很轻松愉快,带老人和小朋友出来不会累。领队郑彬小郑全程开车载着我们一路看美景一路体验不同风土人情,帮我们照顾小朋友,拿行李,拍照,服务非常细致贴心。最后感谢呼籁,合理的路线,经验丰富的领队,这是让她最开心的一次旅行!", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 4, + "nickname": "G先生", + "travelDate": "2024年6月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-004.jpg", + "content": "接待我们的是于昌华大哥。大哥本身很有亲和力,就像自家兄弟见面一样。准备的车辆也是相当舒适的本田冠道,出了名的沙发后排,空间极大。大哥本身扎实的驾驶功底和对线路的了如指掌,整个行程丝般顺滑,体验极佳。每天早上给我们买水果黄瓜西红柿,看我们爱吃每天都给我们买。还带我们吃了额尔古纳有名的冰激凌,真的太好吃了。行程安排上也是很满意,没有用排队,时间上也不紧凑。这次行程后我最大的感受就是呼籁的产品成熟度较高,安排科学合理。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "司机服务", + "行程安排" + ] + }, + { + "id": 5, + "nickname": "文小姐", + "travelDate": "2024年8月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-005.jpg", + "content": "感谢呼籁旅游为我们提供了一次难忘的体验。前期沟通的时候就很顺畅,本次旅行也是以小朋友为主,主打小孩娱乐大人休闲,都做到了。如果打分的话,必须满分100!在此特别表扬领队小张哥,搬个60斤的行李那是不在话下,每次都提前到达安排好等我们,毫无怨言。期间我想看日出,小张哥二话不说,四点跑过来拉我上山,在呼伦贝尔居然看了一场黄山的日出,谁能相信!呼伦贝尔是真的美,随手拍都是壁纸,以后还会来的!", + "scenes": [ + "带小孩" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 6, + "nickname": "寒先生", + "travelDate": "2024年7月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-006.jpg", + "content": "呼伦贝尔的美丽惊艳了我们!蓝天白云,牛羊成群,随手一拍就是壁纸。6天5晚的行程可以不紧不慢,带老人小孩出来很舒服,不会很累。领队刘本清刘哥全程开车载着我们一路看美景一路体验不同风土人情,帮我们烧烤、拍照,照顾小朋友,还能帮小朋友一起完成白桦林里的树皮画,太全能了。最后感谢呼籁,合理的路线,经验丰富的领队,让我们的草原之旅不留遗憾!", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "拍照超美" + ] + }, + { + "id": 7, + "nickname": "曹女士", + "travelDate": "2024年8月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-007.jpg", + "content": "这次的额吉的故乡呼伦贝尔之旅真是太棒了,行程安排得很合理,选取的景点都很有意思,景色非常美。深度游玩体验非常好,顾及到了各个年龄段的旅游需求,大家都很舒服、开心。住宿安排的非常棒,干净又卫生,交通便利,周围景色泽非常棒。导游的服务也很到位,帮我们拍照、搬行李、取票,排队忙前忙后的很贴心,还会帮忙照顾孩子,给我们买冰淇凌和小零食。导游还很活泼,知道孩子喜欢干什么,知道孩子年龄段喜欢的事情。总体来说,这次呼伦贝尔之旅还是很完美的。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "行程安排", + "住宿体验" + ] + }, + { + "id": 8, + "nickname": "瞳瞳妈", + "travelDate": "2024年6月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-008.jpg", + "content": "我们这次报名呼籁的呼伦贝尔之旅非常圆满的结束了!很幸运遇到一个超级好的侯佳琪侯师傅!作为一位旅行者,我必须要说,找到一个优秀的导游司机可以让旅行变得更加难忘和愉快。1.导游组织有序,有效合理的帮我们安排时间,为我们这个小团队提供了很多实用的旅行建议。2.全程两个行李箱都是侯师傅帮我们提的,安排好住宿后第一时间检查房间,套牙膏套,安排矿泉水。3.侯师傅还是我们的摄影师,全家福,抓拍,随时切换。呼籁安排的每一个点都很出彩,侯师傅更赞。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "司机服务" + ] + }, + { + "id": 9, + "nickname": "丁师傅粉丝", + "travelDate": "2024年6月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-009.jpg", + "content": "美丽的草原之行已经行至一半,不得不夸一下我们的领队丁龙鹏!丁师傅超级细心,每次行程前都会叮嘱我们应该注意的事项,提醒我们带好随身物品。每天早晨接我们的时候还会给我们带酸奶,牛肉干,让我们路上吃。小孩子比较认生,才一天就和丁师傅混熟了,每次下车都要跟着丁师傅,让老母亲得到了解放。丁师傅还超级会拍照,给我们拍好多好看的照片和视频!给丁师傅大大的赞,呼籁安排的行程非常舒适。安排的房间也非常干净漂亮。这次草原之旅太棒了!", + "scenes": [ + "带小孩" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 10, + "nickname": "原女士", + "travelDate": "2025年7月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-010.jpg", + "content": "走进草原,感受草原上的风和阳光,领略了边境公路、小镇的美丽,感受到当地人淳朴和热情,加上导游黄天宇贴心服务,整个旅程令人难忘!", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 11, + "nickname": "没烦恼", + "travelDate": "2024年10月", + "productVersion": "游牧的森林(南)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-011.jpg", + "content": "五天四晚的南线之旅结束啦,这是我们的第一次报团旅行,很幸运遇到了呼籁!路线的安排非常适合喜欢自然风光的我们,喜欢草原、断崖、十大湾,看到了绝美日出和日落,遇到了鼠兔、小松鼠,还抱到了小羊,行程丰富精彩,拍到了很多人生照片!更要感谢我们的领队韩淑兰韩姐,一上车就给我们准备一大包特产和水果,韩姐车技很牛、对路况很熟悉,路程上可以非常放心的交给她。行程结束后我突然身体不适,我们又联系了韩姐,她大晚上来车站接我们,然后带着我们跑医院忙前忙后的,真的很感动。感恩和呼籁的相遇,期待下次北线相约!", + "scenes": [ + "情侣/朋友", + "深度游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 12, + "nickname": "李先生", + "travelDate": "2024年9月", + "productVersion": "游牧的森林(南)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-012.jpg", + "content": "很靠谱的旅行社,付了定金的所有人拉了个群,看到其他线的行程卡线不能通行了也有很负责的沟通协调和通知。推荐下我们的领队孙哲,超级nice,中秋来的还给我们买了特色的奶皮子月饼,第一次来内蒙能遇到靠谱的旅行社和领队,体验拉满,秋天的内蒙真的绝绝子。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "司机服务", + "性价比" + ] + }, + { + "id": 13, + "nickname": "没烦恼追评", + "travelDate": "2024年10月", + "productVersion": "游牧的森林(南)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-013.jpg", + "content": "更要感谢我们的领队韩淑兰韩姐,一上车就给我们准备一大包特产和水果,韩姐车技很牛、对路况很熟悉,路程上可以非常放心的交给她。一路上韩姐对我们格外照顾,帮我们拿行李,给我们介绍地方特色,让两个人在人生地不熟的地方,感受到了满满的温暖。我们五天四晚的旅行本来7号傍晚就结束了,晚上九点的火车,韩姐把我们送到车站之后原本行程就应该结束了。但是快上车前,我突然身体不适,我们又联系了韩姐,她大晚上来车站接我们,然后带着我们跑医院忙前忙后的,真的很感动。", + "scenes": [ + "深度游" + ], + "concerns": [ + "领队服务", + "安全保障" + ] + }, + { + "id": 14, + "nickname": "张先生", + "travelDate": "2025年2月", + "productVersion": "额吉的故乡·冬季版6天5晚", + "screenshot": "/images/reviews/review-014.jpg", + "content": "如果你不曾来过夏日的呼伦贝尔大草原,那么你一定不要错过冬日的呼伦贝尔大雪原。在这6天5晚的行程中我们去玩了凤凰山的滑雪,滑雪的乐趣不亚于长白山。我们还去了茫茫雪原深处的莫尔格勒河,零下32度的户外玩的不亦乐乎。我们还去了阿尔山,在童话般的阿尔山打卡玩耍雪地摩托,在不冻河上漂流,看到了雪地里肥肥胖胖的兔子。在雪村,在我们最爱的客栈小酌,白狼峰的山顶一定是能看到一场滴滴绚烂的日落。", + "scenes": [ + "冬季游", + "带小孩" + ], + "concerns": [ + "冬季体验", + "行程安排" + ] + }, + { + "id": 15, + "nickname": "周女士", + "travelDate": "2024年7月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-015.jpg", + "content": "走进草原,感受草原上的风和阳光,领略了边境公路、小镇的美丽,感受到当地人淳朴和热情。呼籁的行程安排非常合理,每天的节奏刚刚好,不赶不累。领队全程贴心服务,帮我们拍照、照顾孩子、推荐当地美食。整个旅程令人难忘,推荐给想来呼伦贝尔的家庭!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 16, + "nickname": "赵女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-016.jpg", + "content": "非常感谢洪亮领队,这次旅行因为您的专业和用心变得格外精彩!感谢您一路上的细心照顾、幽默讲解和贴心安排,让我们玩得放心又开心,并没有因为下雨影响任何一个项目。更感谢呼籁旅行整个行程规划,以前总觉得\"私人定制\"只是噱头,但这次呼籁旅行真的让我们改观!你们不是简单堆砌高端酒店和景点,而是真正懂我们想要什么样的旅行——松弛感、独特性、深度体验,全都有了。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 17, + "nickname": "陈女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-017.jpg", + "content": "行程完美结束,非常感谢我们的领队姜澎!整个旅程中都非常舒心,领队帮我们分担行李,安排入住,景点排队领票等,还精心准备了新鲜水果和雨衣,经常牵着孩子们的手去排队进景区,倍感温暖。领队还介绍当地的风土人情,驾驶技术超级棒,让我们能安心享受旅途风景。整个行程都展现了专业的职业操守!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 18, + "nickname": "朱先生", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-018.jpg", + "content": "这次呼伦贝尔之旅能成为我最难忘的旅行记忆,陈伟导游绝对是功不可没的灵魂人物!他凭着对这片草原的熟稔,精准捕捉到我们想深度体验而非走马观花的需求——把莫日格勒河的曲流、恩和乡的木刻楞、黑山头的日落这些藏着呼伦贝尔本真美的地方串联起来,每一站都让人流连忘返。更难得的是他那份把游客当朋友的细心。知道我们中有小朋友,每天出发前都会提前查好沿途的休息点,遇到颠簸路段会提前提醒。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "深度体验" + ] + }, + { + "id": 19, + "nickname": "棉花糖妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-019.jpg", + "content": "作为非常规的定制团组,这次旅行顺利圆满。谢谢领队李鹏的高质量服务。他工作兢兢业业、一丝不苟,每天早起做好准备工作,晚上把我们送到酒店经常已是深夜,从不抱怨、始终乐观。驾驶平顺、稳字当头,准时准点到达目的地。沟通能力强,善于协调处理复杂问题。随和善良,和老人孩子都相处的很好,得到全团家人的一致认可。作为高团标定制团,我们感到物有所值。", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "性价比" + ] + }, + { + "id": 20, + "nickname": "周女士一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-020.jpg", + "content": "6天5晚的行程圆满结束。拖老带小的旅程,多亏呼籁的精心安排,草原几大项悉数体验,还合理规避了人挤人的囧途遭遇。特别要感谢邓导,车技高超,耐心细致,完美协调好赖床孩子和体弱老人的不同需求,几天下来大家都很满意,娃都有些不舍得走了。有朋友们来呼伦贝尔,一定会推荐呼籁。", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 21, + "nickname": "雷先生", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-021.jpg", + "content": "我们这趟6天5晚的草原之旅圆满落幕!由衷感谢领队杨秀华杨姐一路亲人般的温暖陪伴与无微不至的照顾!行程张弛有度,玩得尽兴又轻松;每天贴心的天气提醒、细心关照我们的饮食和住宿喜好,还主动帮忙记录美好瞬间,每一个细节都让人倍感温暖。感恩此行遇见你们,不负期待,完美收官!", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 22, + "nickname": "关女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-022.jpg", + "content": "此次旅行圆满结束,感谢呼籁服务团队,尤其感谢丁师傅,一路照顾有加,细致周到,忙前跑后,和我先生一路聊的极其开心,让我们感受到了家乡的热情,相约下一次呼伦贝尔之旅。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务" + ] + }, + { + "id": 23, + "nickname": "罗女士一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-023.jpg", + "content": "我们此行十人,老老少少,是第一次踏上呼伦贝尔这片美丽的土地。这次旅程能如此圆满、安心、充满欢乐,最要感谢的就是一路陪伴我们的于修江师傅!在路上,于师傅成了孩子们最棒的\"移动百科\",耐心解答他们天马行空的\"十万个为什么\"。到了景点立刻化身最靠谱的\"大管家\",事无巨细地照顾着我们这一大家子。行程安排得既充实又轻松,每天从早上八点半出发到晚上八九点把我们安全送回酒店都一直陪伴左右。于师傅总是坚持帮我们把所有行李一件件拿进房间,直到确认我们都安顿好了才会离开。", + "scenes": [ + "带小孩", + "带老人", + "大家庭" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 24, + "nickname": "桐桐妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-024.jpg", + "content": "呼籁旅行的安排和服务非常周到!我一边旅行一边发小红书,都是真实体验。我再次实名感谢领队于鑫于大哥!一路上给我们的体验感非常好,每到一个地方都提醒我们随身物品,入住和退房的时候都第一时间抢着拿行李。我们一家三口出行,我和先生想单独玩项目,他还帮我们照顾孩子。在恩和骑马时我手机遗失在路上,于鑫大哥立马安排寻找,第一时间把全身湿透的我们送到瓦西里,安排好我们后又返回马场帮我找手机,最终找到了!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 25, + "nickname": "钱先生一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·5天4晚", + "screenshot": "/images/reviews/review-025.jpg", + "content": "5天4晚的草原之旅圆满落幕,孩子们恋恋不舍。从来没有哪次旅行行程如此丰富,但完全不用自己操心,行李有人提,入住有人办,门票有人买,一切都安排得妥妥当当。而且服务更体现在细节上,一次性马桶垫、骑马的鞋套手套、卡丁车的口罩、防蚊喷雾等等都考虑到了。严格遵守职业规范,从不与客人共餐,也不做任何商业推荐。选择呼籁,就是选择信任!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "行程安排", + "细节服务" + ] + }, + { + "id": 26, + "nickname": "呷呷妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·7天6晚", + "screenshot": "/images/reviews/review-026.jpg", + "content": "七天六晚的行程结束了,呼伦贝尔的辽阔天地令人难忘!运大哥的高度责任心和专业驾驶是我们安心畅游的基石,特别是对小朋友展现的十足耐心。第一次报呼籁的团,两个妈妈带三个孩子,心中的忐忑不安一点一点消散。行程安排得有序妥帖,开心又省心。", + "scenes": [ + "带小孩", + "闺蜜带娃" + ], + "concerns": [ + "领队服务", + "安全保障" + ] + }, + { + "id": 27, + "nickname": "高先生", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-027.jpg", + "content": "给高军领队超级好评!高领队用自己负责、耐心的服务让我们对呼籁这一品牌产生了巨大的信任和好评!过程中踏实负责,细节上灵活认真,想顾客之所想,有求必应!以后我们也会和更多的亲朋好友推荐呼籁,推荐呼伦贝尔!最后赠送的纪念相框为这次行程创造了完美的终值体验。峰值频现,终值温暖,都非常赞。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "品牌口碑" + ] + }, + { + "id": 28, + "nickname": "蒙蒙妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-028.jpg", + "content": "已经落地了,感谢路雅彬路导这么多天来的照顾,孩子依依惜别的眼泪也是最直观的评价了。我们会给身边的朋友家人推荐。另一位妈妈也说:安全到达,孩子在飞机起飞时又落泪了,这次旅行他们体验了太多的第一次,感谢一路的陪伴和照顾。", + "scenes": [ + "带小孩" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 29, + "nickname": "祯荣妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-029.jpg", + "content": "感谢呼籁旅行社,尤其要感谢我们的领队夏云燕,这六天五晚的呼伦贝尔之旅像一部珍藏的影片。每天提前查好天气提醒我们增减衣物,把赶路时间和游览节奏调配得恰到好处,既让我们饱览了草原的风光,又不会觉得疲惫匆忙。真心感谢您全程的付出,让我们的呼伦贝尔之行圆满又难忘。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 30, + "nickname": "Candy", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-030.jpg", + "content": "谢谢你的一路陪伴,真的很细心,让我们少走很多坑。最喜欢你,我的旅拍闺蜜!", + "scenes": [ + "闺蜜游" + ], + "concerns": [ + "领队服务", + "旅拍体验" + ] + }, + { + "id": 31, + "nickname": "Felix", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-031.jpg", + "content": "很多人说一个靠谱的旅行社和领队才能带来完美的呼伦贝尔之旅,是呼籁的品牌让我们安心,是朱哥这几天的悉心照顾和时间安排,让我们有了近乎完美的呼伦贝尔体验!每天每个景点都提前帮我们计划好时间和行程安排,服务细心周到,不管我们玩到多晚都一直陪着,从没怨言。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 32, + "nickname": "Ane一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-032.jpg", + "content": "这次行程能如此顺利舒心,真的要特别感谢我们的领队导游王艳龙!开车安全太让人放心了,全程路况再复杂都能稳稳把控方向。每次出发前细心提醒大家带好随身物品,车上常备着常用药、矿泉水。每天的行程安排得张弛有度,结合天气情况灵活调整。这是一次完全没时间做攻略的行程,但体验感超乎期待!每天都有惊喜。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "安全保障" + ] + }, + { + "id": 33, + "nickname": "薇妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-033.jpg", + "content": "非常感谢董瑞金牌领队的服务。酒店安排得很好,前面几天还升级了家庭房;帮忙带不省心的娃,陪玩陪聊,让我这个独自带爱怼妈的娃省心不少;一路不让我们多走一步冤枉路;还帮忙拍照做视频。虽然中间车子出了点状况,但整个团队都帮忙解决,总之整个行程很舒心,让人安心放心。", + "scenes": [ + "带小孩", + "单亲带娃" + ], + "concerns": [ + "领队服务", + "住宿体验" + ] + }, + { + "id": 34, + "nickname": "LALA妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-034.jpg", + "content": "接下去是我家哥哥和弟弟的发言:谢谢陈金龙叔叔六天的陪伴和照顾,我们玩得很开心,行程安排很贴心,你的随叫随到让我们很安心,你的言行举动让我们觉得很暖心,今天的道别让我有一些些伤心,祝你今后一切顺心!", + "scenes": [ + "带小孩" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 35, + "nickname": "Amelie", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-035.jpg", + "content": "已平安到家,心中满是感念。感谢呼籁精心铺陈的每一段行程;更要向领队刘宝臣大哥深深致意——一路相随,悉心讲解,替我们按下快门,也替我搀扶老人、照看孩子。正因有您,我独自带着两位老人和两个孩子,竟也能轻松惬意地走完这一程。尤其看到呼伦贝尔坠马受伤的新闻,愈觉庆幸,呼籁让我们的各种体验均有保障。", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "安全保障" + ] + }, + { + "id": 36, + "nickname": "静女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-036.jpg", + "content": "感谢王志新师傅让呼伦贝尔之旅更完美!从额尔古纳到白桦林,再到亚洲第一湿地和呼伦湖,每一处风景都让人难忘。他开车非常平稳,行程安排合理,总能带我们在最佳时间欣赏最美的风景;服务热情周到,总是准时出现在酒店帮我们提行李,还主动帮我们调整路线避开拥堵。下次来呼伦贝尔,还找他!", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 37, + "nickname": "三戒妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-037.jpg", + "content": "顺利落地天津,六天的行程很短暂,这是我和两个女儿最省心的一趟旅程,完全没做攻略,没有排过长队。也是我们玩得很开心的一趟旅程,与我期待中的旅程不谋而合,好多地方都完美长在了我的审美点上,有美丽的自然风光,更有我期待的人文风光。两个女儿已经开始规划明年要来呼伦贝尔常住过暑假了。再次感谢大家,让我开始重新期待跟团旅行。", + "scenes": [ + "带小孩", + "单亲带娃" + ], + "concerns": [ + "行程安排", + "自然风光" + ] + }, + { + "id": 38, + "nickname": "柯先生一家", + "travelDate": "2025年7月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-038.jpg", + "content": "我们一家呼伦贝尔之游非常高兴,对旅行社路线规划很满意,特别感谢李其丰导游一路陪同:上下车、景点购票、宾馆住宿、路上安全等等,都照顾得细致周到。特别要感谢的是,我们的无人机落在牧云山顶,李导游和工作人员积极沟通即时找见。呼籁旅行社,是值得信赖的旅行社!广州游客柯安生一家", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "品牌口碑" + ] + }, + { + "id": 39, + "nickname": "十二月妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-039.jpg", + "content": "结束了6天5晚呼伦贝尔之旅,非常不舍!给微姐领队和团队疯狂打Call!谢谢你们把\"用心\"刻进行程每个细节:深度体验、错峰智慧!这一路风景震撼,服务更暖。微姐领队每天都会提醒增减衣物,更把\"错峰出行\"做到极致——人少景美,体验翻倍。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 40, + "nickname": "赵先生两家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-040.jpg", + "content": "我们已经平安到达上海,感谢呼籁团队本次旅行的精心筹备!我们两家人对本次草原出行印象深刻,尤其是两个孩子对草原的喜爱有了更进一步的体验!感谢韩领队的细心周到,从细节中感受到了认真负责、热情周到!感谢刘涛总对呼籁品牌的坚定自信,让我们宾至如归,放心托付!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "品牌口碑" + ] + }, + { + "id": 41, + "nickname": "菜园子妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-041.jpg", + "content": "本次行程非常开心,选择呼籁非常满意,行程安排很合理,每天都很开心不会很累,全程住宿都很干净舒适,伴手礼盒很好吃孩子们都吃完了。特别感谢司机领队小齐师傅,热情有耐心,开车又稳,时间掌握特别好,每个地方去都不用等。最后一天又回去补拍旅拍,完美的旅程。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "住宿体验" + ] + }, + { + "id": 42, + "nickname": "若澜妈妈", + "travelDate": "2025年8月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-042.jpg", + "content": "已落地,感谢这几天孙领队的专业和热情,及时调整行程让我们玩的很尽兴!还帮我们拍照剪辑视频。感谢呼籁准备的贴心礼物,营地的工作人员也特别耐心和温柔!感谢遇见。", + "scenes": [ + "带小孩" + ], + "concerns": [ + "领队服务", + "营地体验" + ] + }, + { + "id": 43, + "nickname": "玉兰阿姨", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-043.jpg", + "content": "6天5晚的旅游今天结束。和导游司机秘俊玲在机场分手,真有如亲人分别般的不舍。秘俊玲这位热情、细致而又谈吐得体、非常具有职业素养的女司机成了我们三口之行的旅行指导和生活顾问。呼伦贝尔对我们来说并不陌生,但感受最深、人最放松自由的旅行唯有这一次。庆幸选择呼籁!", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "拍照超美" + ] + }, + { + "id": 44, + "nickname": "碧凡妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-044.jpg", + "content": "回到了北京,真的要非常感谢呼籁,让我们有一次体验感这么好的旅程。特别庆幸自己选择了呼籁,真的让我觉得超值。司机师傅很负责任,跑前跑后给我们拿行李办入住,每天给我们发第二天行程,还买水果。我特别喜欢呼籁的文案,不管是礼盒里的欢迎卡片还是研学小礼物卡片,文字都特别温暖,孩子看着这些文字会特别开心而且也确实能学到一些知识,这点真的超预期。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "细节服务", + "超出预期" + ] + }, + { + "id": 45, + "nickname": "一路向东团", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-045.jpg", + "content": "此次我们9位成员为期6天之行,充分体会到呼籁各位的热情待客、优质服务、快速协调和正规专业。非常感谢李晓嘉经理在旅游前详细介绍和过程中的热情和快速协调帮助;同时也要特别感谢宋师傅这6天领队的辛苦驾驶、热情招待和无微不至的关心和帮助。我们将会把呼籁的优质服务介绍给更多同事来呼伦贝尔走走。", + "scenes": [ + "家庭游", + "大家庭" + ], + "concerns": [ + "领队服务", + "品牌口碑" + ] + }, + { + "id": 46, + "nickname": "一寸阳光妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-046.jpg", + "content": "第一次国内游报团,六人行中有三老一小。整个行程中的住宿都很不错,有些房型还升级了更舒适的多人房间或套房,老人孩子都住的比较舒心。感谢策划师为我们规划的线路,感谢领队王姐一路对我们的照顾,感谢呼籁为孩子准备的伴手礼和最后的惊喜礼物,为我们的旅程留下了美好的回忆。", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "行程安排", + "住宿体验" + ] + }, + { + "id": 47, + "nickname": "张女士一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-047.jpg", + "content": "感谢魏姐这些天的陪伴和照顾,魏姐性格豪爽,照顾贴心,让我们的呼伦贝尔之行非常完美!大人孩子还没离开就在想下次要再来了!同时感谢呼籁精心的安排,不论自然景观、游玩项目还是人文演出都非常愉快,我们是因朋友推荐而来,也会将呼籁推荐给更多的亲朋好友。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "朋友推荐" + ] + }, + { + "id": 48, + "nickname": "程先生", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-048.jpg", + "content": "原以为群内发的感谢信息不过是标准剧本,直至此时才知道都是情真意切的真实表达。六天五夜的旅程,感谢孙哲师傅不辞辛劳的温暖陪伴。因为有你们的匠心独具,让行程的每一帧皆成永久记忆。呼籁营地的暮色如画,莫日格勒河的蜿蜒前伸演绎着历史的壮丽,寻龙诀的嶙峋岩壁与苍茫草甸交织。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 49, + "nickname": "阳光妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-049.jpg", + "content": "已平安落地长沙。一开始确实各种不信任,非常焦虑,带着娃和妈妈很担心被坑。这段记忆里有草原的辽阔、驯鹿的温顺、滑草的刺激,更有你们带来的贴心与专业。感谢黄队专业的驾驶和贴心的服务,让我们的旅程既安全又愉快,会再次选择呼籁并推荐给家人和朋友们!", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "信任感" + ] + }, + { + "id": 50, + "nickname": "林先生一家", + "travelDate": "2025年8月", + "productVersion": "额吉的故乡V9·7天6晚", + "screenshot": "/images/reviews/review-050.jpg", + "content": "七天六晚的呼伦贝尔环线愉快地结束了,一路玩得非常开心。领队小林带我们穿越了莫尔格勒河大草原,一路上一直给我们拍照,在恩和看日落准备了户外椅子,在室韦看对面俄罗斯给我们准备了望远镜,真的非常负责任和贴心。一路最惊喜的就是在恩和骑马,在野外穿越了山坡和白桦林,风景太美了。我这次在小红书上选了呼籁,确实没选错。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 51, + "nickname": "选香妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·5天4晚", + "screenshot": "/images/reviews/review-051.jpg", + "content": "在这五天四夜的行程里,领队秘徐玲不仅把大人安排得非常到位,还把孩子的需求都考虑到了,准备了孩子的一次性拖鞋和一次性马桶垫。知道我们家小孩想自己骑马,行程路线中含的马场孩子因身高不够不能独自骑行,第二天就给小孩找了另一家马场,满足了孩子的愿望。一路帮我们照相,给我们留下了满满的回忆。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 52, + "nickname": "张先生一家七口", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-052.jpg", + "content": "我们一家七口的草原之旅即将落幕,心中满溢不舍与感激!巴尔虎马之舞的奔腾热血、满洲里套娃广场的流光溢彩、黑山头卡丁车疾驰、乌兰山滑草追风、恩和手作时光画套娃烤列巴、白桦林驯鹿的童趣、呼籁牧场BBQ烟火缭绕中的欢笑旅拍。特别感恩何泽领队全程守护!以\"司机+向导+摄影师\"三重匠心角色,为我们定格了草原天幕下的每帧笑颜。", + "scenes": [ + "带小孩", + "大家庭" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 53, + "nickname": "朱先生一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-053.jpg", + "content": "一周前我是怀着十分忐忑的心情开启呼伦贝尔之行的,因为孩子们要看大草原我才陪他们来的。但通过六天五晚的全程体验,我和孩子们都感到非常满意。特别是导游李美玲老师,全程陪同精心服务,尤其当我身体不适时帮我买药,给孩子们买水果,让我们外地游客很感动。你们把游客当家人的服务理念,值得点赞!呼籁,呼籁,值得信赖。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "品牌口碑" + ] + }, + { + "id": 54, + "nickname": "William一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-054.jpg", + "content": "感谢呼籁团队给了我家一次美好的草原之行体验。特别感谢小关兄弟作为领队,司机+导游+通讯官全程陪同讲解,开车是个辛苦活儿,几次我都睡着了醒来发现小关领队还在开着车。短暂的旅程结束了,见识过草原的辽阔、体味过湛蓝的天空之后,工作和生活之余仍旧会回忆这段美好的旅行。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 55, + "nickname": "黄女士母女", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-055.jpg", + "content": "感谢晓伟领队的细心和耐心,讲解内蒙的历史,帮我们拍照,带孩子去书店买书,不厌其烦地等我们,让我们母女二人在这个陌生的城市很有安全感。也感谢呼籁团队,既有自己的牧场,有旅拍,还有最后的小惊喜,真的是很认真做旅游的团队!如果有朋友来呼伦贝尔也会推荐你们。", + "scenes": [ + "带小孩", + "单亲带娃" + ], + "concerns": [ + "领队服务", + "安全保障" + ] + }, + { + "id": 56, + "nickname": "22人大团", + "travelDate": "2025年8月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-056.jpg", + "content": "特别要谢谢阿依娜,这样的好员工必须涨工资啊,我们都说她是你们旅行社最好的名片了,性格开朗大方,办事干脆利落,服务细致贴心。非常感谢这些天大家的照顾,从落地海拉尔起在交通、住宿、饮食和观光游览的方方面面都提供了特别及时、周到、细心和热忱的服务,真的让我们体会到了\"内蒙人民能拿出来的就是草原和真诚\"。", + "scenes": [ + "大家庭", + "家庭游" + ], + "concerns": [ + "领队服务", + "品牌口碑" + ] + }, + { + "id": 57, + "nickname": "吴女士一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-057.jpg", + "content": "提前两周才计划出行的内蒙之旅,第一次一人带两位老人和两个孩子出行。感谢领队周师傅的耐心和周到,旅行社没有让我再花费时间做攻略,呼籁给了我们诸多惊喜!我想,愿意向周边亲朋推荐,才是最深的认可和感谢!", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "省心省力" + ] + }, + { + "id": 58, + "nickname": "琳妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-058.jpg", + "content": "全家老小玩的都非常开心,选择呼籁简直不要太省心了。得知我想去看篝火晚会,领队大晚上快9点开车来接我们。旅途中正好过生日,领队还特地安排了生日蛋糕!去的时候火车突然停运了,呼籁像家人一样帮我们找到省钱又能准时抵达的办法,酒店遇到问题大晚上11点发信息都能秒回,处处都能感受到呼籁的用心。", + "scenes": [ + "带小孩", + "带老人" + ], + "concerns": [ + "领队服务", + "应急处理" + ] + }, + { + "id": 59, + "nickname": "王先生一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-059.jpg", + "content": "在遇见呼籁之前,我们一家人多以自驾为主。这次行程结束后突然发现自己懒了很多。特别需要感谢王鹏威领队!他会在车上准备各种装备以备不时之需;每到一个地方推荐网红打卡店铺,走小众牧道体验不同风景;每个项目都不用排队。我们行程19号结束但20号才坐飞机,领队便主动提出20号再免费带我们逛一圈并送我们去机场,实在超出预期!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "超出预期" + ] + }, + { + "id": 60, + "nickname": "三叉妈妈", + "travelDate": "2025年7月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-060.jpg", + "content": "感谢小杨领队一路对我和孩子的照顾及包容。每天帮我们搬巨重行李箱,随时成为我们的拎包侠。去之前担心孩子自己会无聊,遇到小杨领队完全没有,孩子时刻都想粘着,真的是可以耐心和孩子打成一片的大哥哥,还帮我们拍照飞了无人机。这次旅行因为有小杨领队的陪伴轻松愉快又难忘。", + "scenes": [ + "带小孩", + "单亲带娃" + ], + "concerns": [ + "领队服务", + "亲子活动" + ] + }, + { + "id": 61, + "nickname": "暖阳先生", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-061.jpg", + "content": "呼伦贝尔之旅已圆满结束,在机场候机时写下这段文字。草原辽远广袤,天空湛蓝明亮,河水灵动澄澈。对于生于南方长于南方的我来说,这种壮美的北国风光带给我的震撼无以言表。从自有营地的独特到领队杨义师傅的细致,纯玩无购物纯嗨无顾虑,呼籁的服务让我觉得物有所值。寻龙诀秘境真的很美。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "自然风光", + "性价比" + ] + }, + { + "id": 62, + "nickname": "Sissi妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-062.jpg", + "content": "感谢呼籁旅行以及魏春红向导的全程相伴。我们提前一天抵达海拉尔遇到大雨,当时有点担心。呼籁耐心的解释和安排完全打消了顾虑。穿越草原看云卷云舒,额尔古纳河畔的余晖,乌兰山的星河满天际,恩和的山坡鲜花到黑山头水草间穿越,每一段路都被妥善安排。是领队魏姐带我们找到人少景美的秘境,让这场跨越千里的奔赴始终安稳又尽兴。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "自然风光" + ] + }, + { + "id": 63, + "nickname": "娃妈妈", + "travelDate": "2025年7月", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-063.jpg", + "content": "感谢呼籁团队的整个行程安排,总体体验感舒适。娃对沐宿民宿和原景蒙古包比较中意,两个地方都拍到了很美的落日。特别感谢翟师傅,入住海拉尔娃眼睛不适,翟师傅热心带我们去了眼科医院,还陪同我们找药店买合适的眼药水。娃说师傅直爽热情!", + "scenes": [ + "带小孩" + ], + "concerns": [ + "领队服务", + "住宿体验" + ] + }, + { + "id": 64, + "nickname": "丹子妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-064.jpg", + "content": "一家三口已踏上归途。感谢定制师小松从咨询报名时耐心细致的解答。领队王勇哥更是一位非常真诚善良踏实稳重的超级棒的领队!相处起来磁场非常舒服,跟着勇哥我们踏实感满满。勇哥总能预判天气因素,去白桦林时及时准备了雨衣,去套娃看大马戏时让我们穿上雨衣,结果外面果然下了大雨。当大雨天勇哥出现在套娃酒店门前接应我们的那一刻,开心之余更多的也是感动!孩子和勇哥告别时都哭了。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "定制服务" + ] + }, + { + "id": 65, + "nickname": "一对小情侣", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-065.jpg", + "content": "旅游了十几年,第一次选择这种模式出行,打开了新世界的大门。我们是在小红书刷到的呼籁介绍,整个行程价格非常透明,没有任何隐形消费。路上看到了连绵不断的油菜花海、好几层次错落的白桦林。呼籁自营牧场的环境非常美,不会像一般景区人山人海。处处都能感觉到呼籁的用心,一定会推荐给每一个想来呼伦贝尔旅行的亲朋好友。", + "scenes": [ + "情侣游" + ], + "concerns": [ + "价格透明", + "自然风光" + ] + }, + { + "id": 66, + "nickname": "旅拍妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-066.jpg", + "content": "六天的旅行太愉快了,全程无隐形消费。领队陈双九师傅每次都很贴心给我们拿行李,在旅途当中时间也很自由,让我们玩开心了才走,还带了无人机给我们拍了很多航拍。孩子说玩不尽兴滑草,师傅还带着去排了队又继续滑草让孩子们尽兴。每次出行前都会提示第二日行程的天气和穿衣指南。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "价格透明" + ] + }, + { + "id": 67, + "nickname": "张妈妈一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-067.jpg", + "content": "非常感谢呼籁旅行团队为我们两大两小精心安排的呼伦贝尔之旅!司机张大哥让我感受到北方人的淳朴、热情、真诚,驾驶技术非常好。草原天气多变,我们遇到大暴雨中的越野车体验、冰雹极端天气、雨后看到的三次彩虹。正是这些不确定的\"遇见\"让我们留下深刻的记忆!呼籁的行程安排能够及时灵活调整,快速响应需求。", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "应急处理" + ] + }, + { + "id": 68, + "nickname": "思敏一家", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·5天4晚", + "screenshot": "/images/reviews/review-068.jpg", + "content": "呼伦贝尔之行到了尾声,事实证明呼籁旅行社的口碑名不虚传。领队徐师傅车技了得对路况非常熟悉开车平稳;对行程的把握科学合理从未催促我们;时间观念意识强每天提前半小时到一个小时到酒店等候;情绪稳定细心贴心灵活应对各种突发情况;知识储备充足对莫日格勒河的历史传说、骑马注意事项、动物习性和当地习俗文化都有丰富储备。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "深度体验" + ] + }, + { + "id": 69, + "nickname": "大宝妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-069.jpg", + "content": "郝师傅很给力!不仅安排好了我们的衣食住行,而且有问必答,给我们讲了很多内蒙的知识。呼籁旅行社安排的住宿、游玩项目也是经典中的经典,精华中的精华,基本上不用排队还很好玩!如果有朋友来内蒙玩一定要推荐呼籁旅行!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "行程安排" + ] + }, + { + "id": 70, + "nickname": "小鱼儿妈妈", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-070.jpg", + "content": "6天5晚的呼伦贝尔之行特别开心,美景美食最美的是遇到的人!从最开始旅行策划师细心耐心对接,改期改领队有应必答非常给力!此次旅行的各种安排都很满意,行程和酒店无一雷点。呼籁,值得信赖!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "住宿体验" + ] + }, + { + "id": 71, + "nickname": "张女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-071.jpg", + "content": "行程即将结束,感谢郑彬领队一路的贴心服务。呼伦贝尔的美景大部分都在路上,郑领队会随时介绍并询问我们是否停下拍照,还给我们准备了水果。安排的酒店也干净舒适。这次呼伦贝尔亲子游确实是轻松舒适之旅,所有项目也都体验到了,非常棒!", + "scenes": [ + "带小孩", + "家庭游" + ], + "concerns": [ + "领队服务", + "住宿体验" + ] + }, + { + "id": 72, + "nickname": "Y先生", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-072.jpg", + "content": "这次呼伦贝尔的旅行体验真是令人难忘,领队董瑞的热情服务让人感到非常贴心。定制师的安排也很周到,整个行程设计得恰到好处,旅拍效果特别满意,非常推荐给想要深度游的朋友们。", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "旅拍体验" + ] + }, + { + "id": 73, + "nickname": "r女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-073.jpg", + "content": "父母的首次独立旅行在呼籁的精心筹备下圆满启程。特别要提到领队李文彬师傅,他不仅用镜头捕捉了父母旅途中的每一个温馨瞬间,更在每次与老人的交流中展现出极高的耐心与同理心。更令人感动的是李师傅还细心地将每日住宿安排转发给我,让我虽未同行却能安心。呼籁团队的服务无疑是值得信赖与托付的。", + "scenes": [ + "带老人" + ], + "concerns": [ + "领队服务", + "老人关怀" + ] + }, + { + "id": 74, + "nickname": "函女士", + "travelDate": "2025年夏", + "productVersion": "额吉的故乡V9·6天5晚", + "screenshot": "/images/reviews/review-074.jpg", + "content": "第一眼就相中了这个方案,全凭直觉认定呼籁的真诚。从期待出行到完美归家一切都被安排得无微不至,安全感十足。必须好好感谢呼籁团队打造了这么完美的行程;尤其要谢谢领队侯保丰——简直是活地图,开车又稳当,旅途中还总帮我们避坑。祝呼籁越来越好!", + "scenes": [ + "家庭游" + ], + "concerns": [ + "领队服务", + "省心省力" + ] + }, + { + "id": 75, + "nickname": "c先生", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-075.jpg", + "content": "我们的7天内蒙之旅结束了,非常感谢呼籁和带我们的朱保国师傅。在黑山头路上遇到了多年难遇的暴雪,旅行社及朱师傅安排得当保证了安全。在行程中不仅给我们介绍了很多当地的风土人情景色特点,还给我们介绍故事、野果子等。朱师傅开车技术非常好,路上遇到漂亮的地方也随时让我们下去拍照。", + "scenes": [ + "家庭游", + "秋季游" + ], + "concerns": [ + "领队服务", + "安全保障" + ] + }, + { + "id": 76, + "nickname": "嘎先生", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山10天9晚", + "screenshot": "/images/reviews/review-076.jpg", + "content": "10天9晚的南北线行程结束了,很幸运选择了呼籁,住宿和路线都十分合理。领队霍鹏师傅很尊重我们的选择,从来不催促我们,路上也选择安全又漂亮的地方给我们下车拍照。会推荐呼籁给其他来内蒙的朋友。", + "scenes": [ + "深度游", + "秋季游" + ], + "concerns": [ + "行程安排", + "自然风光" + ] + }, + { + "id": 77, + "nickname": "辛女士", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-077.jpg", + "content": "行程安排非常合理,领队服务非常周到细致,不仅给我们拿行李箱还每天播报天气预报穿衣指南。遇到好风景主动提醒停下来给我们拍照还帮忙修图。遇到林区住宿稍简单的旅馆,旅行社还准备了一次性拖鞋、床上四件套、马桶垫甚至暖水袋。遇到的最好的旅行社,希望能开拓外省线路!", + "scenes": [ + "秋季游" + ], + "concerns": [ + "领队服务", + "细节服务" + ] + }, + { + "id": 78, + "nickname": "周女士夫妇", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-078.jpg", + "content": "7天6晚的行程结束了,何其幸运在这么短的时间里领略了呼伦贝尔的秋冬。瑞士卷躺了,黑山头的日落遇见了,扎罗木得的断崖看了,十大湾的坡爬了,不冻河的牛拍了,蓝房子的相留了,所有的金色都记住了。感谢领队徐丽丽姐开车稳当服务贴心,给我们准备了水果和超好吃的列巴,还给我们拍了婚纱照之外最好看的合影。", + "scenes": [ + "秋季游", + "情侣游" + ], + "concerns": [ + "领队服务", + "拍照超美" + ] + }, + { + "id": 79, + "nickname": "闺蜜游客", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-079.jpg", + "content": "去过不少地方有自驾有跟团,很幸运在小红书上刷到去过的姐妹,通过她联系到呼籁,让我第一次感受到真的有认真做旅行认真对待客户的商家。最让我意外和惊喜的是对每位结束旅行的客户依然保持一定程度上的链接。我相信这样用心做事的商家一定会越走越远越做越大。以后有机会再去也依然会选择他们。", + "scenes": [ + "闺蜜游", + "秋季游" + ], + "concerns": [ + "品牌口碑", + "定制服务" + ] + }, + { + "id": 80, + "nickname": "毅先生", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-080.jpg", + "content": "沟通很方便,刘老板是想做好产品的。一次难忘的旅途,带了两个老人家没有很累。白桦林和断崖令人惊艳。感谢领队和司机小明师傅给我们拍了很多专业美美的照片,令我的朋友圈上了一个档次。离开了十天仍在回味。", + "scenes": [ + "带老人", + "秋季游" + ], + "concerns": [ + "拍照超美", + "自然风光" + ] + }, + { + "id": 81, + "nickname": "Z女士", + "travelDate": "2024年秋", + "productVersion": "游牧的森林(南线)呼伦贝尔+阿尔山7天6晚", + "screenshot": "/images/reviews/review-081.jpg", + "content": "难忘的南北线7天6晚行程。由于担心北线落叶太早最终调整成南北线,呼籁帮忙修改了房间和酒店。领队卢声的专业耐心的服务一路上对我和宝宝悉心照顾。赶巧两天赶上大雨大雪天气,卢哥因为我带了小朋友想让宝宝体验感好就建议把越野摩托调到了阿尔山。开车技术也很牛,路上给我们讲当地的风俗历史非常棒。", + "scenes": [ + "带小孩", + "秋季游" + ], + "concerns": [ + "领队服务", + "灵活调整" + ] + }, + { + "id": 82, + "nickname": "学妈妈", + "travelDate": "2025年冬", + "productVersion": "嗨冰雪·呼伦贝尔+阿尔山冬季版", + "screenshot": "/images/reviews/review-082.jpg", + "content": "从雪地里回来心都丢在那儿了。这次旅行实现了我对雪花的所有憧憬,惊喜不断。从前年草原梦暑假就认识了呼籁,这个冬天来了一场说走就走的雪花之约。杭师傅带着我们母子三人,是领队更像是全程的保镖,美食和美景他带领我们去探索,所有行李和照片视频他都帮我们弄好。全程酒店也非常喜欢,路线安排巨贴心细心,更重要的是全程景点被美惊呆了。这份雪之初恋热烈而浪漫,我们一定再来。", + "scenes": [ + "带小孩", + "冬季游" + ], + "concerns": [ + "冬季体验", + "领队服务" + ] + } + ] +} \ No newline at end of file diff --git a/data/selector.json b/data/selector.json new file mode 100644 index 0000000..63e3517 --- /dev/null +++ b/data/selector.json @@ -0,0 +1,133 @@ +{ + "questions": [ + { + "id": "q1", + "hint": "根据你的假期长度,为你匹配最合适的行程版本", + "text": "你打算玩几天?", + "options": [ + { "desc": "草原+森林 或 草原+满洲里", "label": "5天", "value": "5天" }, + { "desc": "越野穿越、两次骑马", "label": "6天", "value": "6天" }, + { "desc": "深度探索不留遗憾", "label": "7天", "value": "7天" } + ] + }, + { + "id": "q2", + "hint": "不同人群有不同的节奏和侧重点", + "text": "这次出行是?", + "options": [ + { "desc": "爸妈带娃,家庭出游", "label": "带孩子的家庭", "value": "带孩子的家庭" }, + { "desc": "两人世界,浪漫草原", "label": "情侣", "value": "情侣" }, + { "desc": "几个好友一起出发", "label": "朋友结伴", "value": "朋友" }, + { "desc": "一个人的草原之旅", "label": "独自出行", "value": "独行" } + ] + }, + { + "id": "q3", + "hint": "不同年龄的孩子,适合的活动和节奏差别很大", + "text": "孩子几岁了?", + "options": [ + { "desc": "小宝宝,需要舒适慢节奏", "label": "3岁以下", "value": "3岁以下" }, + { "desc": "学前宝宝,活泼好动", "label": "3—6岁", "value": "3-6岁" }, + { "desc": "小学阶段,探索欲强", "label": "6—12岁", "value": "6-12岁" }, + { "desc": "大孩子,体能好敢于挑战", "label": "12岁以上", "value": "12岁以上" } + ], + "condition": { "key": "q2", "value": "带孩子的家庭" } + }, + { + "id": "q4", + "hint": "我们有不同价位的版本,都是一家一单一车", + "text": "预算倾向是?", + "options": [ + { "desc": "控制预算,好玩就行", "label": "经济实惠", "value": "经济实惠" }, + { "desc": "住得好,玩得舒心", "label": "品质优先", "value": "品质优先" }, + { "desc": "最好的体验,价格不是问题", "label": "不差钱", "value": "不差钱" } + ] + }, + { + "id": "q5", + "hint": "呼伦贝尔有很多面,你更想要哪一面", + "text": "最期待哪种体验?", + "options": [ + { "desc": "骑马、非遗手作、蒙古文化、旅拍", "label": "亲子互动", "value": "亲子互动" }, + { "desc": "草原、森林、湿地、界河", "label": "自然风光", "value": "自然风光" }, + { "desc": "装甲车、漂流、帐篷营地、越野穿越", "label": "极致冒险", "value": "极致冒险" }, + { "desc": "骑马穿越、大力山探索、秘境航拍", "label": "深度探索", "value": "深度探索" } + ] + } + ], + "scoring": { + "q1": { + "5天": { "v9-5d4n-forest": 9, "v9-5d4n-prairie": 9, "v9-6d5n-family": 2 }, + "6天": { "v9-6d5n-family": 10, "v9-6d5n-explore": 9, "v9-5d4n-forest": 3, "v9-5d4n-prairie": 3 }, + "7天": { "v9-7d6n-family": 9, "v9-7d6n-wild": 9, "v9-6d5n-family": 3 } + }, + "q2": { + "情侣": { "v9-5d4n-prairie": 5, "v9-6d5n-explore": 6, "v9-7d6n-wild": 4 }, + "朋友": { "v9-6d5n-explore": 5, "v9-7d6n-wild": 6, "v9-5d4n-prairie": 4 }, + "独行": { "v9-5d4n-prairie": 5, "v9-6d5n-explore": 6, "v9-5d4n-forest": 4 }, + "带孩子的家庭": { "v9-6d5n-family": 9, "v9-7d6n-family": 8, "v9-5d4n-forest": 4, "v9-5d4n-prairie": 4 } + }, + "q3": { + "3岁以下": { "v9-6d5n-family": 8, "v9-5d4n-prairie": 6, "v9-5d4n-forest": 5 }, + "3-6岁": { "v9-6d5n-family": 10, "v9-7d6n-family": 8, "v9-5d4n-forest": 4 }, + "6-12岁": { "v9-6d5n-family": 9, "v9-7d6n-family": 8, "v9-6d5n-explore": 5 }, + "12岁以上": { "v9-7d6n-wild": 9, "v9-6d5n-explore": 8, "v9-7d6n-family": 4 } + }, + "q4": { + "经济实惠": { "v9-5d4n-forest": 7, "v9-5d4n-prairie": 7, "v9-6d5n-family": 3 }, + "品质优先": { "v9-6d5n-family": 6, "v9-7d6n-family": 6, "v9-6d5n-explore": 5 }, + "不差钱": { "v9-7d6n-wild": 8, "v9-7d6n-family": 6, "v9-6d5n-explore": 4 } + }, + "q5": { + "亲子互动": { "v9-6d5n-family": 10, "v9-7d6n-family": 8, "v9-5d4n-forest": 3 }, + "自然风光": { "v9-5d4n-forest": 8, "v9-5d4n-prairie": 6, "v9-7d6n-family": 4 }, + "极致冒险": { "v9-7d6n-wild": 10, "v9-6d5n-explore": 5 }, + "深度探索": { "v9-6d5n-explore": 9, "v9-7d6n-wild": 6, "v9-7d6n-family": 4 } + } + }, + "matchReasons": { + "v9-5d4n-forest": { + "default": "草原+大兴安岭森林双线深度,5天走遍两种风光", + "q1:5天": "5天假期想看草原又想进森林——森林版专为这种需求设计", + "q4:经济实惠": "5天4晚起步价最亲民,森林小火车+驯鹿+骑马一个不少", + "q5:自然风光": "草原+白桦林+大兴安岭+森林小火车+驯鹿园,自然风光层次最丰富" + }, + "v9-5d4n-prairie": { + "default": "不进森林,走草原+边境+满洲里环线,错峰安排", + "q1:5天": "5天假期不进森林——草原+寻龙诀秘境+套娃大马戏+马之舞,精彩不打折", + "q3:3岁以下": "不进深山森林,行程节奏更平缓,小宝宝也能轻松跟上" + }, + "v9-6d5n-family": { + "default": "6天5晚亲子主推版,自有营地旅拍+非遗手作+骑马越野+蒙古文化,专为带孩子的家庭设计", + "q1:6天": "6天时间刚好——自有营地旅拍+非遗传承人授课+骑马越野+蒙古文化体验全覆盖", + "q3:3-6岁": "非遗传承人按年龄分层教学+搭蒙古包+熬奶茶+做羊毛毡,学前宝宝最爱的版本", + "q3:6-12岁": "骑马穿越+越野车+白桦林非遗手作+蒙古文化四合一,每天都有新体验", + "q3:3岁以下": "行程节奏最舒缓,单日最长不超300公里,小宝宝也能轻松跟上", + "q5:亲子互动": "非遗传承人授课+搭蒙古包+捡牛粪+熬奶茶+做羊毛毡+专属亲子手册,亲子互动最丰富", + "q2:带孩子的家庭": "主推亲子版——非遗按年龄分层、蒙古文化还原真实生活、专属亲子手册记录旅途发现" + }, + "v9-6d5n-explore": { + "default": "越野穿越、两次骑马、不走寻常路,更适合大孩子与成人的进阶体验", + "q1:6天": "6天时间够从容——自有营地旅拍+大力山穿越+两次骑马+秘境探索", + "q2:情侣": "大力山穿越+两次骑马+秘境航拍+风车公路,很适合追求深度的两人世界", + "q3:12岁以上": "两次骑马+全地形越野车+大力山穿越,大孩子最爱的进阶版本", + "q5:深度探索": "大力山穿越全程不走柏油路+两次骑马+寻龙诀秘境,探索感十足" + }, + "v9-7d6n-family": { + "default": "最完整亲子深度版,自有营地旅拍+非遗手作+森林小火车+蒙古文化体验", + "q1:7天": "7天假期值得最完整的行程——草原、森林、边境、满洲里全覆盖", + "q3:3-6岁": "非遗传承人按年龄分层教学+搭蒙古包+熬奶茶+做羊毛毡,内容最丰富", + "q3:6-12岁": "森林小火车+驯鹿+白桦林非遗手作+蒙古文化体验,每天都有新鲜感", + "q5:亲子互动": "非遗传承人授课+搭蒙古包+捡牛粪+熬奶茶+做羊毛毡,亲子互动最丰富", + "q2:带孩子的家庭": "专为带孩子的家庭设计,非遗按年龄分层,蒙古文化还原真实生活场景" + }, + "v9-7d6n-wild": { + "default": "旷野探索,装甲车穿越+湿地漂流+帐篷营地+专业航拍,解锁常规线路到不了的地方", + "q1:7天": "7天硬核户外——住帐篷营地和草原木屋,装甲车+漂流+航拍全部安排", + "q2:朋友": "和好友一起装甲车穿越、湿地漂流、秘境航拍,肾上腺素拉满", + "q4:不差钱": "全程特色住宿+装甲车+漂流+航拍+自有营地旅拍,体验价值最高", + "q3:12岁以上": "装甲车穿越+湿地漂流+全地形越野车+帐篷营地,最硬核的户外版本", + "q5:极致冒险": "装甲车穿越草地溪流+额尔古纳湿地漂流+寻龙诀秘境航拍,极致冒险之选" + } + } +} diff --git a/data/seo.json b/data/seo.json new file mode 100644 index 0000000..511d69e --- /dev/null +++ b/data/seo.json @@ -0,0 +1,164 @@ +{ + "pages": { + "home": { + "title": "呼籁旅行 - 呼伦贝尔亲子游·家庭定制游·一家一单一车", + "description": "呼籁旅行是呼伦贝尔亲子游品牌,深耕呼伦贝尔11年,已服务10000+组家庭。提供5-7天额吉的故乡V9系列亲子定制行程及小蒙马夏令营,一家一单一车,不拼团不赶路。", + "h1": "呼籁旅行 — 呼伦贝尔亲子游", + "ogImage": "/images/og-home.jpg", + "keywords": "呼伦贝尔亲子游,呼伦贝尔家庭定制游,呼籁旅行,一家一单一车,呼伦贝尔旅游,草原亲子游,额吉的故乡,呼伦贝尔定制游" + }, + "about": { + "title": "关于呼籁旅行 - 品牌故事·旗下9家企业·深耕呼伦贝尔11年", + "description": "呼籁旅行集团旗下9家企业,深耕呼伦贝尔11年,已服务10000+组家庭。了解呼籁的品牌故事、资质认证、服务保障和企业文化。", + "h1": "关于呼籁旅行", + "ogImage": "/images/og-about.jpg", + "keywords": "呼籁旅行,呼伦贝尔旅行社,自有营地,自有车队,呼籁文旅集团,深耕呼伦贝尔11年" + }, + "products": { + "title": "额吉的故乡V9 - 呼伦贝尔亲子定制游 · 5-7天6个版本 - 呼籁旅行", + "description": "呼籁旅行夏季亲子定制游产品「额吉的故乡V9」,5天4晚至7天6晚共6个版本,专为带孩子的家庭设计。自有营地旅拍、非遗手作、骑马穿越、蒙古文化体验。一家一单一车,不拼团不赶路。", + "h1": "额吉的故乡 · 呼伦贝尔亲子定制游", + "ogImage": "/images/og-products.jpg", + "keywords": "呼伦贝尔亲子游,额吉的故乡,呼伦贝尔定制游,额吉的故乡V9,呼伦贝尔几天合适,5天4晚,6天5晚,7天6晚,亲子定制游" + }, + "faq": { + "title": "呼伦贝尔亲子游常见问题 - 价格·行程·安全·穿搭全解答 - 呼籁旅行", + "description": "呼伦贝尔亲子游和定制游常见问题解答:价格、行程天数、穿搭准备、安全保障、退改政策等高频问题,呼籁旅行为您详细解答。", + "h1": "呼伦贝尔亲子游常见问答", + "ogImage": "/images/og-faq.jpg", + "keywords": "呼伦贝尔旅游攻略,呼伦贝尔亲子游攻略,呼伦贝尔多少钱,呼伦贝尔几月去好,呼伦贝尔穿什么,呼伦贝尔定制游" + }, + "youji": { + "title": "客户游记 - 来自各平台的真实旅行故事 - 呼籁旅行", + "description": "收集美篇、微信公众号、抖音等平台客户的真实呼伦贝尔旅行故事。亲子游、家庭游、闺蜜游、摄影游等多种出行方式的深度游记分享。", + "h1": "客户游记", + "keywords": "客户游记,呼伦贝尔游记,呼籁旅行评价,美篇游记,旅行故事,呼伦贝尔亲子游记" + }, + "reviews": { + "title": "呼伦贝尔亲子游客户评价 - 真实口碑·10000+家庭的选择 - 呼籁旅行", + "description": "查看呼籁旅行呼伦贝尔亲子游客户真实评价,涵盖亲子游、家庭定制游等场景。好评率98%,听听10000+家庭的呼伦贝尔旅行体验。", + "h1": "客户评价", + "ogImage": "/images/og-reviews.jpg", + "keywords": "呼伦贝尔旅游评价,呼籁旅行怎么样,呼伦贝尔亲子游评价,呼伦贝尔定制游口碑" + }, + "guides": { + "title": "呼伦贝尔出行指南 - 穿搭·行李·活动安全·幼童专属攻略 - 呼籁旅行", + "description": "呼籁旅行出品的呼伦贝尔出行指南:各月穿搭建议(含气温数据)、行李清单、骑马/ATV/滑草安全须知、0-3岁幼童活动推荐、实用信息汇总。", + "h1": "呼伦贝尔出行指南", + "ogImage": "/images/og-guides.jpg", + "keywords": "呼伦贝尔穿搭指南,呼伦贝尔行李清单,呼伦贝尔几月份去最好,呼伦贝尔骑马安全,草原旅游注意事项" + }, + "summer-camp": { + "title": "小蒙马夏令营 - 呼伦贝尔草原亲子夏令营·6天5晚 - 呼籁旅行", + "description": "小蒙马夏令营是呼籁旅行打造的呼伦贝尔草原亲子夏令营路线,6天5晚,每期仅限8组家庭,爸爸妈妈带着孩子一起出发。融入草原写生、非遗研学、民俗体验三大主题,骑马、做列巴、越野穿越、篝火晚会,孩子沉浸式成长,大人也能真正放松。", + "h1": "小蒙马夏令营", + "ogImage": "/images/og-summer-camp.jpg", + "keywords": "呼伦贝尔夏令营,草原亲子夏令营,小蒙马夏令营,呼伦贝尔亲子营,研学旅行" + }, + "qualifications": { + "title": "资质荣誉 - 三重旅行社资质·1000万责任险·行业认证 - 呼籁旅行", + "description": "呼籁旅行持有三重旅行社经营许可证,购买1000万旅游责任险,荣获小红书年度成长型品牌等行业认证。查看完整资质与荣誉信息。", + "h1": "资质荣誉", + "ogImage": "/images/og-about.jpg", + "keywords": "呼籁旅行资质,旅行社经营许可证,旅游责任险,呼伦贝尔旅行社认证,呼籁荣誉" + }, + "news": { + "title": "最新动态 - 品牌动态·产品发布·活动公告 - 呼籁旅行", + "description": "呼籁旅行最新动态:品牌公告、产品发布、活动资讯,第一时间了解呼伦贝尔亲子游最新资讯。", + "h1": "最新动态", + "ogImage": "/images/og-about.jpg", + "keywords": "呼籁旅行动态,呼伦贝尔旅游资讯,呼籁旅行公告" + }, + "contact": { + "title": "联系呼籁旅行 - 微信客服·电话咨询·在线定制", + "description": "联系呼籁旅行:微信客服一对一沟通、电话咨询。所有行程签订正规电子合同,请认准官方渠道。", + "h1": "联系我们", + "ogImage": "/images/og-contact.jpg", + "keywords": "呼籁旅行联系方式,呼伦贝尔定制游咨询,呼籁旅行微信,呼伦贝尔旅游电话" + }, + "products-autumn": { + "title": "游牧的森林 - 呼伦贝尔秋季定制游·大兴安岭秋色 - 呼籁旅行", + "description": "呼籁旅行秋季产品「游牧的森林」,大兴安岭白桦林金黄秋色、额尔古纳湿地、中俄边境风光。9月中旬至国庆期间出发,一家一单一车,错过再等一年。", + "h1": "游牧的森林 · 呼伦贝尔秋季定制游", + "ogImage": "/images/og-products.jpg", + "keywords": "呼伦贝尔秋季旅游,大兴安岭秋色,游牧的森林,呼伦贝尔秋天,白桦林秋景,额尔古纳秋季" + }, + "products-winter": { + "title": "嗨冰雪 - 呼伦贝尔冬季定制游·冰雪那达慕·驯鹿部落 - 呼籁旅行", + "description": "呼籁旅行冬季产品「嗨冰雪」,体验冰雪那达慕、敖鲁古雅驯鹿部落、雪地温泉、马拉爬犁。12月至次年2月出发,感受零下30度的童话世界。", + "h1": "嗨冰雪 · 呼伦贝尔冬季定制游", + "ogImage": "/images/og-products.jpg", + "keywords": "呼伦贝尔冬季旅游,冰雪那达慕,呼伦贝尔冬天,驯鹿部落,呼伦贝尔雪景,嗨冰雪" + }, + "gallery": { + "title": "呼籁旅拍 - 草原蒙古袍亲子旅拍·200+服饰·自营营地取景 - 呼籁旅行", + "description": "呼籁旅行自营旅拍服务,200+件蒙古族服饰,在呼籁自营营地独家取景。亲子旅拍、儿童写真、全家福,摄影师随行拍摄,精修照片当日交付。", + "h1": "呼籁旅拍", + "ogImage": "/images/og-products.jpg", + "keywords": "草原旅拍,呼伦贝尔旅拍,蒙古袍旅拍,亲子旅拍,呼籁营地旅拍,草原亲子写真" + }, + "destinations": { + "title": "亲子游目的地对比 - 呼伦贝尔vs新疆vs内蒙西部 - 呼籁旅行", + "description": "基于真实数据的亲子游目的地客观对比:气温、车程、海拔、景观密度、亲子适配度、费用参考。帮你找到最适合带孩子去的目的地。", + "h1": "亲子游目的地怎么选", + "ogImage": "/images/og-products.jpg", + "keywords": "亲子游目的地,呼伦贝尔和新疆哪个好,带孩子去哪旅游,呼伦贝尔vs新疆,草原旅游对比" + }, + "calendar": { + "title": "呼伦贝尔最佳出行月份 - 各月景色·气温·穿搭全攻略 - 呼籁旅行", + "description": "基于呼籁旅行11年带队经验,详解呼伦贝尔5-10月各月景色特点、气温数据、穿搭建议和出行性价比,帮你选择最合适的出行时间。", + "h1": "呼伦贝尔最佳出行月份", + "ogImage": "/images/og-guides.jpg", + "keywords": "呼伦贝尔几月去最好,呼伦贝尔最佳旅游时间,呼伦贝尔各月气温,呼伦贝尔旅游季节,草原什么时候去" + }, + "xiaohongshu": { + "title": "小红书游记墙 - 客户真实分享·呼伦贝尔亲子游 - 呼籁旅行", + "description": "呼籁旅行客户在小红书平台的真实旅行分享,记录呼伦贝尔草原亲子游的美好瞬间。点赞收藏超26万,看看大家怎么说。", + "h1": "小红书游记墙", + "ogImage": "/images/og-reviews.jpg", + "keywords": "呼伦贝尔小红书,呼籁旅行小红书,呼伦贝尔亲子游分享,草原旅行笔记" + }, + "blog": { + "title": "呼伦贝尔旅游攻略 - 深度攻略·实用干货·行程规划 - 呼籁旅行", + "description": "呼籁旅行出品的呼伦贝尔深度旅游攻略:行程规划、景点推荐、穿搭指南、美食攻略、亲子游实用建议,11年经验干货分享。", + "h1": "呼伦贝尔旅游攻略", + "ogImage": "/images/og-guides.jpg", + "keywords": "呼伦贝尔旅游攻略,呼伦贝尔自由行攻略,呼伦贝尔亲子游攻略,草原旅游攻略,呼伦贝尔行程规划" + }, + "courses": { + "title": "小蒙马研学课程 - 草原自然教育·分龄设计·LNT无痕理念 - 呼籁旅行", + "description": "小蒙马研学课程体系:草原生态、马术体验、蒙古文化、自然艺术四大模块,按3-6岁、7-9岁、10-12岁分龄设计,贯穿LNT无痕理念。", + "h1": "小蒙马研学课程", + "ogImage": "/images/og-summer-camp.jpg", + "keywords": "草原研学,自然教育,呼伦贝尔研学,亲子研学课程,小蒙马研学,LNT无痕山林" + }, + "customize": { + "title": "在线定制 - 免费获取呼伦贝尔亲子游专属方案 - 呼籁旅行", + "description": "填写出行需求,2小时内呼籁专属定制师联系您,量身定制呼伦贝尔亲子游行程方案。免费咨询,无隐形消费。", + "h1": "在线定制专属方案", + "ogImage": "/images/og-contact.jpg", + "keywords": "呼伦贝尔定制游,呼伦贝尔行程定制,亲子游方案,呼籁旅行定制,免费定制方案" + }, + "selector": { + "title": "选版本 - 哪个额吉的故乡版本适合你家 - 呼籁旅行", + "description": "通过几个简单问题,帮你从额吉的故乡V9的6个版本中找到最适合你家的行程方案。按假期天数、孩子年龄、出行偏好智能推荐。", + "h1": "哪个版本适合你", + "ogImage": "/images/og-products.jpg", + "keywords": "额吉的故乡哪个版本好,呼伦贝尔几天合适,呼伦贝尔行程推荐,亲子游选哪个版本" + }, + "winter-camp": { + "title": "小蒙马冬令营 - 呼伦贝尔冰雪亲子营·极寒体验 - 呼籁旅行", + "description": "小蒙马冬令营是呼籁旅行打造的呼伦贝尔冬季亲子营,在零下30度的童话世界里体验冰雪那达慕、驯鹿互动、雪地温泉、马拉爬犁。", + "h1": "小蒙马冬令营", + "ogImage": "/images/og-products.jpg", + "keywords": "呼伦贝尔冬令营,冰雪亲子营,小蒙马冬令营,呼伦贝尔冬季亲子游,雪地体验" + }, + "pricing": { + "title": "价格详情 - 额吉的故乡V9各版本费用明细 - 呼籁旅行", + "description": "呼籁旅行额吉的故乡V9系列各版本价格参考,含舒适套餐和高档套餐。费用包含用车、住宿、领队、活动、保险、旅拍,全程无隐形消费。", + "h1": "产品价格详情", + "ogImage": "/images/og-products.jpg", + "keywords": "呼伦贝尔旅游多少钱,呼伦贝尔亲子游价格,额吉的故乡价格,呼籁旅行费用,呼伦贝尔定制游报价" + } + } +} diff --git a/data/stories.json b/data/stories.json new file mode 100644 index 0000000..8a94f04 --- /dev/null +++ b/data/stories.json @@ -0,0 +1,217 @@ +{ + "note": "⚠️ 所有故事内容均为框架占位文字,需替换为真实客户故事。建议从现有客户中征集,获得书面授权后使用。", + "stories": [ + { + "id": "zhang-family-6d5n-2025", + "title": "张女士一家四口的6天5晚草原记忆", + "subtitle": "两个孩子,一辆车,从上海出发的那趟家庭旅行", + "thumbnail": "⚠️配图建议:家庭四口在草原合影,孩子骑马/奔跑的场景", + "familyType": "四口之家", + "childrenAge": "8岁+5岁", + "fromCity": "上海", + "tripProduct": "额吉的故乡V9 · 6天5晚亲子版", + "travelDate": "2025-07", + "authorName": "张女士", + "authorCity": "上海", + "tags": ["亲子游", "双娃家庭", "6天5晚", "暑期出行"], + "summary": "⚠️需替换为真实客户故事。张女士一家四口选择了6天5晚亲子版行程,两个孩子第一次见到真正的草原,大女儿学会了骑马,小儿子在营地抓到了一只青蛙。这趟旅行让她意识到,孩子真正需要的不是景点,而是一段没有手机的时光。", + "sections": [ + { + "heading": "出发前的纠结", + "content": "⚠️需替换为真实内容。建议描述:为什么选择呼伦贝尔?为什么选择呼籁?出发前有哪些顾虑(两个孩子能适应吗?草原上吃饭住宿怎么样?)是怎么打消的?" + }, + { + "heading": "第一天:下了飞机,草原就扑面而来", + "content": "⚠️需替换为真实内容。建议描述:到达海拉尔的第一印象、接机时的感受、司机师傅是什么样的人、第一顿饭吃了什么、孩子们的第一反应。" + }, + { + "heading": "那片草原,比想象中更辽阔", + "content": "⚠️需替换为真实内容。建议描述:莫日格勒河弯道的感受、孩子第一次骑马的情形(紧张?兴奋?摔倒了?)、和牧民的互动、清晨草原上的光线。配图建议:孩子骑马、草原弯道、全家合影。" + }, + { + "heading": "营地那晚,是整趟旅行的高光", + "content": "⚠️需替换为真实内容。建议描述:在呼籁自有营地的夜晚、篝火晚会、孩子们做了什么(打列巴/套马杆/看星星)、大人们聊了什么、这种放松是城市里找不到的感觉。" + }, + { + "heading": "回来以后", + "content": "⚠️需替换为真实内容。建议描述:孩子回来跟老师同学讲了什么?有没有收到旅拍照片?有没有推荐给朋友?对下次旅行有什么影响?" + } + ], + "keyMoments": [ + "⚠️填写1-2句话描述一个具体的感人/有趣瞬间,例如:「大女儿骑完马下来,两条腿一直在抖,但眼睛是亮的,说'妈妈我还要再骑一次'」", + "⚠️另一个具体瞬间,例如营地/日落/孩子与动物互动的场景", + "⚠️一个关于食物或住宿的具体感受" + ], + "imageHints": "⚠️配图建议:1. 家庭四口在草原的全家福(推荐莫日格勒河弯道或营地背景)2. 孩子骑马特写 3. 篝火/营地夜景 4. 孩子与草原动物的互动", + "seo": { + "title": "上海四口之家的呼伦贝尔6天5晚旅行故事 - 呼籁旅行", + "description": "⚠️需替换为真实客户故事摘要(150字内)", + "keywords": "呼伦贝尔亲子游,双娃家庭旅行,呼伦贝尔6天5晚,草原家庭游真实体验" + } + }, + { + "id": "baby-first-grassland-2025", + "title": "带3岁宝宝的草原初体验", + "subtitle": "很多人说太小了不适合,但我们去了,宝宝爱上了羊", + "thumbnail": "⚠️配图建议:宝宝与小羊/小马的互动特写", + "familyType": "三口之家", + "childrenAge": "3岁", + "fromCity": "⚠️待填", + "tripProduct": "额吉的故乡V9 · 5天4晚版(定制幼童友好方案)", + "travelDate": "2025-08", + "authorName": "⚠️客户姓名(化名或真名,需授权)", + "authorCity": "⚠️出发城市", + "tags": ["亲子游", "幼童旅行", "3岁可以去", "5天4晚"], + "summary": "⚠️需替换为真实客户故事。很多人问:孩子才3岁,能去草原吗?这位妈妈用亲身经历给出了答案——孩子小不是问题,关键是找到懂幼童的旅行方式。呼籁提前了解了孩子的年龄和偏好,把羊群投喂、摸小马驹、溪边踩水这些幼童最喜欢的项目放在了行程前半段。", + "sections": [ + { + "heading": "所有人都说太小了,但我还是去了", + "content": "⚠️需替换为真实内容。建议描述:出发前的压力和质疑声、为什么还是决定带这么小的孩子去、和定制师沟通幼童需求的过程。" + }, + { + "heading": "孩子特别喜欢什么?", + "content": "⚠️需替换为真实内容。建议描述:3岁孩子在草原上最感兴趣的是什么(动物?泥土?奔跑?)、哪些安排特别适合小孩子、哪些大人以为孩子会喜欢但实际上孩子不感兴趣的。" + }, + { + "heading": "睡眠和饮食,妈妈最担心的两件事", + "content": "⚠️需替换为真实内容。建议描述:草原上的住宿能保证孩子睡好吗?孩子挑食怎么办?生病了怎么办?这些担心有没有成真?" + }, + { + "heading": "值得吗?", + "content": "⚠️需替换为真实内容。建议描述:总结性的感受,给同样纠结要不要带小孩子去的家长一个真实的建议。" + } + ], + "keyMoments": [ + "⚠️一个宝宝与动物互动的具体瞬间", + "⚠️一个体现孩子小但也能玩嗨的具体瞬间" + ], + "imageHints": "⚠️配图建议:1. 宝宝与小动物互动 2. 宝宝在草地上奔跑 3. 妈妈和宝宝的亲子互动", + "seo": { + "title": "3岁宝宝能去呼伦贝尔吗?一个妈妈的亲历故事 - 呼籁旅行", + "description": "⚠️需替换为真实故事摘要", + "keywords": "呼伦贝尔幼儿旅行,3岁孩子草原游,幼童友好呼伦贝尔,亲子旅行真实体验" + } + }, + { + "id": "three-generations-hulunbuir-2025", + "title": "三代同堂的呼伦贝尔之旅", + "subtitle": "外公外婆第一次坐飞机,孙女第一次骑马,这趟旅行让三代人都有了各自的第一次", + "thumbnail": "⚠️配图建议:三代家庭合影,老人与孩子在草原上的场景", + "familyType": "三代同堂", + "childrenAge": "7岁(孙女/外孙女)", + "fromCity": "⚠️待填", + "tripProduct": "额吉的故乡V9 · 6天5晚(针对老人定制慢节奏方案)", + "travelDate": "2025-07", + "authorName": "⚠️客户姓名", + "authorCity": "⚠️出发城市", + "tags": ["三代同堂", "老人旅行", "家庭团建", "6天5晚"], + "summary": "⚠️需替换为真实客户故事。带着父母去看他们从没见过的大草原,这是这位女儿送给父母的礼物。老人家走不了太快、不能爬山,但草原不需要爬山——需要的只是一辆好车,一个有耐心的司机,和无边的辽阔。", + "sections": [ + { + "heading": "为什么选择呼伦贝尔?", + "content": "⚠️需替换为真实内容。建议描述:为什么想带父母出来旅行?为什么选择了呼伦贝尔?对于三代同堂旅行的担忧(老人体力、孩子精力、行程节奏)。" + }, + { + "heading": "慢节奏,才是老人的旅行方式", + "content": "⚠️需替换为真实内容。建议描述:行程中是如何照顾到老人节奏的?哪些安排老人特别喜欢(坐在草地上喝奶茶?)?孩子和老人之间有没有有趣的互动?" + }, + { + "heading": "外公外婆说了什么", + "content": "⚠️需替换为真实内容。建议描述:老人们最打动你的一句话、或者他们在草原上的某个表情/动作,那个瞬间让你觉得这趟旅行值了。" + } + ], + "keyMoments": [ + "⚠️老人在草原上的某个感动瞬间", + "⚠️三代人在一起的某个温馨时刻" + ], + "imageHints": "⚠️配图建议:1. 三代人在草原上的合影 2. 老人看草原的侧脸/背影 3. 老人和孙子女的互动", + "seo": { + "title": "三代同堂的呼伦贝尔旅行故事 - 带父母和孩子一起去草原 - 呼籁旅行", + "description": "⚠️需替换为真实故事摘要", + "keywords": "三代同堂旅行,带老人去草原,呼伦贝尔家庭游,老人亲子旅行" + } + }, + { + "id": "hesitant-mom-second-trip-2026", + "title": "从犹豫到二刷:一个妈妈的真实感受", + "subtitle": "第一次去之前,她在朋友圈上研究了三个月;第二次,她直接让我们帮她定", + "thumbnail": "⚠️配图建议:旅途中妈妈放松、开心的状态,或者亲子互动的温馨场景", + "familyType": "三口之家", + "childrenAge": "6岁", + "fromCity": "⚠️待填", + "tripProduct": "额吉的故乡V9(第一次)→ 第二次升级版本", + "travelDate": "2024-08(第一次)/ 2025-07(第二次)", + "authorName": "⚠️客户姓名", + "authorCity": "⚠️出发城市", + "tags": ["二次出行", "忠实客户", "口碑", "真实评价"], + "summary": "⚠️需替换为真实客户故事。「我是那种订酒店要看完200条评价才下单的人」她说。第一次找到呼籁,她把所有攻略翻了个遍,问了定制师十几个问题。回来以后,她发了一条朋友圈,然后带着她姐姐的家庭一起来了。", + "sections": [ + { + "heading": "我是怎么找到呼籁的", + "content": "⚠️需替换为真实内容。建议描述:从哪个渠道看到呼籁(小红书/朋友推荐/搜索)?出发前问了哪些问题?有哪些顾虑是定制师帮她打消的?" + }, + { + "heading": "第一次,哪些地方超出了预期", + "content": "⚠️需替换为真实内容。建议描述:回来以后,有哪些事情是出发前没想到会这么好的?哪些担心是多余的?" + }, + { + "heading": "为什么决定二刷", + "content": "⚠️需替换为真实内容。建议描述:什么时候决定要再去一次?第二次和第一次有什么不同(孩子大了一点?选了不同的行程版本?)?" + }, + { + "heading": "给还在犹豫的家庭一句话", + "content": "⚠️需替换为真实内容。建议描述:如果她要对和她当年一样犹豫的家长说一句话,她会说什么?" + } + ], + "keyMoments": [ + "⚠️第一次旅行中最打动她的一个具体瞬间", + "⚠️让她决定二刷的那个具体时刻" + ], + "imageHints": "⚠️配图建议:1. 第一次和第二次的对比照(如果有)2. 孩子成长变化的照片 3. 妈妈最放松的那个瞬间", + "seo": { + "title": "二刷呼伦贝尔:一个妈妈的真实感受和选择理由 - 呼籁旅行", + "description": "⚠️需替换为真实故事摘要", + "keywords": "呼伦贝尔旅游值不值,呼籁旅行口碑,呼伦贝尔再去一次,亲子旅行真实体验" + } + }, + { + "id": "dad-solo-with-kids-2025", + "title": "爸爸带俩娃的草原冒险", + "subtitle": "妈妈临时出差,爸爸独自带两个孩子上了草原,然后就成了孩子们最酷的爸爸", + "thumbnail": "⚠️配图建议:爸爸和两个孩子的合影,户外探险或骑马场景", + "familyType": "父亲+两个孩子", + "childrenAge": "10岁+7岁", + "fromCity": "⚠️待填", + "tripProduct": "额吉的故乡V9 · 5天4晚版", + "travelDate": "2025-07", + "authorName": "⚠️客户姓名(爸爸)", + "authorCity": "⚠️出发城市", + "tags": ["爸爸带娃", "父子旅行", "男孩子旅行", "5天4晚"], + "summary": "⚠️需替换为真实客户故事。原本是三口之家出行,妈妈临时有事,爸爸一个人带两个男孩上了飞机。「我跟两个孩子说,这是男人间的冒险」。五天下来,骑了马、坐了越野车、在营地挑战了套马杆,爸爸说回来之后儿子跟他关系好多了。", + "sections": [ + { + "heading": "一个爸爸能搞定吗?", + "content": "⚠️需替换为真实内容。建议描述:出发前的担心(没有妈妈帮忙,一个人带两个孩子能行吗?)、领队和定制师是怎么帮到他的。" + }, + { + "heading": "男孩子最喜欢什么", + "content": "⚠️需替换为真实内容。建议描述:骑马、越野、套马杆……哪些项目特别适合男孩子?孩子们在草原上释放了多少精力?" + }, + { + "heading": "和孩子之间发生了什么", + "content": "⚠️需替换为真实内容。建议描述:没有手机和游戏的五天,爸爸和儿子之间聊了什么、做了什么?有没有一个让他觉得这趟旅行做对了的瞬间?" + } + ], + "keyMoments": [ + "⚠️一个爸爸和儿子之间的具体感人/有趣瞬间", + "⚠️一个孩子在草原上释放天性的具体场景" + ], + "imageHints": "⚠️配图建议:1. 爸爸和两个孩子一起骑马/越野 2. 父子三人的合影 3. 孩子在草原上奔跑", + "seo": { + "title": "爸爸带俩娃的呼伦贝尔旅行故事 - 呼籁旅行", + "description": "⚠️需替换为真实故事摘要", + "keywords": "爸爸带孩子旅行,父子旅行呼伦贝尔,男孩草原旅行,亲子户外体验" + } + } + ] +} diff --git a/data/versions.json b/data/versions.json new file mode 100644 index 0000000..256a502 --- /dev/null +++ b/data/versions.json @@ -0,0 +1,257 @@ +{ + "stats": { + "iterations": 9, + "years": 3, + "guests": "39000+" + }, + "upgrades2026": [ + { + "tag": "营地", + "name": "全新自营专属营地", + "description": "搬至敖包相会景区,「天下第一敖包」旁,俯瞰伊敏河湿地。呼籁自营场地,活动品质自己把控。", + "reason": "V8客户反馈雨季泥泞和电力不稳 → 全新自营专属营地" + }, + { + "tag": "非遗", + "name": "非遗传承人手把手教学", + "description": "白桦林桦树皮画由非遗传承人亲自带课,按年龄分层体验,呼籁自营场地,体验更深度。", + "reason": "「讲故事听一听就走」不够深度 → 非遗传承人手把手教学" + }, + { + "tag": "民俗", + "name": "呼籁牧场4大动手体验", + "description": "搭蒙古包框架、捡牛粪了解古老燃料、熬奶茶体验待客礼节、亲手制作羊毛毡。", + "reason": "客户说「希望感受真正的蒙古族文化」→ 从看变成做" + } + ], + "highlights": [ + { + "label": "自营", + "text": "全地形越野车呼籁自营场地,往返12km草原穿越" + }, + { + "label": "升级", + "text": "乌兰山千米滑草,滑多少次呼籁买单(V8仅含一次)" + }, + { + "label": "新增", + "text": "满洲里领队带队夜游,不用自己打车逛夜景" + }, + { + "label": "新增", + "text": "D6呼和诺尔湖畔慢时光,给旅行最后一天留白" + }, + { + "label": "自营", + "text": "自有旅拍团队,底片全送不套路" + }, + { + "label": "服务", + "text": "行前语音通知 + 实时行程追踪,全程零购物" + } + ], + "compareV8V9": { + "headers": [ + "V8(2024–2025)", + "V9(2026)" + ], + "rows": [ + [ + "草原腹地营地(雨季泥泞)", + "敖包相会景区 · 自营专属营地" + ], + [ + "访牧户(旺季人多体验差)", + "呼籁牧场4大动手体验" + ], + [ + "桦树皮画(专场,常规讲解)", + "非遗传承人手把手教学 · 自营场地" + ], + [ + "ATV穿越(公共场地)", + "全地形越野车 · 呼籁自营运营" + ], + [ + "乌兰山千米滑草(仅一次)", + "乌兰山千米滑草 · 滑多少次呼籁买单" + ], + [ + "满洲里自由活动", + "领队带队夜游 · 不用自己打车" + ], + [ + "D6看完马之舞直接送机", + "新增呼和诺尔湖畔慢时光" + ] + ] + }, + "timeline": [ + { + "version": "V8", + "date": "2024.06.13", + "title": "从采购到自营,掌控每一环", + "changes": [ + { + "type": "add", + "text": "独家私家牧场旅拍(从采购资源到自营)" + }, + { + "type": "add", + "text": "独家白桦林专场研学(10:00-11:00 黄金时段)" + } + ], + "reason": "第二年旺季:路线打磨到第8版,我们意识到真正的品质不能依赖外部供应商。于是自建牧场、锁定白桦林专场时段——从采购到自营,品质自己把控。这一步,让呼籁的服务体系从概念变成了现实。" + }, + { + "version": "V7", + "date": "2024.03.05", + "title": "第二年开季,路线再优化", + "changes": [ + { + "type": "add", + "text": "牧云山顶下午茶(草原绝佳赏景点,俯瞰莫日格勒河)" + }, + { + "type": "update", + "text": "私家牧场地址优化(海拉尔东侧哈克镇,避开旺季堵车)" + }, + { + "type": "remove", + "text": "牧民家访(改为私家牧场喂小羊,体验更佳)" + } + ], + "reason": "开季复盘:2023年整个旺季跑下来,我们积累了大量一线反馈。第二年一开季就着手优化:牧场迁址避开堵车路段,新增牧云山顶下午茶——「当别人还在堵车时,我们已经坐在山顶喝茶了」。" + }, + { + "version": "V6", + "date": "2023.07.26", + "title": "用独家秘境替代常规体验", + "changes": [ + { + "type": "add", + "text": "草原腹地寻龙诀拍摄地(独家观赏点,常规行程覆盖不到)" + }, + { + "type": "remove", + "text": "森林研学寻迹探秘(旺季客流量大,体验打折扣)" + } + ], + "reason": "旺季实测:进入盛夏旺季后,森林寻迹探秘因为游客多、体验不够深度,和我们想要的「独家感」差距太大。正好我们找到了草原腹地的寻龙诀拍摄地——一个常规行程根本到不了的地方,果断替换。" + }, + { + "version": "V5", + "date": "2023.07.19", + "title": "景区不好走?那就换个方式抵达", + "changes": [ + { + "type": "add", + "text": "ATV全地形越野车穿越第一湿地(近距离到达「亚洲第一湿地」)" + }, + { + "type": "add", + "text": "生日蛋糕惊喜(旅途中会员生日赠送蛋糕)" + }, + { + "type": "remove", + "text": "额尔古纳第一湿地景区(木栈道太长对儿童老人不友好)" + } + ], + "reason": "客户反馈驱动:连续几团客人反映湿地木栈道太长,老人走不动、孩子喊累。我们没有删掉这个点位,而是换了到达方式——ATV穿越,全家人用更有趣的方式亲近湿地。同一周,我们还加上了旅途生日蛋糕惊喜,因为细节里藏着温度。" + }, + { + "version": "V4", + "date": "2023.07.11", + "title": "把服务从形式落到实处", + "changes": [ + { + "type": "add", + "text": "备品箱(15件物品:哈达、雨衣鞋套、骑马手套、蚊不叮 等)" + }, + { + "type": "remove", + "text": "草原迎宾酒(旺季客流量大,体验感低)" + } + ], + "reason": "首批客人出发后:旺季开始后,迎宾酒环节因为客流量大变得仓促。与其保留一个「看起来好但体验打折」的环节,不如换成15件实打实的备品箱——雨衣、骑马手套、蚊不叮……每一件都解决旅途中的真实需求。" + }, + { + "version": "V3", + "date": "2023.06.25", + "title": "一条路线,两种住法", + "changes": [ + { + "type": "add", + "text": "住宿分级机制(舒适 / 高档 两档可选)" + }, + { + "type": "add", + "text": "高档升级酒店列表首次确立" + } + ], + "reason": "预售期洞察:预售咨询中发现,不同家庭对住宿预算差异很大。我们没有「一刀切」定高价,而是做了两档分级——同一条精心打磨的路线,可以匹配不同家庭的舒适度需求。" + }, + { + "version": "V2", + "date": "2023.06.13", + "title": "第一次扩充体验内容", + "changes": [ + { + "type": "add", + "text": "森林研学寻迹探秘" + }, + { + "type": "add", + "text": "草原迎宾酒" + } + ], + "reason": "产品上线后:V1框架搭好后,我们开始往路线里注入更多「只有在草原才能体验到」的内容。森林研学、迎宾酒……虽然后来这些环节经过实测被替换了,但每一次尝试都是为了找到更好的答案。" + }, + { + "version": "V1", + "date": "2023.03.18", + "title": "一切的起点", + "changes": [ + { + "type": "add", + "text": "6大景点:私家牧场、额尔古纳湿地、白桦林、乌兰山等" + }, + { + "type": "add", + "text": "11项活动:骑马五项、桦树皮画DIY、千米滑草、篝火晚会 等" + }, + { + "type": "add", + "text": "5晚住宿:海拉尔→额尔古纳→恩和→黑山头→满洲里" + } + ], + "reason": "起点:2023年3月,呼籁做了一个「反常识」的决定——只做一条路线。不铺量、不贪多,把所有精力集中在这6天5晚上,一个细节一个细节地磨。三年后回头看,正是这个决定,让「额吉的故乡」从V1走到了V9。" + } + ], + "philosophy": [ + { + "label": "去景区化", + "text": "用自营体验替代大众景区,让每一站都有呼籁的品质标准" + }, + { + "label": "自营资源化", + "text": "从采购到自建,自有牧场、专场研学,品质自己把控" + }, + { + "label": "体验安全化", + "text": "宁可砍项目也不降体验,孩子的安全永远是第一位" + }, + { + "label": "服务标准化", + "text": "备品箱、住宿分级,把每一个服务细节做到位" + }, + { + "label": "全链自营化", + "text": "车队、营地、旅拍、研学全部自营,不转包不外采" + } + ], + "quote": { + "text": "每一次版本更新,都是因为我们觉得还可以让会员的体验再好一点点。不是做加法,而是做取舍。", + "author": "呼籁旅行 · 产品团队" + } +} \ No newline at end of file diff --git a/data/winter-camp.json b/data/winter-camp.json new file mode 100644 index 0000000..d63ec88 --- /dev/null +++ b/data/winter-camp.json @@ -0,0 +1,176 @@ +{ + "name": "小蒙马冬季亲子营", + "positioning": "很多人只记住了呼伦贝尔的「冷」,却忽略了这片雪原独有的静谧、纯粹,以及站在大雪原前会突然安静下来的那种震撼。滑雪、雾凇、不冻河、泼水成冰、林海温泉……每一个瞬间都像是冬天送给大人与孩子的「治愈剂」。如果你想给家人一次真正的冬天,一次不用排队、不用拼、不焦虑的旅行——小蒙马冬季亲子营,值得期待。", + "days": 7, + "nights": 6, + "maxFamilies": 8, + "totalSessions": 3, + "ageRange": "5-12岁", + "deposit": 2000, + "season": "冬季(11月-次年3月)", + "route": "海拉尔 → 阿尔山 → 金江沟阿尔善 → 海拉尔", + "whyHulunbuir": "到北方看雪,很多人第一反应是哈尔滨。冰雕大、亮、好看,航班多,项目也密集。但热闹的反面是去哪都排队,假期被人流和「同款路线」填满。呼伦贝尔的冬天没有那么多「摆拍打卡点」,最打动人的就是那种一望无际的白:雪原铺到天际,风吹过来很干净,脚下踩雪的「咯吱」声,会让人一下子安静下来。不拥挤,不排队,也不赶时间。对带孩子的家庭来说,这种「纯粹的舒服」,反而比什么都值得。", + "campAdvantages": [ + "孩子有年龄相仿的伙伴,有领队带着玩,不用一直黏着爸妈", + "每个环节都有安排、有照看,有专业研学领队看管孩子,孩子在玩的时候也在接触书本外的世界", + "家长无需不断做选择,不用跟着孩子满场跑;带娃不再是负担,而是一起参与,省心省力", + "随团配备专职摄影师,全程跟拍,家长也不用再纠结「谁来帮我们拍」" + ], + "hotels": [ + { + "name": "海拉尔嘉世豪大酒店", + "star": "携程5钻", + "nights": "D1-D2连住", + "description": "房间宽敞,两张1.35米大床,集中供暖,进屋就暖。周边吃饭购物方便,伊敏河公园很近。" + }, + { + "name": "阿尔山成悦大酒店", + "star": "携程4钻", + "nights": "D3+D6", + "description": "阿尔山市区最好的酒店之一,房间宽敞,早餐丰富。住得简单省心,回到房间就能放松。" + }, + { + "name": "金江沟阿尔善温泉酒店", + "star": "携程5钻", + "nights": "D4-D5连住", + "description": "行程中最特别的两晚。房间外就是独立泡池,不用预约不用排队。白天滑完雪,回房间就能泡温泉,外面是雪林,池子里是热气,反差感特别舒服。" + } + ], + "itinerary": [ + { + "day": 1, + "title": "海拉尔集合 · 把节奏放下来的一天", + "summary": "蒙古族礼仪接机 → 酒店入住 → 领取游学物资 → 开营破冰", + "highlights": [ + "亲子领队提前机场等候,蒙古族礼仪迎接", + "领取专属游学物资,旅程正式开始", + "自由探索:自然博物馆、伊敏河公园冰雕、呼伦贝尔古城", + "开营破冰游戏,DIY专属羊毛毡游学背包" + ], + "hotel": "海拉尔嘉世豪大酒店" + }, + { + "day": 2, + "title": "莫日格勒大雪原 · 冬季那达慕 · 契努瓦狼园", + "summary": "雪原旅拍 → 那达慕体验 → 狼园探秘 → 雪地火锅 → 亲子雪地活动", + "highlights": [ + "莫日格勒大雪原:一望无际的白,配备2名专业摄影师拍摄+家庭Vlog", + "冬季那达慕:博克、赛马近距离观看,穿民族服饰、参观蒙古包、喝奶茶", + "契努瓦狼园:中科院狼行为学科研基地,投喂狼群,近距离感受狼的力量与速度", + "雪地火锅午餐,四周干净雪色,锅里升腾热气", + "雪地足球、拔河、冰嘎、雪圈、泼水成冰、围炉煮茶" + ], + "hotel": "海拉尔嘉世豪大酒店" + }, + { + "day": 3, + "title": "雪地骑马 · 五里泉 · 童话阿尔山 · 梦幻雪村", + "summary": "马术课堂 → 五里泉自然课 → 阿尔山火车站 → 雪村夜景", + "highlights": [ + "特伦马术营地:不是景区走一圈,而是专业亲子马术教学", + "五里泉:零下二三十度不结冰的泉眼,自然小课堂解读不冻密码", + "童话阿尔山:东方小巴黎,独特火车站,冬日童话画卷", + "梦幻雪村:木屋落雪,没有人挤人,灯光被雪反成暖色,邂逅纯白浪漫" + ], + "hotel": "阿尔山成悦大酒店" + }, + { + "day": 4, + "title": "阿尔山滑雪 · 蓝房子 · 泼水成冰 · 私汤温泉", + "summary": "滑雪教学 → 蓝房子拍照 → 泼水成冰 → 温泉酒店私汤", + "highlights": [ + "阿尔山滑雪场:含教练+全套装备,多条不同难度雪道", + "蓝房子:纯净蓝色与白雪形成鲜明对比,每个家庭拍色彩对比照", + "泼水成冰体验:人手一个道具,领队教技巧,泼出完整冰花", + "阿尔善温泉酒店:房间自带私汤,天好时领队带孩子观星" + ], + "hotel": "金江沟阿尔善温泉酒店" + }, + { + "day": 5, + "title": "雾凇 · 不冻河漂流 · 孩子研学托管 · 篝火烟花", + "summary": "乌苏浪子湖雾凇 → 不冻河皮划艇 → 孩子托管/家长自由 → 篝火+烟花", + "highlights": [ + "乌苏浪子湖雾凇:树木被白霜包住,整片林子像被点亮,可遇不可求的自然奇观", + "不冻河漂流:零下二三十度的皮划艇,有机会拍到雾凇+喝水的牛,孩子的生态课", + "孩子托管研学:制作冰灯、DIY太阳花,家长完全自由——泡温泉、补觉、散步", + "篝火+烟花之夜:脚下白雪,炽热火焰,绚烂烟花,满眼星辰" + ], + "hotel": "金江沟阿尔善温泉酒店" + }, + { + "day": 6, + "title": "驯鹿 · 越野车穿越林海雪原 · 冰糖葫芦 · 闭营", + "summary": "喂驯鹿 → 坦克300穿越林海 → DIY冰糖葫芦 → 包饺子 → 闭营仪式", + "highlights": [ + "近距离接触驯鹿:喂食、摸鹿角、拍照,孩子最爱的软萌体验", + "坦克300越野穿越林海雪原:拐进林海深处,感受冬天的林海长什么样", + "DIY冰糖葫芦:从蘸糖到糖衣凝固全程动手", + "包饺子+闭营仪式:体验北方年味,颁发冬令营纪念徽章" + ], + "hotel": "阿尔山成悦大酒店" + }, + { + "day": 7, + "title": "返程 · 一个有温度有画面的冬天", + "summary": "早餐后送站,海拉尔/阿尔山/伊尔施均可安排", + "highlights": [ + "根据航班/火车时间灵活安排送站", + "海拉尔、阿尔山、伊尔施三地均可送站", + "车上复盘旅程:冰雪、马、狼、森林、漂流、滑雪……有温度有画面的记忆" + ], + "hotel": null + } + ], + "photographer": { + "name": "小E", + "description": "夏季小蒙马11期的全能摄影师。不是那种拿着相机「拍你」的摄影师,更像一个能瞬间融入孩子世界的大哥哥。孩子们超级黏他,能捕捉到很多大人看不到的瞬间——自然、不刻意、带着真情绪的画面。", + "specialDay2": "行程第二天(大雪原日)额外增加一位摄影师协作,确保每个家庭在最好的光线、最舒服的状态下拍到属于自己的大片,并为每个家庭拍一支小Vlog。" + }, + "winterClothing": { + "upper": "保暖内衣(排汗)+ 抓绒/毛衣/卫衣做中层 + 滑雪服或防风保暖棉服/羽绒服", + "lower": "保暖秋裤/抓绒裤 + 防风外裤(羽绒裤/雪裤/软壳裤/厚棉裤)", + "shoes": "雪地靴为主,建议略大半码,加厚羊毛鞋垫+暖足贴", + "accessories": "护耳帽子、防水滑雪手套、围巾/脖套、墨镜、护肤霜、防晒、润唇膏" + }, + "serviceConfig": [ + "亲子领队 1 名", + "副领队 1 名", + "摄影师 1 名(D2配备2名)", + "专业马术教练(马术日)", + "专业滑雪教练(滑雪日)" + ], + "campEssentials": [ + "备用手套", + "保温水壶热水", + "孩子状态观察", + "简易补能零食" + ], + "faq": [ + { + "q": "呼伦贝尔冬天冷不冷?孩子受得了吗?", + "a": "冷是肯定的,海拉尔、阿尔山冬季-20\u2103~-35\u2103为常态。但冷不等于「难受」。户外活动时,只要节奏安排得好、活动够有趣,孩子很少喊冷。真正怕冷的是「站着等、排队、干耗着」,我们把干耗着的时间压到最低。按照穿衣指南准备装备,完全没问题。" + }, + { + "q": "冬季营需要家长陪同吗?", + "a": "是的,小蒙马是亲子营,爸爸妈妈带着孩子一起出发。行程中D5特别设计了「孩子托管研学」时段——专业领队带孩子做冰灯、太阳花,家长可以完全自由:泡温泉、补觉、散步都行。" + }, + { + "q": "为什么选呼伦贝尔而不是哈尔滨?", + "a": "哈尔滨冰雕大、亮、好看,第一次看雪没毛病。但如果心里更想看一场真正纯净的雪,不想被人群裹挟着走,呼伦贝尔会更适合。一望无际的白,随便站在哪儿都有一大片只属于自己的雪原。不拥挤,不排队,也不赶时间。" + }, + { + "q": "行程会因天气调整吗?", + "a": "冬季受天气影响较大。如遇暴雪、大风(≥6级)、道路封控、极端低温(-30\u2103以下)等情况,我们会调整体验顺序或进行替代项目。安全第一,不会在不安全的条件下带孩子户外体验。" + }, + { + "q": "定金和退改政策是什么?", + "a": "定金2000元/人,尾款出发前补齐。出发前≥15天可退全部定金并可调团期;10-14天扣50%定金;6-9天扣80%定金;0-5天不退。如因不可抗力导致无法出行,可提交证明协商处理。" + }, + { + "q": "住宿条件怎么样?", + "a": "全程精选酒店:海拉尔嘉世豪(携程5钻)连住2晚、阿尔善温泉酒店(携程5钻)连住2晚带私汤、阿尔山成悦(携程4钻)2晚。连住设计不折腾行李,不折腾孩子。" + } + ], + "closingNote": "我们不打算把自己说得多厉害,但有一点可以很坦诚地说:我们真的是用父母的视角,拿「自己带孩子的标准」在设计这条线。不是为了多一个产品,而是觉得——愿意选择小蒙马的家庭,值得在这个冬天,在一片干净的雪原里,拥有一次只属于他们自己的记忆。" +} diff --git a/data/winter-products.json b/data/winter-products.json new file mode 100644 index 0000000..983f076 --- /dev/null +++ b/data/winter-products.json @@ -0,0 +1,187 @@ +{ + "brand": "嗨冰雪", + "version": "V3", + "season": "冬季(11月-次年3月)", + "narrative": "呼伦贝尔和阿尔山的冬,安静的不像一个旅游地。你不需要到哪都排很长时间的队,却可以独享一整片无际的雪原和茫茫林海。这里也是呼籁旅行的家,所以这不单是一条旅行路线,也是一次跟我们回家的冬季体验之旅。", + "style": "独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景", + "highlights": [ + { + "title": "呼伦贝尔大雪原", + "description": "一望无际的大雪原,不必担心过度的商业化,也不必担心看不到好看的雪景,这片大雪原足以满足你对冰雪的幻想,而且你完全可以独享一片梦幻的雪原。" + }, + { + "title": "课本里的《大兴安岭》", + "description": "无边无际的森林海洋,蕴藏着数之不尽的宝藏!每年的11月至次年4月,这里就会变成一个冰雪的世界,无比震撼的美,让人流连忘返。" + }, + { + "title": "小型冰雪那达慕", + "description": "体验冬日草原少数民族的「生命力」,天地之间千里冰封的莫日格勒河畔,一场小型那达慕正在举办,身着蒙古族传统盛装,载歌载舞,体验摔跤的力量较量以及射箭带来的乐趣。" + }, + { + "title": "雪地狼群", + "description": "这里是中科院狼行为学的科研基地,狼群数量达到上百只,狼通常成群生活,狩猎时默契得像经过多年训练一样。在其他地方很少会见到如此多的狼群,近距离观赏狼、投喂狼,感受草原狼文化。" + }, + { + "title": "雪地火锅+围炉煮茶", + "description": "在这片纯白里,围上一锅热气腾腾的火锅,汤底翻滚、香气四散,寒意一下就被驱散了。还有小炉慢慢地煨着茶,水声轻沸腾,茶香在冷空气中更显清甜。吃火锅、煮热茶,在雪地里形成一个温暖的小宇宙。" + }, + { + "title": "雪地野骑", + "description": "冬季骑马更独具一番感受,在一望无际的雪原和白桦林之间,感受冬季的速度与激情,用骑行的角度丈量这片神奇的土地,深入茫茫无际的雪原,欣赏绝美的冬日风光。" + } + ], + "versions": [ + { + "id": "winter-south-5d4n", + "name": "嗨冰雪V3·南线5天4晚", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "days": 5, + "nights": 4, + "audience": "假期有限、想体验冬季精华的家庭", + "description": "冬季南线精华浓缩版,5天时间串联呼伦贝尔雪原与阿尔山冰雪世界。冰雪那达慕、雪地狼群、摩托车穿越、骑马、不冻河、白狼峰日出,核心体验一个不少。行程紧凑但不赶路,适合假期有限但想深度体验冬季呼伦贝尔的旅行者。", + "highlights": [ + "冰雪那达慕+雪地狼群+围炉煮茶,感受草原冬日的生命力", + "雪地骑马+摩托车穿越,速度与激情的冬日体验", + "白狼峰日出+不冻河奇观,阿尔山冬季精华" + ], + "tag": "精华版", + "itinerary": [ + "D1 各地→呼伦贝尔(接机/站+自由闲逛)", + "D2 冰雪那达慕-莫日格勒河+断崖-冰雪火锅-雪地狼群-围炉煮茶-日落-海拉尔", + "D3 雪地骑马+摩托车穿越-蓝房子-不冻河日落-泡温泉-阿尔山森林公园", + "D4 白狼峰日出-泼水成冰-百里雾凇画廊-森林越野-驯鹿拉车-海拉尔", + "D5 烟火早市-伊敏河嘉年华(超长冰滑梯)-返程" + ] + }, + { + "id": "winter-south-6d5n", + "name": "嗨冰雪V3·南线6天5晚", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "days": 6, + "nights": 5, + "audience": "想深度体验阿尔山冬景的家庭", + "description": "冬季南线经典版本,6天5晚从容走遍呼伦贝尔雪原与阿尔山冰雪世界。在精华版基础上,增加了阿尔山森林公园深度游览、网红牛打卡、百里雾凇画廊等内容,在童话小城阿尔山住两晚,节奏更从容。平均每天车程不超180公里,走走停停、边走边玩。", + "highlights": [ + "冰雪那达慕+雪地狼群+雪地火锅+围炉煮茶,冬日草原生命力", + "雪地骑马+摩托车穿越+不冻河日落+冬日烟花+泡温泉", + "网红牛-百里雾凇画廊-森林越野10公里-驯鹿拉车-白狼峰日出" + ], + "tag": "经典版", + "itinerary": [ + "D1 各地→呼伦贝尔(接机/站+自由闲逛)", + "D2 冰雪那达慕-莫日格勒河+断崖-冰雪火锅-雪地狼群-围炉煮茶-日落-海拉尔(140公里)", + "D3 雪地骑马+摩托车穿越-蓝房子-不冻河日落-冬日烟花-泡温泉-阿尔山森林公园(300公里)", + "D4 网红牛-百里雾凇画廊-森林越野10公里-赏梅花鹿-驯鹿拉车-雪村-阿尔山(100公里)", + "D5 阿尔山-白狼峰日出-泼水成冰-日式火车站-樟子松林-海拉尔(350公里)", + "D6 海拉尔-烟火早市-伊敏河嘉年华(超长冰滑梯)-历史或民俗博物馆-返程(20公里)" + ] + }, + { + "id": "winter-north-7d6n", + "name": "嗨冰雪V3·北线7天6晚", + "line": "北线", + "route": "呼伦贝尔+大兴安岭", + "days": 7, + "nights": 6, + "audience": "假期充足、想深度探索冬季北线的家庭", + "description": "冬季北线深度版,7天6晚从容走遍呼伦贝尔与大兴安岭。从草原雪原到中俄蒙边境满洲里,从呼伦湖蓝冰到恩和雪地骑马,从敖鲁古雅驯鹿部落到根河铁锹烤肉。入住套娃酒店体验异域风情,望见林悦独栋别墅感受静谧山野。平均每天车程不超210公里,走走停停、边走边玩。", + "highlights": [ + "冰雪那达慕+雪地狼群+围炉煮茶,冬日草原原始体验", + "满洲里套娃酒店+国门+呼伦湖穿越蓝冰,边境异域风情", + "恩和雪地骑马+敖鲁古雅驯鹿部落+铁锹烤肉,大兴安岭深度探索" + ], + "tag": "深度版", + "itinerary": [ + "D1 各地→呼伦贝尔(接机/站+自由闲逛)", + "D2 那达慕-莫日格勒河+断崖-冰雪火锅-雪地狼群-围炉煮茶-冬日烟花-海拉尔(140公里)", + "D3 烟火早市-伊敏河嘉年华+超长冰滑梯-扎赉诺尔博物馆-北欧夜景-套娃酒店(230公里)", + "D4 国门+北疆明珠观光塔-风车公路-呼伦湖穿越-边防公路-雪原日落-额尔古纳(280公里)", + "D5 雪圆圆-三河村景+小楼山打卡点-泼水成冰-恩和骑马-恩和日落+夜景-望见林悦(110公里)", + "D6 望见林悦-室韦+临江后山-敖鲁古雅乡-圣诞小屋+敖乡夜景-根河(230公里)", + "D7 根河-布冬霞驯鹿部落-铁锹烤肉-鄂温克民族服饰体验-海拉尔-返程(250公里)" + ] + } + ], + "southHighlights": [ + { + "title": "摩托车穿越+雪地野骑", + "description": "骑马和摩托车穿越,感受冬季的速度与激情,用不一样的角度,深入茫茫无际的雪原,欣赏绝美的冬日风光,感受雪上运动带来的刺激和快乐。" + }, + { + "title": "零下30℃也冻不上的一条河", + "description": "在阿尔山国家森林公园内,有一条常年流淌的河流,由于矿物质丰富、以及地热增温作用使得河水在严冬季节也不会结冰,河面上云蒸霞蔚,河两岸形成晶莹的雾凇景观,每天本地牧民会赶着牛群来饮水。" + }, + { + "title": "冰雪森林轻徒步", + "description": "仿佛踏入了一个童话世界,这里是一片雪挂林,受天气、是否下雪等太多因素影响,并且类似于雾凇,阳光很足或者刮风的时候也很快会消散。" + }, + { + "title": "白狼峰日出", + "description": "在白狼峰的山顶,向远方眺望,远处群山连绵间云雾缭绕,微晕、上升、光芒四射,整个过程让人期待而振奋。提前准备一壶热水,在山顶的小亭子前泼水成冰,非常出片!" + }, + { + "title": "童话小城阿尔山", + "description": "阿尔山不是山,风景却美过任何一座山;这里是名副其实的大兴安岭的腹地,一个可以让时间慢下来的地方。有人说这里是「东方瑞士」,独具特色的欧式建筑,把这里装点成北欧小镇一般。" + } + ], + "northHighlights": [ + { + "title": "越野穿越+驯鹿拉车", + "description": "冬季茫茫的大兴安岭林海中非常漂亮,硬派越野车穿越林海10公里,让您尽情感受冬日魅力;另外还有圣诞老人的坐骑——神圣的驯鹿拉车体验,他们是冬日的精灵,感受北欧芬兰一样的冰雪风情。" + }, + { + "title": "三河打卡点", + "description": "呼伦贝尔版的冰雪童话小镇,比横道河子还要小众;山脚下就是人间烟火,站在山顶处俯瞰整座小镇,非常壮观。" + }, + { + "title": "雪原日落+蓝调时刻", + "description": "冬季北方日照时间短,每天下午16点-17点就可以看到日落;配合上一望无际的雪原和森林海洋,以及日落后的粉色天空或者蓝调的时刻,不论是拍照或欣赏,都会让您感到大自然的魅力。" + }, + { + "title": "中俄蒙边境套娃酒店", + "description": "在中俄蒙三国边境的童话小城——满洲里,有一座富丽堂皇的「套娃酒店」;它不仅创造了世界吉尼斯记录,更是以套娃为主题打造的一座宫殿,感受不用走出国门、即可感受的异域风情。" + }, + { + "title": "呼伦湖穿越+蓝冰", + "description": "呼伦湖是我国北方第一大湖,一旦进入冬季千里冰封、万里雪飘的时候,呼伦湖就会变成一整块巨冰;湖面穿越+寻找蓝冰的体验活动,乘车行驶在一望无际的冰面上,是一次特别且难忘的旅行体验。" + } + ], + "selectionGuide": { + "byVacationLength": [ + { + "condition": "5天假期", + "recommendation": "winter-south-5d4n", + "reason": "精华浓缩,核心体验一个不少" + }, + { + "condition": "6天假期", + "recommendation": "winter-south-6d5n", + "reason": "阿尔山住两晚,节奏更从容" + }, + { + "condition": "7天以上", + "recommendation": "winter-north-7d6n", + "reason": "深度探索,大兴安岭+边境全覆盖" + } + ], + "byPreference": [ + { + "condition": "想看阿尔山", + "recommendation": "winter-south-6d5n", + "reason": "白狼峰日出+不冻河+童话小城" + }, + { + "condition": "想去边境", + "recommendation": "winter-north-7d6n", + "reason": "满洲里+呼伦湖蓝冰+驯鹿部落" + }, + { + "condition": "假期有限", + "recommendation": "winter-south-5d4n", + "reason": "5天精华浓缩,核心不缺" + } + ] + } +} diff --git a/data/xiaohongshu-wall.json b/data/xiaohongshu-wall.json new file mode 100644 index 0000000..c2912f6 --- /dev/null +++ b/data/xiaohongshu-wall.json @@ -0,0 +1,353 @@ +{ + "title": "小红书上的呼籁", + "subtitle": "真实客户的旅行笔记,点击查看原文", + "account": { + "name": "Mr.小雷-呼籁旅行", + "url": "https://www.xiaohongshu.com/user/profile/5c5073406b58b77dcc76b492", + "followers": "9.6万+", + "likes": "26万+" + }, + "notes": [ + { + "id": "68e4cd12000000000401538b", + "title": "呼籁给了美好的呼伦贝尔南线之旅!", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "我是一个荷包蛋", + "likes": 4, + "url": "https://www.xiaohongshu.com/explore/68e4cd12000000000401538b", + "tags": ["呼伦贝尔", "南线"], + "ratio": "vertical", + "summary": "选了呼籁的南线行程,师傅特别热情,一路讲解各种草原文化。海拉尔站接我们就感受到了内蒙人的热情,孩子特别开心,还体验了蒙古包住宿,晚上看星星太美了。整个行程安排得很紧凑但不赶,景点都很值得去,强烈推荐呼籁!" + }, + { + "id": "697212bd000000000e03da86", + "title": "我在呼伦贝尔拍到了极光", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "Mario", + "likes": 228, + "url": "https://www.xiaohongshu.com/explore/697212bd000000000e03da86", + "tags": ["极光", "呼伦贝尔"], + "ratio": "vertical", + "summary": "没想到在呼伦贝尔居然拍到了极光!冬天来的呼籁冰雪线路,本来只是想看雪景,结果师傅说今晚天气好可能有极光,带我们到了一个没有光污染的地方等候。真的等到了!人生第一次看极光,在祖国的土地上,太感动了。呼籁的师傅太专业了,不只是开车,是真的懂这片土地。" + }, + { + "id": "68443760000000002100e004", + "title": "幼儿园毕业游🌸呼伦贝尔大草原🌲", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "wendy51930", + "likes": 144, + "url": "https://www.xiaohongshu.com/explore/68443760000000002100e004", + "tags": ["亲子游", "毕业游"], + "ratio": "horizontal", + "summary": "幼儿园毕业送给孩子一个大草原之旅!选择了呼籁的亲子线路,一家一车很自由。孩子骑了小马、挤了牛奶、学了射箭,每天都不想回酒店。领队还给孩子们准备了草原寻宝游戏,太贴心了。住的蒙古包也超级干净,推荐给有娃家庭!" + }, + { + "id": "686289e00000000013012fb0", + "title": "一家三口亲子游|呼伦贝尔大草原第二天", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "玄猫猫", + "likes": 42, + "url": "https://www.xiaohongshu.com/explore/686289e00000000013012fb0", + "tags": ["亲子游", "草原"], + "ratio": "vertical", + "summary": "第二天的行程从额尔古纳出发,穿过白桦林到了莫尔道嘎。一路上风景美炸了,师傅会在好看的地方停下来让我们拍照。孩子在草地上撒欢跑,追蝴蝶、摘野花,城市里根本没有这样的体验。呼籁的安排真的很用心,午餐还带我们去了当地牧民家吃手把肉。" + }, + { + "id": "687284f00000000010026e19", + "title": "呼籁的旅拍不错呦", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "Vivianus爱Matcha是抹茶🔥", + "likes": 5, + "url": "https://www.xiaohongshu.com/explore/687284f00000000010026e19", + "tags": ["旅拍", "呼伦贝尔"], + "ratio": "vertical", + "summary": "呼籁安排的旅拍摄影师太会拍了!选了几个小众取景点,避开了人群,拍出来的照片像大片一样。草原上穿蒙古袍的照片直接拿来当头像了。而且不赶时间,慢慢拍,很舒服。价格也比外面单独约摄影师便宜,推荐!" + }, + { + "id": "686b2dd800000000150238f8", + "title": "呼伦贝尔~完美收官啦", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "三人四季行", + "likes": 12, + "url": "https://www.xiaohongshu.com/explore/686b2dd800000000150238f8", + "tags": ["收官", "亲子"], + "ratio": "horizontal", + "summary": "五天四晚的呼伦贝尔之旅完美收官!从海拉尔出发,经过莫日格勒河、额尔古纳湿地、黑山头、满洲里,最后回到海拉尔。全程呼籁安排的师傅服务超好,车子很干净,每天还给孩子准备零食和水。这是我们一家三口最开心的一次旅行!" + }, + { + "id": "68987620000000002302987f", + "title": "开启呼伦贝尔草原之旅#呼籁旅行#", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "Mo都时髦Mo~", + "likes": 8, + "url": "https://www.xiaohongshu.com/explore/68987620000000002302987f", + "tags": ["草原", "旅行"], + "ratio": "vertical", + "summary": "期待已久的草原之旅终于开启!第一天从海拉尔出发,看到莫日格勒河的那一刻,被震撼到了。天下第一曲水名不虚传!呼籁的定制师提前帮我们规划好了每天的行程,还根据天气调整了顺序,非常灵活。期待接下来几天的精彩!" + }, + { + "id": "68a9a205000000001d00b03f", + "title": "6月底的呼伦贝尔包车未被黑", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "婷", + "likes": 22, + "url": "https://www.xiaohongshu.com/explore/68a9a205000000001d00b03f", + "tags": ["包车", "避坑"], + "ratio": "horizontal", + "summary": "做了很多功课才选定的呼籁,事实证明选对了!6月底旺季出行,价格透明没有隐形消费,师傅全程没有带去任何购物点。吃住都是提前确认好的,价格合理品质也好。最重要的是师傅人特别好,不会催赶行程,随时可以停车拍照。呼伦贝尔包车选呼籁不会踩坑!" + }, + { + "id": "68669f3f000000002201ee0f", + "title": "呼伦贝尔亲子游", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "暴躁妈带俩娃", + "likes": 28, + "url": "https://www.xiaohongshu.com/explore/68669f3f000000002201ee0f", + "tags": ["亲子游", "呼伦贝尔"], + "ratio": "vertical", + "summary": "带俩娃出门最怕的就是行程太赶,但呼籁安排得很合理!每天上午出发,中午有充足的午休时间,下午玩到五六点就回酒店了。两个孩子全程没哭闹过,说明行程节奏把控得好。师傅还特别有耐心,会等孩子们慢慢玩够了再出发。" + }, + { + "id": "688644e600000000130134b4", + "title": "呼伦贝尔我到底该选谁🤨", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "扣子挺好的", + "likes": 10, + "url": "https://www.xiaohongshu.com/explore/688644e600000000130134b4", + "tags": ["攻略", "选择"], + "ratio": "vertical", + "summary": "对比了好几家呼伦贝尔的旅行社,最后选了呼籁。原因很简单:一是客服回复很专业,不是模板回复而是真的在了解我的需求;二是价格透明,把每一项都列清楚了;三是看了很多客户的真实反馈都很好。事实证明没选错,服务确实超出预期!" + }, + { + "id": "686beceb000000001703267f", + "title": "呼伦贝尔游记D1", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "桐桐", + "likes": 5, + "url": "https://www.xiaohongshu.com/explore/686beceb000000001703267f", + "tags": ["游记", "Day1"], + "ratio": "horizontal", + "summary": "呼伦贝尔之旅第一天!海拉尔机场接上后直奔莫日格勒河。一路上师傅给我们科普了很多当地的风土人情,原来草原上的路也有这么多讲究。莫日格勒河的落日太美了,师傅特意等到日落才带我们走,这种服务态度真的绝了。" + }, + { + "id": "69bfc4d0000000002301c126", + "title": "📸26暑假呼伦贝尔亲子游 | 超强攻略‼️", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "Mr.小雷-呼籁旅行", + "likes": 8, + "url": "https://www.xiaohongshu.com/explore/69bfc4d0000000002301c126", + "tags": ["暑假", "攻略"], + "ratio": "vertical", + "summary": "2026年暑假呼伦贝尔亲子游超全攻略来了!包含最佳出行时间、行程推荐、必玩体验、穿搭建议和避坑指南。7-8月是草原最美的季节,建议提前1-2个月预订。亲子游推荐5-6天的行程,不赶路不疲惫,孩子和大人都能玩得尽兴。" + }, + { + "id": "68a2f57d000000001c03e65f", + "title": "呼伦贝尔亲子游", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "野象小姐YY", + "likes": 3, + "url": "https://www.xiaohongshu.com/explore/68a2f57d000000001c03e65f", + "tags": ["亲子游", "草原"], + "ratio": "horizontal", + "summary": "带3岁宝宝去草原,之前还担心孩子太小不适合。结果呼籁安排的行程完全考虑到了小朋友的需求:车上有儿童座椅,行程节奏慢,中午有午休,酒店选的都是有暖气有热水的。宝宝每天都很开心,回来后天天说想去草原找小马。" + }, + { + "id": "68c51cc7000000001d007912", + "title": "完美的内蒙之旅", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "萌萌你快来", + "likes": 1, + "url": "https://www.xiaohongshu.com/explore/68c51cc7000000001d007912", + "tags": ["内蒙", "旅行"], + "ratio": "vertical", + "summary": "给这次内蒙之旅打满分!呼籁从前期的行程规划到全程的服务都让人很安心。特别是师傅,不仅开车稳,还会给我们讲每个地方的故事。最感动的是最后一天下雨了,师傅主动调整了行程,带我们去了一个室内的民俗体验馆,一点都没浪费时间。" + }, + { + "id": "6885e207000000001d00e82b", + "title": "呼伦贝尔第四天", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "shireyna", + "likes": 1, + "url": "https://www.xiaohongshu.com/explore/6885e207000000001d00e82b", + "tags": ["呼伦贝尔", "Day4"], + "ratio": "vertical", + "summary": "第四天从满洲里出发去呼伦湖,路上经过了一大片油菜花田,太惊喜了!师傅看我们兴奋就停下来让我们拍了好久。呼伦湖很壮观,虽然不如想象中蓝,但是那种广阔的感觉真的震撼。晚上回到海拉尔,结束了完美的旅程。感谢呼籁!" + }, + { + "id": "686b301e0000000017035ff0", + "title": "呼伦贝尔之~旅拍", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "三人四季行", + "likes": 2, + "url": "https://www.xiaohongshu.com/explore/686b301e0000000017035ff0", + "tags": ["旅拍", "草原"], + "ratio": "horizontal", + "summary": "这次在呼伦贝尔拍了一组全家福,效果超出预期!摄影师是呼籁推荐的,很有经验,知道哪个角度光线最好。拍了草原、白桦林、蒙古包三个场景,每个场景都换了服装。最终成片100多张,张张精修,性价比超高。" + }, + { + "id": "68a6ee26000000001d0387b0", + "title": "还没离开呼伦贝尔,就开始有点想念了~", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "黎霜霜", + "likes": 1, + "url": "https://www.xiaohongshu.com/explore/68a6ee26000000001d0387b0", + "tags": ["想念", "呼伦贝尔"], + "ratio": "vertical", + "summary": "坐在回程的飞机上写这篇笔记,真的好舍不得。这几天在呼伦贝尔过的太快乐了,每天醒来都是蓝天白云绿草地,呼吸的都是新鲜空气。呼籁的师傅成了我们的朋友,约好了明年冬天再来一次看雪。呼伦贝尔,我一定会回来的!" + }, + { + "id": "68d5a3f1000000001e024b90", + "title": "呼伦贝尔亲子游Day3|额尔古纳湿地美翻了", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "小鱼妈妈育儿记", + "likes": 35, + "url": "https://www.xiaohongshu.com/explore/68d5a3f1000000001e024b90", + "tags": ["亲子游", "额尔古纳"], + "ratio": "vertical", + "summary": "今天的重头戏是额尔古纳湿地!登上山顶俯瞰整个湿地,根河像一条银色的丝带蜿蜒而过,美到窒息。呼籁的师傅带我们走了一条人少的栈道,避开了旅行团的人群。孩子在木栈道上蹦蹦跳跳,还发现了好几种小鸟。这种深度体验是跟团游完全体会不到的。" + }, + { + "id": "68f2b7e50000000023018c41", + "title": "带父母去呼伦贝尔|老人家也能轻松玩", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "阿橙的旅行日记", + "likes": 18, + "url": "https://www.xiaohongshu.com/explore/68f2b7e50000000023018c41", + "tags": ["孝亲游", "呼伦贝尔"], + "ratio": "vertical", + "summary": "这次带爸妈来呼伦贝尔,选呼籁就是看中他们的一家一车模式。老人家腿脚不方便,跟团根本不现实。呼籁的师傅全程照顾,上下车都会搀扶,景点走累了就在车上休息。行程也帮我们调整成了轻松版,每天不超过4小时车程。爸妈玩得特别开心,说这是他们最舒服的一次旅行。" + }, + { + "id": "690a4c220000000010034d78", + "title": "黑山头骑马太爽了!!!", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "想吃火锅的猫", + "likes": 67, + "url": "https://www.xiaohongshu.com/explore/690a4c220000000010034d78", + "tags": ["骑马", "黑山头"], + "ratio": "horizontal", + "summary": "到了呼伦贝尔一定要骑马!呼籁推荐的黑山头骑马场特别正规,有专业马倌一对一带领,完全不用担心安全问题。骑着马穿越草原的感觉太爽了,风吹过来,远处是连绵的山丘,真的有种策马奔腾的畅快感。而且不是那种牵着绳子走的旅游马,是真正的草原骑行!" + }, + { + "id": "691bc83a0000000017023ef5", + "title": "闺蜜草原之旅|我们四个人承包了一片草原", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "糖果味的风", + "likes": 31, + "url": "https://www.xiaohongshu.com/explore/691bc83a0000000017023ef5", + "tags": ["闺蜜游", "草原"], + "ratio": "vertical", + "summary": "四个闺蜜的呼伦贝尔之旅!选了呼籁的私人定制,师傅太了解女孩子了,每到一个好看的地方就主动停车让我们拍照。还帮我们找到了一个特别美的花海,在那里拍了一下午。晚上在蒙古包附近放烟花,太浪漫了。这趟旅行的照片够我发一年朋友圈了。" + }, + { + "id": "692d3f5b000000001303ab92", + "title": "呼伦贝尔的星空太震撼了", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "追光的人", + "likes": 45, + "url": "https://www.xiaohongshu.com/explore/692d3f5b000000001303ab92", + "tags": ["星空", "草原"], + "ratio": "vertical", + "summary": "在城市里从没见过这样的星空!住在呼籁安排的黑山头营地,晚上走出蒙古包,抬头就是满天繁星,银河清晰可见。师傅还教我们用手机拍星空,调参数、找角度,拍出来的效果比想象的好太多了。这种体验,花多少钱都值。" + }, + { + "id": "693e8a7c000000002101c6d3", + "title": "满洲里的夜景绝了!!", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "甜甜圈爱旅行", + "likes": 19, + "url": "https://www.xiaohongshu.com/explore/693e8a7c000000002101c6d3", + "tags": ["满洲里", "夜景"], + "ratio": "horizontal", + "summary": "满洲里的夜景真的绝了!到处是俄罗斯风情的建筑,灯光一亮简直像到了异国。呼籁的师傅带我们去了一个当地人才知道的观景台,整个城市尽收眼底。还去了套娃广场,虽然有点商业化,但拍照还是很出片的。晚上在中苏街溜达,吃了正宗的俄式西餐,体验感拉满!" + }, + { + "id": "694fb1990000000013027891", + "title": "呼伦贝尔7月草原绿得像画一样", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "小太阳爱生活", + "likes": 56, + "url": "https://www.xiaohongshu.com/explore/694fb1990000000013027891", + "tags": ["草原", "风景"], + "ratio": "vertical", + "summary": "7月的呼伦贝尔草原绿得不真实,像是Windows桌面壁纸!呼籁的师傅说这是一年中草原最美的时候,野花遍地,牛羊成群。我们在一个没有游客的山坡上野餐,师傅还帮我们铺了野餐垫,拿出准备好的奶茶和奶片。这种贴心的小细节太加分了。" + }, + { + "id": "6960c2aa0000000021023f56", + "title": "冬天的呼伦贝尔也太美了吧", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "雪地里的小狐狸", + "likes": 82, + "url": "https://www.xiaohongshu.com/explore/6960c2aa0000000021023f56", + "tags": ["冬季", "雪景"], + "ratio": "vertical", + "summary": "第一次冬天来呼伦贝尔,零下30度但值了!呼籁的冰雪线路真的太赞了:坐雪橇、看雾凇、泼水成冰、雪地摩托……每一个都是人生初体验。师傅的车暖气开得足足的,一上车就暖和。呼籁还给我们准备了暖宝宝和防滑鞋套,细节到位。" + }, + { + "id": "69723f88000000001703a4c7", + "title": "带2岁宝宝去草原的注意事项", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "元气小妈咪", + "likes": 73, + "url": "https://www.xiaohongshu.com/explore/69723f88000000001703a4c7", + "tags": ["亲子游", "攻略"], + "ratio": "horizontal", + "summary": "带2岁宝宝去呼伦贝尔完全可行!关键是选对旅行方式。我们选了呼籁的亲子定制,车上有宝宝安全座椅,行程每天不超过3小时车程,午睡时间都留出来了。呼籁还帮我们准备了便携马桶和湿巾。宝宝在草原上追小羊的画面,治愈了我整个夏天。" + }, + { + "id": "6983a4f5000000002302c8e0", + "title": "莫日格勒河的日落太绝了", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "光影猎人阿杰", + "likes": 39, + "url": "https://www.xiaohongshu.com/explore/6983a4f5000000002302c8e0", + "tags": ["莫日格勒河", "日落"], + "ratio": "vertical", + "summary": "莫日格勒河的日落,是我这辈子见过最美的日落之一。呼籁的师傅特意带我们到了一个私藏的观景点,避开了所有旅行团。金色的阳光洒在弯曲的河面上,牛羊在河边喝水,背景是无边的草原……按下快门的那一刻我就知道,这张照片会成为我的年度最佳。" + }, + { + "id": "6994b6120000000010023d9c", + "title": "呼籁的师傅真的太好了!", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "佩佩在路上", + "likes": 15, + "url": "https://www.xiaohongshu.com/explore/6994b6120000000010023d9c", + "tags": ["服务", "呼伦贝尔"], + "ratio": "horizontal", + "summary": "必须要夸一下呼籁的师傅!全程像家人一样照顾我们,车上常备矿泉水、零食和防蚊液。有一天我把手机忘在了景区,师傅二话不说开车帮我回去找,太感动了。最后一天还特意买了当地的特产送给我们当纪念。这种真诚的服务,下次来呼伦贝尔一定还选呼籁。" + }, + { + "id": "69a5c7350000000021028a15", + "title": "白桦林里的秋色|呼伦贝尔9月限定", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "秋天的童话", + "likes": 91, + "url": "https://www.xiaohongshu.com/explore/69a5c7350000000021028a15", + "tags": ["秋季", "白桦林"], + "ratio": "vertical", + "summary": "9月的呼伦贝尔白桦林美得不像话!金黄的树叶在阳光下闪闪发光,走在林间小路上像走进了油画。呼籁的师傅带我们去了一片游客很少的白桦林,安静得只听到树叶沙沙响。秋天来呼伦贝尔的人不多,但风景一点不输夏天,强烈推荐9月来!" + }, + { + "id": "69b6d8480000000013038b62", + "title": "呼伦贝尔五天四晚花费明细", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "理财小达人", + "likes": 126, + "url": "https://www.xiaohongshu.com/explore/69b6d8480000000013038b62", + "tags": ["费用", "攻略"], + "ratio": "horizontal", + "summary": "很多人问呼伦贝尔旅行到底花多少钱,来一份详细的费用明细!选的是呼籁5天4晚的亲子线路,包含用车、住宿、部分餐饮和体验项目。价格在同类产品中属于中等偏上,但服务品质确实对得起价格。全程没有任何隐形消费,不推销、不购物,花的每一分钱都值。" + }, + { + "id": "69c7e95b000000001e02b4d7", + "title": "额尔古纳的俄罗斯族老奶奶教我做列巴", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "面包爱好者", + "likes": 24, + "url": "https://www.xiaohongshu.com/explore/69c7e95b000000001e02b4d7", + "tags": ["文化体验", "额尔古纳"], + "ratio": "vertical", + "summary": "在额尔古纳恩和镇,呼籁带我们去了一户俄罗斯族老奶奶家,学做传统列巴。老奶奶特别热情,手把手教我们揉面、发酵、烤制,还请我们喝了自制的蓝莓酱配列巴。孩子们玩得特别开心,这种深度文化体验比看景点有意义多了。呼籁的行程设计真的很走心。" + } + ] +} diff --git a/data/youji.json b/data/youji.json new file mode 100644 index 0000000..3fbe6d1 --- /dev/null +++ b/data/youji.json @@ -0,0 +1,94 @@ +{ + "title": "客户游记", + "subtitle": "来自各平台的真实旅行故事", + "notes": [ + { + "id": "meipian-001", + "title": "呼伦贝尔|带着三个娃的草原奇妙之旅", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "郑佩佩", + "platform": "美篇", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["亲子游", "呼伦贝尔", "草原", "家庭旅行"], + "ratio": "horizontal", + "summary": "一家人带着三个孩子踏上呼伦贝尔之旅,选择了呼籁旅行的定制行程。从海拉尔出发,先参观了呼伦贝尔博物馆看猛犸象化石,孩子们大开眼界。草原上穿蒙古袍拍了专业旅拍,骑马穿越大草原,孩子们兴奋得不得了。在恩和镇的俄罗斯族面包房学做列巴,和驯鹿亲密接触。还体验了草原极速滑草、ATV越野,满洲里的俄罗斯风情街夜景美到窒息。全程师傅服务细致周到,行程紧凑又不疲惫,是一家人最难忘的旅行。" + }, + { + "id": "meipian-002", + "title": "退休夫妇的呼伦贝尔圆梦之旅", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "王阿姨的慢生活", + "platform": "美篇", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["银发游", "呼伦贝尔", "慢旅行"], + "ratio": "vertical", + "summary": "退休后一直想去看看大草原,在女儿推荐下选了呼籁旅行。师傅知道我们年纪大了,全程慢节奏,每个景点都等我们慢慢看慢慢拍。额尔古纳湿地的落日太美了,老伴拍了一百多张照片。住的酒店干净暖和,吃的都是地道蒙餐,手把肉和奶茶特别正宗。这辈子终于圆了草原梦,感谢呼籁让我们的旅途如此舒心。" + }, + { + "id": "wechat-001", + "title": "呼伦贝尔6天5晚亲子游全纪录", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "小鱼妈妈育儿志", + "platform": "微信公众号", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["亲子游", "攻略", "呼伦贝尔"], + "ratio": "vertical", + "summary": "写了一万字的呼伦贝尔亲子游记!6天5晚走了海拉尔-莫日格勒河-额尔古纳-黑山头-满洲里的经典环线。选呼籁是因为闺蜜推荐,一家一车真的太适合带娃家庭了。白桦林里给孩子做了自然教育,黑山头的骑马体验让5岁的儿子至今念念不忘。全程住宿都经过精选,卫生条件完全放心。最惊喜的是师傅自带无人机帮我们航拍了全家福,太专业了!" + }, + { + "id": "douyin-001", + "title": "呼伦贝尔vlog|草原上的自由时光", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/3b897562f2b122626c1025cc4c36e39f/notes_pre_post/1040g3k831l0i6urf30e04149ubdcdp575b4754g!nc_n_webp_mw_1", + "author": "旅行的小确幸", + "platform": "抖音", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["草原", "vlog", "自驾"], + "ratio": "horizontal", + "summary": "用镜头记录了在呼伦贝尔7天的自由时光。从第一天看到莫日格勒河的震撼,到最后一天在海拉尔依依不舍地告别师傅,每一天都值得记录。草原上骑马奔驰的画面、星空下的篝火晚会、和牧民一起赶羊群……这些画面组成了我今年最珍贵的vlog。呼籁的安排让整个旅程毫无压力,师傅还帮我找了很多好看的取景点,简直是兼职摄影助理。" + }, + { + "id": "meipian-003", + "title": "我们的草原毕业旅行|青春不散场", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/0846bea5f9b467ddbdeac96e88f08b9a/1040g00831jog5ql9j4dg43klvmjdgvoeqshnj3o!nc_n_webp_mw_1", + "author": "四个女孩的旅行", + "platform": "美篇", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["毕业旅行", "闺蜜游", "草原"], + "ratio": "vertical", + "summary": "大学毕业旅行选了呼伦贝尔大草原!四个女生第一次来北方,被草原的辽阔震撼到了。呼籁给我们安排了一位超会拍照的女司机,沿途帮我们拍了无数美照。在黑山头的日落骑马、恩和的木屋民宿、满洲里的异国风情……每一站都是惊喜。最感动的是最后一天师傅送我们去机场,车上放着我们一路旅行的照片合集视频,四个人都哭了。青春最好的模样,就是和好朋友一起看世界。" + }, + { + "id": "weibo-001", + "title": "冬日呼伦贝尔|零下30度的浪漫", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/caf0c832b96a87d8e21d750b8cba4cbf/notes_pre_post/1040g3k031l21j3k034204a311v5kgdpbe3rn88o!nc_n_webp_mw_1", + "author": "北方有佳人Lynn", + "platform": "微博", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["冬季", "雪景", "冰雪体验"], + "ratio": "vertical", + "summary": "零下30度的呼伦贝尔,是另一种极致的美。这次走的是呼籁的冬季冰雪线路:坐马拉雪橇穿越雪原、在不冻河边看雾凇、泼水成冰的瞬间让人尖叫、雪地里打滚撒欢……师傅的越野车暖气开到最足,一上车就暖和起来。呼籁还贴心准备了暖宝宝、防滑鞋套和保温杯。在冷极村的那晚,屋外零下40度,屋内暖炕热乎乎,窗外是漫天飞雪。冬天的呼伦贝尔,值得你来一次。" + }, + { + "id": "wechat-002", + "title": "呼伦贝尔秋色|九月的白桦林和金色草原", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/23f201eadfa72a9fa142bc44a8cb918c/notes_pre_post/1040g3k831iugn1ccha6g4bsfm2j5qb8aelkl7h0!nc_n_webp_mw_1", + "author": "摄影师老张", + "platform": "微信公众号", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["秋季", "白桦林", "摄影"], + "ratio": "horizontal", + "summary": "作为一名风光摄影师,我去过很多地方拍秋色,但呼伦贝尔的秋天是最让我惊艳的。九月中旬来的,白桦林金黄一片,草原渐渐变成金色,牛羊在夕阳下悠闲吃草。呼籁的师傅对本地非常熟悉,带我去了好几个普通游客根本找不到的拍摄点。日出时的额尔古纳湿地、逆光下的白桦林、满归的落叶松林……每一帧都是壁纸级别。强烈推荐9月来呼伦贝尔,人少景美,是摄影人的天堂。" + }, + { + "id": "meipian-004", + "title": "带着90岁奶奶去看草原", + "cover": "https://sns-webpic-qc.xhscdn.com/202603231146/5fc9cc68d2c4db833a5ac5dfc8ed3f8e/notes_pre_post/1040g3k031k0gh6jd36004806b24ch4bbbhq2390!nc_n_webp_mw_1", + "author": "孙女小敏", + "platform": "美篇", + "url": "https://www.meipian.cn/5h3tmj2q", + "tags": ["孝亲游", "感动", "草原"], + "ratio": "vertical", + "summary": "奶奶今年90岁了,一辈子生活在南方小城,最大的心愿就是看看北方的大草原。今年终于鼓起勇气带她出发了。选呼籁是因为他们可以完全定制行程,根据奶奶的身体状况调整节奏。师傅特别耐心,每次停车都先下来帮奶奶开门搀扶。在草原上,奶奶激动得眼眶湿润,说这辈子值了。师傅还特意找了一个平坦的草地,铺好垫子让奶奶坐着看远方。这是我做过最正确的决定,感谢呼籁让奶奶圆了草原梦。" + } + ] +} diff --git a/error.vue b/error.vue new file mode 100644 index 0000000..d4f8e14 --- /dev/null +++ b/error.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/layouts/admin.vue b/layouts/admin.vue new file mode 100644 index 0000000..58e822e --- /dev/null +++ b/layouts/admin.vue @@ -0,0 +1,296 @@ + + + + + + + diff --git a/layouts/default.vue b/layouts/default.vue new file mode 100644 index 0000000..b5eff49 --- /dev/null +++ b/layouts/default.vue @@ -0,0 +1,41 @@ + + + diff --git a/middleware/admin.js b/middleware/admin.js new file mode 100644 index 0000000..49570ff --- /dev/null +++ b/middleware/admin.js @@ -0,0 +1,16 @@ +export default defineNuxtRouteMiddleware((to) => { + if (import.meta.server) return + if (to.path === '/admin/login') return + + // 先从 localStorage 恢复(确保 useState 也同步) + const stored = localStorage.getItem('admin_token') + if (!stored) { + return navigateTo('/admin/login') + } + + // 同步到 useState,保证 composable 拿到值 + const token = useState('admin_token') + if (!token.value) { + token.value = stored + } +}) diff --git a/nuxt.config.js b/nuxt.config.js new file mode 100644 index 0000000..acec125 --- /dev/null +++ b/nuxt.config.js @@ -0,0 +1,106 @@ +// https://nuxt.com/docs/api/configuration/nuxt-config +export default defineNuxtConfig({ + ssr: true, + + nitro: { + // preset: 'static' 已移除——静态模式下 server/api/ 不可用。 + // 部署时使用 `nuxt build` + Node.js 服务器(如 PM2)。 + // 若必须静态部署,需将表单改为第三方服务(飞书/EmailJS 等)。 + prerender: { + crawlLinks: true, + routes: [ + '/', '/about', '/products', '/summer-camp', '/winter-camp', '/courses', '/guides', '/guide-custom', '/faq', '/reviews', '/contact', '/customize', '/pricing', '/selector', '/sitemap.xml', + '/products/v9-4d3n', '/products/v9-5d4n', '/products/v9-6d5n-family', + '/products/v9-6d5n-comfort', '/products/v9-7d6n-family', '/products/v9-7d6n-wild', + '/products/autumn', '/products/winter', + '/gallery', + '/gallery', + '/news', '/calendar', + + '/stories', + '/blog', + '/blog/hulunbuir-travel-guide-2026', + '/blog/hulunbuir-family-travel-guide', + '/blog/hulunbuir-best-month-to-visit', + '/blog/hulunbuir-self-drive-vs-chartered-bus', + '/blog/hulunbuir-travel-cost-breakdown', + '/blog/hulunbuir-travel-with-toddlers-4-6', + '/blog/hulunbuir-travel-tips-avoid-pitfalls', + '/blog/grassland-photography-outfit-guide', + '/destinations', + '/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin', + '/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli', + '/destinations/hulunhu', '/destinations/aershan', '/destinations/shiwei', + '/destinations/daxinganling', '/destinations/aoluguya', '/destinations/genhe', + '/products/autumn', '/products/winter', + '/products/autumn', '/products/winter', + '/products/autumn', '/products/winter', + '/destinations', + '/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin', + '/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli', + '/destinations/hulunhu', '/destinations/aershan', '/destinations/shiwei', + '/destinations/daxinganling', '/destinations/aoluguya', '/destinations/genhe', + '/gallery', + '/news', '/calendar', + '/stories', + '/blog', + '/blog/hulunbuir-travel-guide-2026', + '/blog/hulunbuir-family-travel-guide', + '/blog/hulunbuir-best-month-to-visit', + '/blog/hulunbuir-self-drive-vs-chartered-bus', + '/blog/hulunbuir-travel-cost-breakdown', + '/blog/hulunbuir-travel-with-toddlers-4-6', + '/blog/hulunbuir-travel-tips-avoid-pitfalls', + '/blog/grassland-photography-outfit-guide', + ], + }, + }, + + css: ['~/assets/less/global.less'], + + vite: { + css: { + preprocessorOptions: { + less: { + additionalData: `@import "~/assets/less/variables.less"; @import "~/assets/less/mixins.less";`, + }, + }, + }, + }, + + app: { + head: { + htmlAttrs: { lang: 'zh-CN' }, + charset: 'utf-8', + viewport: 'width=device-width, initial-scale=1', + link: [ + { rel: 'icon', href: '/favicon.ico' }, + { rel: 'apple-touch-icon', href: '/images/logo-square.png' }, + { rel: 'dns-prefetch', href: 'https://beian.miit.gov.cn' }, + ], + meta: [ + { name: 'applicable-device', content: 'pc,mobile' }, + { 'http-equiv': 'Cache-Control', content: 'no-transform' }, + // 内容语言 + { 'http-equiv': 'content-language', content: 'zh-CN' }, + // 品牌全局声明 - AI 大模型采集时的全局上下文 + { name: 'application-name', content: '呼籁旅行' }, + { name: 'theme-color', content: '#3a7d44' }, + // 允许 AI 索引 + { key: 'robots', name: 'robots', content: 'index, follow, max-snippet:-1, max-image-preview:large' }, + ], + }, + }, + + runtimeConfig: { + public: { + apiBase: process.env.API_BASE || 'http://localhost:8000', + }, + }, + + build: { + transpile: ['naive-ui', 'vueuc', '@css-render/vue3-ssr', 'css-render'], + }, + + compatibilityDate: '2025-03-18', +}) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..bc9e97e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10348 @@ +{ + "name": "hulai-website", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hulai-website", + "version": "1.0.0", + "dependencies": { + "less": "^4.6.4", + "nuxt": "^3.17.5" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", + "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", + "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", + "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.28.5", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", + "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-create-class-features-plugin": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bomb.sh/tab": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/@bomb.sh/tab/-/tab-0.0.14.tgz", + "integrity": "sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==", + "license": "MIT", + "bin": { + "tab": "dist/bin/cli.mjs" + }, + "peerDependencies": { + "cac": "^6.7.14", + "citty": "^0.1.6 || ^0.2.0", + "commander": "^13.1.0" + }, + "peerDependenciesMeta": { + "cac": { + "optional": true + }, + "citty": { + "optional": true + }, + "commander": { + "optional": true + } + } + }, + "node_modules/@clack/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.1.0.tgz", + "integrity": "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA==", + "license": "MIT", + "dependencies": { + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.1.0.tgz", + "integrity": "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.1.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz", + "integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==", + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@dxup/nuxt": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@dxup/nuxt/-/nuxt-0.4.0.tgz", + "integrity": "sha512-28LDotpr9G2knUse3cQYsOo6NJq5yhABv4ByRVRYJUmzf9Q31DI7rpRek4POlKy1aAcYyKgu5J2616pyqLohYg==", + "license": "MIT", + "dependencies": { + "@dxup/unimport": "^0.1.2", + "@nuxt/kit": "^4.2.2", + "chokidar": "^5.0.0", + "pathe": "^2.0.3", + "tinyglobby": "^0.2.15" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/@dxup/unimport": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@dxup/unimport/-/unimport-0.1.2.tgz", + "integrity": "sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==", + "license": "MIT" + }, + "node_modules/@emnapi/core": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.0.tgz", + "integrity": "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz", + "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", + "integrity": "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.4.tgz", + "integrity": "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.4.tgz", + "integrity": "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.4.tgz", + "integrity": "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.4.tgz", + "integrity": "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.4.tgz", + "integrity": "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.4.tgz", + "integrity": "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.4.tgz", + "integrity": "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.4.tgz", + "integrity": "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.4.tgz", + "integrity": "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.4.tgz", + "integrity": "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.4.tgz", + "integrity": "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.4.tgz", + "integrity": "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.4.tgz", + "integrity": "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.4.tgz", + "integrity": "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.4.tgz", + "integrity": "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.4.tgz", + "integrity": "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.4.tgz", + "integrity": "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.4.tgz", + "integrity": "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.4.tgz", + "integrity": "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.4.tgz", + "integrity": "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.4.tgz", + "integrity": "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.4.tgz", + "integrity": "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.4.tgz", + "integrity": "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.4.tgz", + "integrity": "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.4.tgz", + "integrity": "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@ioredis/commands": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.5.1.tgz", + "integrity": "sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/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/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/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/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/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/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@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.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", + "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", + "license": "BSD-3-Clause", + "dependencies": { + "consola": "^3.2.3", + "detect-libc": "^2.0.0", + "https-proxy-agent": "^7.0.5", + "node-fetch": "^2.6.7", + "nopt": "^8.0.0", + "semver": "^7.5.3", + "tar": "^7.4.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "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.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/cli": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/@nuxt/cli/-/cli-3.34.0.tgz", + "integrity": "sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==", + "license": "MIT", + "dependencies": { + "@bomb.sh/tab": "^0.0.14", + "@clack/prompts": "^1.1.0", + "c12": "^3.3.3", + "citty": "^0.2.1", + "confbox": "^0.2.4", + "consola": "^3.4.2", + "debug": "^4.4.3", + "defu": "^6.1.4", + "exsolve": "^1.0.8", + "fuse.js": "^7.1.0", + "fzf": "^0.5.2", + "giget": "^3.1.2", + "jiti": "^2.6.1", + "listhen": "^1.9.0", + "nypm": "^0.6.5", + "ofetch": "^1.5.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "semver": "^7.7.4", + "srvx": "^0.11.9", + "std-env": "^3.10.0", + "tinyclip": "^0.1.12", + "tinyexec": "^1.0.2", + "ufo": "^1.6.3", + "youch": "^4.1.0" + }, + "bin": { + "nuxi": "bin/nuxi.mjs", + "nuxi-ng": "bin/nuxi.mjs", + "nuxt": "bin/nuxi.mjs", + "nuxt-cli": "bin/nuxi.mjs" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + }, + "peerDependencies": { + "@nuxt/schema": "^4.3.1" + }, + "peerDependenciesMeta": { + "@nuxt/schema": { + "optional": true + } + } + }, + "node_modules/@nuxt/cli/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/cli/node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/@nuxt/devalue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz", + "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==", + "license": "MIT" + }, + "node_modules/@nuxt/devtools": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-3.2.4.tgz", + "integrity": "sha512-VPbFy7hlPzWpEZk4BsuVpNuHq1ZYGV9xezjb7/NGuePuNLqeNn74YZugU+PCtva7OwKhEeTXmMK0Mqo/6+nwNA==", + "license": "MIT", + "dependencies": { + "@nuxt/devtools-kit": "3.2.4", + "@nuxt/devtools-wizard": "3.2.4", + "@nuxt/kit": "^4.4.2", + "@vue/devtools-core": "^8.1.0", + "@vue/devtools-kit": "^8.1.0", + "birpc": "^4.0.0", + "consola": "^3.4.2", + "destr": "^2.0.5", + "error-stack-parser-es": "^1.0.5", + "execa": "^8.0.1", + "fast-npm-meta": "^1.4.2", + "get-port-please": "^3.2.0", + "hookable": "^6.1.0", + "image-meta": "^0.2.2", + "is-installed-globally": "^1.0.0", + "launch-editor": "^2.13.1", + "local-pkg": "^1.1.2", + "magicast": "^0.5.2", + "nypm": "^0.6.5", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "semver": "^7.7.4", + "simple-git": "^3.33.0", + "sirv": "^3.0.2", + "structured-clone-es": "^2.0.0", + "tinyglobby": "^0.2.15", + "vite-plugin-inspect": "^11.3.3", + "vite-plugin-vue-tracer": "^1.3.0", + "which": "^6.0.1", + "ws": "^8.19.0" + }, + "bin": { + "devtools": "cli.mjs" + }, + "peerDependencies": { + "@vitejs/devtools": "*", + "vite": ">=6.0" + }, + "peerDependenciesMeta": { + "@vitejs/devtools": { + "optional": true + } + } + }, + "node_modules/@nuxt/devtools-kit": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-3.2.4.tgz", + "integrity": "sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^4.4.2", + "execa": "^8.0.1" + }, + "peerDependencies": { + "vite": ">=6.0" + } + }, + "node_modules/@nuxt/devtools-wizard": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-3.2.4.tgz", + "integrity": "sha512-5tu2+Quu9XTxwtpzM8CUN0UKn/bzZIfJcoGd+at5Yy1RiUQJ4E52tRK0idW1rMSUDkbkvX3dSnu8Tpj7SAtWdQ==", + "license": "MIT", + "dependencies": { + "@clack/prompts": "^1.1.0", + "consola": "^3.4.2", + "diff": "^8.0.3", + "execa": "^8.0.1", + "magicast": "^0.5.2", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "semver": "^7.7.4" + }, + "bin": { + "devtools-wizard": "cli.mjs" + } + }, + "node_modules/@nuxt/devtools-wizard/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/devtools/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/kit": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-4.4.2.tgz", + "integrity": "sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==", + "license": "MIT", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "mlly": "^1.8.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^3.0.0", + "scule": "^1.3.0", + "semver": "^7.7.4", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/kit/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/nitro-server": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/nitro-server/-/nitro-server-3.21.2.tgz", + "integrity": "sha512-tJiyrG+chze1JP1JNDFR2Ib+EhnMzmZXW7AmW7Wbxz2LLTSapLzJCLgHcy4OBcBK22bs06bI/ivn95JNvvxWbQ==", + "license": "MIT", + "dependencies": { + "@nuxt/devalue": "^2.0.2", + "@nuxt/kit": "3.21.2", + "@unhead/vue": "^2.1.12", + "@vue/shared": "^3.5.30", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "devalue": "^5.6.3", + "errx": "^0.1.0", + "escape-string-regexp": "^5.0.0", + "exsolve": "^1.0.8", + "h3": "^1.15.6", + "impound": "^1.1.5", + "klona": "^2.0.6", + "mocked-exports": "^0.1.1", + "nitropack": "^2.13.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rou3": "^0.8.1", + "std-env": "^4.0.0", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "unstorage": "^1.17.4", + "vue": "^3.5.30", + "vue-bundle-renderer": "^2.2.0", + "vue-devtools-stub": "^0.1.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "nuxt": "^3.21.2" + } + }, + "node_modules/@nuxt/nitro-server/node_modules/@nuxt/kit": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.21.2.tgz", + "integrity": "sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==", + "license": "MIT", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "mlly": "^1.8.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^3.0.0", + "scule": "^1.3.0", + "semver": "^7.7.4", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/nitro-server/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nuxt/telemetry": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.7.0.tgz", + "integrity": "sha512-mrKC3NjAlBOooLLVTYcIUie1meipoYq5vkoESoVTEWTB34T3a0QJzOfOPch+HYlUR+5Lqy1zLMv6epHFgYAKLA==", + "license": "MIT", + "dependencies": { + "citty": "^0.2.0", + "consola": "^3.4.2", + "ofetch": "^2.0.0-alpha.3", + "rc9": "^3.0.0", + "std-env": "^3.10.0" + }, + "bin": { + "nuxt-telemetry": "bin/nuxt-telemetry.mjs" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "@nuxt/kit": ">=3.0.0" + } + }, + "node_modules/@nuxt/telemetry/node_modules/ofetch": { + "version": "2.0.0-alpha.3", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-2.0.0-alpha.3.tgz", + "integrity": "sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==", + "license": "MIT" + }, + "node_modules/@nuxt/telemetry/node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/@nuxt/vite-builder": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.21.2.tgz", + "integrity": "sha512-AwfvmogMzBmX8oS8QPjh9uZiUtnWmOV8w4Ei4DMukVELemkRugDOqWzCzuFneOFQ8khhOOMZ/lRcoTiPryZS5A==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "3.21.2", + "@rollup/plugin-replace": "^6.0.3", + "@vitejs/plugin-vue": "^6.0.4", + "@vitejs/plugin-vue-jsx": "^5.1.4", + "autoprefixer": "^10.4.27", + "consola": "^3.4.2", + "cssnano": "^7.1.3", + "defu": "^6.1.4", + "escape-string-regexp": "^5.0.0", + "exsolve": "^1.0.8", + "externality": "^1.0.2", + "get-port-please": "^3.2.0", + "jiti": "^2.6.1", + "knitwork": "^1.3.0", + "magic-string": "^0.30.21", + "mlly": "^1.8.1", + "mocked-exports": "^0.1.1", + "nypm": "^0.6.5", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "postcss": "^8.5.8", + "seroval": "^1.5.1", + "std-env": "^4.0.0", + "ufo": "^1.6.3", + "unenv": "^2.0.0-rc.24", + "vite": "^7.3.1", + "vite-node": "^5.3.0", + "vite-plugin-checker": "^0.12.0", + "vue-bundle-renderer": "^2.2.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "nuxt": "3.21.2", + "rolldown": "^1.0.0-beta.38", + "rollup-plugin-visualizer": "^6.0.0 || ^7.0.1", + "vue": "^3.3.4" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup-plugin-visualizer": { + "optional": true + } + } + }, + "node_modules/@nuxt/vite-builder/node_modules/@nuxt/kit": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.21.2.tgz", + "integrity": "sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==", + "license": "MIT", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "mlly": "^1.8.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^3.0.0", + "scule": "^1.3.0", + "semver": "^7.7.4", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/vite-builder/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@oxc-minify/binding-android-arm-eabi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-android-arm-eabi/-/binding-android-arm-eabi-0.117.0.tgz", + "integrity": "sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-android-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-android-arm64/-/binding-android-arm64-0.117.0.tgz", + "integrity": "sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-darwin-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-darwin-arm64/-/binding-darwin-arm64-0.117.0.tgz", + "integrity": "sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-darwin-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-darwin-x64/-/binding-darwin-x64-0.117.0.tgz", + "integrity": "sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-freebsd-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-freebsd-x64/-/binding-freebsd-x64-0.117.0.tgz", + "integrity": "sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm-gnueabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.117.0.tgz", + "integrity": "sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm-musleabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.117.0.tgz", + "integrity": "sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.117.0.tgz", + "integrity": "sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-arm64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.117.0.tgz", + "integrity": "sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-ppc64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.117.0.tgz", + "integrity": "sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-riscv64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.117.0.tgz", + "integrity": "sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-riscv64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.117.0.tgz", + "integrity": "sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-s390x-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.117.0.tgz", + "integrity": "sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-x64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.117.0.tgz", + "integrity": "sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-linux-x64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-linux-x64-musl/-/binding-linux-x64-musl-0.117.0.tgz", + "integrity": "sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-openharmony-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-openharmony-arm64/-/binding-openharmony-arm64-0.117.0.tgz", + "integrity": "sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-wasm32-wasi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-wasm32-wasi/-/binding-wasm32-wasi-0.117.0.tgz", + "integrity": "sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-minify/binding-win32-arm64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.117.0.tgz", + "integrity": "sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-win32-ia32-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.117.0.tgz", + "integrity": "sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-minify/binding-win32-x64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-minify/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.117.0.tgz", + "integrity": "sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm-eabi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm-eabi/-/binding-android-arm-eabi-0.117.0.tgz", + "integrity": "sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-android-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-android-arm64/-/binding-android-arm64-0.117.0.tgz", + "integrity": "sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.117.0.tgz", + "integrity": "sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-darwin-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-darwin-x64/-/binding-darwin-x64-0.117.0.tgz", + "integrity": "sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-freebsd-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.117.0.tgz", + "integrity": "sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-gnueabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.117.0.tgz", + "integrity": "sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm-musleabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.117.0.tgz", + "integrity": "sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.117.0.tgz", + "integrity": "sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-arm64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.117.0.tgz", + "integrity": "sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-ppc64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.117.0.tgz", + "integrity": "sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.117.0.tgz", + "integrity": "sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-riscv64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.117.0.tgz", + "integrity": "sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-s390x-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.117.0.tgz", + "integrity": "sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.117.0.tgz", + "integrity": "sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-linux-x64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.117.0.tgz", + "integrity": "sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-openharmony-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-openharmony-arm64/-/binding-openharmony-arm64-0.117.0.tgz", + "integrity": "sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-wasm32-wasi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-wasm32-wasi/-/binding-wasm32-wasi-0.117.0.tgz", + "integrity": "sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-parser/binding-win32-arm64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.117.0.tgz", + "integrity": "sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-ia32-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.117.0.tgz", + "integrity": "sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-parser/binding-win32-x64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-parser/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.117.0.tgz", + "integrity": "sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.117.0.tgz", + "integrity": "sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxc-transform/binding-android-arm-eabi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm-eabi/-/binding-android-arm-eabi-0.117.0.tgz", + "integrity": "sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-android-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-android-arm64/-/binding-android-arm64-0.117.0.tgz", + "integrity": "sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-darwin-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-arm64/-/binding-darwin-arm64-0.117.0.tgz", + "integrity": "sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-darwin-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-darwin-x64/-/binding-darwin-x64-0.117.0.tgz", + "integrity": "sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-freebsd-x64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-freebsd-x64/-/binding-freebsd-x64-0.117.0.tgz", + "integrity": "sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm-gnueabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.117.0.tgz", + "integrity": "sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm-musleabihf": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.117.0.tgz", + "integrity": "sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.117.0.tgz", + "integrity": "sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-arm64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.117.0.tgz", + "integrity": "sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-ppc64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.117.0.tgz", + "integrity": "sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-riscv64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.117.0.tgz", + "integrity": "sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-riscv64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.117.0.tgz", + "integrity": "sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-s390x-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.117.0.tgz", + "integrity": "sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-x64-gnu": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.117.0.tgz", + "integrity": "sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-linux-x64-musl": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-linux-x64-musl/-/binding-linux-x64-musl-0.117.0.tgz", + "integrity": "sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-openharmony-arm64": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-openharmony-arm64/-/binding-openharmony-arm64-0.117.0.tgz", + "integrity": "sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-wasm32-wasi": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-wasm32-wasi/-/binding-wasm32-wasi-0.117.0.tgz", + "integrity": "sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@oxc-transform/binding-win32-arm64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.117.0.tgz", + "integrity": "sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-win32-ia32-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.117.0.tgz", + "integrity": "sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxc-transform/binding-win32-x64-msvc": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/@oxc-transform/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.117.0.tgz", + "integrity": "sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-wasm/-/watcher-wasm-2.5.6.tgz", + "integrity": "sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==", + "bundleDependencies": [ + "napi-wasm" + ], + "license": "MIT", + "dependencies": { + "is-glob": "^4.0.3", + "napi-wasm": "^1.1.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-wasm/node_modules/napi-wasm": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@poppinss/colors": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@poppinss/colors/-/colors-4.1.6.tgz", + "integrity": "sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==", + "license": "MIT", + "dependencies": { + "kleur": "^4.1.5" + } + }, + "node_modules/@poppinss/dumper": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@poppinss/dumper/-/dumper-0.7.0.tgz", + "integrity": "sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.5", + "@sindresorhus/is": "^7.0.2", + "supports-color": "^10.0.0" + } + }, + "node_modules/@poppinss/exception": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@poppinss/exception/-/exception-1.2.3.tgz", + "integrity": "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==", + "license": "MIT" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz", + "integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==", + "license": "MIT" + }, + "node_modules/@rollup/plugin-alias": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-6.0.0.tgz", + "integrity": "sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==", + "license": "MIT", + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "rollup": ">=4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "29.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz", + "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "fdir": "^6.2.0", + "is-reference": "1.2.1", + "magic-string": "^0.30.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "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/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "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/plugin-node-resolve": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "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/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "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/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/is": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.2.0.tgz", + "integrity": "sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@speed-highlight/core": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/@speed-highlight/core/-/core-1.2.14.tgz", + "integrity": "sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==", + "license": "CC0-1.0" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "license": "MIT" + }, + "node_modules/@unhead/vue": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-2.1.12.tgz", + "integrity": "sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1", + "unhead": "2.1.12" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=3.5.18" + } + }, + "node_modules/@vercel/nft": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-1.4.0.tgz", + "integrity": "sha512-rr7JVnI7YGjA4lngucrWjZ7eCOJZZQaDHB+5NRGOuNc+k4PU2Lb9PmYm8uBmW8qichF7WkR2RmwmhXHBhx6wzw==", + "license": "MIT", + "dependencies": { + "@mapbox/node-pre-gyp": "^2.0.0", + "@rollup/pluginutils": "^5.1.3", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.5", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^13.0.0", + "graceful-fs": "^4.2.9", + "node-gyp-build": "^4.2.2", + "picomatch": "^4.0.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.5.tgz", + "integrity": "sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==", + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-5.1.5.tgz", + "integrity": "sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.29.0", + "@babel/plugin-syntax-typescript": "^7.28.6", + "@babel/plugin-transform-typescript": "^7.28.6", + "@rolldown/pluginutils": "^1.0.0-rc.2", + "@vue/babel-plugin-jsx": "^2.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==", + "license": "MIT" + }, + "node_modules/@vue-macros/common": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-3.1.2.tgz", + "integrity": "sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.22", + "ast-kit": "^2.1.2", + "local-pkg": "^1.1.2", + "magic-string-ast": "^1.0.2", + "unplugin-utils": "^0.3.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/vue-macros" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-2.0.1.tgz", + "integrity": "sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==", + "license": "MIT" + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-2.0.1.tgz", + "integrity": "sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@vue/babel-helper-vue-transform-on": "2.0.1", + "@vue/babel-plugin-resolve-type": "2.0.1", + "@vue/shared": "^3.5.22" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-2.0.1.tgz", + "integrity": "sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/parser": "^7.28.4", + "@vue/compiler-sfc": "^3.5.22" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", + "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.30", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", + "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", + "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.30", + "@vue/compiler-dom": "3.5.30", + "@vue/compiler-ssr": "3.5.30", + "@vue/shared": "3.5.30", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", + "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/devtools-core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-8.1.0.tgz", + "integrity": "sha512-LvD1VgDpoHmYL00IgKRLKktF6SsPAb0yaV8wB8q2jRwsAWvqhS8+vsMLEGKNs7uoKyymXhT92dhxgf/wir6YGQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^8.1.0", + "@vue/devtools-shared": "^8.1.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.0.tgz", + "integrity": "sha512-/NZlS4WtGIB54DA/z10gzk+n/V7zaqSzYZOVlg2CfdnpIKdB61bd7JDIMxf/zrtX41zod8E2/bbEBoW/d7x70Q==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^8.1.0", + "birpc": "^2.6.1", + "hookable": "^5.5.3", + "perfect-debounce": "^2.0.0" + } + }, + "node_modules/@vue/devtools-kit/node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vue/devtools-kit/node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/@vue/devtools-shared": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.0.tgz", + "integrity": "sha512-h8uCb4Qs8UT8VdTT5yjY6tOJ//qH7EpxToixR0xqejR55t5OdISIg7AJ7eBkhBs8iu1qG5gY3QQNN1DF1EelAA==", + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.6.tgz", + "integrity": "sha512-xYYYX3/aVup576tP/23sEUpgiEnujrENaoNRbaozC1/MA9I6EGFQRJb4xrt/MmUCAGlxTKL2RmT8JLTPqagCkg==", + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.0.0", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", + "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", + "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.30", + "@vue/shared": "3.5.30" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", + "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.30", + "@vue/runtime-core": "3.5.30", + "@vue/shared": "3.5.30", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", + "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.30", + "@vue/shared": "3.5.30" + }, + "peerDependencies": { + "vue": "3.5.30" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", + "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/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/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", + "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/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.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/archiver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.2", + "async": "^3.2.4", + "buffer-crc32": "^1.0.0", + "readable-stream": "^4.0.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^6.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", + "license": "MIT", + "dependencies": { + "glob": "^10.0.0", + "graceful-fs": "^4.2.0", + "is-stream": "^2.0.1", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/archiver-utils/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/archiver-utils/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ast-kit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-2.2.0.tgz", + "integrity": "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.8.3.tgz", + "integrity": "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "ast-kit": "^2.1.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-sema": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", + "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.27", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", + "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "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.1", + "caniuse-lite": "^1.0.30001774", + "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/b4a": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.0.tgz", + "integrity": "sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==", + "license": "Apache-2.0", + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bare-events": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.2.tgz", + "integrity": "sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==", + "license": "Apache-2.0", + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.5.tgz", + "integrity": "sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.0.tgz", + "integrity": "sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg==", + "license": "Apache-2.0", + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.8.1.tgz", + "integrity": "sha512-bSeR8RfvbRwDpD7HWZvn8M3uYNDrk7m9DQjYOFkENZlXW8Ju/MPaqUPQq5LqJ3kyjEm07siTaAQ7wBKCU59oHg==", + "license": "Apache-2.0", + "dependencies": { + "streamx": "^2.21.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.3.2.tgz", + "integrity": "sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==", + "license": "Apache-2.0", + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/baseline-browser-mapping": { + "version": "2.10.8", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.8.tgz", + "integrity": "sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/birpc": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-4.0.0.tgz", + "integrity": "sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "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.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c12": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.3.3.tgz", + "integrity": "sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==", + "license": "MIT", + "dependencies": { + "chokidar": "^5.0.0", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^17.2.3", + "exsolve": "^1.0.8", + "giget": "^2.0.0", + "jiti": "^2.6.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "*" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/c12/node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/c12/node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001780", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", + "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "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/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/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/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/citty": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.2.1.tgz", + "integrity": "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==", + "license": "MIT" + }, + "node_modules/clipboardy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-4.0.0.tgz", + "integrity": "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w==", + "license": "MIT", + "dependencies": { + "execa": "^8.0.1", + "is-wsl": "^3.1.0", + "is64bit": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compatx": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.2.0.tgz", + "integrity": "sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==", + "license": "MIT" + }, + "node_modules/compress-commons": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "crc32-stream": "^6.0.0", + "is-stream": "^2.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/compress-commons/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", + "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/croner": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/croner/-/croner-9.1.0.tgz", + "integrity": "sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==", + "license": "MIT", + "engines": { + "node": ">=18.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/css-declaration-sorter": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz", + "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==", + "license": "ISC", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.1.3.tgz", + "integrity": "sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^7.0.11", + "lilconfig": "^3.1.3" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-preset-default": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.11.tgz", + "integrity": "sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "css-declaration-sorter": "^7.2.0", + "cssnano-utils": "^5.0.1", + "postcss-calc": "^10.1.1", + "postcss-colormin": "^7.0.6", + "postcss-convert-values": "^7.0.9", + "postcss-discard-comments": "^7.0.6", + "postcss-discard-duplicates": "^7.0.2", + "postcss-discard-empty": "^7.0.1", + "postcss-discard-overridden": "^7.0.1", + "postcss-merge-longhand": "^7.0.5", + "postcss-merge-rules": "^7.0.8", + "postcss-minify-font-values": "^7.0.1", + "postcss-minify-gradients": "^7.0.1", + "postcss-minify-params": "^7.0.6", + "postcss-minify-selectors": "^7.0.6", + "postcss-normalize-charset": "^7.0.1", + "postcss-normalize-display-values": "^7.0.1", + "postcss-normalize-positions": "^7.0.1", + "postcss-normalize-repeat-style": "^7.0.1", + "postcss-normalize-string": "^7.0.1", + "postcss-normalize-timing-functions": "^7.0.1", + "postcss-normalize-unicode": "^7.0.6", + "postcss-normalize-url": "^7.0.1", + "postcss-normalize-whitespace": "^7.0.1", + "postcss-ordered-values": "^7.0.2", + "postcss-reduce-initial": "^7.0.6", + "postcss-reduce-transforms": "^7.0.1", + "postcss-svgo": "^7.1.1", + "postcss-unique-selectors": "^7.0.5" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/cssnano-utils": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-5.0.1.tgz", + "integrity": "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/db0": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.4.tgz", + "integrity": "sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==", + "license": "MIT", + "peerDependencies": { + "@electric-sql/pglite": "*", + "@libsql/client": "*", + "better-sqlite3": "*", + "drizzle-orm": "*", + "mysql2": "*", + "sqlite3": "*" + }, + "peerDependenciesMeta": { + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "drizzle-orm": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/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/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", + "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "license": "MIT" + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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.npmjs.org/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/dot-prop": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-10.1.0.tgz", + "integrity": "sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==", + "license": "MIT", + "dependencies": { + "type-fest": "^5.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", + "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.321", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", + "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-stack-parser-es": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-1.0.5.tgz", + "integrity": "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/errx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", + "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==", + "license": "MIT" + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.4.tgz", + "integrity": "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.4", + "@esbuild/android-arm": "0.27.4", + "@esbuild/android-arm64": "0.27.4", + "@esbuild/android-x64": "0.27.4", + "@esbuild/darwin-arm64": "0.27.4", + "@esbuild/darwin-x64": "0.27.4", + "@esbuild/freebsd-arm64": "0.27.4", + "@esbuild/freebsd-x64": "0.27.4", + "@esbuild/linux-arm": "0.27.4", + "@esbuild/linux-arm64": "0.27.4", + "@esbuild/linux-ia32": "0.27.4", + "@esbuild/linux-loong64": "0.27.4", + "@esbuild/linux-mips64el": "0.27.4", + "@esbuild/linux-ppc64": "0.27.4", + "@esbuild/linux-riscv64": "0.27.4", + "@esbuild/linux-s390x": "0.27.4", + "@esbuild/linux-x64": "0.27.4", + "@esbuild/netbsd-arm64": "0.27.4", + "@esbuild/netbsd-x64": "0.27.4", + "@esbuild/openbsd-arm64": "0.27.4", + "@esbuild/openbsd-x64": "0.27.4", + "@esbuild/openharmony-arm64": "0.27.4", + "@esbuild/sunos-x64": "0.27.4", + "@esbuild/win32-arm64": "0.27.4", + "@esbuild/win32-ia32": "0.27.4", + "@esbuild/win32-x64": "0.27.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/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": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "license": "MIT" + }, + "node_modules/externality": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz", + "integrity": "sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==", + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.14.1", + "mlly": "^1.3.0", + "pathe": "^1.1.1", + "ufo": "^1.1.2" + } + }, + "node_modules/externality/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "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-npm-meta": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-1.4.2.tgz", + "integrity": "sha512-XXyd9d3ie/JeIIjm6WeKalvapGGFI4ShAjPJM78vgUFYzoEsuNSjvvVTuht0XZcwbVdOnEEGzhxwguRbxkIcDg==", + "license": "MIT", + "bin": { + "fast-npm-meta": "dist/cli.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/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/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/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.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/fzf": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fzf/-/fzf-0.5.2.tgz", + "integrity": "sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==", + "license": "BSD-3-Clause" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-port-please": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz", + "integrity": "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==", + "license": "MIT" + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/giget/-/giget-3.1.2.tgz", + "integrity": "sha512-T2qUpKBHeUTwHcIhydgnJzhL0Hj785ms+JkxaaWQH9SDM/llXeewnOkfJcFShAHjWI+26hOChwUfCoupaXLm8g==", + "license": "MIT", + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.1.tgz", + "integrity": "sha512-dW7vl+yiAJSp6aCekaVnVJxurRv7DCOLyXqEG3RYMYUg7AuJ2jCqPkZTA8ooqC2vtnkaMcV5WfFBMuEnTu1OQg==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.5", + "is-path-inside": "^4.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gzip-size": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-7.0.0.tgz", + "integrity": "sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/h3": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.8.tgz", + "integrity": "sha512-iOH6Vl8mGd9nNfu9C0IZ+GuOAfJHcyf3VriQxWaSWIB76Fg4BnFuk4cxBxjmQSSxJS664+pgjP6e7VBnUzFfcg==", + "license": "MIT", + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.5", + "defu": "^6.1.4", + "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/h3/node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookable": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.0.tgz", + "integrity": "sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-shutdown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz", + "integrity": "sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/httpxy": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/httpxy/-/httpxy-0.1.7.tgz", + "integrity": "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-meta": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/image-meta/-/image-meta-0.2.2.tgz", + "integrity": "sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==", + "license": "MIT" + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/impound": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/impound/-/impound-1.1.5.tgz", + "integrity": "sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "es-module-lexer": "^2.0.0", + "pathe": "^2.0.3", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ioredis": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.10.0.tgz", + "integrity": "sha512-HVBe9OFuqs+Z6n64q09PQvP1/R4Bm+30PAyyD4wIEqssh3v9L21QjCVk4kRLucMBcDokJTcLjsGeVRlq/nH6DA==", + "license": "MIT", + "dependencies": { + "@ioredis/commands": "1.5.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/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-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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.npmjs.org/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-installed-globally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz", + "integrity": "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==", + "license": "MIT", + "dependencies": { + "global-directory": "^4.0.1", + "is-path-inside": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/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/is64bit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is64bit/-/is64bit-2.0.0.tgz", + "integrity": "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw==", + "license": "MIT", + "dependencies": { + "system-architecture": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.3.0.tgz", + "integrity": "sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==", + "license": "MIT" + }, + "node_modules/launch-editor": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.1.tgz", + "integrity": "sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/less": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/less/-/less-4.6.4.tgz", + "integrity": "sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==", + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^3.0.5", + "parse-node-version": "^1.0.1" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/listhen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/listhen/-/listhen-1.9.0.tgz", + "integrity": "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg==", + "license": "MIT", + "dependencies": { + "@parcel/watcher": "^2.4.1", + "@parcel/watcher-wasm": "^2.4.1", + "citty": "^0.1.6", + "clipboardy": "^4.0.0", + "consola": "^3.2.3", + "crossws": ">=0.2.0 <0.4.0", + "defu": "^6.1.4", + "get-port-please": "^3.1.2", + "h3": "^1.12.0", + "http-shutdown": "^1.2.2", + "jiti": "^2.1.2", + "mlly": "^1.7.1", + "node-forge": "^1.3.1", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "ufo": "^1.5.4", + "untun": "^0.1.3", + "uqr": "^0.1.2" + }, + "bin": { + "listen": "bin/listhen.mjs", + "listhen": "bin/listhen.mjs" + } + }, + "node_modules/listhen/node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/listhen/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/listhen/node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-regexp": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/magic-regexp/-/magic-regexp-0.10.0.tgz", + "integrity": "sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==", + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12", + "mlly": "^1.7.2", + "regexp-tree": "^0.1.27", + "type-level-regexp": "~0.1.17", + "ufo": "^1.5.4", + "unplugin": "^2.0.0" + } + }, + "node_modules/magic-regexp/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/magic-regexp/node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/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/magic-string-ast": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-1.0.3.tgz", + "integrity": "sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==", + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.19" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/magicast": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.2.tgz", + "integrity": "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "source-map-js": "^1.2.1" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "license": "CC0-1.0" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mlly": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.1.tgz", + "integrity": "sha512-SnL6sNutTwRWWR/vcmCYHSADjiEesp5TGQQ0pXyLhW5IoeibRlF/CbSLailbB3CNqJUk9cVJ9dUDnbD7GrcHBQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mocked-exports": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/mocked-exports/-/mocked-exports-0.1.1.tgz", + "integrity": "sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==", + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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/nanotar": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.3.0.tgz", + "integrity": "sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==", + "license": "MIT" + }, + "node_modules/needle": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", + "integrity": "sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/nitropack": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.13.1.tgz", + "integrity": "sha512-2dDj89C4wC2uzG7guF3CnyG+zwkZosPEp7FFBGHB3AJo11AywOolWhyQJFHDzve8COvGxJaqscye9wW2IrUsNw==", + "license": "MIT", + "dependencies": { + "@cloudflare/kv-asset-handler": "^0.4.2", + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-inject": "^5.0.5", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^0.4.4", + "@vercel/nft": "^1.2.0", + "archiver": "^7.0.1", + "c12": "^3.3.3", + "chokidar": "^5.0.0", + "citty": "^0.1.6", + "compatx": "^0.2.0", + "confbox": "^0.2.2", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "croner": "^9.1.0", + "crossws": "^0.3.5", + "db0": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "dot-prop": "^10.1.0", + "esbuild": "^0.27.2", + "escape-string-regexp": "^5.0.0", + "etag": "^1.8.1", + "exsolve": "^1.0.8", + "globby": "^16.1.0", + "gzip-size": "^7.0.0", + "h3": "^1.15.5", + "hookable": "^5.5.3", + "httpxy": "^0.1.7", + "ioredis": "^5.9.1", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "listhen": "^1.9.0", + "magic-string": "^0.30.21", + "magicast": "^0.5.1", + "mime": "^4.1.0", + "mlly": "^1.8.0", + "node-fetch-native": "^1.6.7", + "node-mock-http": "^1.0.4", + "ofetch": "^1.5.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^2.0.0", + "pkg-types": "^2.3.0", + "pretty-bytes": "^7.1.0", + "radix3": "^1.1.2", + "rollup": "^4.55.1", + "rollup-plugin-visualizer": "^6.0.5", + "scule": "^1.3.0", + "semver": "^7.7.3", + "serve-placeholder": "^2.0.2", + "serve-static": "^2.2.1", + "source-map": "^0.7.6", + "std-env": "^3.10.0", + "ufo": "^1.6.3", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.5.0", + "unenv": "^2.0.0-rc.24", + "unimport": "^5.6.0", + "unplugin-utils": "^0.3.1", + "unstorage": "^1.17.4", + "untyped": "^2.0.0", + "unwasm": "^0.5.3", + "youch": "^4.1.0-beta.13", + "youch-core": "^0.3.3" + }, + "bin": { + "nitro": "dist/cli/index.mjs", + "nitropack": "dist/cli/index.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "xml2js": "^0.6.2" + }, + "peerDependenciesMeta": { + "xml2js": { + "optional": true + } + } + }, + "node_modules/nitropack/node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/nitropack/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/nitropack/node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/nitropack/node_modules/mime": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", + "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/nitropack/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nitropack/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/nitropack/node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "license": "MIT" + }, + "node_modules/nitropack/node_modules/unimport": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-5.7.0.tgz", + "integrity": "sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "strip-literal": "^3.1.0", + "tinyglobby": "^0.2.15", + "unplugin": "^2.3.11", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nitropack/node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", + "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.4.tgz", + "integrity": "sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/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/nuxt": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.21.2.tgz", + "integrity": "sha512-XzZFj2KMK16zE0TfrGpjvgc378wZWvDzIpunHOHOT0Jj8zbV5qT1uQKaJb+fAHv6lf1A4nOMMWHrTmjAK4u0Zg==", + "license": "MIT", + "dependencies": { + "@dxup/nuxt": "^0.4.0", + "@nuxt/cli": "^3.34.0", + "@nuxt/devtools": "^3.2.3", + "@nuxt/kit": "3.21.2", + "@nuxt/nitro-server": "3.21.2", + "@nuxt/schema": "3.21.2", + "@nuxt/telemetry": "^2.7.0", + "@nuxt/vite-builder": "3.21.2", + "@unhead/vue": "^2.1.12", + "@vue/shared": "^3.5.30", + "c12": "^3.3.3", + "chokidar": "^5.0.0", + "compatx": "^0.2.0", + "consola": "^3.4.2", + "cookie-es": "^2.0.0", + "defu": "^6.1.4", + "destr": "^2.0.5", + "devalue": "^5.6.3", + "errx": "^0.1.0", + "escape-string-regexp": "^5.0.0", + "exsolve": "^1.0.8", + "h3": "^1.15.6", + "hookable": "^5.5.3", + "ignore": "^7.0.5", + "impound": "^1.1.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "magic-string": "^0.30.21", + "mlly": "^1.8.1", + "nanotar": "^0.3.0", + "nypm": "^0.6.5", + "ofetch": "^1.5.1", + "ohash": "^2.0.11", + "on-change": "^6.0.2", + "oxc-minify": "^0.117.0", + "oxc-parser": "^0.117.0", + "oxc-transform": "^0.117.0", + "oxc-walker": "^0.7.0", + "pathe": "^2.0.3", + "perfect-debounce": "^2.1.0", + "pkg-types": "^2.3.0", + "rou3": "^0.8.1", + "scule": "^1.3.0", + "semver": "^7.7.4", + "std-env": "^4.0.0", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "ultrahtml": "^1.6.0", + "uncrypto": "^0.1.3", + "unctx": "^2.5.0", + "unimport": "^6.0.1", + "unplugin": "^3.0.0", + "unplugin-vue-router": "^0.19.2", + "untyped": "^2.0.0", + "vue": "^3.5.30", + "vue-router": "^4.6.4" + }, + "bin": { + "nuxi": "bin/nuxt.mjs", + "nuxt": "bin/nuxt.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@parcel/watcher": "^2.1.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "peerDependenciesMeta": { + "@parcel/watcher": { + "optional": true + }, + "@types/node": { + "optional": true + } + } + }, + "node_modules/nuxt/node_modules/@nuxt/kit": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.21.2.tgz", + "integrity": "sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g==", + "license": "MIT", + "dependencies": { + "c12": "^3.3.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.8", + "ignore": "^7.0.5", + "jiti": "^2.6.1", + "klona": "^2.0.6", + "knitwork": "^1.3.0", + "mlly": "^1.8.1", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "rc9": "^3.0.0", + "scule": "^1.3.0", + "semver": "^7.7.4", + "tinyglobby": "^0.2.15", + "ufo": "^1.6.3", + "unctx": "^2.5.0", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/nuxt/node_modules/@nuxt/schema": { + "version": "3.21.2", + "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.21.2.tgz", + "integrity": "sha512-yZaJrZizRP4OQVCM7qRG3xIJ1xZ59npgg9jd3ng+BDs5ZvLqYP9rXnFikShc8EPUtR6+zhSPgKgy6L8wWcBKzQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "^3.5.30", + "defu": "^6.1.4", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0", + "std-env": "^4.0.0" + }, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/nuxt/node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/nuxt/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/nypm": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.5.tgz", + "integrity": "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==", + "license": "MIT", + "dependencies": { + "citty": "^0.2.0", + "pathe": "^2.0.3", + "tinyexec": "^1.0.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/ofetch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/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.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "license": "MIT" + }, + "node_modules/on-change": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/on-change/-/on-change-6.0.2.tgz", + "integrity": "sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/on-change?sponsor=1" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/oxc-minify": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/oxc-minify/-/oxc-minify-0.117.0.tgz", + "integrity": "sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-minify/binding-android-arm-eabi": "0.117.0", + "@oxc-minify/binding-android-arm64": "0.117.0", + "@oxc-minify/binding-darwin-arm64": "0.117.0", + "@oxc-minify/binding-darwin-x64": "0.117.0", + "@oxc-minify/binding-freebsd-x64": "0.117.0", + "@oxc-minify/binding-linux-arm-gnueabihf": "0.117.0", + "@oxc-minify/binding-linux-arm-musleabihf": "0.117.0", + "@oxc-minify/binding-linux-arm64-gnu": "0.117.0", + "@oxc-minify/binding-linux-arm64-musl": "0.117.0", + "@oxc-minify/binding-linux-ppc64-gnu": "0.117.0", + "@oxc-minify/binding-linux-riscv64-gnu": "0.117.0", + "@oxc-minify/binding-linux-riscv64-musl": "0.117.0", + "@oxc-minify/binding-linux-s390x-gnu": "0.117.0", + "@oxc-minify/binding-linux-x64-gnu": "0.117.0", + "@oxc-minify/binding-linux-x64-musl": "0.117.0", + "@oxc-minify/binding-openharmony-arm64": "0.117.0", + "@oxc-minify/binding-wasm32-wasi": "0.117.0", + "@oxc-minify/binding-win32-arm64-msvc": "0.117.0", + "@oxc-minify/binding-win32-ia32-msvc": "0.117.0", + "@oxc-minify/binding-win32-x64-msvc": "0.117.0" + } + }, + "node_modules/oxc-parser": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/oxc-parser/-/oxc-parser-0.117.0.tgz", + "integrity": "sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==", + "license": "MIT", + "dependencies": { + "@oxc-project/types": "^0.117.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-parser/binding-android-arm-eabi": "0.117.0", + "@oxc-parser/binding-android-arm64": "0.117.0", + "@oxc-parser/binding-darwin-arm64": "0.117.0", + "@oxc-parser/binding-darwin-x64": "0.117.0", + "@oxc-parser/binding-freebsd-x64": "0.117.0", + "@oxc-parser/binding-linux-arm-gnueabihf": "0.117.0", + "@oxc-parser/binding-linux-arm-musleabihf": "0.117.0", + "@oxc-parser/binding-linux-arm64-gnu": "0.117.0", + "@oxc-parser/binding-linux-arm64-musl": "0.117.0", + "@oxc-parser/binding-linux-ppc64-gnu": "0.117.0", + "@oxc-parser/binding-linux-riscv64-gnu": "0.117.0", + "@oxc-parser/binding-linux-riscv64-musl": "0.117.0", + "@oxc-parser/binding-linux-s390x-gnu": "0.117.0", + "@oxc-parser/binding-linux-x64-gnu": "0.117.0", + "@oxc-parser/binding-linux-x64-musl": "0.117.0", + "@oxc-parser/binding-openharmony-arm64": "0.117.0", + "@oxc-parser/binding-wasm32-wasi": "0.117.0", + "@oxc-parser/binding-win32-arm64-msvc": "0.117.0", + "@oxc-parser/binding-win32-ia32-msvc": "0.117.0", + "@oxc-parser/binding-win32-x64-msvc": "0.117.0" + } + }, + "node_modules/oxc-transform": { + "version": "0.117.0", + "resolved": "https://registry.npmjs.org/oxc-transform/-/oxc-transform-0.117.0.tgz", + "integrity": "sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==", + "license": "MIT", + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxc-transform/binding-android-arm-eabi": "0.117.0", + "@oxc-transform/binding-android-arm64": "0.117.0", + "@oxc-transform/binding-darwin-arm64": "0.117.0", + "@oxc-transform/binding-darwin-x64": "0.117.0", + "@oxc-transform/binding-freebsd-x64": "0.117.0", + "@oxc-transform/binding-linux-arm-gnueabihf": "0.117.0", + "@oxc-transform/binding-linux-arm-musleabihf": "0.117.0", + "@oxc-transform/binding-linux-arm64-gnu": "0.117.0", + "@oxc-transform/binding-linux-arm64-musl": "0.117.0", + "@oxc-transform/binding-linux-ppc64-gnu": "0.117.0", + "@oxc-transform/binding-linux-riscv64-gnu": "0.117.0", + "@oxc-transform/binding-linux-riscv64-musl": "0.117.0", + "@oxc-transform/binding-linux-s390x-gnu": "0.117.0", + "@oxc-transform/binding-linux-x64-gnu": "0.117.0", + "@oxc-transform/binding-linux-x64-musl": "0.117.0", + "@oxc-transform/binding-openharmony-arm64": "0.117.0", + "@oxc-transform/binding-wasm32-wasi": "0.117.0", + "@oxc-transform/binding-win32-arm64-msvc": "0.117.0", + "@oxc-transform/binding-win32-ia32-msvc": "0.117.0", + "@oxc-transform/binding-win32-x64-msvc": "0.117.0" + } + }, + "node_modules/oxc-walker": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/oxc-walker/-/oxc-walker-0.7.0.tgz", + "integrity": "sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==", + "license": "MIT", + "dependencies": { + "magic-regexp": "^0.10.0" + }, + "peerDependencies": { + "oxc-parser": ">=0.98.0" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz", + "integrity": "sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "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.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.1.1.tgz", + "integrity": "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12 || ^20.9 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.38" + } + }, + "node_modules/postcss-colormin": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.6.tgz", + "integrity": "sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-api": "^3.0.0", + "colord": "^2.9.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-convert-values": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.9.tgz", + "integrity": "sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-comments": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.6.tgz", + "integrity": "sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.2.tgz", + "integrity": "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-empty": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.1.tgz", + "integrity": "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.1.tgz", + "integrity": "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.5.tgz", + "integrity": "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^7.0.5" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-merge-rules": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.8.tgz", + "integrity": "sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^5.0.1", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.1.tgz", + "integrity": "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.1.tgz", + "integrity": "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.3", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-params": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.6.tgz", + "integrity": "sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.6.tgz", + "integrity": "sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.1.tgz", + "integrity": "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==", + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.1.tgz", + "integrity": "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.1.tgz", + "integrity": "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.1.tgz", + "integrity": "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-string": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.1.tgz", + "integrity": "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.1.tgz", + "integrity": "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.6.tgz", + "integrity": "sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-url": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.1.tgz", + "integrity": "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.1.tgz", + "integrity": "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-ordered-values": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.2.tgz", + "integrity": "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.6.tgz", + "integrity": "sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.1.tgz", + "integrity": "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.1.1.tgz", + "integrity": "sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^4.0.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.5.tgz", + "integrity": "sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/pretty-bytes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz", + "integrity": "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "license": "MIT", + "optional": true + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc9": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.0.tgz", + "integrity": "sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.5" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/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/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "license": "MIT", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "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/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "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.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-visualizer": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-6.0.11.tgz", + "integrity": "sha512-TBwVHVY7buHjIKVLqr9scTVFwqZqMXINcCphPwIWKPDCOBIa+jCQfafvbjRJDZgXdq/A996Dy6yGJ/+/NtAXDQ==", + "license": "MIT", + "dependencies": { + "open": "^8.0.0", + "picomatch": "^4.0.2", + "source-map": "^0.7.4", + "yargs": "^17.5.1" + }, + "bin": { + "rollup-plugin-visualizer": "dist/bin/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "rolldown": "1.x || ^1.0.0-beta", + "rollup": "2.x || 3.x || 4.x" + }, + "peerDependenciesMeta": { + "rolldown": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-visualizer/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/rou3": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/rou3/-/rou3-0.8.1.tgz", + "integrity": "sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==", + "license": "MIT" + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT", + "optional": true + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/seroval": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.5.1.tgz", + "integrity": "sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/serve-placeholder": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz", + "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==", + "license": "MIT", + "dependencies": { + "defu": "^6.1.4" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-git": { + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.33.0.tgz", + "integrity": "sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smob": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.6.1.tgz", + "integrity": "sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/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/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/srvx": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/srvx/-/srvx-0.11.12.tgz", + "integrity": "sha512-AQfrGqntqVPXgP03pvBDN1KyevHC+KmYVqb8vVf4N+aomQqdhaZxjvoVp+AOm4u6x+GgNQY3MVzAUIn+TqwkOA==", + "license": "MIT", + "bin": { + "srvx": "bin/srvx.mjs" + }, + "engines": { + "node": ">=20.16.0" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "license": "MIT" + }, + "node_modules/streamx": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", + "integrity": "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==", + "license": "MIT", + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/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/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/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/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", + "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "license": "MIT" + }, + "node_modules/structured-clone-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/structured-clone-es/-/structured-clone-es-2.0.0.tgz", + "integrity": "sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==", + "license": "ISC" + }, + "node_modules/stylehacks": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.8.tgz", + "integrity": "sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.1", + "postcss-selector-parser": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.32" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/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/svgo/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/system-architecture": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz", + "integrity": "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar-stream": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", + "integrity": "sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/terser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tinyclip": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/tinyclip/-/tinyclip-0.1.12.tgz", + "integrity": "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==", + "license": "MIT", + "engines": { + "node": "^16.14.0 || >= 17.3.0" + } + }, + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/type-fest": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", + "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-level-regexp": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/type-level-regexp/-/type-level-regexp-0.1.17.tgz", + "integrity": "sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==", + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/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.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "license": "MIT" + }, + "node_modules/ultrahtml": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", + "license": "MIT" + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.5.0.tgz", + "integrity": "sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==", + "license": "MIT", + "dependencies": { + "acorn": "^8.15.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21", + "unplugin": "^2.3.11" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unctx/node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unenv": { + "version": "2.0.0-rc.24", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", + "integrity": "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3" + } + }, + "node_modules/unhead": { + "version": "2.1.12", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-2.1.12.tgz", + "integrity": "sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA==", + "license": "MIT", + "dependencies": { + "hookable": "^6.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/unicorn-magic": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", + "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-6.0.2.tgz", + "integrity": "sha512-ZSOkrDw380w+KIPniY3smyXh2h7H9v2MNr9zejDuh239o5sdea44DRAYrv+rfUi2QGT186P2h0GPGKvy8avQ5g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "pkg-types": "^2.3.0", + "scule": "^1.3.0", + "strip-literal": "^3.1.0", + "tinyglobby": "^0.2.15", + "unplugin": "^3.0.0", + "unplugin-utils": "^0.3.1" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unplugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz", + "integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.3.1.tgz", + "integrity": "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.3", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-router": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.19.2.tgz", + "integrity": "sha512-u5dgLBarxE5cyDK/hzJGfpCTLIAyiTXGlo85COuD4Nssj6G7NxS+i9mhCWz/1p/ud1eMwdcUbTXehQe41jYZUA==", + "deprecated": "Merged into vuejs/router. Migrate: https://router.vuejs.org/guide/migration/v4-to-v5.html", + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.28.5", + "@vue-macros/common": "^3.1.1", + "@vue/language-core": "^3.2.1", + "ast-walker-scope": "^0.8.3", + "chokidar": "^5.0.0", + "json5": "^2.2.3", + "local-pkg": "^1.1.2", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "muggle-string": "^0.4.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "scule": "^1.3.0", + "tinyglobby": "^0.2.15", + "unplugin": "^2.3.11", + "unplugin-utils": "^0.3.1", + "yaml": "^2.8.2" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.5.17", + "vue-router": "^4.6.0" + }, + "peerDependenciesMeta": { + "vue-router": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-router/node_modules/unplugin": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", + "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "acorn": "^8.15.0", + "picomatch": "^4.0.3", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unstorage": { + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz", + "integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==", + "license": "MIT", + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^5.0.0", + "destr": "^2.0.5", + "h3": "^1.15.5", + "lru-cache": "^11.2.0", + "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/lru-cache": { + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", + "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/untun": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/untun/-/untun-0.1.3.tgz", + "integrity": "sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.5", + "consola": "^3.2.3", + "pathe": "^1.1.1" + }, + "bin": { + "untun": "bin/untun.mjs" + } + }, + "node_modules/untun/node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/untun/node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "license": "MIT" + }, + "node_modules/untyped": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-2.0.0.tgz", + "integrity": "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==", + "license": "MIT", + "dependencies": { + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/untyped/node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "license": "MIT", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/unwasm": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/unwasm/-/unwasm-0.5.3.tgz", + "integrity": "sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==", + "license": "MIT", + "dependencies": { + "exsolve": "^1.0.8", + "knitwork": "^1.3.0", + "magic-string": "^0.30.21", + "mlly": "^1.8.0", + "pathe": "^2.0.3", + "pkg-types": "^2.3.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "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/uqr": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz", + "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "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-dev-rpc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-dev-rpc/-/vite-dev-rpc-1.1.0.tgz", + "integrity": "sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==", + "license": "MIT", + "dependencies": { + "birpc": "^2.4.0", + "vite-hot-client": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0" + } + }, + "node_modules/vite-dev-rpc/node_modules/birpc": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/vite-hot-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-2.1.0.tgz", + "integrity": "sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" + } + }, + "node_modules/vite-node": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-5.3.0.tgz", + "integrity": "sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==", + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "es-module-lexer": "^2.0.0", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "vite": "^7.3.1" + }, + "bin": { + "vite-node": "dist/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://opencollective.com/antfu" + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.12.0.tgz", + "integrity": "sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "chokidar": "^4.0.3", + "npm-run-path": "^6.0.0", + "picocolors": "^1.1.1", + "picomatch": "^4.0.3", + "tiny-invariant": "^1.3.3", + "tinyglobby": "^0.2.15", + "vscode-uri": "^3.1.0" + }, + "engines": { + "node": ">=16.11" + }, + "peerDependencies": { + "@biomejs/biome": ">=1.7", + "eslint": ">=9.39.1", + "meow": "^13.2.0", + "optionator": "^0.9.4", + "oxlint": ">=1", + "stylelint": ">=16", + "typescript": "*", + "vite": ">=5.4.21", + "vls": "*", + "vti": "*", + "vue-tsc": "~2.2.10 || ^3.0.0" + }, + "peerDependenciesMeta": { + "@biomejs/biome": { + "optional": true + }, + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "oxlint": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + }, + "vue-tsc": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-checker/node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-checker/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/vite-plugin-checker/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-11.3.3.tgz", + "integrity": "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==", + "license": "MIT", + "dependencies": { + "ansis": "^4.1.0", + "debug": "^4.4.1", + "error-stack-parser-es": "^1.0.5", + "ohash": "^2.0.11", + "open": "^10.2.0", + "perfect-debounce": "^2.0.0", + "sirv": "^3.0.1", + "unplugin-utils": "^0.3.0", + "vite-dev-rpc": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-inspect/node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite-plugin-vue-tracer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-tracer/-/vite-plugin-vue-tracer-1.3.0.tgz", + "integrity": "sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==", + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "exsolve": "^1.0.8", + "magic-string": "^0.30.21", + "pathe": "^2.0.3", + "source-map-js": "^1.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^6.0.0 || ^7.0.0", + "vue": "^3.5.0" + } + }, + "node_modules/vite-plugin-vue-tracer/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", + "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.30", + "@vue/compiler-sfc": "3.5.30", + "@vue/runtime-dom": "3.5.30", + "@vue/server-renderer": "3.5.30", + "@vue/shared": "3.5.30" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-bundle-renderer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vue-bundle-renderer/-/vue-bundle-renderer-2.2.0.tgz", + "integrity": "sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==", + "license": "MIT", + "dependencies": { + "ufo": "^1.6.1" + } + }, + "node_modules/vue-devtools-stub": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/vue-devtools-stub/-/vue-devtools-stub-0.1.0.tgz", + "integrity": "sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==", + "license": "MIT" + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/youch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/youch/-/youch-4.1.0.tgz", + "integrity": "sha512-cYekNh2tUoU+voS11X0D0UQntVCSO6LQ1h10VriQGmfbpf0mnGTruwZICts23UUNiZCXm8H8hQBtRrdsbhuNNg==", + "license": "MIT", + "dependencies": { + "@poppinss/colors": "^4.1.6", + "@poppinss/dumper": "^0.7.0", + "@speed-highlight/core": "^1.2.14", + "cookie-es": "^2.0.0", + "youch-core": "^0.3.3" + } + }, + "node_modules/youch-core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/youch-core/-/youch-core-0.3.3.tgz", + "integrity": "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==", + "license": "MIT", + "dependencies": { + "@poppinss/exception": "^1.2.2", + "error-stack-parser-es": "^1.0.5" + } + }, + "node_modules/zip-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4363927 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "hulai-website", + "version": "1.0.0", + "private": true, + "description": "呼籁旅行官网 - 呼伦贝尔家庭定制游", + "scripts": { + "dev": "nuxt dev", + "build": "nuxt build", + "generate": "nuxt generate", + "preview": "nuxt preview" + }, + "dependencies": { + "@css-render/vue3-ssr": "^0.15.14", + "better-sqlite3": "^12.8.0", + "drizzle-orm": "^0.45.1", + "less": "^4.6.4", + "naive-ui": "^2.44.1", + "nuxt": "^3.17.5" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "@parcel/watcher", + "better-sqlite3", + "esbuild" + ] + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "drizzle-kit": "^0.31.10" + } +} \ No newline at end of file diff --git a/pages/about.vue b/pages/about.vue new file mode 100644 index 0000000..a975d15 --- /dev/null +++ b/pages/about.vue @@ -0,0 +1,451 @@ + + + + + diff --git a/pages/admin/articles/[id].vue b/pages/admin/articles/[id].vue new file mode 100644 index 0000000..92682e2 --- /dev/null +++ b/pages/admin/articles/[id].vue @@ -0,0 +1,133 @@ + + + + + diff --git a/pages/admin/articles/index.vue b/pages/admin/articles/index.vue new file mode 100644 index 0000000..5bf5f27 --- /dev/null +++ b/pages/admin/articles/index.vue @@ -0,0 +1,108 @@ + + + diff --git a/pages/admin/blogs/[id].vue b/pages/admin/blogs/[id].vue new file mode 100644 index 0000000..68dd6a1 --- /dev/null +++ b/pages/admin/blogs/[id].vue @@ -0,0 +1,142 @@ + + + + + diff --git a/pages/admin/blogs/index.vue b/pages/admin/blogs/index.vue new file mode 100644 index 0000000..6a83325 --- /dev/null +++ b/pages/admin/blogs/index.vue @@ -0,0 +1,84 @@ + + + diff --git a/pages/admin/content/[key].vue b/pages/admin/content/[key].vue new file mode 100644 index 0000000..809f50e --- /dev/null +++ b/pages/admin/content/[key].vue @@ -0,0 +1,108 @@ + + + diff --git a/pages/admin/content/brand.vue b/pages/admin/content/brand.vue new file mode 100644 index 0000000..5176b89 --- /dev/null +++ b/pages/admin/content/brand.vue @@ -0,0 +1,92 @@ + + + diff --git a/pages/admin/content/calendar.vue b/pages/admin/content/calendar.vue new file mode 100644 index 0000000..96c27ee --- /dev/null +++ b/pages/admin/content/calendar.vue @@ -0,0 +1,105 @@ + + + diff --git a/pages/admin/content/contact.vue b/pages/admin/content/contact.vue new file mode 100644 index 0000000..bd5d866 --- /dev/null +++ b/pages/admin/content/contact.vue @@ -0,0 +1,127 @@ + + + diff --git a/pages/admin/content/courses.vue b/pages/admin/content/courses.vue new file mode 100644 index 0000000..3b29bdf --- /dev/null +++ b/pages/admin/content/courses.vue @@ -0,0 +1,210 @@ + + + diff --git a/pages/admin/content/customize.vue b/pages/admin/content/customize.vue new file mode 100644 index 0000000..bf22f0c --- /dev/null +++ b/pages/admin/content/customize.vue @@ -0,0 +1,133 @@ + + + diff --git a/pages/admin/content/destinations-detail/[idx].vue b/pages/admin/content/destinations-detail/[idx].vue new file mode 100644 index 0000000..23ee1af --- /dev/null +++ b/pages/admin/content/destinations-detail/[idx].vue @@ -0,0 +1,164 @@ + + + + + diff --git a/pages/admin/content/destinations-detail/index.vue b/pages/admin/content/destinations-detail/index.vue new file mode 100644 index 0000000..0f50da7 --- /dev/null +++ b/pages/admin/content/destinations-detail/index.vue @@ -0,0 +1,57 @@ + + + diff --git a/pages/admin/content/destinations.vue b/pages/admin/content/destinations.vue new file mode 100644 index 0000000..f2ea14a --- /dev/null +++ b/pages/admin/content/destinations.vue @@ -0,0 +1,123 @@ + + + diff --git a/pages/admin/content/guides.vue b/pages/admin/content/guides.vue new file mode 100644 index 0000000..904ee56 --- /dev/null +++ b/pages/admin/content/guides.vue @@ -0,0 +1,128 @@ + + + diff --git a/pages/admin/content/images.vue b/pages/admin/content/images.vue new file mode 100644 index 0000000..6dc33a1 --- /dev/null +++ b/pages/admin/content/images.vue @@ -0,0 +1,63 @@ + + + diff --git a/pages/admin/content/partners.vue b/pages/admin/content/partners.vue new file mode 100644 index 0000000..37251e4 --- /dev/null +++ b/pages/admin/content/partners.vue @@ -0,0 +1,109 @@ + + + diff --git a/pages/admin/content/qualifications.vue b/pages/admin/content/qualifications.vue new file mode 100644 index 0000000..ca96a56 --- /dev/null +++ b/pages/admin/content/qualifications.vue @@ -0,0 +1,132 @@ + + + diff --git a/pages/admin/content/selector/[idx].vue b/pages/admin/content/selector/[idx].vue new file mode 100644 index 0000000..5abd052 --- /dev/null +++ b/pages/admin/content/selector/[idx].vue @@ -0,0 +1,154 @@ + + + + + diff --git a/pages/admin/content/selector/index.vue b/pages/admin/content/selector/index.vue new file mode 100644 index 0000000..bd09826 --- /dev/null +++ b/pages/admin/content/selector/index.vue @@ -0,0 +1,89 @@ + + + diff --git a/pages/admin/content/selector/reasons.vue b/pages/admin/content/selector/reasons.vue new file mode 100644 index 0000000..75afba3 --- /dev/null +++ b/pages/admin/content/selector/reasons.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/pages/admin/content/selector/scoring.vue b/pages/admin/content/selector/scoring.vue new file mode 100644 index 0000000..b9d852d --- /dev/null +++ b/pages/admin/content/selector/scoring.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/pages/admin/content/seo.vue b/pages/admin/content/seo.vue new file mode 100644 index 0000000..77c3444 --- /dev/null +++ b/pages/admin/content/seo.vue @@ -0,0 +1,81 @@ + + + diff --git a/pages/admin/content/winter-camp.vue b/pages/admin/content/winter-camp.vue new file mode 100644 index 0000000..6f9e20f --- /dev/null +++ b/pages/admin/content/winter-camp.vue @@ -0,0 +1,207 @@ + + + diff --git a/pages/admin/content/xiaohongshu-wall.vue b/pages/admin/content/xiaohongshu-wall.vue new file mode 100644 index 0000000..0c9757a --- /dev/null +++ b/pages/admin/content/xiaohongshu-wall.vue @@ -0,0 +1,139 @@ + + + diff --git a/pages/admin/content/youji.vue b/pages/admin/content/youji.vue new file mode 100644 index 0000000..c630d28 --- /dev/null +++ b/pages/admin/content/youji.vue @@ -0,0 +1,123 @@ + + + diff --git a/pages/admin/faqs/[id].vue b/pages/admin/faqs/[id].vue new file mode 100644 index 0000000..f1d73be --- /dev/null +++ b/pages/admin/faqs/[id].vue @@ -0,0 +1,97 @@ + + + + + diff --git a/pages/admin/faqs/index.vue b/pages/admin/faqs/index.vue new file mode 100644 index 0000000..1686147 --- /dev/null +++ b/pages/admin/faqs/index.vue @@ -0,0 +1,82 @@ + + + diff --git a/pages/admin/gallery/[id].vue b/pages/admin/gallery/[id].vue new file mode 100644 index 0000000..b5574a3 --- /dev/null +++ b/pages/admin/gallery/[id].vue @@ -0,0 +1,142 @@ + + + + + diff --git a/pages/admin/gallery/index.vue b/pages/admin/gallery/index.vue new file mode 100644 index 0000000..ba9b90a --- /dev/null +++ b/pages/admin/gallery/index.vue @@ -0,0 +1,135 @@ + + + diff --git a/pages/admin/index.vue b/pages/admin/index.vue new file mode 100644 index 0000000..2a6e97b --- /dev/null +++ b/pages/admin/index.vue @@ -0,0 +1,68 @@ + + + diff --git a/pages/admin/login.vue b/pages/admin/login.vue new file mode 100644 index 0000000..40426a1 --- /dev/null +++ b/pages/admin/login.vue @@ -0,0 +1,58 @@ + + + diff --git a/pages/admin/navigation.vue b/pages/admin/navigation.vue new file mode 100644 index 0000000..df5e86f --- /dev/null +++ b/pages/admin/navigation.vue @@ -0,0 +1,112 @@ + + + diff --git a/pages/admin/products/[key].vue b/pages/admin/products/[key].vue new file mode 100644 index 0000000..f8f1716 --- /dev/null +++ b/pages/admin/products/[key].vue @@ -0,0 +1,544 @@ + + + + + diff --git a/pages/admin/products/index.vue b/pages/admin/products/index.vue new file mode 100644 index 0000000..9c480be --- /dev/null +++ b/pages/admin/products/index.vue @@ -0,0 +1,193 @@ + + + diff --git a/pages/admin/reviews/[id].vue b/pages/admin/reviews/[id].vue new file mode 100644 index 0000000..387892d --- /dev/null +++ b/pages/admin/reviews/[id].vue @@ -0,0 +1,205 @@ + + + + + diff --git a/pages/admin/reviews/index.vue b/pages/admin/reviews/index.vue new file mode 100644 index 0000000..b583256 --- /dev/null +++ b/pages/admin/reviews/index.vue @@ -0,0 +1,110 @@ + + + diff --git a/pages/admin/stories/[id].vue b/pages/admin/stories/[id].vue new file mode 100644 index 0000000..e643a6a --- /dev/null +++ b/pages/admin/stories/[id].vue @@ -0,0 +1,259 @@ + + + diff --git a/pages/admin/stories/index.vue b/pages/admin/stories/index.vue new file mode 100644 index 0000000..a64e496 --- /dev/null +++ b/pages/admin/stories/index.vue @@ -0,0 +1,84 @@ + + + diff --git a/pages/admin/submissions/index.vue b/pages/admin/submissions/index.vue new file mode 100644 index 0000000..b53330c --- /dev/null +++ b/pages/admin/submissions/index.vue @@ -0,0 +1,272 @@ + + + diff --git a/pages/blog/[id].vue b/pages/blog/[id].vue new file mode 100644 index 0000000..38c9c2f --- /dev/null +++ b/pages/blog/[id].vue @@ -0,0 +1,580 @@ + + + + + diff --git a/pages/blog/index.vue b/pages/blog/index.vue new file mode 100644 index 0000000..d110b56 --- /dev/null +++ b/pages/blog/index.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/pages/calendar.vue b/pages/calendar.vue new file mode 100644 index 0000000..163730c --- /dev/null +++ b/pages/calendar.vue @@ -0,0 +1,663 @@ + + + + + diff --git a/pages/contact.vue b/pages/contact.vue new file mode 100644 index 0000000..0a0e3d3 --- /dev/null +++ b/pages/contact.vue @@ -0,0 +1,446 @@ + + + + + diff --git a/pages/courses.vue b/pages/courses.vue new file mode 100644 index 0000000..019dfb6 --- /dev/null +++ b/pages/courses.vue @@ -0,0 +1,769 @@ + + + + + diff --git a/pages/customize.vue b/pages/customize.vue new file mode 100644 index 0000000..912f2c9 --- /dev/null +++ b/pages/customize.vue @@ -0,0 +1,995 @@ +