commit a25f3a77cecf1243cb361ba72b996ddcb76d0f28 Author: 刘涛 Date: Sun Mar 22 21:57:35 2026 +0800 sync: 同步最新呼籁官网代码到仓库 Co-Authored-By: Claude Sonnet 4.6 diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..61166bc --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1 @@ +{"version":"0.0.1","configurations":[{"name":"hulai-website","runtimeExecutable":"npm","runtimeArgs":["run","dev"],"port":3000}]} diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..706dbf9 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,117 @@ +{ + "permissions": { + "defaultMode": "bypassPermissions", + "allow": [ + "Bash(npx nuxi:*)", + "Bash(NITRO_PRESET=static npx nuxi generate)", + "Bash(npm install:*)", + "Bash(pnpm approve-builds:*)", + "Bash(pnpm config:*)", + "Bash(python3 -c \":*)", + "Bash(npx esbuild:*)", + "Bash(kill %1)", + "Bash(pnpm list:*)", + "Bash(2)", + "mcp__Claude_Preview__preview_start", + "Skill(update-config)", + "Skill(update-config:*)", + "WebSearch", + "Bash(python3 -m venv venv)", + "Bash(source venv/bin/activate)", + "Bash(pip install:*)", + "Bash(mysql -u root -p123456 -e \"SELECT 1\")", + "Bash(brew list:*)", + "Bash(/usr/local/mysql/bin/mysql --version)", + "Bash(/opt/homebrew/bin/mysql --version)", + "Bash(brew install:*)", + "Bash(brew services:*)", + "Bash(/opt/homebrew/bin/mysql -u root -e \"SELECT 1 AS test\")", + "Bash(/opt/homebrew/bin/mysql -u root -e \"CREATE DATABASE IF NOT EXISTS hulai_admin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci\")", + "Bash(python -m scripts.create_admin_user)", + "Bash(python -m scripts.migrate_json_to_db)", + "Bash(pkill -f \"uvicorn app.main\")", + "Bash(curl -s -X POST http://localhost:8000/api/auth/login -H \"Content-Type: application/json\" -d '{\"\"username\"\":\"\"admin\"\",\"\"password\"\":\"\"admin123\"\"}')", + "Bash(ls -la /Users/liutao/Desktop/hulai-website/public/images/*.png)", + "Bash(ls -la /Users/liutao/Desktop/hulai-website/public/images/*.jpg)", + "Bash(xargs ls:*)", + "Bash(find /Users/liutao/Desktop/hulai-admin-web/src/views -type f -name *.vue)", + "Bash(find /Users/liutao/Desktop/hulai-website/app/pages -type f -name *.vue)", + "Bash(grep -n \"useSEO\" /Users/liutao/Desktop/hulai-website/pages/*.vue)", + "Bash(grep -n \"useJsonLd\" /Users/liutao/Desktop/hulai-website/pages/*.vue)", + "Bash(grep -r \"mascot\\\\|吉祥物\" /Users/liutao/Desktop/hulai-admin-web/src --include=*.vue --include=*.js)", + "Read(//Users/liutao/Library/Application Support/Claude/local-agent-mode-sessions/skills-plugin/835ce9e1-3c5b-48dd-a4ce-3aa6de03ff1a/b5086808-e3f6-4da5-89f5-c6389c0bdcd7/skills/docx/**)", + "Bash(pandoc \"/Users/liutao/Desktop/五天四晚 森林版.docx\" -o /tmp/forest_5d4n.md)", + "Bash(python scripts/office/unpack.py \"/Users/liutao/Desktop/五天四晚 森林版.docx\" /tmp/forest_docx_unpacked/)", + "Bash(python3 scripts/office/unpack.py \"/Users/liutao/Desktop/五天四晚 森林版.docx\" /tmp/forest_docx_unpacked/)", + "Bash(python3 -c \"from PIL import Image; print\\(''Pillow available''\\)\")", + "Bash(python3:*)", + "Bash(dest=\"/Users/liutao/Desktop/呼籁智库/02_产品资料/旅行产品/额吉的故乡V9/额吉的故乡V9·5天4晚 森林版/images/forest-days\")", + "Bash(cp \"/Users/liutao/Desktop/5 天 4 晚森林版/第三天_副本/2.jpg\" \"$dest/d3-new-1.jpg\")", + "Bash(cp \"/Users/liutao/Desktop/5 天 4 晚森林版/第三天_副本/4.jpg\" \"$dest/d3-new-2.jpg\")", + "Bash(cp \"/Users/liutao/Desktop/5 天 4 晚森林版/第三天_副本/6.jpg\" \"$dest/d3-new-3.jpg\")", + "Bash(cp \"/Users/liutao/Desktop/5 天 4 晚森林版/第三天_副本/9be57a64c8a9f614a2961916f2e828d1_origin\\(1\\).jpg\" \"$dest/d3-new-4.jpg\")", + "Bash(chmod +x \"/Users/liutao/Desktop/呼籁智库/09_部署工具包/智库工具箱.sh\")", + "Bash(chmod +x \"/Users/liutao/Desktop/呼籁智库/09_部署工具包/启动工作台.command\")", + "Bash(bash 智库工具箱.sh)", + "Bash(chmod +x \"/Users/liutao/Desktop/呼籁智库/09_部署工具包/每日晨报.sh\")", + "Bash(chmod +x \"/Users/liutao/Desktop/呼籁智库/09_部署工具包/每日晨报.command\")", + "Bash(bash \"/Users/liutao/Desktop/呼籁智库/09_部署工具包/每日晨报.sh\")", + "Bash(done)", + "Bash(find /Users/liutao/Desktop/呼籁智库 -name *小红书* -o -name *笔记* -o -name *种草* -o -name *草原笔记*)", + "Bash(find /Users/liutao/Desktop/呼籁智库/04_实战产出 -name *.md -newer /Users/liutao/Desktop/呼籁智库/04_实战产出/2026-03-10_首战夜班)", + "Bash(sort -t/ -k8)", + "Bash(pkill -f \"工作台服务\")", + "Bash(find /Users/liutao/Desktop/hulai-website/.nuxt -name *route* -o -name *page*)", + "Bash(wc -l /Users/liutao/Desktop/hulai-website/data/*.json)", + "Bash(node -e \"JSON.parse\\(require\\(''fs''\\).readFileSync\\(''data/autumn-products.json'',''utf8''\\)\\); console.log\\(''JSON is valid''\\)\")", + "Bash(sips -g pixelWidth -g pixelHeight /Users/liutao/Desktop/hulai-website/public/images/seasons/summer-hero.jpg)", + "Bash(sips -g pixelWidth -g pixelHeight \"/Users/liutao/Desktop/呼籁智库/02_产品资料/旅行产品/额吉的故乡V9/额吉的故乡-6天5晚标准版/images/generated-1772790409231.png\")", + "Bash(mysql -u root -e \"SELECT 1\")", + "Read(//Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/bin/**)", + "Bash(find /Users/liutao/Desktop/hulai-admin-api -name python* -path */bin/*)", + "Bash(./venv/bin/python -m scripts.migrate_json_to_db)", + "Bash(mysql -u root hulai_admin -e \"SELECT COUNT\\(*\\) as cnt FROM seasonal_product_versions; SELECT COUNT\\(*\\) as cnt FROM seasonal_product_highlights; SELECT COUNT\\(*\\) as cnt FROM winter_camp_itinerary; SELECT COUNT\\(*\\) as cnt FROM destination_dimensions;\")", + "Bash(mysql -u root hulai_admin -e \"SELECT season, COUNT\\(*\\) FROM seasonal_product_versions GROUP BY season;\")", + "Bash(curl -s http://localhost:8000/openapi.json)", + "Bash(./venv/bin/python -c \":*)", + "Bash(__NEW_LINE_0e947b95cc8360a8__ echo:*)", + "Bash(pandoc \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/统一修改/额吉的故乡V9修改 统一内容.docx\" -o /tmp/tongyi_content.md)", + "Read(//tmp/**)", + "Bash(find /Users/liutao/Desktop/hulai-website/components -name \"*orm\\\\|Form\\\\|Input\\\\|Form\" -type f)", + "Bash(node -e \"const d = require\\(''./data/blog.json''\\); console.log\\(''Articles:'', d.articles.length\\); d.articles.forEach\\(a => console.log\\('' -'', a.id, ''|'', a.category\\)\\)\")", + "Bash(find /Users/liutao/Desktop/hulai-website -name sitemap* -o -name *schema*)", + "Bash(node -e \":*)", + "Bash(grep -l useScrollReveal /Users/liutao/Desktop/hulai-website/pages/*.vue /Users/liutao/Desktop/hulai-website/pages/**/*.vue)", + "mcp__Claude_in_Chrome__tabs_context_mcp", + "Bash(npm run:*)", + "Bash(npx nuxt:*)", + "Bash(echo \"BUILD_EXIT_CODE: $?\")", + "Bash(cp \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/8.2小蒙马白桦林休息地.jpg\" \"/Users/liutao/Desktop/呼籁智库/02_产品资料/旅行产品/额吉的故乡V9/额吉的故乡-7天6晚标准版/images/亲子版/第三天/白桦林营地.jpg\")", + "Bash(cp \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/风车公路-1.jpg\" \"/Users/liutao/Desktop/呼籁智库/02_产品资料/旅行产品/额吉的故乡V9/额吉的故乡-7天6晚标准版/images/亲子版/第七天/风车公路.jpg\")", + "Bash(find /Users/liutao/Desktop/hulai-website -maxdepth 2 -not -path */node_modules/* -not -path */.nuxt/* -not -path */.output/* -type d)", + "Bash(grep -n \"useJsonLd\\\\|TouristAttraction\\\\|schema\" /Users/liutao/Desktop/hulai-website/pages/destinations/[id].vue)", + "Bash(pandoc \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/5天4晚 /5 天 4 晚草原版与森林版修改.docx\" -o /tmp/5d4n_changes.md)", + "Bash(python3 -c \"import zipfile; z=zipfile.ZipFile\\(''/Users/liutao/Desktop/额吉的故乡V9 修改内容/5天4晚 /5 天 4 晚草原版与森林版修改.docx''\\); import xml.etree.ElementTree as ET; tree=ET.parse\\(z.open\\(''word/document.xml''\\)\\); root=tree.getroot\\(\\); ns={''w'':''http://schemas.openxmlformats.org/wordprocessingml/2006/main''}; [print\\(''''.join\\(t.text or '''' for t in p.findall\\(''.//w:t'',ns\\)\\)\\) for p in root.findall\\(''.//w:p'',ns\\)]\")", + "Bash(find \"/Users/liutao/Desktop/额吉的故乡V9 修改内容\" -type f \\\\\\( -name \"*.jpg\" -o -name \"*.jpeg\" -o -name \"*.png\" \\\\\\) -exec ls -lt {} +)", + "Bash(find /Users/liutao/Downloads /Users/liutao/Desktop -maxdepth 4 -type f \\\\\\(-name *.jpg -o -name *.jpeg -o -name *.png \\\\\\) -newer '/Users/liutao/Desktop/额吉的故乡V9 修改内容/cf01c4cd7b1d74c86715b5a8f88e210c_compress.jpeg')", + "Bash(ls \"/Users/liutao/Desktop/呼籁智库/02_产品资料/旅行产品/额吉的故乡V9/额吉的故乡-6天5晚标准版/\"*.pen)", + "Bash(pandoc \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/统一修改/额吉的故乡V9修改 统一内容.docx\" -o /tmp/unified_changes.md)", + "Bash(find /Users/liutao/Desktop -name *室韦* -o -name *蒙兀*)", + "Bash(ls \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/\"*.jpg \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/\"*.jpeg \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/\"*.png \"/Users/liutao/Desktop/额吉的故乡V9 修改内容/\"*.JPG)", + "Bash(curl -s -o /dev/null -w \"%{http_code}\" \"http://localhost:3000/\")", + "Bash(grep -r \"tldr\\\\|TldrBlock\\\\|PageTldr\\\\|page-tldr\" /Users/liutao/Desktop/hulai-website/components/ --include=*.vue -l)", + "Bash(head -5 grep -r \"tldr\\\\|TldrBlock\\\\|PageTldr\\\\|page-tldr\" /Users/liutao/Desktop/hulai-website/pages/ --include=*.vue -l)", + "Bash(head -20 grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/stories/index.vue)", + "Bash(find /Users/liutao/Desktop/hulai-website -not -path */node_modules/* -not -path */.output/* -not -path */.nuxt/* -type f)", + "Bash(head -20 grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/winter-camp.vue)", + "Bash(grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/products/[id].vue)", + "Bash(head -20 grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/products/autumn.vue)", + "Bash(head -15 grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/products/winter.vue)", + "Bash(grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/blog/[id].vue)", + "Bash(head -20 grep -n \"page-tldr\\\\|page-hero\\\\|\" /Users/liutao/Desktop/hulai-website/pages/destinations/[id].vue)", + "Bash(head -10 grep -n \"useJsonLd\\\\|useOrganizationSchema\\\\|useBreadcrumb\\\\|useWebPage\\\\|useFAQPage\" /Users/liutao/Desktop/hulai-website/pages/contact.vue)", + "Bash(curl -s -o /dev/null -w \"%{http_code}\" http://localhost:3000/selector)", + "Bash(curl -s -o /dev/null -w \"%{http_code}\" http://localhost:3000/)" + ] + } +} diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..6eb57b6 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +# 企业微信群机器人 Webhook Key(可选) +# 配置后,每次表单提交会实时推送到企业微信群 +# 在企业微信群 → 群设置 → 群机器人 → 添加机器人 → 复制 Webhook 地址中的 key 参数 +WECOM_WEBHOOK_KEY= + +# 示例(key 是 URL 中 ?key= 后面的部分): +# Webhook 完整地址:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +# WECOM_WEBHOOK_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..63f5dc4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Dependencies +node_modules/ + +# Nuxt build +.nuxt/ +.output/ +dist/ + +# Environment +.env +.env.* +!.env.example + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Logs +*.log +npm-debug.log* + +# Lock files (keep one) +# package-lock.json +# pnpm-lock.yaml diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..1c78caa --- /dev/null +++ b/.npmrc @@ -0,0 +1,3 @@ +onlyBuiltDependencies: + - "@parcel/watcher" + - "esbuild" diff --git a/CMS-INTEGRATION.md b/CMS-INTEGRATION.md new file mode 100644 index 0000000..a6a5a11 --- /dev/null +++ b/CMS-INTEGRATION.md @@ -0,0 +1,597 @@ +# 呼籁旅行官网 — 后台对接方案(CMS Integration) + +> 本文档分析官网所有内容模块,标注哪些需要「写活」(后台可增删改查),哪些是固定结构不需要动态化,以及推荐的数据库设计和对接方式。 + +--- + +## 一、内容动态化分级 + +### 第一优先级:高频更新(运营同学日常操作) + +| 模块 | 当前文件 | 操作类型 | 更新频率 | 说明 | +|------|---------|---------|---------|------| +| **客户评价** | `reviews.json` | 增、改、删 | 每周 | 每次收到好评都要加,是最高频的更新 | +| **FAQ问答** | `faq.json` | 增、改、删 | 每月 | 客户常问的问题会变化,需要随时补充和调整 | +| **联系方式** | `contact.json` | 改 | 偶尔 | 微信号、电话、邮箱可能变更 | +| **SEO信息** | `seo.json` | 改 | 偶尔 | 优化标题和描述以提升搜索排名 | + +### 第二优先级:季节性更新(产品经理/罗盘操作) + +| 模块 | 当前文件 | 操作类型 | 更新频率 | 说明 | +|------|---------|---------|---------|------| +| **产品版本** | `products.json → versions` | 增、改、删 | 每季 | 产品迭代到V10、新增冬季版等 | +| **小蒙马夏令营** | `products.json → summerCamp` | 改 | 每年 | 年龄、活动、定位调整 | +| **选择指南** | `products.json → selectionGuide` | 改 | 每季 | 新产品上线后需要更新推荐逻辑 | +| **定价说明** | `products.json → pricingPhilosophy` | 改 | 偶尔 | 价格策略调整时 | +| **产品叙事** | `products.json → narrative` | 改 | 偶尔 | 品牌定位调整时 | + +### 第三优先级:低频变更(品牌层面) + +| 模块 | 当前文件 | 操作类型 | 更新频率 | 说明 | +|------|---------|---------|---------|------| +| **品牌信息** | `brand.json` | 改 | 极少 | slogan、信任数据、差异化卖点 | +| **关于我们** | `about.json` | 改 | 极少 | 品牌故事、子公司、资质、团队、文化 | +| **导航** | `navigation.json` | 改 | 极少 | 新增/调整导航页面 | + +### 不需要动态化(代码层面) + +| 项目 | 说明 | +|------|------| +| 页面结构/布局 | Vue组件,需开发介入 | +| 样式/配色 | Less变量,需开发介入 | +| JSON-LD结构化数据 | 自动从内容数据生成,无需单独管理 | +| sitemap.xml | 只有页面增减时才需要改 | +| robots.txt | 基本不变 | + +--- + +## 二、每个JSON文件的字段级分析 + +### 1. reviews.json(评价管理 — 最高频) + +``` +后台需要的功能: +✅ 新增评价(上传截图 + 填写文字) +✅ 编辑评价 +✅ 删除评价 +✅ 调整排序 +✅ 修改汇总数据(总数、好评率、关键词) +✅ 管理筛选标签(场景、关心点) + +字段说明: +summary: + - totalCount: number → 后台可改(或自动计算) + - approvalRate: string → 后台可改 + - keywords: string[] → 后台可增删 + +items[]: + - id: number → 自动生成 + - nickname: string → 后台填写 + - travelDate: string → 后台填写(如"2025年7月") + - productVersion: string → 后台选择(关联产品列表) + - screenshot: string → 后台上传图片,存储路径 + - content: string → 后台填写(与截图内容一致,供AI抓取) + - scenes: string[] → 后台多选标签(带小孩/家庭游/情侣/朋友/带老人...) + - concerns: string[] → 后台多选标签(领队服务/行程安排/拍照超美/司机服务...) +``` + +### 2. faq.json(问答管理 — 高频) + +``` +后台需要的功能: +✅ 新增分类 +✅ 在分类下新增/编辑/删除问答 +✅ 调整分类排序和问答排序 +✅ 管理相关链接 + +字段说明: +categories[]: + - id: string → 自动生成 + - name: string → 后台填写(如"产品类") + - questions[]: + - id: string → 自动生成 + - question: string → 后台填写 + - answer: string → 后台填写(支持长文本) + - relatedLinks[]: → 后台配置 + - text: string → 链接文字 + - url: string → 链接地址(下拉选择站内页面) +``` + +### 3. products.json(产品管理 — 季节性) + +``` +后台需要的功能: +✅ 编辑产品叙事文案 +✅ 新增/编辑/删除/排序产品版本 +✅ 编辑夏令营信息 +✅ 编辑选择指南 +✅ 编辑定价说明 + +字段说明: +narrative: string → 后台富文本编辑 + +versions[]: + - id: string → 自动生成(如"v9-6d5n-family") + - name: string → 产品名称 + - days: number → 天数 + - nights: number → 晚数 + - audience: string → 适合人群 + - description: string → 产品描述 + - highlights: string[] → 亮点列表(可增删) + - tag: string → 标签(如"经典版"/"人气王") + +summerCamp: + - name: string → 名称 + - ageRange: string → 年龄范围 + - positioning: string → 定位描述 + - coreActivities: array → 核心活动列表 + - differenceFromV9: string → 与V9区别说明 + +selectionGuide: + - byVacationLength[]: → 按假期长度推荐 + - byChildAge[]: → 按孩子年龄推荐 + - byPreference[]: → 按偏好推荐 + (每条:condition + recommendation,recommendation关联产品id) + +pricingPhilosophy: string → 后台富文本编辑 +``` + +### 4. contact.json(联系方式 — 偶尔更新) + +``` +后台需要的功能: +✅ 编辑联系渠道信息 +✅ 新增/删除联系渠道 +✅ 上传/更换二维码图片 +✅ 编辑安全提示文案 + +字段说明: +channels[]: + - type: string → 渠道类型(wechat/phone/email/address等) + - label: string → 显示名称 + - value: string → 联系值(微信号/电话/邮箱/地址) + - qrImage: string|null → 二维码图片路径(可选) + - primary: boolean → 是否主要渠道 + - description: string → 补充说明 + +securityNotice: string → 安全提醒文案 +``` + +### 5. brand.json(品牌信息 — 极少更新) + +``` +后台需要的功能: +✅ 编辑品牌基础信息 +✅ 编辑信任数据 +✅ 编辑差异化卖点 + +字段说明: +name: string → 品牌名 +fullName: string → 公司全称 +domain: string → 域名 +url: string → 网址 +slogan: + - emotional: string → 情感化口号 + - functional: string → 功能化口号 +trustStats[]: + - value: string → 数值(如"8000+") + - unit: string → 单位(如"组") + - label: string → 标签(如"已服务家庭") + - attribution: string → 补充说明(可选) +differentiators[]: + - title: string → 卖点标题 + - description: string → 卖点描述 +icp: string → ICP备案号 +eContract: string → 电子合同资质 +``` + +### 6. about.json(关于我们 — 极少更新) + +``` +后台需要的功能: +✅ 编辑品牌故事 +✅ 管理子公司列表 +✅ 管理资质列表 +✅ 编辑团队和文化 + +字段说明: +story: + - sections[]: → 品牌故事段落 + - title/content → 标题+内容 + - foundingMoment: → 创始故事 + - scene/reflection → 场景+感悟 +subsidiaries[]: + - name: string → 公司名 + - role: string → 业务角色 +qualifications[]: + - name: string → 资质名称 + - detail: string → 具体说明 +team: + - summary: string → 团队概述 +culture: + - values[]: → 企业文化 + - word/expression → 关键词+表达 + - transparency: string → 透明度说明 +``` + +### 7. seo.json(SEO信息 — 偶尔优化) + +``` +后台需要的功能: +✅ 编辑每个页面的SEO信息 + +字段说明: +pages: + [pageKey]: → 页面标识(home/about/products/faq/reviews/contact) + - title: string → 页面标题(60字符内) + - description: string → 页面描述(155字符内) + - h1: string → 页面H1标题 + - ogImage: string → 社交分享图片 +``` + +### 8. navigation.json(导航 — 极少变更) + +``` +后台需要的功能: +✅ 编辑导航项(文字、链接) +✅ 调整排序 + +header[]: + - text: string → 导航文字 + - to: string → 链接地址 +footer[]: + - title: string → 分组标题 + - links[]: + - text/to → 链接文字+地址 +``` + +--- + +## 三、推荐的技术方案 + +### 方案 A:JSON文件 + 简易后台(推荐起步) + +**适合阶段**:现在 → 日均UV 1000以内 + +``` +架构: +┌──────────┐ ┌──────────────┐ ┌──────────────┐ +│ 后台页面 │ ──→ │ API (读写JSON) │ ──→ │ data/*.json │ +│ (Vue/React)│ │ (Node.js) │ │ (文件存储) │ +└──────────┘ └──────────────┘ └──────────────┘ + │ + ↓ 写完后触发 + ┌──────────────┐ + │ nuxi generate │ → 重新生成静态页面 + └──────────────┘ + +优点: +- 零数据库成本 +- 当前代码零改动,后台只操作JSON文件 +- 生成的还是静态页面,速度最快 +- 适合当前团队规模 + +缺点: +- 每次改内容需要重新 generate(约30秒) +- 多人同时编辑可能冲突 +``` + +### 方案 B:数据库 + API + SSR(推荐中期) + +**适合阶段**:有后台系统后 + +``` +架构: +┌──────────┐ ┌──────────────┐ ┌──────────────┐ +│ 后台页面 │ ──→ │ API Server │ ──→ │ 数据库 │ +│ │ │ (Node.js) │ │ (MySQL/PG) │ +└──────────┘ └──────────────┘ └──────────────┘ + │ + ↓ 同时提供 + ┌──────────────┐ + │ Nuxt SSR渲染 │ → 实时读数据库渲染 + └──────────────┘ + +改动点: +- nuxt.config.js: ssr改为true(当前已是),去掉prerender +- 页面中 import JSON → 改为 useFetch('/api/xxx') +- 新增 server/api/ 目录下的接口 +``` + +--- + +## 四、数据库设计(方案B用) + +### 表结构 + +```sql +-- 1. 评价表(最高频) +CREATE TABLE reviews ( + id INT PRIMARY KEY AUTO_INCREMENT, + nickname VARCHAR(50) NOT NULL, + travel_date VARCHAR(20), -- "2025年7月" + product_version VARCHAR(100), -- 关联产品名称 + screenshot_url VARCHAR(255), -- 截图CDN地址 + content TEXT NOT NULL, -- 评价文字(AI抓取用) + scenes JSON, -- ["带小孩", "家庭游"] + concerns JSON, -- ["领队服务", "行程安排"] + sort_order INT DEFAULT 0, -- 排序权重 + is_visible BOOLEAN DEFAULT TRUE, -- 是否显示 + created_at DATETIME DEFAULT NOW(), + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 2. 评价汇总表 +CREATE TABLE review_summary ( + id INT PRIMARY KEY DEFAULT 1, + total_count INT DEFAULT 0, + approval_rate VARCHAR(10), -- "98%" + keywords JSON, -- ["贴心", "孩子玩疯了"] + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 3. FAQ分类表 +CREATE TABLE faq_categories ( + id VARCHAR(50) PRIMARY KEY, -- "product" + name VARCHAR(50) NOT NULL, -- "产品类" + sort_order INT DEFAULT 0, + created_at DATETIME DEFAULT NOW() +); + +-- 4. FAQ问答表 +CREATE TABLE faq_questions ( + id VARCHAR(50) PRIMARY KEY, + category_id VARCHAR(50) NOT NULL, + question VARCHAR(200) NOT NULL, + answer TEXT NOT NULL, + related_links JSON, -- [{"text":"查看产品","url":"/products"}] + sort_order INT DEFAULT 0, + is_visible BOOLEAN DEFAULT TRUE, + created_at DATETIME DEFAULT NOW(), + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW(), + FOREIGN KEY (category_id) REFERENCES faq_categories(id) +); + +-- 5. 产品版本表 +CREATE TABLE products ( + id VARCHAR(50) PRIMARY KEY, -- "v9-6d5n-family" + name VARCHAR(100) NOT NULL, + days INT, + nights INT, + audience VARCHAR(100), + description TEXT, + highlights JSON, -- ["亮点1", "亮点2"] + tag VARCHAR(20), -- "人气王" + sort_order INT DEFAULT 0, + is_visible BOOLEAN DEFAULT TRUE, + created_at DATETIME DEFAULT NOW(), + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 6. 夏令营信息表 +CREATE TABLE summer_camp ( + id INT PRIMARY KEY DEFAULT 1, + name VARCHAR(100), + age_range VARCHAR(20), + positioning TEXT, + core_activities JSON, + difference_from_v9 TEXT, + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 7. 联系渠道表 +CREATE TABLE contact_channels ( + id INT PRIMARY KEY AUTO_INCREMENT, + type VARCHAR(20) NOT NULL, -- "wechat"/"phone"/"email"... + label VARCHAR(50) NOT NULL, + value VARCHAR(200) NOT NULL, + qr_image_url VARCHAR(255), + is_primary BOOLEAN DEFAULT FALSE, + description VARCHAR(200), + sort_order INT DEFAULT 0, + created_at DATETIME DEFAULT NOW() +); + +-- 8. 品牌信息表(单行表) +CREATE TABLE brand_info ( + id INT PRIMARY KEY DEFAULT 1, + name VARCHAR(50), + full_name VARCHAR(100), + domain VARCHAR(50), + slogan_emotional VARCHAR(200), + slogan_functional VARCHAR(200), + trust_stats JSON, -- 4个信任数据 + differentiators JSON, -- 5个差异化卖点 + icp VARCHAR(50), + e_contract VARCHAR(100), + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 9. 关于我们(单行表) +CREATE TABLE about_info ( + id INT PRIMARY KEY DEFAULT 1, + story JSON, -- 品牌故事结构 + subsidiaries JSON, -- 12家子公司 + qualifications JSON, -- 资质列表 + team JSON, -- 团队介绍 + culture JSON, -- 文化价值观 + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 10. SEO信息表 +CREATE TABLE seo_pages ( + page_key VARCHAR(20) PRIMARY KEY, -- "home"/"about"/... + title VARCHAR(100), + description VARCHAR(200), + h1 VARCHAR(100), + og_image VARCHAR(255), + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 11. 导航表 +CREATE TABLE navigation ( + id INT PRIMARY KEY AUTO_INCREMENT, + position ENUM('header', 'footer') NOT NULL, + parent_title VARCHAR(50), -- footer分组标题,header为NULL + text VARCHAR(50) NOT NULL, + url VARCHAR(100) NOT NULL, + sort_order INT DEFAULT 0 +); + +-- 12. 内容文案表(产品叙事、定价说明等长文本) +CREATE TABLE content_blocks ( + block_key VARCHAR(50) PRIMARY KEY, -- "product_narrative" / "pricing_philosophy" / "security_notice" + content TEXT NOT NULL, + updated_at DATETIME DEFAULT NOW() ON UPDATE NOW() +); + +-- 13. 选择指南表 +CREATE TABLE selection_guide ( + id INT PRIMARY KEY AUTO_INCREMENT, + guide_type ENUM('vacation_length', 'child_age', 'preference'), + condition_text VARCHAR(100), -- "3-4天假期" + recommendation VARCHAR(50), -- 关联产品id + sort_order INT DEFAULT 0 +); +``` + +### 图片存储 + +``` +推荐方案: +- 评价截图、二维码、Logo等 → 对象存储(阿里云OSS / 腾讯云COS) +- 后台上传图片 → API接收 → 上传到OSS → 返回CDN地址 +- 数据库只存URL,不存文件 + +目录规划: +/hulai-oss/ + ├── reviews/ 评价截图 + ├── qrcodes/ 二维码图片 + ├── logo/ 品牌Logo + └── og/ 社交分享图 +``` + +--- + +## 五、后台管理界面建议 + +### 后台菜单结构 + +``` +📊 数据看板 + - 内容统计(评价数、FAQ数、产品数) + +📝 内容管理 + ├── 客户评价 → 列表 + 新增 + 编辑 + 删除 + 拖拽排序 + ├── 常见问答 → 分类管理 + 问答列表 + 拖拽排序 + ├── 旅行产品 → 产品列表 + 编辑 + 夏令营 + 选择指南 + └── 联系方式 → 渠道列表 + 编辑 + 上传二维码 + +🏢 品牌设置 + ├── 品牌信息 → 基础信息 + 信任数据 + 差异化卖点 + ├── 关于我们 → 品牌故事 + 子公司 + 资质 + 团队 + 文化 + └── SEO设置 → 6个页面的标题/描述/H1 + +⚙️ 系统设置 + ├── 导航管理 → 页头/页脚导航编辑 + └── 发布管理 → 一键重新生成静态页面 +``` + +### 后台技术栈建议 + +``` +推荐: +- 前端:Vue 3 + Element Plus(与官网技术栈统一) +- 后端:Node.js + Express/Koa(或 Nuxt server routes) +- 数据库:MySQL 8.0(阿里云RDS) +- 图片:阿里云OSS + CDN +- 部署:同一台服务器,后台走 /admin 路径 + +对接方式: +1. 后台修改数据 → 写入数据库 +2. 点击「发布」 → 触发 nuxi generate +3. 生成的静态文件部署到CDN/Nginx + +或者(更简单的过渡方案): +1. 后台修改数据 → 直接修改 data/*.json 文件 +2. 点击「发布」 → 触发 nuxi generate +3. 无需数据库,JSON就是数据库 +``` + +--- + +## 六、当前代码对接友好度评估 + +### 已经写活的(直接能对接) + +| 内容 | 数据源 | 对接方式 | +|------|-------|---------| +| 所有评价 | `reviews.json` | 替换为API即可 | +| 所有FAQ | `faq.json` | 替换为API即可 | +| 所有产品 | `products.json` | 替换为API即可 | +| 所有联系方式 | `contact.json` | 替换为API即可 | +| 品牌信息 | `brand.json` | 替换为API即可 | +| 关于信息 | `about.json` | 替换为API即可 | +| SEO信息 | `seo.json` | 替换为API即可 | +| 导航 | `navigation.json` | 替换为API即可 | + +### 对接时的改动量 + +``` +每个页面改动量很小,只需要把: + import data from '~/data/xxx.json' +改为: + const { data } = await useFetch('/api/xxx') + +大约 6个页面 + 3个组件(Header/Footer/MobileNav)= 9个文件 +每个文件改动 1-3 行代码 +总改动量:约30行代码 +``` + +### 评价图片已经对接友好 + +``` +当前:screenshot: "/images/reviews/review-001.jpg" (本地路径) +对接后:screenshot: "https://cdn.1814.love/reviews/review-001.jpg" (CDN地址) + +组件中用的是 :src="item.screenshot",路径换成CDN地址直接生效,零改动。 +``` + +--- + +## 七、给运营同学的速查表 + +### 现在(没有后台之前)怎么改内容 + +| 要改什么 | 找哪个文件 | 怎么改 | +|---------|----------|-------| +| 新增客户评价 | `data/reviews.json` | 在 `items` 数组里加一条,图片放到 `public/images/reviews/` | +| 修改FAQ问答 | `data/faq.json` | 找到对应问题直接改文字 | +| 修改产品信息 | `data/products.json` | 找到对应版本直接改 | +| 换微信号/电话 | `data/contact.json` | 找到对应渠道改 `value` | +| 改页面标题/描述 | `data/seo.json` | 找到对应页面改 | +| 改品牌口号 | `data/brand.json` | 改 `slogan` 下的文字 | +| 改关于我们 | `data/about.json` | 找到对应位置改 | + +**改完后**:需要运行 `npx nuxi generate` 重新生成页面,然后重新部署。 + +### 有后台之后怎么改 + +登录后台 → 找到对应模块 → 编辑 → 点击「发布」→ 完成 + +--- + +## 八、总结 + +``` +当前架构优势: +✅ 所有内容都在 8 个 JSON 文件里,结构清晰 +✅ 数据和展示完全分离,后台对接只需改数据源 +✅ 对接工作量极小(约30行代码改动) +✅ 可以分步走:先用JSON文件+手动generate,再上后台 + +建议路线图: +Phase 1(现在):JSON文件 + 手动维护 + nuxi generate +Phase 2(1-2月后):简易后台 + 读写JSON + 一键generate +Phase 3(业务增长后):数据库 + API + CDN图片 + SSR渲染 +``` diff --git a/README-HANDOFF.md b/README-HANDOFF.md new file mode 100644 index 0000000..664cc24 --- /dev/null +++ b/README-HANDOFF.md @@ -0,0 +1,582 @@ +# 呼籁旅行官网 - 后端对接 & 运营维护文档 + +> 域名:1814.love | 框架:Nuxt 3 SSG(静态站)| 语言:JavaScript + Vue 3 + Less + +--- + +## 一、项目概览 + +这是一个**纯静态网站**,没有后端API、没有数据库。所有内容都存放在 `/data/*.json` 文件中,修改JSON即可更新网站内容。 + +### 技术栈 +| 项目 | 说明 | +|------|------| +| 框架 | Nuxt 3(Vue 3) | +| 渲染方式 | SSG 静态生成(`npx nuxi generate`) | +| 样式 | Less | +| 部署产物 | `.output/public/` 目录,纯HTML/CSS/JS,丢到任何静态服务器即可 | + +### 部署流程 +```bash +# 1. 安装依赖(仅首次) +npm install + +# 2. 生成静态文件 +npx nuxi generate + +# 3. 部署目录 +.output/public/ # ← 这个目录就是最终产物,丢到nginx/CDN即可 + +# 4. 本地预览(可选) +npx serve .output/public +``` + +### 页面清单(共8页) +| 路径 | 页面 | 源文件 | +|------|------|--------| +| `/` | 首页 | `pages/index.vue` | +| `/about` | 关于我们 | `pages/about.vue` | +| `/products` | 产品线(额吉的故乡V9) | `pages/products.vue` | +| `/summer-camp` | 小蒙马夏令营 | `pages/summer-camp.vue` | +| `/guides` | 出行指南 | `pages/guides.vue` | +| `/faq` | 常见问答 | `pages/faq.vue` | +| `/reviews` | 客户评价 | `pages/reviews.vue` | +| `/contact` | 联系我们 | `pages/contact.vue` | + +--- + +## 二、内容维护指南(运营同学看这里) + +### 核心原则 +> **所有内容都在 `/data/` 目录的JSON文件里。** 打开文件,改引号里的文字,重新 generate 就行。不需要懂代码。 + +### 修改流程 +``` +1. 用任意文本编辑器打开 data/ 下的JSON文件 +2. 修改引号内的文字内容 +3. 保存文件 +4. 终端执行 npx nuxi generate +5. 将 .output/public/ 部署到服务器 +``` + +### ⚠️ JSON编辑注意事项 +- 所有内容必须在英文双引号 `"..."` 内 +- 内容中如果有双引号,要用 `\"` 转义 +- 最后一项后面**不要**加逗号 +- 换行用 `\n`,不要直接回车 +- 建议用 VS Code 编辑,会自动提示格式错误 + +--- + +## 三、数据文件详细说明 + +### 3.1 `data/brand.json` — 品牌基础信息 + +> 影响页面:首页、关于页、联系页 + +```json +{ + "name": "呼籁旅行", // 品牌名 + "fullName": "内蒙古呼籁文旅投资开发集团有限公司", // 公司全称 + "domain": "1814.love", // 域名 + "url": "https://1814.love", // 完整URL + "slogan": { + "emotional": "情感化品牌主张", // 首页大标题(情感层) + "functional": "呼伦贝尔家庭定制游·一家一单一车" // 功能层 + }, + "trustStats": [ // 首页信任数据条(4项) + { + "value": "10000+", // 数字 + "unit": "组", // 单位 + "label": "已服务家庭", // 标签 + "attribution": "来源说明(可选)" + } + ], + "differentiators": [ // 核心卖点(首页展示) + { + "title": "自有营地", // 卖点标题 + "description": "描述文字" // 详细说明 + } + ], + "legal": { // 备案信息(页脚展示) + "icp": "蒙ICP备2025XXXXX号-1" + } +} +``` + +**运营常改字段:** +- `trustStats[].value` — 更新服务家庭数等数字 +- `slogan.emotional` — 修改品牌主张 +- `differentiators[].description` — 更新卖点描述 + +--- + +### 3.2 `data/products.json` — 产品线 + +> 影响页面:产品页、首页产品预览、小蒙马页 + +```json +{ + "narrative": "产品线设计理念叙事文字...", + + "versions": [ // 额吉的故乡V9系列(6个版本) + { + "id": "v9-4d3n", // 唯一标识,不要改 + "name": "额吉的故乡V9·4天3晚", // 产品名称 + "days": 4, // 天数 + "nights": 3, // 晚数 + "audience": "假期有限的家庭", // 目标人群 + "description": "产品描述...", // 详细介绍 + "highlights": [ // 3个亮点 + "亮点1", + "亮点2", + "亮点3" + ], + "tag": "精华版" // 标签(显示在卡片上) + } + ], + + "summerCamp": { // 小蒙马夏令营 + "name": "小蒙马夏令营", + "positioning": "产品定位描述...", + "days": 6, + "nights": 5, + "sessions": { "2025": 11, "2026plan": 30 }, // 期数数据 + "principles": ["原则1", "原则2", "原则3", "原则4"], + "coreActivities": ["活动1", "活动2"], // 核心体验项目 + "itinerary": ["Day1 ...", "Day2 ..."], // 每日行程概览 + "differenceFromV9": "与V9的区别说明..." + }, + + "selectionGuide": { // 选择指南 + "byVacationLength": [...], // 按假期长度推荐 + "byChildAge": [...], // 按孩子年龄推荐 + "byPreference": [...] // 按偏好推荐 + }, + + "pricingPhilosophy": "价格透明说明..." +} +``` + +**运营常改字段:** +- `versions[].description` / `highlights` — 更新产品描述和亮点 +- `summerCamp` 整块 — 每年行程更新时修改 +- `summerCamp.sessions` — 更新期数数据 +- `summerCamp.itinerary` — 更新每日行程 +- `pricingPhilosophy` — 价格说明 + +--- + +### 3.3 `data/faq.json` — 常见问答(SEO最重要的页面) + +> 影响页面:FAQ页、Google/百度搜索结果(FAQ Schema) + +```json +{ + "categories": [ + { + "id": "product", // 分类ID,不要改 + "name": "产品类", // 分类名称 + "questions": [ + { + "id": "what-is-eqi", // 问题ID,不要改 + "question": "额吉的故乡是什么?", // 问题 + "answer": "回答内容...", // 答案(150-300字最佳) + "relatedLinks": [ // 相关链接 + { "text": "查看产品详情", "url": "/products" } + ] + } + ] + } + ] +} +``` + +**现有分类(5个,共20+个问答):** +| 分类ID | 名称 | 问答数 | +|--------|------|--------| +| product | 产品类 | 6 | +| preparation | 出行准备类 | 5 | +| trust | 信任类 | 5 | +| experience | 体验类 | 4 | +| popular | 高频咨询类 | 5 | + +**运营常改字段:** +- `questions[].answer` — 更新答案内容 +- 新增问答:在对应分类的 `questions` 数组末尾添加新对象 + +**新增一个FAQ示例:** +```json +{ + "id": "new-question-id", + "question": "新问题?", + "answer": "新答案...", + "relatedLinks": [ + { "text": "链接文字", "url": "/products" } + ] +} +``` + +--- + +### 3.4 `data/reviews.json` — 客户评价 + +> 影响页面:评价页、首页精选评价 + +```json +{ + "summary": { + "totalCount": 10000, // 总评价数 + "approvalRate": "98%", // 好评率 + "keywords": ["贴心", "孩子玩疯了"] // 高频关键词 + }, + "items": [ + { + "id": 1, // 序号(递增,不要重复) + "nickname": "圆满妈妈", // 昵称 + "travelDate": "2024年6月", // 出行时间 + "productVersion": "额吉的故乡V9·6天5晚", // 产品版本 + "screenshot": "/images/reviews/review-001.jpg", // 评价截图路径 + "content": "评价文字内容...", // 评价文字(与截图一致,供AI抓取) + "scenes": ["带小孩", "家庭游"], // 出行场景标签 + "concerns": ["领队服务", "行程安排"] // 关注点标签 + } + ] +} +``` + +**运营常改字段:** +- `summary.totalCount` — 更新总评价数 +- `items` — 添加新评价 + +**添加新评价步骤:** +1. 将评价截图命名为 `review-XXX.jpg`(XXX为序号如083) +2. 放入 `public/images/reviews/` 目录 +3. 在 `items` 数组末尾添加新评价对象 +4. 截图建议宽度不超过1600px + +**可用的 scenes 标签:** `带小孩`、`家庭游`、`闺蜜游`、`带老人`、`蜜月` +**可用的 concerns 标签:** `领队服务`、`行程安排`、`住宿品质`、`餐饮体验`、`亲子活动`、`拍照摄影`、`性价比` + +--- + +### 3.5 `data/about.json` — 关于我们 + +> 影响页面:关于页 + +```json +{ + "story": { + "title": "品牌故事标题", + "content": "品牌故事正文..." // 支持较长文本 + }, + "subsidiaries": [ // 旗下企业 + { + "name": "企业名称", + "role": "业务角色", + "established": "成立年份" + } + ], + "certifications": [ // 资质荣誉 + { + "name": "荣誉名称", + "detail": "详细说明", + "year": "2025" + } + ], + "trademarks": { ... }, // 商标信息 + "copyrights": [ ... ], // 版权信息 + "guarantees": [ // 服务保障 + { + "title": "保障标题", + "description": "保障说明" + } + ], + "xiaohongshu": { // 小红书数据 + "account": "Mr.小雷-呼籁旅行", + "followers": "9.6万+", + "likes": "26万+", + "awards": ["获奖列表"], + "description": "说明文字" + }, + "team": { + "serviceModel": "3管+1师+1队", + "description": "团队说明...", + "milestones": ["里程碑1", "里程碑2"] + }, + "culture": { + "values": [ + { "title": "真诚", "description": "说明" } + ] + } +} +``` + +**运营常改字段:** +- `subsidiaries` — 新增/调整子公司 +- `certifications` — 新增荣誉资质 +- `xiaohongshu` — 更新小红书数据(粉丝数、获赞数、荣誉) +- `team.milestones` — 添加团队新事件 + +--- + +### 3.6 `data/contact.json` — 联系方式 + +> 影响页面:联系页、页脚 + +```json +{ + "channels": [ + { + "type": "wechat", // 类型:wechat/mini-program/phone/address/email + "label": "微信客服", // 显示名 + "value": "hulai1814", // 值(微信号/电话/地址等) + "description": "说明文字", + "qrCode": "/images/qr-wechat.jpg", // 二维码图片(可选) + "primary": true // 是否主要渠道 + } + ], + "securityNotice": "安全提示文字..." +} +``` + +--- + +### 3.7 `data/seo.json` — 各页面SEO配置 + +> 影响:每个页面的标题、描述、搜索引擎展示 + +```json +{ + "pages": { + "home": { + "title": "呼籁旅行 - 呼伦贝尔家庭定制游·一家一单一车", // 浏览器标签页标题 + "description": "搜索引擎展示的描述文字...", // 搜索结果摘要 + "h1": "呼籁旅行 — 呼伦贝尔家庭定制游", // 页面大标题 + "ogImage": "/images/og-home.jpg" // 社交分享图 + }, + "about": { ... }, + "products": { ... }, + "summer-camp": { ... }, + "faq": { ... }, + "reviews": { ... }, + "guides": { ... }, + "contact": { ... } + } +} +``` + +**运营常改字段:** +- `title` — 控制搜索结果标题(建议60字以内) +- `description` — 控制搜索结果描述(建议150字以内) + +--- + +### 3.8 `data/navigation.json` — 导航菜单 + +> 影响:顶部导航栏、底部链接 + +```json +{ + "header": [ // 顶部导航(按顺序展示) + { "text": "首页", "to": "/" }, + { "text": "关于我们", "to": "/about" }, + { "text": "产品线", "to": "/products" }, + { "text": "小蒙马夏令营", "to": "/summer-camp" }, + { "text": "出行指南", "to": "/guides" }, + { "text": "常见问答", "to": "/faq" }, + { "text": "客户评价", "to": "/reviews" }, + { "text": "联系我们", "to": "/contact" } + ], + "footer": [ // 底部分组链接 + { + "title": "了解呼籁", + "links": [ + { "text": "关于我们", "to": "/about" } + ] + } + ] +} +``` + +--- + +### 3.9 `data/versions.json` — 产品版本迭代历史 + +> 影响页面:产品页(版本进化时间线、V8→V9对比等) + +```json +{ + "stats": { // 统计数据 + "totalIterations": 9, + "totalUpgrades": "50+", + "firstVersion": "2023年3月", + "latestVersion": "2026年" + }, + "upgrades2026": [ // 当年核心升级项 + { + "title": "升级标题", + "description": "升级描述" + } + ], + "highlights": [ // V9亮点 + { "title": "亮点", "description": "说明" } + ], + "compareV8V9": [ // V8→V9对比 + { "category": "分类", "v8": "旧版", "v9": "新版" } + ], + "timeline": [ // 历史版本时间线 + { + "version": "V1", + "date": "2023.03", + "title": "标题", + "changes": [ + { "type": "add", "content": "新增内容" } + ] + } + ], + "philosophy": "产品哲学...", + "quote": { "text": "引用", "author": "作者" } +} +``` + +--- + +### 3.10 `data/guides.json` — 出行指南 + +> 影响页面:出行指南页 + +```json +{ + "sections": [ + { + "id": "clothing", + "title": "穿搭指南", + "subtitle": "副标题", + "months": [ // 按月份的穿搭建议 + { + "month": "5月", + "tempRange": "白天5~26°C / 夜间-6~8°C", + "style": "穿搭风格", + "items": ["具体衣物1", "具体衣物2"], + "tip": "小贴士" + } + ] + }, + { + "id": "activities", + "title": "活动安全须知", + "items": [ + { + "name": "骑马穿越", + "rules": ["规则1", "规则2"], + "notes": "注意事项" + } + ] + } + ] +} +``` + +--- + +## 四、图片资源管理 + +### 目录结构 +``` +public/images/ +├── logo.png # 网站Logo +├── logo-square.png # 方形Logo +├── mascot-sticker-qr.png # 吉祥物贴纸 +├── mascot/ # 吉祥物图片 +│ ├── mascot-front.png # 正面 +│ ├── mascot-banner.png # 横幅 +│ └── xiaomengma.png # 小蒙马 +├── summer-camp/ # 小蒙马夏令营照片(4张) +│ ├── river-banner.jpg +│ ├── grassland-group.jpg +│ ├── birch-group.jpg +│ └── camp-graduation.jpg +├── team/ # 团队照片(8张) +│ ├── hero-family.jpg +│ ├── hero-grassland.jpg +│ ├── guide-group.jpg +│ ├── guide-training.jpg +│ ├── campsite-team.jpg +│ ├── ranch-store.jpg +│ ├── route-survey.jpg +│ └── route-survey-2025.jpg +├── xiaohongshu/ # 小红书相关(2张) +│ ├── storefront.jpg +│ └── profile.jpg +└── reviews/ # 评价截图(82张) + ├── review-001.jpg + ├── review-002.jpg + └── ... review-082.jpg +``` + +### 添加图片规范 +- **格式**:JPG(照片)、PNG(Logo/图标) +- **尺寸**:宽度不超过1600px +- **命名**:英文小写+连字符,如 `new-photo.jpg` +- **路径**:代码中引用时用 `/images/xxx.jpg`(以 `/` 开头的绝对路径) + +--- + +## 五、sitemap 自动生成 + +文件位置:`server/routes/sitemap.xml.js` + +如果**新增页面**,需要在这个文件的 `pages` 数组中添加: +```javascript +{ url: '/new-page', priority: '0.8', changefreq: 'monthly' } +``` + +当前已配置的页面: +| URL | 优先级 | 更新频率 | +|-----|--------|---------| +| `/` | 1.0 | weekly | +| `/faq` | 0.95 | weekly | +| `/products` | 0.9 | weekly | +| `/about` | 0.85 | monthly | +| `/summer-camp` | 0.85 | monthly | +| `/reviews` | 0.8 | weekly | +| `/contact` | 0.8 | monthly | +| `/guides` | 0.8 | monthly | + +--- + +## 六、常见运营操作速查 + +### 更新信任数据(服务家庭数等) +→ 改 `data/brand.json` 的 `trustStats` + +### 添加新客户评价 +→ 1. 截图放 `public/images/reviews/` +→ 2. 在 `data/reviews.json` 的 `items` 末尾加新对象 + +### 更新小蒙马夏令营行程 +→ 改 `data/products.json` 的 `summerCamp` 部分 + +### 添加新FAQ +→ 在 `data/faq.json` 对应分类的 `questions` 数组末尾加新对象 + +### 更新小红书数据 +→ 改 `data/about.json` 的 `xiaohongshu` 部分 + +### 修改页面SEO标题/描述 +→ 改 `data/seo.json` 对应页面的 `title` 和 `description` + +### 调整导航菜单 +→ 改 `data/navigation.json` + +--- + +## 七、注意事项 + +1. **每次改完JSON必须重新 generate** — 这是静态站,改JSON不会自动生效 +2. **不要删除 `node_modules/`** — 删了要重新 `npm install` +3. **JSON格式很严格** — 少一个逗号、多一个逗号都会报错,建议用 VS Code 编辑 +4. **图片要放在 `public/images/` 下** — 不要放在其他位置 +5. **缺少 favicon.ico** — 需要补一个放在 `public/` 目录下 +6. **部署只需要 `.output/public/`** — 这个目录是纯静态HTML,不需要Node.js运行环境 diff --git a/app.vue b/app.vue new file mode 100644 index 0000000..f8eacfa --- /dev/null +++ b/app.vue @@ -0,0 +1,5 @@ + diff --git a/assets/less/global.less b/assets/less/global.less new file mode 100644 index 0000000..e48968d --- /dev/null +++ b/assets/less/global.less @@ -0,0 +1,222 @@ +// ============================================ +// 呼籁旅行官网 - 全局样式 +// ============================================ + +// ---------- 重置 ---------- + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +html { + font-size: @font-size-base; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + scroll-behavior: smooth; +} + +body { + font-family: @font-family-base; + font-size: @font-size-base; + line-height: @line-height-base; + color: @color-text-primary; + background-color: @color-bg-white; +} + +// ---------- 排版 ---------- + +h1, h2, h3, h4, h5, h6 { + font-weight: @font-weight-bold; + line-height: @line-height-tight; + color: @color-text-primary; +} + +h1 { + font-size: 28px; + + .respond-md({ + font-size: @font-size-hero; + }); + + .respond-lg({ + font-size: @font-size-display; + }); +} + +h2 { + font-size: @font-size-xl; + + .respond-md({ + font-size: @font-size-2xl; + }); +} + +h3 { + font-size: @font-size-lg; + + .respond-md({ + font-size: @font-size-xl; + }); +} + +p { + margin-bottom: @space-md; + color: @color-text-secondary; +} + +a { + color: @color-primary; + text-decoration: none; + transition: color @transition-fast; + + &:hover { + color: @color-primary-light; + } +} + +ul, ol { + list-style: none; +} + +img { + max-width: 100%; + height: auto; + display: block; +} + +// ---------- 容器 ---------- + +.container { + .container(); +} + +// ---------- 段落区块 ---------- + +.section { + .section-padding(); +} + +.section--gray { + background-color: @color-bg-gray; +} + +.section--warm { + background-color: @color-bg-warm; +} + +.section--green { + background-color: @color-primary-bg; +} + +.section--accent { + background-color: @color-accent-bg; +} + +.section--dark { + background-color: @color-primary-dark; + color: rgba(255, 255, 255, 0.9); +} + +// ---------- 辅助类 ---------- + +.text-center { + text-align: center; +} + +.text-left { + text-align: left; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border-width: 0; +} + +// ---------- 页面过渡 ---------- + +.page-enter-active, +.page-leave-active { + transition: opacity @transition-base; +} + +.page-enter-from, +.page-leave-to { + opacity: 0; +} + +// ---------- 滚动入场动画 ---------- + +.reveal { + opacity: 0; + transform: translateY(16px); + transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1); + + &.is-visible { + opacity: 1; + transform: translateY(0); + } +} + +// 子元素交错入场(用于网格) +.reveal-stagger { + .reveal(); + + &:nth-child(2) { transition-delay: 0.08s; } + &:nth-child(3) { transition-delay: 0.16s; } + &:nth-child(4) { transition-delay: 0.24s; } + &:nth-child(5) { transition-delay: 0.32s; } + &:nth-child(6) { transition-delay: 0.40s; } +} + +// ---------- 页面摘要 TL;DR(GEO/SEO 语义摘要块)---------- +// 每个页面开头的精准摘要,帮助 AI 和搜索引擎理解"这个页面回答了什么问题" +.page-tldr { + background: @color-bg-gray; + border-bottom: 1px solid @color-border; + + .page-tldr-inner { + max-width: 800px; + margin: 0 auto; + padding: @space-lg @space-xl; + border-left: 3px solid @color-primary; + background: @color-bg-white; + border-radius: 0 @border-radius-md @border-radius-md 0; + + p { + font-size: @font-size-sm; + color: @color-text-secondary; + line-height: @line-height-loose; + margin: 0; + } + } + + // 容器内居中 + 内边距 + .container { + padding-top: @space-md; + padding-bottom: @space-md; + } +} + +// ---------- 无障碍:减少动效偏好 ---------- + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + scroll-behavior: auto !important; + } +} diff --git a/assets/less/mixins.less b/assets/less/mixins.less new file mode 100644 index 0000000..41ab855 --- /dev/null +++ b/assets/less/mixins.less @@ -0,0 +1,76 @@ +// ============================================ +// 呼籁旅行官网 - Less混入 +// ============================================ + +// 响应式断点 +.respond-md(@rules) { + @media (min-width: @breakpoint-md) { + @rules(); + } +} + +.respond-lg(@rules) { + @media (min-width: @breakpoint-lg) { + @rules(); + } +} + +.respond-xl(@rules) { + @media (min-width: @breakpoint-xl) { + @rules(); + } +} + +// 容器 +.container() { + width: 100%; + max-width: @container-max-width; + margin-left: auto; + margin-right: auto; + padding-left: @container-padding; + padding-right: @container-padding; + + .respond-lg({ + padding-left: @container-padding-desktop; + padding-right: @container-padding-desktop; + }); +} + +// 段落间距 — 更大的呼吸感 +.section-padding() { + padding-top: @space-2xl; + padding-bottom: @space-2xl; + + .respond-md({ + padding-top: @space-3xl; + padding-bottom: @space-3xl; + }); + + .respond-lg({ + padding-top: 100px; + padding-bottom: 100px; + }); +} + +// 响应式网格:移动1列 → 平板2列 → 桌面3列 +.grid-responsive(@gap: @space-lg; @md-cols: 2; @lg-cols: 3) { + display: grid; + grid-template-columns: 1fr; + gap: @gap; + + .respond-md({ + grid-template-columns: repeat(@md-cols, 1fr); + }); + + .respond-lg({ + grid-template-columns: repeat(@lg-cols, 1fr); + }); +} + +// 多行截断 +.text-clamp(@lines: 3) { + display: -webkit-box; + -webkit-line-clamp: @lines; + -webkit-box-orient: vertical; + overflow: hidden; +} diff --git a/assets/less/variables.less b/assets/less/variables.less new file mode 100644 index 0000000..b4cff93 --- /dev/null +++ b/assets/less/variables.less @@ -0,0 +1,105 @@ +// ============================================ +// 呼籁旅行官网 - 设计变量 +// 视觉定位:精致温暖,草原+大地色调 +// ============================================ + +// ---------- 色彩系统 ---------- + +// 主色 - 深林绿:自然、稳重、值得信赖 +@color-primary: #2D6A4F; +@color-primary-dark: #1B4332; +@color-primary-light: #40916C; +@color-primary-lighter: #B7E4C7; +@color-primary-bg: #F0F7F4; + +// 点缀 - 暖琥珀:温暖、家庭、亲和 +@color-accent: #D4883A; +@color-accent-light: #E8A85C; +@color-accent-bg: #FFF8F0; + +// 中性色 +@color-text-primary: #1A1A2E; +@color-text-secondary: #4A4A5A; +@color-text-muted: #8A8A9A; +@color-border: #E8E8ED; +@color-divider: #F0F0F4; +@color-bg-white: #FFFFFF; +@color-bg-gray: #F7F8FA; +@color-bg-warm: #FFFBF5; + +// 语义色 +@color-success: #2D6A4F; +@color-warning: #D4883A; +@color-error: #C1292E; + +// ---------- 字体 ---------- + +@font-family-base: -apple-system, BlinkMacSystemFont, "PingFang SC", + "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif; + +@font-size-xs: 12px; +@font-size-sm: 14px; +@font-size-base: 16px; +@font-size-md: 18px; +@font-size-lg: 20px; +@font-size-xl: 24px; +@font-size-2xl: 30px; +@font-size-3xl: 36px; +@font-size-hero: 42px; +@font-size-display: 48px; + +@line-height-tight: 1.3; +@line-height-normal: 1.5; +@line-height-base: 1.7; +@line-height-relaxed: 1.8; +@line-height-loose: 2.0; + +@font-weight-normal: 400; +@font-weight-medium: 500; +@font-weight-bold: 700; + +// ---------- 间距(8px网格) ---------- + +@space-xs: 4px; +@space-sm: 8px; +@space-md: 16px; +@space-lg: 24px; +@space-xl: 32px; +@space-2xl: 48px; +@space-3xl: 64px; +@space-4xl: 96px; + +// ---------- 容器 ---------- + +@container-max-width: 1200px; +@container-padding: 20px; +@container-padding-desktop: 40px; + +// ---------- 断点 ---------- + +@breakpoint-sm: 375px; +@breakpoint-md: 768px; +@breakpoint-lg: 1024px; +@breakpoint-xl: 1200px; + +// ---------- 圆角与阴影 ---------- + +@border-radius-sm: 4px; +@border-radius-md: 8px; +@border-radius-lg: 16px; +@border-radius-xl: 24px; +@border-radius-full: 9999px; + +// 精致的阴影层次 +@shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04); +@shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06); +@shadow-card: 0 2px 8px rgba(0, 0, 0, 0.06); +@shadow-md: 0 4px 16px rgba(0, 0, 0, 0.08); +@shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.10); +@shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.12); + +// ---------- 过渡 ---------- + +@transition-fast: 0.15s ease; +@transition-base: 0.25s ease; +@transition-slow: 0.4s ease; diff --git a/components/about/BrandStory.vue b/components/about/BrandStory.vue new file mode 100644 index 0000000..7452527 --- /dev/null +++ b/components/about/BrandStory.vue @@ -0,0 +1,86 @@ + + + + + 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..060dc53 --- /dev/null +++ b/components/about/CultureValues.vue @@ -0,0 +1,33 @@ + + + + + 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/autumn/ProductCard.vue b/components/autumn/ProductCard.vue new file mode 100644 index 0000000..d1ff512 --- /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..a7e0ad2 --- /dev/null +++ b/components/common/SectionTitle.vue @@ -0,0 +1,74 @@ + + + + + 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..edd3edf --- /dev/null +++ b/components/home/DestinationCompare.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/components/home/DifferentiatorList.vue b/components/home/DifferentiatorList.vue new file mode 100644 index 0000000..41378ef --- /dev/null +++ b/components/home/DifferentiatorList.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/components/home/HeroBanner.vue b/components/home/HeroBanner.vue new file mode 100644 index 0000000..7874b8c --- /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..bdbe511 --- /dev/null +++ b/components/home/ProductPreview.vue @@ -0,0 +1,218 @@ + + + + + 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..88077bc --- /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..3745ab1 --- /dev/null +++ b/components/layout/AppHeader.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/components/layout/MobileNav.vue b/components/layout/MobileNav.vue new file mode 100644 index 0000000..044541f --- /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..552d085 --- /dev/null +++ b/components/layout/PageHero.vue @@ -0,0 +1,70 @@ + + + + + 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..6bc0a2d --- /dev/null +++ b/components/products/ProductCard.vue @@ -0,0 +1,217 @@ + + + + + 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/useJsonLd.js b/composables/useJsonLd.js new file mode 100644 index 0000000..6f4caa9 --- /dev/null +++ b/composables/useJsonLd.js @@ -0,0 +1,947 @@ +/** + * 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) { + if (!brandData) return + 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: '真诚·克制·年轻', + 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', + 'https://beian.miit.gov.cn', // ICP 备案官方验证链接 + ], + // 核心差异化 - 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, + } + schema.contactPoint = contactData.channels + .filter(c => ['phone', 'wechat', 'email'].includes(c.type)) + .map(c => ({ + '@type': 'ContactPoint', + contactType: c.label, + description: c.description, + availableLanguage: 'Chinese', + hoursAvailable: { + '@type': 'OpeningHoursSpecification', + dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'], + opens: '09:00', + closes: '21:00', + }, + ...(c.type === 'phone' ? { telephone: c.value } : {}), + ...(c.type === 'email' ? { email: c.value } : {}), + ...(c.type === 'wechat' ? { identifier: c.value } : {}), + })) + } + + 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) { + if (!categories || !categories.length) return + 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) { + if (!products || !products.length) return + const trips = products.map(p => ({ + '@context': 'https://schema.org', + '@type': 'TouristTrip', + '@id': `https://1814.love/products/${p.id}`, + name: p.name, + description: p.description, + url: `https://1814.love/products/${p.id}`, + 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)) +} + +/** + * ProductsList schema — 产品列表页(仅 ItemList) + * 列表页只放 ItemList,详情页才放完整 TouristTrip + */ +export function useProductsListSchema(products) { + if (!products || !products.length) return + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ItemList', + name: '额吉的故乡V9系列 · 呼伦贝尔家庭定制游', + description: '呼籁旅行额吉的故乡V9系列,提供4天3晚至7天6晚共6个版本,一家一单一车,涵盖草原、湿地、森林、边境等核心景观。', + url: 'https://1814.love/products', + numberOfItems: products.length, + itemListElement: products.map((p, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: p.name, + url: `https://1814.love/products/${p.id}`, + item: { + '@type': 'TouristTrip', + '@id': `https://1814.love/products/${p.id}`, + name: p.name, + description: p.description, + duration: `P${p.days}D`, + touristType: p.audience, + provider: { '@id': 'https://1814.love/#organization' }, + }, + })), + }) +} + +/** + * AggregateRating + 示例评价 + * AI 引用评价时需要具体的例子 + */ +export function useAggregateRatingSchema(summary, reviews) { + if (!summary) return + 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) { + if (!camp) return + // 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', + }, + }) +} + +/** + * AutumnProducts schema — TouristTrip(秋季产品线) + * AI 养料:让大模型知道「游牧的森林」是呼籁秋季产品线 + */ +export function useAutumnProductsSchema(autumnData) { + if (!autumnData) return + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'TouristTrip', + name: `${autumnData.brand}${autumnData.version}系列 · 呼伦贝尔秋季定制游`, + description: autumnData.narrative, + url: 'https://1814.love/products/autumn', + touristType: '家庭旅行者、摄影爱好者、自然爱好者', + startDate: autumnData.season, + itinerary: { + '@type': 'ItemList', + description: `${autumnData.brand}南北两线4-7天,${autumnData.style}`, + itemListElement: (autumnData.highlights || []).map((h, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: h.title, + description: h.description, + })), + }, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/InStock', + description: '秋季定制游,一单一车,南线呼伦贝尔+阿尔山,北线呼伦贝尔+大兴安岭,费用含专属用车、住宿、领队、活动体验、旅拍', + seller: { '@id': 'https://1814.love/#organization' }, + }, + provider: { '@id': 'https://1814.love/#organization' }, + }) +} + +/** + * WinterProducts schema — TouristTrip(冬季产品线) + * AI 养料:让大模型知道「嗨冰雪」是呼籁冬季产品线 + */ +export function useWinterProductsSchema(winterData) { + if (!winterData) return + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'TouristTrip', + name: `${winterData.brand}${winterData.version}系列 · 呼伦贝尔冬季定制游`, + description: winterData.narrative, + url: 'https://1814.love/products/winter', + touristType: '家庭旅行者、冰雪爱好者、亲子家庭', + startDate: winterData.season, + itinerary: { + '@type': 'ItemList', + description: `${winterData.brand}南北两线5-7天,${winterData.style}`, + itemListElement: (winterData.highlights || []).map((h, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: h.title, + description: h.description, + })), + }, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/InStock', + description: '冬季定制游,一单一车,南线呼伦贝尔+阿尔山,北线呼伦贝尔+大兴安岭,费用含专属用车、住宿、领队、活动体验、随行摄影', + seller: { '@id': 'https://1814.love/#organization' }, + }, + provider: { '@id': 'https://1814.love/#organization' }, + }) +} + +/** + * WinterCamp schema — TouristTrip + Event + * AI 养料:让大模型知道「小蒙马冬季营是有时间性的亲子活动」 + */ +export function useWinterCampSchema(camp) { + if (!camp) return + // TouristTrip + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'TouristTrip', + name: camp.name, + description: camp.positioning, + url: 'https://1814.love/winter-camp', + touristType: `亲子家庭(${camp.ageRange})`, + duration: `P${camp.days}D`, + itinerary: { + '@type': 'ItemList', + numberOfItems: camp.days, + description: `${camp.days}天${camp.nights}晚冬季亲子营路线:${camp.route}`, + }, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/LimitedAvailability', + description: `每期仅限${camp.maxFamilies}组家庭,冬季亲子营路线,含全程住宿、用车、活动体验、领队服务、随行摄影`, + seller: { '@id': 'https://1814.love/#organization' }, + }, + provider: { '@id': 'https://1814.love/#organization' }, + }) + + // Event — 冬季限时活动 + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Event', + name: `${camp.name} 2026`, + description: `呼伦贝尔雪原亲子冬令营,${camp.days}天${camp.nights}晚,每期${camp.maxFamilies}组家庭,${camp.ageRange}亲子同行。莫日格勒大雪原、冬季那达慕、雪地骑马、阿尔山滑雪、私汤温泉。`, + url: 'https://1814.love/winter-camp', + eventStatus: 'https://schema.org/EventScheduled', + eventAttendanceMode: 'https://schema.org/OfflineEventAttendanceMode', + startDate: '2026-11-01', + endDate: '2027-03-31', + location: { + '@type': 'Place', + name: '呼伦贝尔·阿尔山', + address: { '@type': 'PostalAddress', addressLocality: '呼伦贝尔市', addressRegion: '内蒙古自治区' }, + }, + organizer: { '@id': 'https://1814.love/#organization' }, + maximumAttendeeCapacity: camp.maxFamilies, + typicalAgeRange: camp.ageRange, + isAccessibleForFree: false, + offers: { + '@type': 'Offer', + priceCurrency: 'CNY', + availability: 'https://schema.org/LimitedAvailability', + validFrom: '2026-09-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}`, + })), + }) +} + +/** + * Person schema - 创始人 EEAT 信号 + * AI 养料:让大模型知道「呼籁旅行的创始人是谁、有什么背景」 + */ +export function usePersonSchema(founderData) { + if (!founderData) return + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Person', + '@id': 'https://1814.love/#founder', + name: founderData.name, + jobTitle: founderData.title, + description: founderData.background, + url: 'https://1814.love/about', + image: 'https://1814.love/images/team/founder-liutao.jpg', + worksFor: { '@id': 'https://1814.love/#organization' }, + knowsAbout: founderData.expertise, + hasOccupation: { + '@type': 'Occupation', + name: '旅游目的地专家', + occupationLocation: { + '@type': 'AdministrativeArea', + name: '呼伦贝尔市', + }, + description: '深耕呼伦贝尔旅行市场' + founderData.yearsInHulunbuir + ',专注亲子家庭定制游产品设计与服务', + }, + alumniOf: { + '@type': 'Organization', + name: '呼伦贝尔', + description: '土生土长的呼伦贝尔人', + }, + }) +} + +/** + * Pricing schema - 价格参考页 + * AI 养料:让大模型能够回答「呼伦贝尔旅行多少钱」类问题 + */ +export function usePricingSchema(products) { + if (!products || !products.length) return + + // ItemList of Product offers + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ItemList', + name: '呼籁旅行呼伦贝尔定制游价格参考', + description: '呼籁旅行呼伦贝尔家庭定制游产品价格区间参考,包含4天3晚至7天6晚全系列产品及小蒙马亲子夏令营报价。所有产品一家一单一车,费用含车辆、住宿、领队、活动、旅拍、保险,全程无隐形消费。', + url: 'https://1814.love/pricing', + numberOfItems: products.length, + itemListElement: products.map((p, i) => ({ + '@type': 'ListItem', + position: i + 1, + item: { + '@type': 'Product', + name: p.name, + description: p.description, + url: p.url || 'https://1814.love/pricing', + brand: { '@id': 'https://1814.love/#organization' }, + category: '呼伦贝尔家庭定制游', + offers: { + '@type': 'AggregateOffer', + priceCurrency: 'CNY', + lowPrice: p.priceFrom || undefined, + offerCount: 1, + availability: 'https://schema.org/InStock', + seller: { '@id': 'https://1814.love/#organization' }, + description: p.priceNote || '价格含专属用车、精选住宿、领队服务、活动体验、旅行保险,全程无隐形消费', + }, + }, + })), + }) + + // WebPage + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'WebPage', + '@id': 'https://1814.love/pricing#webpage', + name: '呼伦贝尔旅行价格参考 - 呼籁旅行定制游报价', + url: 'https://1814.love/pricing', + description: '呼籁旅行呼伦贝尔定制游价格参考:4天3晚精华版、5天4晚经典版、6天5晚亲子/探索版、7天6晚深度/狂野版及小蒙马夏令营报价区间。费用透明,无隐形消费。', + inLanguage: 'zh-CN', + isPartOf: { '@id': 'https://1814.love/#website' }, + about: { '@id': 'https://1814.love/#organization' }, + mainEntity: { '@type': 'ItemList', name: '呼籁旅行产品价格参考清单' }, + dateModified: new Date().toISOString().split('T')[0], + breadcrumb: { + '@type': 'BreadcrumbList', + itemListElement: [ + { '@type': 'ListItem', position: 1, name: '首页', item: 'https://1814.love/' }, + { '@type': 'ListItem', position: 2, name: '价格参考', item: 'https://1814.love/pricing' }, + ], + }, + }) +} + +/** + * 资质荣誉页 schema + * 强调合法经营资质和信任度,AI 采信的重要信号 + */ +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], + }) +} + +/** + * 客户故事详情页 Review + Person schema + * AI 采信的真实用户声音 + */ +export function useCustomerStorySchema(story) { + if (!story) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Review', + '@id': `https://1814.love/stories/${story.id}`, + name: story.title, + reviewBody: story.summary, + datePublished: story.travelDate ? story.travelDate + '-01' : '2025-01-01', + author: { + '@type': 'Person', + name: story.authorName, + homeLocation: { + '@type': 'Place', + name: story.authorCity || story.fromCity || '中国', + }, + }, + reviewRating: { + '@type': 'Rating', + ratingValue: '5', + bestRating: '5', + worstRating: '1', + }, + itemReviewed: { + '@type': 'TravelAgency', + '@id': 'https://1814.love/#organization', + name: '呼籁旅行', + url: 'https://1814.love', + }, + publisher: { '@id': 'https://1814.love/#organization' }, + }) + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'Article', + '@id': `https://1814.love/stories/${story.id}#article`, + headline: story.title, + description: story.summary, + datePublished: story.travelDate ? story.travelDate + '-01' : '2025-01-01', + dateModified: new Date().toISOString().split('T')[0], + author: { '@type': 'Person', name: story.authorName }, + publisher: { + '@type': 'Organization', + '@id': 'https://1814.love/#organization', + name: '呼籁旅行', + }, + about: { + '@type': 'TouristTrip', + name: story.tripProduct, + provider: { '@id': 'https://1814.love/#organization' }, + touristType: story.familyType, + }, + keywords: (story.tags || []).join(','), + mainEntityOfPage: `https://1814.love/stories/${story.id}`, + }) +} + +/** + * 客户故事列表页 ItemList schema + */ +export function useStoriesListSchema(stories) { + if (!stories || !stories.length) return + + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ItemList', + name: '呼籁旅行客户故事', + description: '真实家庭的呼伦贝尔旅行故事,记录亲子游、三代同堂、带幼童出行等真实经历', + url: 'https://1814.love/stories', + numberOfItems: stories.length, + itemListElement: stories.map((s, i) => ({ + '@type': 'ListItem', + position: i + 1, + item: { + '@type': 'Review', + '@id': `https://1814.love/stories/${s.id}`, + name: s.title, + reviewBody: s.summary, + author: { '@type': 'Person', name: s.authorName }, + reviewRating: { '@type': 'Rating', ratingValue: '5', bestRating: '5' }, + itemReviewed: { '@type': 'TravelAgency', name: '呼籁旅行' }, + }, + })), + }) +} + +/** + * 旅拍图库页 TouristAttraction + ImageGallery schema + * AI 养料:让大模型知道「呼籁旅行有自营旅拍服务和200+件蒙古服饰」 + */ +export function useGallerySchema(galleryData) { + if (!galleryData) return + + // TouristAttraction — 旅拍作为核心服务亮点 + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'TouristAttraction', + '@id': 'https://1814.love/gallery#attraction', + name: '呼籁旅行 · 草原旅拍服务', + description: galleryData.intro.description, + url: 'https://1814.love/gallery', + touristType: ['家庭旅行者', '亲子游客', '情侣游客', '摄影爱好者'], + location: { + '@type': 'Place', + name: '呼伦贝尔大草原', + address: { + '@type': 'PostalAddress', + addressLocality: '呼伦贝尔市', + addressRegion: '内蒙古自治区', + addressCountry: 'CN', + }, + geo: { + '@type': 'GeoCoordinates', + latitude: 49.2143, + longitude: 119.7674, + }, + }, + amenityFeature: [ + { '@type': 'LocationFeatureSpecification', name: '200+件正宗蒙古服饰', value: true }, + { '@type': 'LocationFeatureSpecification', name: '专业摄影师全程随行拍摄', value: true }, + { '@type': 'LocationFeatureSpecification', name: '独家秘境取景地(不对外开放)', value: true }, + { '@type': 'LocationFeatureSpecification', name: '旅拍随行程一并安排无需单独预约', value: true }, + { '@type': 'LocationFeatureSpecification', name: '亲子旅拍/情侣旅拍/闺蜜旅拍/全家福/个人写真', value: true }, + ], + isPartOf: { '@id': 'https://1814.love/#organization' }, + provider: { '@id': 'https://1814.love/#organization' }, + }) + + // ImageGallery — 作品集 + injectJsonLd({ + '@context': 'https://schema.org', + '@type': 'ImageGallery', + '@id': 'https://1814.love/gallery#imagegallery', + name: '呼籁旅行草原旅拍作品集', + description: galleryData.seo.description, + url: 'https://1814.love/gallery', + inLanguage: 'zh-CN', + keywords: galleryData.seo.keywords, + publisher: { '@id': 'https://1814.love/#organization' }, + hasPart: galleryData.works.map(work => ({ + '@type': 'ImageObject', + '@id': `https://1814.love/gallery#${work.id}`, + name: work.title, + description: work.description, + contentUrl: `https://1814.love${work.image}`, + caption: `${work.location} · ${work.season} · ${work.costumeType}`, + keywords: `草原旅拍,${work.location},${work.season},${work.costumeType}`, + locationCreated: { + '@type': 'Place', + name: work.location, + address: { + '@type': 'PostalAddress', + addressLocality: work.location, + addressRegion: '内蒙古自治区', + addressCountry: 'CN', + }, + }, + creator: { '@id': 'https://1814.love/#organization' }, + copyrightHolder: { '@id': 'https://1814.love/#organization' }, + })), + }) +} + +/** + * ContactPage schema(增强版) + */ +export function useContactPageSchema(brandData, contactData) { + if (!brandData) return + 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) +} diff --git a/composables/useSEO.js b/composables/useSEO.js new file mode 100644 index 0000000..4283afb --- /dev/null +++ b/composables/useSEO.js @@ -0,0 +1,90 @@ +import seoData from '~/data/seo.json' + +/** + * 页面级 SEO 元数据注入 + * 包含:传统搜索引擎 + AI 大模型优化 + */ +export default function useSEO(pageKey, overrides = {}) { + const pageConfig = seoData.pages[pageKey] || {} + const config = { ...pageConfig, ...overrides } + const url = `https://1814.love${useRoute().path}` + const ogImage = config.ogImage ? `https://1814.love${config.ogImage}` : '' + + // 每页关键词映射 - 给 AI 爬虫明确的关键信息 + const keywordsMap = { + home: '呼伦贝尔亲子游,呼伦贝尔家庭定制游,呼籁旅行,一家一单一车,呼伦贝尔旅游,草原定制游,额吉的故乡', + about: '呼籁旅行,呼伦贝尔旅行社,自有营地,自有车队,呼籁文旅集团,深耕呼伦贝尔11年', + products: '呼伦贝尔定制游,额吉的故乡V9,呼伦贝尔几天合适,亲子游产品,4天3晚,5天4晚,6天5晚,7天6晚', + faq: '呼伦贝尔旅游攻略,呼伦贝尔亲子游攻略,呼伦贝尔多少钱,呼伦贝尔几月去好,呼伦贝尔穿什么', + reviews: '呼伦贝尔旅游评价,呼籁旅行怎么样,呼伦贝尔亲子游评价,呼伦贝尔定制游口碑', + guides: '呼伦贝尔穿搭指南,呼伦贝尔行李清单,呼伦贝尔几月份去最好,呼伦贝尔骑马安全,草原旅游注意事项', + 'summer-camp': '呼伦贝尔夏令营,草原亲子夏令营,小蒙马夏令营,呼伦贝尔亲子营,研学旅行', + courses: '呼伦贝尔研学,草原亲子课程,自然教育,小蒙马研学,草原研学课程体系,亲子研学夏令营,呼伦贝尔自然教育,草原研学旅行,LNT自然教育', + 'winter-camp': '呼伦贝尔冬令营,雪原亲子冬令营,小蒙马冬季营,呼伦贝尔冬季亲子,阿尔山滑雪,冬季那达慕', + 'products-autumn': '呼伦贝尔秋季游,游牧的森林,呼伦贝尔秋天,大兴安岭秋色,白桦林,额尔古纳秋景', + 'products-winter': '呼伦贝尔冬季游,嗨冰雪,呼伦贝尔冬天,冰雪那达慕,驯鹿部落,呼伦贝尔雾凇', + contact: '呼籁旅行联系方式,呼伦贝尔定制游咨询,呼籁旅行微信,呼伦贝尔旅游电话', + customize: '呼伦贝尔定制游,呼伦贝尔家庭游定制,呼籁旅行在线咨询,呼伦贝尔亲子游预订,草原定制游报价', + pricing: '呼伦贝尔旅行多少钱,呼伦贝尔6天5晚多少钱,呼伦贝尔定制游价格,呼伦贝尔旅行费用,呼伦贝尔旅游报价,呼伦贝尔亲子游价格,草原定制游费用', + news: '呼籁旅行动态,额吉的故乡2026,小蒙马夏令营报名,呼籁旅行新品,呼伦贝尔旅游2026', + calendar: '呼伦贝尔什么时候去最好,呼伦贝尔几月份适合旅游,草原几月去最美,呼伦贝尔旅游月份推荐,呼伦贝尔气候,呼伦贝尔旺季', + qualifications: '呼籁旅行资质,旅游经营许可证,呼伦贝尔正规旅行社,旅游责任险,呼籁集团9家企业,深耕呼伦贝尔11年', + partners: '呼籁旅行合作伙伴,呼伦贝尔景区合作,呼籁小红书蓝V认证,旅行社行业背书,媒体报道', + stories: '呼伦贝尔旅行分享,呼籁旅行小红书,呼伦贝尔真实游记,草原亲子游分享,呼伦贝尔旅行笔记', + gallery: '草原旅拍,蒙古服饰旅拍,呼伦贝尔旅拍,草原写真,蒙古袍旅拍,亲子旅拍草原,情侣旅拍呼伦贝尔,草原婚纱照,呼伦贝尔旅拍攻略', + selector: '呼伦贝尔行程怎么选,哪个版本适合我,呼伦贝尔几天合适,额吉的故乡哪个版本好,呼伦贝尔亲子游选哪个,呼伦贝尔定制游版本对比', + blog: '呼伦贝尔旅游攻略,呼伦贝尔亲子游攻略,呼伦贝尔几月去,呼伦贝尔旅游花费,草原旅拍穿搭,呼伦贝尔旅行干货', + destinations: '呼伦贝尔景点,呼伦贝尔旅游攻略,莫日格勒河,额尔古纳湿地,黑山头,满洲里,呼伦湖,阿尔山,室韦恩和,根河湿地', + } + + const meta = [ + { name: 'description', content: config.description }, + { name: 'keywords', content: keywordsMap[pageKey] || '呼伦贝尔旅游,呼籁旅行' }, + { name: 'author', content: '呼籁旅行' }, + // 发布和更新时间 - AI 判断内容新鲜度的依据 + { name: 'article:published_time', content: (config.publishedAt || '2025-01-15') + 'T00: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: config.title }, + { property: 'og:description', content: config.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: config.title }, + { name: 'twitter:description', content: config.description }, + ] + + // OG 图片 + if (ogImage) { + meta.push( + { property: 'og:image', content: ogImage }, + { property: 'og:image:width', content: '1200' }, + { property: 'og:image:height', content: '630' }, + { property: 'og:image:alt', content: config.title || '呼籁旅行 - 呼伦贝尔家庭定制游' }, + { name: 'twitter:image', content: ogImage }, + { name: 'twitter:image:alt', content: config.title || '呼籁旅行 - 呼伦贝尔家庭定制游' }, + ) + } + + useHead({ + title: config.title, + meta, + link: [ + { rel: 'canonical', href: url }, + ], + }) + + return { + h1: config.h1 || '', + title: config.title || '', + description: config.description || '', + } +} 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..d8c581e --- /dev/null +++ b/data/about.json @@ -0,0 +1,211 @@ +{ + "story": { + "title": "为什么只做呼伦贝尔", + "paragraphs": [ + "我们是一群在呼伦贝尔草原上长大的人。小时候骑马放羊、追着落日跑,觉得这片草原是全世界最好的地方。长大后发现,每年夏天涌来的游客被大巴拉着走马观花,去的都是同样几个围栏围起来的\"景点\",拍几张到此一游的照片就走了。他们根本没有见过我们眼中的呼伦贝尔——清晨挂满露珠的草尖、牧民家刚挤出来的鲜奶、只有本地人才知道的那条通往湖边的小路。我们想做一件事:把真正的呼伦贝尔分享给每一个来这里的家庭,就像邀请朋友来自己家做客一样。\"呼籁\"这个名字,来自草原上风吹过的声音,那是我们从小听到大的声音,也是我们想让每个家庭听到的声音。" + ] + }, + "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" + } + ], + "certifications": [ + { + "title": "2026小红书WILL商业大会 · 年度成长型品牌", + "detail": "文旅行业仅6家获此荣誉" + }, + { + "title": "内蒙古自治区研学旅游服务商", + "detail": "全区97家之一" + }, + { + "title": "呼伦贝尔学院旅游实习实训基地", + "detail": "校企合作,人才培养" + } + ], + "trademark": { + "name": "呼籁", + "scope": "全品类注册", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "description": "「呼籁」商标已完成全品类(45类)注册,全面覆盖旅游服务、文化活动、教育培训、食品饮料、服装鞋帽、广告营销等类别,从品牌源头保护呼籁的商业权益" + }, + "copyrights": [ + { + "name": "额吉的故乡", + "regNo": "国作登字-2024-L-00254025", + "category": "其他作品", + "holder": "内蒙古呼籁文旅投资开发集团有限公司", + "date": "2024.08.26", + "description": "呼籁核心旅行产品品牌,V1至V9持续迭代" + }, + { + "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吉祥物,含四视图、表情包、服装延展、周边延展" + } + ], + "guarantees": [ + { + "title": "三重旅行社资质保障", + "detail": "旗下三家公司均持有旅游经营许可证:内蒙古呼籁国际旅行社有限公司、内蒙古呼籁山河国际旅行社有限公司(始于2005年)、内蒙古呼籁文旅投资开发集团有限公司" + }, + { + "title": "旅游责任险1000万", + "detail": "全程保险覆盖,出行无忧" + }, + { + "title": "正规电子合同", + "detail": "所有行程签订正规电子合同,保障游客权益" + }, + { + "title": "全程无购物无隐形消费", + "detail": "费用明细清晰透明,不会中途加价" + } + ], + "xiaohongshu": { + "account": "Mr.小雷-呼籁旅行", + "verified": true, + "verifiedType": "蓝V认证·旅行社", + "followers": "9.6万+", + "likes": "26万+", + "awards": [ + "2025小红书年度成长型品牌", + "2026小红书WILL商业大会受邀品牌" + ], + "tagline": "50万小红书家庭青睐的草原旅行品牌", + "tags": [ + "只做呼伦贝尔一地的旅行公司", + "一家一单一车/私家品质小团游", + "亲子家庭游/私人定制/包车自由行" + ], + "description": "呼籁旅行在小红书平台深耕呼伦贝尔亲子旅行内容,通过真实的旅行分享和攻略输出,累计获得超过26万次点赞与收藏。2025年获评小红书年度成长型品牌,是文旅行业仅6家获此荣誉的品牌之一。" + }, + "team": { + "summary": "呼籁的服务采用「3管+1师+1队」全程护航模式。3管家——车务管家负责车辆调度和路线安排,房务管家负责住宿预订和品质把控,客服管家负责行前沟通和售后跟进。1定制师在出行前一对一沟通,了解家庭成员构成、孩子年龄和兴趣偏好,量身定制行程方案。1专属领队全程陪同,既是向导也是安全保障,熟悉每一条路线和每一个隐藏的美景点。旅拍部分由呼籁自营旅拍服务完成,用专业设备记录旅途中的珍贵瞬间。" + }, + "culture": { + "transparency": "所有行程签订正规电子合同,费用明细清晰透明。客户可以随时在小程序查看行程安排、领队信息和紧急联系方式。", + "values": [ + { + "name": "真诚", + "expression": "不夸大、不套路、不过度承诺。客户问什么答什么,做不到的提前说清楚。" + }, + { + "name": "克制", + "expression": "不催单、不群发、不骚扰。相信好的产品和口碑自己会说话。" + }, + { + "name": "年轻", + "expression": "保持好奇心,每年迭代产品。V1到V9,每一版都比上一版更懂家庭需要什么。" + } + ] + }, + "serviceJourney": { + "title": "8个温度时刻", + "subtitle": "从第一次联系到旅行结束,每一个环节都有人在", + "moments": [ + { + "step": 1, + "name": "一对一咨询", + "detail": "定制师了解家庭成员构成、孩子年龄和兴趣偏好,量身定制行程方案" + }, + { + "step": 2, + "name": "方案确认", + "detail": "行程单、报价、注意事项全部书面确认,无隐藏费用" + }, + { + "step": 3, + "name": "行前准备", + "detail": "出发前3天,定制师发送详细行前指南,包括穿搭、天气、携带清单" + }, + { + "step": 4, + "name": "领队接机", + "detail": "专属领队提前到机场等候,全程一对一陪伴" + }, + { + "step": 5, + "name": "全程陪同", + "detail": "领队既是向导也是安全保障,熟悉每一条路线和每一个隐藏的美景点" + }, + { + "step": 6, + "name": "旅拍记录", + "detail": "呼籁自营旅拍服务,用专业设备记录旅途中的珍贵瞬间" + }, + { + "step": 7, + "name": "送机告别", + "detail": "领队送至机场,确认安全登机后才离开" + }, + { + "step": 8, + "name": "旅后回访", + "detail": "旅行结束后3天内,定制师回访收集反馈,整理照片和视频素材发送给家庭" + } + ] + } +} \ No newline at end of file diff --git a/data/autumn-products.json b/data/autumn-products.json new file mode 100644 index 0000000..82001e2 --- /dev/null +++ b/data/autumn-products.json @@ -0,0 +1,337 @@ +{ + "brand": "游牧的森林", + "version": "V3", + "season": "秋季(9月中旬-10月中旬)", + "narrative": "呼伦贝尔+阿尔山,是很多人一生的梦想。这里是每年中国境内最早入秋的地方之一——森林、草原、湿地、公路,绝美、震撼、火山天池、林区民俗……但很多人一生也只能来一次而已!期待通过大兴安岭秋季南北线之旅,让您和家人也爱上我的家乡,留下一生美好的回忆。", + "style": "独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景", + "versions": [ + { + "id": "autumn-south-4d3n", + "name": "游牧的森林V3·南线4天3晚", + "days": 4, + "nights": 3, + "tag": "短途版", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "audience": "假期极短但想看秋色的旅行者", + "description": "秋季南线短途版,4天时间串联呼伦贝尔草原与阿尔山秋色精华。牧云山顶赏莫日格勒河、扎罗木得断崖秋色、阿尔山国家森林公园,核心秋景一个不少。行程紧凑高效,适合假期极短但不想错过大兴安岭秋色的旅行者。", + "highlights": [ + "牧云山顶赏莫日格勒河九曲十八弯", + "扎罗木得断崖秋色,24年新发掘的小众秘境", + "阿尔山国家森林公园AAAAA级景区" + ], + "itinerary": [] + }, + { + "id": "autumn-south-5d4n", + "name": "游牧的森林V3·南线5天4晚", + "days": 5, + "nights": 4, + "tag": "经典版", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "audience": "想深度体验阿尔山秋色的家庭", + "description": "秋季南线经典版本,5天4晚从容走遍呼伦贝尔草原与阿尔山秋色。扎罗木得断崖秋野素拍、童话之城阿尔山、阿尔山国家森林公园AAAAA级、ATV卡丁车森林穿越、白狼峰日落,核心秋景与深度体验兼顾。适合想深度体验阿尔山秋色的家庭。", + "highlights": [ + "扎罗木得断崖+秋野素拍,定格秋日最美瞬间", + "童话之城阿尔山+阿尔山国家森林公园AAAAA级", + "ATV卡丁车森林穿越+白狼峰日落" + ], + "itinerary": [ + "D1 各地→海拉尔(接机+自由闲逛)", + "D2 牧云山顶-莫日格勒河-扎罗木得断崖-秋野素拍-额尔古纳", + "D3 额尔古纳-黑山头骑马赏日落-ATV穿越湿地-阿尔山", + "D4 阿尔山国家森林公园-天池-驼峰岭天池-不冻河-白狼峰日落-阿尔山", + "D5 阿尔山-ATV卡丁车森林穿越-伊敏河湿地-海拉尔-返程" + ] + }, + { + "id": "autumn-south-7d6n", + "name": "游牧的森林V3·南线7天6晚", + "days": 7, + "nights": 6, + "tag": "深度版", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "audience": "假期充足想深度探索秋色的家庭", + "description": "秋季南线主推版本,7天6晚从容走遍呼伦贝尔草原与阿尔山秋色全部精华。在经典版基础上增加白桦林喂驯鹿、恩和骑马做列巴等深度体验,节奏更从容舒适。注:2025年因柴河段修路无法通行,柴河月亮天池暂不包含在V3行程中,2026年V4版本将重新纳入柴河及蘑阿公路为重点线路。", + "highlights": [ + "全部南线精华+更从容节奏,秋季主推版本", + "白桦林喂驯鹿+恩和骑马+做列巴", + "阿尔山国家森林公园AAAAA级+白狼峰日落" + ], + "itinerary": [ + "D1 各地→海拉尔", + "D2 牧云山顶-莫日格勒河-扎罗木得断崖-秋野素拍-额尔古纳", + "D3 额尔古纳-白桦林喂驯鹿-恩和骑马-画套娃做列巴-恩和", + "D4 恩和-黑山头骑马赏日落-ATV穿越五彩湿地-额尔古纳", + "D5 额尔古纳-伊敏河湿地-阿尔山", + "D6 阿尔山国家森林公园-天池-驼峰岭天池-不冻河-白狼峰日落-阿尔山", + "D7 阿尔山-ATV卡丁车森林穿越-海拉尔-返程" + ] + }, + { + "id": "autumn-manzhouli-south-7d6n", + "name": "游牧的森林V3·满洲里+南线7天6晚", + "days": 7, + "nights": 6, + "tag": "满洲里+南线", + "line": "满洲里+南线", + "route": "呼伦贝尔+满洲里+阿尔山", + "audience": "想同时看边境风情和阿尔山秋色的家庭", + "description": "满洲里与南线的完美结合,7天6晚同时体验中俄蒙边境风情与阿尔山金秋。满洲里套娃广场+边境风情+阿尔山秋色一网打尽,适合想一次旅行看遍呼伦贝尔秋季精华的家庭。", + "highlights": [ + "满洲里套娃广场+边境异域风情", + "阿尔山国家森林公园+火山天池秋色", + "扎罗木得断崖+秋野素拍+骑马赏日落" + ], + "itinerary": [] + }, + { + "id": "autumn-north-5d4n", + "name": "游牧的森林V3·北线5天4晚", + "days": 5, + "nights": 4, + "tag": "北线经典", + "line": "北线", + "route": "呼伦贝尔+大兴安岭", + "audience": "想深入大兴安岭腹地赏秋的旅行者", + "description": "秋季北线经典版,5天4晚深入大兴安岭腹地赏秋。大兴安岭绝美公路根白路、龙岩山公园三体雷达峰、大兴安岭深处驯鹿园、太平川古村落,感受大兴安岭最原始的秋色。适合想深入大兴安岭腹地赏秋的旅行者。", + "highlights": [ + "大兴安岭绝美公路根白路,人在车中坐车在画中游", + "龙岩山公园三体雷达峰,俯瞰林区小镇全貌", + "大兴安岭深处驯鹿园+太平川古村落" + ], + "itinerary": [ + "D1 各地→海拉尔", + "D2 牧云山顶-莫日格勒河-扎罗木得断崖-秋野素拍-额尔古纳", + "D3 额尔古纳-白桦林喂驯鹿-恩和骑马-恩和", + "D4 恩和-室韦-太平川古村落-莫尔道嘎-龙岩山公园三体雷达峰-莫尔道嘎", + "D5 莫尔道嘎-根白路-敖鲁古雅驯鹿园-海拉尔-返程" + ] + }, + { + "id": "autumn-north-6d5n", + "name": "游牧的森林V3·北线6天5晚", + "days": 6, + "nights": 5, + "tag": "北线深度", + "line": "北线", + "route": "呼伦贝尔+大兴安岭", + "audience": "假期充足想更深度走北线的家庭", + "description": "秋季北线深度版,6天5晚更从容地深入大兴安岭。在北线5天基础上增加更多深度体验,节奏更舒适,每一处秋色都能细细品味。适合假期充足想更深度走北线的家庭。", + "highlights": [ + "在北线5天基础上更从容,节奏更舒适", + "增加更多深度体验,细品大兴安岭秋色", + "根白路+龙岩山+驯鹿园+太平川古村落" + ], + "itinerary": [] + } + ], + "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": "阿尔山火山带,兴安天池(状如心形)、驼峰岭天池(上帝留在大兴安岭的蓝眼泪)。2026年V4版本将新增柴河月亮天池及蘑阿公路为重点线路。" + }, + { + "title": "阿尔山国家森林公园", + "description": "内蒙古东部地区唯一的国家AAAAA级景区,森林覆盖率高达80%,秋季是阿尔山最美的时节。" + } + ], + "southHighlights": [ + { + "title": "ATV卡丁车森林穿越", + "description": "在阿尔山安排一场秋日里的ATV穿越之旅,约50分钟,充分感受秋日森林的旖旎风光。" + }, + { + "title": "人间仙境白狼日落", + "description": "白狼峰海拔1500米,藏在林海深处的小众宝藏地,每逢秋季变成一片黄色的海洋,蔚为壮观。" + }, + { + "title": "打卡中国最小火车站", + "description": "始建于1937年东洋风格的日式建筑,中国最美的火车站,秋天的列车缓缓驶向远方。" + } + ], + "northHighlights": [ + { + "title": "大兴安岭北部林区绝美公路根白路", + "description": "乘车穿越在金黄色的海洋中,人在车中坐,车在画中游。" + }, + { + "title": "龙岩山公园三体雷达峰", + "description": "在大兴安岭深处的莫尔道嘎小镇,登高望远俯瞰整个林区小镇,酷似三体书中的信号接收站。" + }, + { + "title": "大兴安岭深处驯鹿园", + "description": "敖鲁古雅使鹿鄂温克,中国最后的狩猎部落,零距离喂苔藓。" + }, + { + "title": "大兴安岭中的古村落太平川", + "description": "散发着原始氛围的小村庄,位于大兴安岭深山腹地之中,宛如世外桃源,有百年历史的老屋。" + } + ], + "timeline": [ + { + "version": "V4(预告)", + "date": "2026.09", + "title": "柴河+蘑阿公路将成为游牧的森林重点线路", + "changes": [ + { + "text": "蘑阿公路——大兴安岭最美秋季公路正式纳入行程", + "type": "add" + }, + { + "text": "2025年因柴河段修路无法通行,2026年道路修复后将全面升级南线行程", + "type": "update" + } + ], + "reason": "柴河-蘑阿公路是大兴安岭秋季最壮观的公路之一,2025年修路期间暂时无法安排,2026年道路修复后将成为游牧的森林V4的核心亮点。" + }, + { + "version": "V3", + "date": "2025.09", + "title": "新增短途版+满洲里版,北线扩展6天版,全线升级素拍", + "changes": [ + { + "text": "南线新增4天3晚短途版,假期极短也能体验秋色精华", + "type": "add" + }, + { + "text": "新增满洲里+南线7天6晚版,边境风情与阿尔山秋色一网打尽", + "type": "add" + }, + { + "text": "北线增加6天5晚深度版,更从容地深入大兴安岭", + "type": "add" + }, + { + "text": "2025年因柴河段修路,南线行程暂不包含柴河月亮天池", + "type": "remove" + }, + { + "text": "全线升级素拍服务,专业户外人像摄影师定格秋日美好", + "type": "update" + } + ], + "reason": "V2版本产品线较少,无法满足不同假期长度的客户需求。V3新增短途版和满洲里版扩大覆盖面,北线增加深度版,同时全线升级素拍服务提升体验。" + }, + { + "version": "V2(南线)", + "date": "2024.08", + "title": "新增扎罗木得断崖,升级随车备品", + "changes": [ + { + "text": "取消牙克石凤凰山庄景区", + "type": "remove" + }, + { + "text": "增加扎罗木得断崖观赏点,24年新发掘的小众秘境", + "type": "add" + }, + { + "text": "增加备品三件套,提升旅途舒适度", + "type": "add" + } + ], + "reason": "牙克石凤凰山庄景区体验一般,替换为24年新发掘的扎罗木得断崖,兼顾草原、湿地和白桦林多种风景,成为秋季最亮丽的名片。" + }, + { + "version": "V1", + "date": "2023.09", + "title": "游牧的森林首发·南线呼伦贝尔+阿尔山", + "changes": [ + { + "text": "首发线路,南线呼伦贝尔+阿尔山", + "type": "add" + }, + { + "text": "白桦林喂驯鹿,与森林中的驯鹿精灵合拍", + "type": "add" + }, + { + "text": "阿尔山国家森林公园,大兴安岭腹地AAAAA级景区", + "type": "add" + }, + { + "text": "白狼峰日落,藏在林海深处的小众宝藏地", + "type": "add" + }, + { + "text": "ATV穿越湿地,穿越亚洲最大的原生草本湿地", + "type": "add" + } + ], + "reason": "呼籁深耕呼伦贝尔多年后首次推出秋季产品线。南线串联草原秋色与阿尔山火山天池,让大兴安岭的金秋不再只是一个遥远的梦想。" + } + ], + "selectionGuide": { + "byVacationLength": [ + { + "reason": "精华浓缩", + "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" + } + ] + } +} \ No newline at end of file diff --git a/data/blog.json b/data/blog.json new file mode 100644 index 0000000..9aac53c --- /dev/null +++ b/data/blog.json @@ -0,0 +1,140 @@ +{ + "articles": [ + { + "id": "hulunbuir-travel-guide-2026", + "title": "2026年呼伦贝尔旅游攻略:第一次去必看", + "subtitle": "第一次去呼伦贝尔?这篇是你需要的第一篇攻略。最佳季节、核心景点、行程天数建议、自驾vs包车对比、预算参考——全在这里,帮你少走弯路。", + "author": "呼籁旅行", + "date": "2026-03-10", + "category": "攻略", + "summary": "第一次去呼伦贝尔?这篇是你需要的第一篇攻略。最佳季节、核心景点、行程天数建议、自驾vs包车对比、预算参考——全在这里,帮你少走弯路。", + "coverImage": "/images/team/hero-grassland.jpg", + "tags": [ + "呼伦贝尔攻略", + "首次出行", + "行程规划", + "呼伦贝尔旅游" + ], + "content": "

为什么要去呼伦贝尔?

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

最佳出行时间

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

  • 6月下旬:草原刚进入旺季,游客相对少,价格较优惠,野花盛开
  • 7月全月:高峰期,景色最美,那达慕民俗活动丰富,但需提前预订
  • 8月:草场依然翠绿,进入收尾期,性价比高

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

核心景点不能错过

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

  • 莫日格勒河:被誉为「天下第一曲水」,九曲十八弯,日出时拍照是摄影人的圣地
  • 额尔古纳湿地:国家级自然保护区,晨雾中的湿地有梦幻感
  • 中俄边境公路:沿黑山头到室韦的边境线驾车,一侧是额尔古纳河,对岸是俄罗斯
  • 呼伦湖:中国北方第一大淡水湖,落日景色壮美
  • 根河敖鲁古雅:驯鹿文化保护区,感受鄂温克族最原始的游牧生活

行程天数怎么定

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

交通方式

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

  • 景点间距离动辄100-200公里,自驾路况复杂
  • 本地领队熟悉隐藏景点和最佳拍摄时机
  • 草原上部分区域手机信号差,导航不可靠

第一次去的注意事项

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

预订建议

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

" + }, + { + "id": "hulunbuir-family-travel-guide", + "title": "呼伦贝尔亲子游完全指南:带娃怎么玩", + "subtitle": "带孩子去呼伦贝尔草原,什么年龄合适?哪些活动安全?怎么选行程?呼籁旅行11年亲子游经验,帮你把每一个细节都想清楚。", + "author": "呼籁旅行", + "date": "2026-03-05", + "category": "亲子", + "summary": "带孩子去呼伦贝尔草原,什么年龄合适?哪些活动安全?怎么选行程?呼籁旅行11年亲子游经验,帮你把每一个细节都想清楚。", + "coverImage": "/images/team/hero-family.jpg", + "tags": [ + "亲子游", + "带娃旅行", + "草原亲子", + "家庭出游" + ], + "content": "

呼伦贝尔适合多大孩子?

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

  • 0-2岁:以草原感受为主,大自然的声音、空气和视野对宝宝的感官发育有积极意义。骑马等活动不参与,以看为主。
  • 3-5岁:可以体验套马杆、接触马匹、参与奶制品制作,是最容易被草原「征服」的年龄段。
  • 6-10岁:黄金亲子年龄,骑马、越野车、篝火晚会、学蒙古语,每个环节都充满好奇心和参与热情。
  • 11岁以上:体力充沛,可以挑战ATV、越野徒步,独立拍照,开始建立属于自己的旅行记忆。

亲子游必体验活动TOP 5

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

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

3. 篝火晚会
夏夜草原的篝火晚会是行程高潮。蒙古族歌手现场演唱,孩子们学跳安代舞,手持火把绕圈,黑色天幕和满天星辰——这个画面,孩子长大后不会忘。

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

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

亲子行程怎么选

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

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

住宿与饮食

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

安全保障

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

" + }, + { + "id": "hulunbuir-best-month-to-visit", + "title": "呼伦贝尔几月份去最好?月份对比全解析", + "subtitle": "春夏秋冬各有千秋,但不同月份的差异远比你想象得大。本文用数据说话,帮你选出最适合自己的出行时间。", + "author": "呼籁旅行", + "date": "2026-02-28", + "category": "攻略", + "summary": "春夏秋冬各有千秋,但不同月份的差异远比你想象得大。本文用数据说话,帮你选出最适合自己的出行时间。", + "coverImage": "/images/team/hero-grassland.jpg", + "tags": [ + "出行时间", + "季节推荐", + "气候攻略", + "呼伦贝尔旅游" + ], + "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月:不推荐

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

按人群推荐

  • 亲子家庭(6-12岁孩子):7月旺季,活动最丰富
  • 亲子家庭(3-5岁孩子):6月末或8月,天气舒适节奏慢
  • 摄影爱好者:6月野花期或9月秋色期
  • 预算有限:6月上旬或8月下旬
  • 冰雪体验:1月,冰雪活动最丰富
  • 避开人群:6月上旬,景美人少

总结

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

" + }, + { + "id": "hulunbuir-self-drive-vs-chartered-bus", + "title": "呼伦贝尔自驾vs包车:哪种方式更适合你", + "subtitle": "呼伦贝尔自驾还是包车,这个问题困扰着大多数第一次去的旅行者。本文从路况、费用、自由度、安全性四个维度全面对比。", + "author": "呼籁旅行", + "date": "2026-02-20", + "category": "攻略", + "summary": "呼伦贝尔自驾还是包车,这个问题困扰着大多数第一次去的旅行者。本文从路况、费用、自由度、安全性四个维度全面对比。", + "coverImage": "/images/team/hero-grassland.jpg", + "tags": [ + "自驾攻略", + "包车攻略", + "交通方式", + "呼伦贝尔旅游" + ], + "content": "

先说结论

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

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

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

  • 海拉尔到草原核心区的距离超过150公里,全程以国省道为主,部分路段没有护栏
  • 莫日格勒河观景台需要走无导航的草地便道,雨后极易陷车
  • 从室韦到黑山头的边境公路全长约200公里,途中加油站极少
  • 9月以后部分路段开始结冰,对驾驶技术要求高
  • 草原无信号区域手机导航失效,需要提前下载离线地图

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

费用对比

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

  • 租车费:约600-900元/天,5天约3000-4500元
  • 油费:约800-1200元
  • 停车+景区内摆渡车:约500元
  • 合计约4300-6200元(不含住宿餐饮)

包车费用(同等行程):

  • 含专业领队+7座商务车:约800-1200元/天,5天约4000-6000元
  • 包含:全程接送、景区讲解、行程规划、应急协调

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

自由度

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

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

安全性

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

适合自驾的情况

  • 旅行团有越野车经验丰富的驾驶员
  • 人数6人以上,摊薄成本
  • 行程以摄影为主,需要极大的时间弹性
  • 有呼伦贝尔旅行经验(二刷以上)

适合包车的情况

  • 第一次去,不熟悉路线
  • 带孩子或老人,安全优先
  • 行程天数有限,希望效率最高
  • 想深度了解本地文化,需要领队讲解
  • 4人以下家庭,自驾反而更贵

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

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

" + }, + { + "id": "hulunbuir-travel-cost-breakdown", + "title": "呼伦贝尔旅行花费明细:玩一趟到底要多少钱", + "subtitle": "呼伦贝尔一趟到底花多少钱?本文拆解机票、住宿、交通、餐饮、活动、购物各项费用,给出高中低三档真实预算参考。", + "author": "呼籁旅行", + "date": "2026-02-15", + "category": "攻略", + "summary": "呼伦贝尔一趟到底花多少钱?本文拆解机票、住宿、交通、餐饮、活动、购物各项费用,给出高中低三档真实预算参考。", + "coverImage": "/images/team/hero-family.jpg", + "tags": [ + "旅游花费", + "预算攻略", + "性价比", + "呼伦贝尔费用" + ], + "content": "

先说总数

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

机票费用

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

  • 经济舱:北京出发来回约800-1500元/人,视旺淡季波动较大
  • 商务舱:约3000-5000元/人
  • 提前预订建议:7月旺季至少提前2个月订票,可省20-30%
  • 4人家庭机票合计约3200-6000元(经济舱)

定制游套餐费用

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

  • 4天3晚:约5800-7200元/人(视版本和人数)
  • 5天4晚:约7000-8500元/人
  • 6天5晚亲子版:约8500-10000元/人

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

额外活动费用

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

  • 骑马体验(30分钟):80-150元/人
  • ATV/越野摩托:200-400元/组
  • 热气球(部分区域):400-600元/人
  • 驯鹿基地参观:80元/人

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

餐饮费用

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

  • 牧民家就餐(手把肉+奶茶+各类奶制品):约100-150元/人
  • 海拉尔市区餐厅:约60-100元/人
  • 景区附近餐厅:质量参差,约80-120元/人
  • 5天餐饮合计(午晚餐):约1500-2500元(4人家庭)

购物费用

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

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

  • 经济档(淡季6月,拼房/民宿):约12000-16000元
  • 舒适档(旺季7月,包车定制游):约18000-25000元
  • 品质档(旺季7月,商务舱+高端住宿):约30000-40000元

省钱小技巧

  • 淡旺季差价约20-30%,6月或8月出行可节省不少
  • 提前3个月预订机票,通常比临时订便宜30%以上
  • 儿童优惠:大部分景区12岁以下半价或免票,提前了解政策
  • 选择套餐含活动的版本,比散拼更划算
" + }, + { + "id": "hulunbuir-travel-with-toddlers-4-6", + "title": "带4-6岁孩子去草原的注意事项", + "subtitle": "4-6岁是孩子最适合初次体验草原的年龄段,好奇心旺盛但自我保护能力弱。这篇文章总结了11年来服务这个年龄段孩子的所有注意事项。", + "author": "呼籁旅行", + "date": "2026-02-10", + "category": "亲子", + "summary": "4-6岁是孩子最适合初次体验草原的年龄段,好奇心旺盛但自我保护能力弱。这篇文章总结了11年来服务这个年龄段孩子的所有注意事项。", + "coverImage": "/images/team/hero-family.jpg", + "tags": [ + "4-6岁", + "幼童旅行", + "亲子注意事项", + "安全出行" + ], + "content": "

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

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

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

推荐参与:

  • 骑马体验(由专业牵马师全程陪同,配备儿童头盔和安全背心)
  • 接触牧民家的温顺马匹和羊群
  • 奶制品制作体验
  • 草地自由玩耍、捉昆虫、认植物
  • 篝火晚会观看(距火堆保持2米以上)
  • 湿地木栈道参观

不推荐参与:

  • ATV全地形越野车(最低年龄要求通常为12岁)
  • 快速骑马(无牵马师陪同的自由骑乘)
  • 深水区游泳
  • 夜间单独户外活动

防晒是头等大事

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

  • 选择SPF50+、PA+++的儿童专用防晒霜
  • 每隔2小时补涂一次,游泳或出汗后立即补涂
  • 上午10点至下午3点是UV最强时段,尽量避免长时间在无遮蔽处活动
  • 备好遮阳帽(大帽沿款)、防晒衣、太阳镜(儿童专用UV防护款)

饮食注意事项

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

  • 如果孩子对牛奶蛋白过敏,务必提前告知领队
  • 蒙古奶茶含有奶和砖茶,首次尝试给孩子少量品尝
  • 草原上的生水不可饮用,全程饮用瓶装水或自带滤水
  • 备好孩子平时爱吃的零食,避免因不适应当地食物而挨饿
  • 手把肉(煮羊腿)是当地特色,可以让孩子尝试,但注意骨头

行程节奏的把握

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

  • 上午安排主要景点或活动(精力最旺盛)
  • 下午安排轻松项目或营地自由活动
  • 避免连续多天长途驾车(每天车程控制在3小时以内)
  • 每天保证10小时左右睡眠(草原空气好,孩子睡得深)

常见突发状况处理

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

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

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

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

一句话总结

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

" + }, + { + "id": "hulunbuir-travel-tips-avoid-pitfalls", + "title": "呼伦贝尔避坑指南:这些坑千万别踩", + "subtitle": "呼伦贝尔旅游的坑不少:强制购物、人头拼团、低价陷阱、景区宰客……这篇避坑指南帮你把雷都踩在出发之前。", + "author": "呼籁旅行", + "date": "2026-01-25", + "category": "避坑", + "summary": "呼伦贝尔旅游的坑不少:强制购物、人头拼团、低价陷阱、景区宰客……这篇避坑指南帮你把雷都踩在出发之前。", + "coverImage": "/images/team/hero-grassland.jpg", + "tags": [ + "避坑指南", + "旅游陷阱", + "消费提醒", + "呼伦贝尔旅游" + ], + "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/team/hero-grassland.jpg", + "tags": [ + "草原穿搭", + "旅拍穿搭", + "拍照技巧", + "呼伦贝尔摄影" + ], + "content": "

草原拍照的核心逻辑

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

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

最推荐:

  • 白色:与绿草蓝天形成最强反差,任何角度都好看,是草原拍照的王者色
  • 米黄/驼色:低饱和度的暖色调与草原泥土色系天然融合,不抢镜,任何构图都好看
  • 天蓝/浅蓝:呼应天空色,融入感强,有「天人合一」的意境
  • 民族风红色:蒙古族传统服装色,与草原文化契合,但面积不宜过大

慎用:

  • 深绿色:与背景融合,人会「消失」在草原中
  • 印花/格纹:在草原简洁背景下显得杂乱
  • 荧光色:显眼但不好看,适合纪念照不适合大片

推荐款式

女生首选:

  • 飘逸长裙(纯色或简约印花):风吹裙摆是草原专属画面,必备
  • 蒙古族传统袍子(可在当地租借):文化感拉满,适合正式纪念照
  • 衬衫+高腰阔腿裤:干净清爽,适合日常旅行拍摄

男生推荐:

  • 白色或浅色衬衫:简单好配,不会抢镜
  • 户外风系列(防晒衣+功能裤):既实用又有探险感
  • 蒙古族传统服装:非常出片,可在当地租用

亲子家庭:

  • 建议全家选择同一色系,而非相同颜色
  • 经典组合:爸爸白衬衫+妈妈白裙+孩子蓝色或黄色(补色点亮画面)
  • 孩子适合亮色系,活泼的黄色、红色最出片

配件不可少

  • 帽子:草原必备,功能性(防晒)和美观性兼顾。草帽、白色棒球帽、蒙古风毡帽都很适合
  • 马术靴:穿上骑马靴整个人气质立刻不同,也很安全
  • 腰带/腰封:长裙加一条民族风腰带,层次感立刻出来

最佳拍摄时机

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

  • 黄金时刻(Golden Hour):日出后1小时(约6:00-7:30)和日落前1小时(约20:00-21:30)。此时光线暖黄,阴影柔和,任何构图都好看
  • 蓝调时刻:日出前和日落后15分钟,天空呈深蓝色,适合营地或蒙古包的夜景拍摄
  • 正午慎拍:10:00-16:00阳光直射,阴影浓重,容易曝光过度,此时建议在阴影处或营地内拍摄

拍摄构图小技巧

  • 低角度仰拍:把相机/手机放到腰部高度向上拍,以草地为前景,人物和天空占画面的上2/3,草原感最强
  • 留白天空:草原的天空是最好的背景,让人物处于画面下1/3,上方大面积留白
  • 奔跑/回眸:让被拍摄者做动态动作,避免生硬站立
  • 利用道路:边境公路的笔直道路是天然的透视线,站在道路中央拍摄有延伸感

实用建议

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

" + } + ] +} \ No newline at end of file diff --git a/data/brand.json b/data/brand.json new file mode 100644 index 0000000..aed3a6b --- /dev/null +++ b/data/brand.json @@ -0,0 +1,62 @@ +{ + "name": "呼籁旅行", + "fullName": "内蒙古呼籁文旅投资开发集团有限公司", + "domain": "1814.love", + "url": "https://1814.love", + "slogan": { + "emotional": "带孩子回到母亲的故乡", + "functional": "呼伦贝尔家庭定制游·一家一单一车" + }, + "trustStats": [ + { + "value": "10000+", + "unit": "组", + "label": "已服务家庭" + }, + { + "value": "39000+", + "unit": "人次", + "label": "累计服务人次" + }, + { + "value": "11", + "unit": "年", + "label": "深耕呼伦贝尔" + }, + { + "value": "9", + "unit": "家", + "label": "旗下企业" + } + ], + "differentiators": [ + { + "title": "自有营地", + "description": "呼籁自有草原活动基地,亲子互动、草原运动、户外体验的专属场地,不是拼团景点" + }, + { + "title": "自有车队", + "description": "呼籁旅游客运有限公司自营车队,不转卖客人给第三方,每一程都是呼籁自己的车、自己的师傅" + }, + { + "title": "自营体验", + "description": "呼籁营地、白桦林研学、黑山头研学、寻龙诀全地形越野车等核心体验项目均为呼籁自营,品质自己把控" + }, + { + "title": "自营旅拍", + "description": "呼籁自营旅拍团队,200+服饰可选,在呼籁营地定点旅拍,记录全家最自然的瞬间" + }, + { + "title": "专业团队", + "description": "3管家(车务+房务+客服)+ 1定制师 + 1专属领队,全程只服务您一个家庭" + }, + { + "title": "研学基地", + "description": "黑山头自有蒙古族文化研学基地,孩子在草原上动手体验、学习成长,不是走马观花" + } + ], + "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..ed7528b --- /dev/null +++ b/data/calendar.json @@ -0,0 +1,187 @@ +{ + "meta": { + "pageTitle": "呼伦贝尔最佳出行月份", + "pageIntro": "11年、39000+人次、每一个月份都送过客人出发——哪个月最值得去、哪个月要避开、带孩子选什么时间,我们用真实数据告诉你", + "bestTime": "6月~9月", + "quickRecommendations": [ + { + "label": "草原最美", + "months": "6—8月", + "reason": "绿草如茵,天高云淡,那达慕节庆" + }, + { + "label": "秋色绝景", + "months": "9月", + "reason": "白桦金黄,草原秋色,摄影圣地" + }, + { + "label": "错峰推荐", + "months": "5月 / 10月", + "reason": "人少价优,各有特色,舒适出行" + }, + { + "label": "冬季探险", + "months": "12—2月", + "reason": "冰雪那达慕,极寒体验,雪原驰骋" + } + ] + }, + "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": 4, + "tempRange": "5°C ~ 22°C", + "weatherFeature": "春风怡人,绿草铺地,野花盛放,气候舒适,游客尚少", + "highlights": ["草原野花漫山盛开", "绿草渐浓如毯", "候鸟迁徙壮观", "白天长达16小时"], + "clothingTips": "冲锋衣 + 长袖 + 防晒,早晚加绒衣一件", + "isPeakSeason": false, + "recommendedProducts": ["额吉的故乡V9"], + "tagline": "错峰推荐,花开无边" + }, + { + "month": 6, + "name": "六月", + "season": "summer", + "ratingStars": 5, + "tempRange": "15°C ~ 28°C", + "weatherFeature": "气候宜人,草原进入翠绿全盛期,是全年最美时节之一", + "highlights": ["莫日格勒河嫩绿如画", "一望无际的绿色草原", "骑马体验最舒适", "北疆夏至日长达17小时"], + "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": "草原金秋,色彩由绿转金,白桦林绝景,摄影爱好者公认圣地", + "highlights": ["白桦林一片金黄", "草原由绿转秋色", "额尔古纳湿地倒影绝美", "牧民秋季转场壮观"], + "clothingTips": "冲锋衣 + 毛衣,早晚加薄羽绒,温差显著需分层穿搭", + "isPeakSeason": true, + "recommendedProducts": ["游牧的森林(秋季)"], + "tagline": "秋景无双,摄影圣地" + }, + { + "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..94afd1c --- /dev/null +++ b/data/contact.json @@ -0,0 +1,50 @@ +{ + "channels": [ + { + "type": "wechat", + "label": "微信客服", + "value": "hulai1814", + "qrImage": "/images/contact/qrcode-wechat.jpg", + "primary": true, + "description": "添加微信,一对一沟通行程需求" + }, + { + "type": "miniprogram", + "label": "预订小程序", + "value": "呼籁旅行", + "qrImage": "/images/qrcode-miniprogram.png", + "description": "微信扫码进入小程序,在线了解和预订" + }, + { + "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..8715abd --- /dev/null +++ b/data/courses.json @@ -0,0 +1,257 @@ +{ + "modules": [ + { + "id": "ecology", + "icon": "🌿", + "name": "草原生态课", + "ageRange": "3-12岁", + "duration": "每次90分钟", + "shortDesc": "认识草原上的植物、昆虫、鸟类,理解食物链和生态系统的基本关系。", + "activities": [ + "植物标本采集与图鉴比对(仅采集枯叶,不伤害活株)", + "夜观星空:认识北斗七星和银河,了解游牧民如何用星星导航", + "草原土壤采样:观察不同深度的土壤颜色和生物", + "鸟类观察:用望远镜记录草原鸟类活动" + ], + "objectives": [ + "能识别5种以上草原常见植物(如羊草、针茅、狼毒花)", + "了解草原食物链:草→鼠→鹰的完整链条", + "理解游牧民与草原之间的共生关系", + "培养对自然生命的敬畏与保护意识" + ], + "philosophy": "生态教育不是在课堂里讲生物课,而是让孩子蹲下来,安静地看一只草原蚂蚱如何生活。" + }, + { + "id": "horse", + "icon": "🐎", + "name": "马术体验课", + "ageRange": "4-12岁", + "duration": "每次60分钟", + "shortDesc": "从认识马、与马建立信任,到基础骑乘,体验游牧民族与马之间的独特情感纽带。", + "activities": [ + "认识马:马的身体结构、情绪表达方式、安全距离", + "与马建立信任:喂草、轻抚、眼神交流练习", + "基础骑乘体验:领队牵马在指定草地范围内步行骑行", + "马术文化课:蒙古族马文化、那达慕赛马传统讲解" + ], + "objectives": [ + "了解蒙古马的品种特点和历史文化地位", + "掌握马匹日常照料基础:喂食、刷毛、缰绳系法", + "完成有领队陪同的基础骑乘(步行圈乘)", + "建立对动物的尊重与责任感" + ], + "philosophy": "马是蒙古族最亲密的伙伴。让孩子第一次坐上马背,是与这片草原文明的真实连接。" + }, + { + "id": "nomad", + "icon": "🏕️", + "name": "游牧文化课", + "ageRange": "5-12岁", + "duration": "每次120分钟", + "shortDesc": "走进蒙古包,跟牧民家庭学习搭建、拆卸、日常生活,体验真实的游牧文化。", + "activities": [ + "蒙古包DIY:亲手参与搭建小号教学蒙古包", + "牧民厨房:在牧民阿妈指导下制作奶茶和炒米", + "游牧乐器体验:马头琴听讲和简单节奏感知", + "传统服装体验:穿上蒙古袍,了解每个装饰的含义" + ], + "objectives": [ + "了解蒙古包的结构和搭建原理(与自然的关系)", + "体验游牧生活的基本技能:挤奶、制奶茶、晾奶豆腐", + "理解游牧文化中「迁徙」的生态智慧", + "尊重并欣赏不同民族的生活方式" + ], + "philosophy": "游牧文明是人类与自然最和谐的相处方式之一。让孩子亲身体验,比任何课本都更有说服力。" + }, + { + "id": "art", + "icon": "🎨", + "name": "自然艺术课", + "ageRange": "3-12岁", + "duration": "每次90分钟", + "shortDesc": "用草原上捡到的材料创作艺术,让孩子用创意表达对自然的感受。", + "activities": [ + "大地艺术:在草地上用天然材料拼出图案", + "自然笔记:用画笔记录今天观察到的一种植物或动物", + "石头彩绘:将草原上拾到的石头画成小动物", + "草编基础:学习蒙古族传统草编工艺的简单入门" + ], + "objectives": [ + "用自然材料(石头、枯草、羽毛)完成一件艺术作品", + "学会用线条和颜色记录自然观察(自然笔记)", + "理解「取之自然、用之有度」的创作伦理", + "建立个人审美和创意表达能力" + ], + "philosophy": "最好的画布就是大地。最好的颜料就是孩子对这片草原的情感。" + }, + { + "id": "team", + "icon": "🤝", + "name": "团队成长课", + "ageRange": "6-12岁", + "duration": "每次120分钟", + "shortDesc": "通过草原场景中的团队挑战,培养沟通、合作和领导力。", + "activities": [ + "草原寻宝:分组完成地图导航和线索解谜任务", + "搭建营地:6人小组在规定时间内搭建遮蔽所", + "信任盲走:蒙眼在队友引导下完成草地穿越", + "故事圈:每晚围营火分享今天最有挑战的时刻" + ], + "objectives": [ + "在陌生环境中主动建立与同伴的信任", + "学会在团队任务中有效分工和沟通", + "体验挫折并找到解决问题的方法", + "认识自己在团队中的角色和贡献" + ], + "philosophy": "草原没有捷径,但有方向。团队成长课教的不是竞争,是如何在未知中互相支持。" + }, + { + "id": "lnt", + "icon": "🌍", + "name": "LNT无痕环保课", + "ageRange": "5-12岁", + "duration": "每次60分钟", + "shortDesc": "学习「Leave No Trace」无痕山野七大原则,培养真正的环保行动力。", + "activities": [ + "无痕营地实践:检查营地,发现并修复对环境的微小影响", + "垃圾分类挑战:在草原场景中完成垃圾分类和正确处理", + "足迹科学:测量并计算小组活动对草地的踩踏面积", + "环保承诺卡:写下回家后的一个环保行动并拍照留念" + ], + "objectives": [ + "了解LNT无痕山野七大原则及其原因", + "掌握草原环境中的无痕宿营实践方法", + "理解人类活动对草原生态的实际影响", + "回家后能把LNT理念传递给身边的人" + ], + "philosophy": "最好的环保教育不是告诉孩子'不能做什么',而是让他们亲眼看到,亲手感受,然后自己做出选择。" + } + ], + "ageGroups": [ + { + "id": "toddler", + "emoji": "🐣", + "focus": "感知与好奇", + "label": "探索组 3-5岁", + "headline": "用感官探索草原的一切", + "highlights": [ + "父母全程陪同,亲子共探", + "以触摸、嗅觉、听觉为主要学习方式", + "每次活动不超过45分钟,符合专注力发展", + "强调安全感和情绪表达,不强迫参与任何活动", + "结营获得个人草原探索小书" + ], + "description": "3-5岁的孩子处于感知世界的黄金期。这个年龄段的课程以感官体验为主——摸、闻、看、听,不强调知识记忆,强调情感连接。父母全程陪同,亲子共同探索。", + "recommendedModules": [ + "ecology", + "art", + "lnt" + ] + }, + { + "id": "child", + "emoji": "🌟", + "focus": "体验与探索", + "label": "探险组 6-8岁", + "headline": "在探险中建立自信与好奇", + "highlights": [ + "每天1个独立完成的小任务", + "开始学习简单的自然科学观察方法", + "基础马术体验(有领队全程陪同)", + "参与游牧文化DIY活动", + "结营获得个人成长记录手册和技能徽章" + ], + "description": "6-8岁是自信心和独立性快速发展的阶段。探险组的课程设计鼓励孩子在安全范围内独立完成小任务,并开始理解自然系统背后的逻辑。每天有明确的小挑战和成就感积累。", + "recommendedModules": [ + "ecology", + "horse", + "nomad", + "art", + "lnt" + ] + }, + { + "id": "teen", + "emoji": "🏔️", + "focus": "思考与领导", + "label": "领袖组 9-12岁", + "headline": "从体验者到探索者的转变", + "highlights": [ + "参与团队领导力挑战项目", + "完成一份完整的草原生态观察报告", + "深度游牧文化课:与牧民家庭进行真实交流", + "LNT实地项目:为营地制定一份环保改进方案", + "结营获得自然探索认证和个人成长评估报告" + ], + "description": "9-12岁的孩子已经具备抽象思维能力,能够理解生态系统、文化传承等复杂概念。领袖组课程加入更多挑战性任务、团队决策场景和深度文化探究,鼓励孩子提问和批判性思考。", + "recommendedModules": [ + "ecology", + "horse", + "nomad", + "team", + "lnt" + ] + } + ], + "faq": [ + { + "a": "完全安全。马术课使用的是经过专门训练的温顺蒙古马,全程由有5年以上经验的专业领队牵马陪同,孩子不会独自骑行。4岁以上孩子即可参与步行体验,强调与马建立信任,不强调技巧。活动前有完整的安全讲解和装备检查。", + "q": "孩子没有骑过马,马术课安全吗?" + }, + { + "a": "大部分课程在户外进行,这是我们设计的核心。天气预备方案:小雨不影响户外活动(雨天草原更美),中雨以上会转移到蒙古包室内进行游牧文化课、自然艺术课等室内模块。我们始终保证每天的课程质量,而不是简单'取消'。", + "q": "课程全部是户外吗?下雨天怎么办?" + }, + { + "a": "请在报名时如实填写孩子的过敏情况。我们的医疗联络人会根据营期草原的具体植被情况给出评估意见。通常7月下旬至8月中旬是花粉高峰期,建议过敏体质孩子选择6月或9月的营期,同时随行携带必备药物。", + "q": "孩子有严重花粉过敏,能参加吗?" + }, + { + "a": "取决于年龄段。3-5岁探索组需要家长全程陪同参与。6-8岁探险组和9-12岁领袖组,我们建议孩子独立参营(父母在附近的营地等待),这有助于孩子建立真正的自信和独立性——但家长也可以选择陪同,我们有亲子共营版本。", + "q": "父母可以全程陪同吗?还是需要独立参营?" + }, + { + "a": "每期最多16个孩子,确保每4个孩子配备1名自然教育导师,同时配备1名当地专业领队。师生比不超过1:4,这是我们的底线。小班制是小蒙马研学的核心承诺之一,我们不会为了多收费而扩大营地规模。", + "q": "每期招多少孩子?师生比例是多少?" + } + ], + "philosophy": { + "headline": "在自然中学习,在游戏中成长", + "tagline": "草原是最好的教室,大自然是最好的老师", + "description": "呼籁小蒙马研学课程以LNT(Leave No Trace)自然教育理念为核心,结合呼伦贝尔草原、森林、湿地等多种生态系统,设计了覆盖3-15岁全年龄段的系统化自然教育课程体系。每门课程均由自然教育专家和儿童教育专家共同开发,注重动手实践、启发式引导和深度体验。", + "values": [ + { + "label": "自然启蒙", + "desc": "在真实的草原环境中建立对自然的认知和情感连接" + }, + { + "label": "动手实践", + "desc": "以行动为中心的学习,不只是看和听,而是真正去做" + }, + { + "label": "年龄分层", + "desc": "针对不同年龄段认知特点,定制学习深度和表达方式" + }, + { + "label": "家庭共学", + "desc": "父母与孩子共同参与,在旅途中建立珍贵的家庭记忆" + } + ] + }, + "instructors": { + "placeholder": [ + { + "name": "自然教育师(招募中)", + "title": "LNT认证自然教育师", + "credentials": "LNT认证 · 儿童自然教育专业培训", + "bio": "我们正在招募有热情的自然教育师加入小蒙马团队,如果你热爱草原、热爱孩子,欢迎联系我们。" + }, + { + "name": "草原向导 · 牧民老师", + "title": "本地牧民导师", + "credentials": "世居牧民家庭 · 草原生活实践者", + "bio": "来自呼伦贝尔的牧民老师,用最真实的草原生活经验教孩子认识马、牛、羊,以及草原上的动植物。" + } + ] + } +} \ No newline at end of file diff --git a/data/customize.json b/data/customize.json new file mode 100644 index 0000000..46e8d92 --- /dev/null +++ b/data/customize.json @@ -0,0 +1,91 @@ +{ + "trustStats": [], + "durations": [ + { + "label": "4天3晚(精华版)", + "value": "4天3晚" + }, + { + "label": "5天4晚(经典版)", + "value": "5天4晚" + }, + { + "label": "6天5晚(亲子/探索版)", + "value": "6天5晚" + }, + { + "label": "7天6晚(深度/狂野版)", + "value": "7天6晚" + } + ], + "activities": [ + { + "label": "亲子活动", + "value": "亲子活动" + }, + { + "label": "旅拍", + "value": "旅拍" + }, + { + "label": "骑马", + "value": "骑马" + }, + { + "label": "蒙古包住宿", + "value": "蒙古包住宿" + }, + { + "label": "草原露营", + "value": "草原露营" + }, + { + "label": "私人牧场", + "value": "私人牧场" + } + ], + "budgets": [ + { + "label": "5,000 元以下", + "value": "5000元以下" + }, + { + "label": "5,000 — 8,000 元", + "value": "5000-8000元" + }, + { + "label": "8,000 — 12,000 元", + "value": "8000-12000元" + }, + { + "label": "12,000 元以上", + "value": "12000元以上" + }, + { + "label": "不限预算", + "value": "不限预算" + } + ], + "process": [ + { + "desc": "告诉我们几口人、想玩几天、有没有特别的期待", + "title": "填写需求" + }, + { + "desc": "专属定制师通过微信联系您,0元咨询费", + "title": "2小时内回复" + }, + { + "desc": "行程、住宿、费用明细一次说清,所有细节写进合同", + "title": "拿到专属方案" + }, + { + "desc": "一家一单一车,全程只服务你们一个家庭", + "title": "出发,只属于你家" + } + ], + "contact": { + "tip": "工作时间 09:00 — 21:00,节假日不休", + "wechat": "扫码添加微信" + } +} \ No newline at end of file diff --git a/data/destinations-detail.json b/data/destinations-detail.json new file mode 100644 index 0000000..72f8322 --- /dev/null +++ b/data/destinations-detail.json @@ -0,0 +1,286 @@ +{ + "destinations": [ + { + "id": "moriguole", + "name": "莫日格勒河", + "subtitle": "天下第一曲水 · 老舍笔下的草原河曲", + "tag": "草原核心", + "description": "1961年老舍来这儿考察,脱口而出「天下第一曲水」,这名号就此传开。河本身不宽,有些河段窄到你觉得一步就能跨过去,但它在三百公里的草原上拐出了上千个弯。从牧云山顶或断崖制高点往下看,河道的S弯一层套一层,两岸吃草的牛羊像散落的棋子,那种辽阔感是照片拍不出来的。呼籁旅行的自营营地就扎在莫日格勒河畔,早起出帐篷两分钟走到河边,晨雾配合日出光线,出片率极高。草原深处没手机信号,跟着我们的车队走才不会迷路。", + "highlights": [ + "牧云山顶/断崖俯瞰河曲全景——目前公认最佳机位,比金帐汗那边角度好", + "沿河岸骑马漫步,牛羊就在身边,比黑山头骑马更有草原腹地的感觉", + "呼籁自营营地入住,河边BBQ、旅拍、看星空一条龙", + "清晨河面起雾时拍大片,日出前后1小时是黄金时间", + "穿越草原腹地到营地的路本身就是体验——便道、牛群、无信号" + ], + "bestSeason": { + "primary": "7月-8月" + }, + "heroImage": "/images/destinations/moriguole.jpg", + "seasons": [ + "summer" + ] + }, + { + "id": "eergunashire", + "name": "额尔古纳湿地", + "subtitle": "亚洲第一湿地 · 根河的Ω形大弯", + "tag": "生态景观", + "description": "号称「亚洲第一湿地」,从额尔古纳市区开车3公里就到,不算远。核心体验就是爬到海拔720米的主峰观景台往下看——根河拐出的一个完美Ω形大弯和一个形状像树叶的湖心岛,绿色铺到天际线,河道像大地的血管蜿蜒其中。说实话,走到山顶那一刻确实被震住了。木栈道下山一路视角不断变化,每一段都值得停下来。秋季9月下旬到10月初来最震撼,湿地从绿变黄变红,颜色层次极其丰富。", + "highlights": [ + "登顶观景台看Ω形河弯和叶形湖心岛——所有宣传照都是这个角度", + "木栈道下山一路看湿地层次变化,每段视角都不同", + "秋季色彩爆发——9月下旬到10月初,黄红绿三色交织", + "早晨6点前到,雾气在河面和树丛间弥漫,比中午去好十倍", + "河里有鱼、岸边有水鸟,运气好能看到丹顶鹤" + ], + "bestSeason": { + "primary": "9月中旬-10月初" + }, + "heroImage": "/images/destinations/eergunashire.jpg", + "seasons": [ + "summer" + ] + }, + { + "id": "baihualin", + "name": "白桦林", + "subtitle": "国内面积最大的纯生白桦林 · 亲子拍照圣地", + "tag": "森林体验", + "description": "在额尔古纳到恩和的省道边上,将近1000公顷的纯生白桦林,国内面积最大的。树干白得发亮,阳光透过树冠洒下来确实好看。景区开发得比较成熟,分了好几个主题区,不算原生态体验,但胜在拍照出片率高,带孩子来也有地方玩。呼籁安排的行程里,白桦林有非遗传承人现场教桦树皮画,按年龄分层体验——这个才是这里最值得的环节。秋季9月底白桦叶变金黄,配白色树干,随手拍都是大片。", + "highlights": [ + "非遗传承人现场教桦树皮画,按孩子年龄分层体验", + "空中栈道——架在树冠层的步道,从上往下看白桦林感觉不一样", + "驯鹿苑——景区养了驯鹿可以近距离喂食,孩子最爱的环节", + "秋季金黄白桦叶配白色树干,随手拍都是大片", + "全地形越野车穿越白桦林——往返12公里自由驰骋" + ], + "bestSeason": { + "primary": "9月下旬-10月初" + }, + "heroImage": "/images/destinations/baihualin.jpg", + "seasons": [ + "summer", + "autumn" + ] + }, + { + "id": "enhe-shiwei", + "name": "恩和·室韦", + "subtitle": "华俄后裔的木刻楞村落 · 边境安宁小镇", + "tag": "民族文化", + "description": "两个村子离得不远但气质不同。室韦开发早,主街热闹,商业化明显;恩和安静得多,蒙语意思就是「和平安宁」,入选了中国传统村落名录。居民都是华俄后裔,长着混血面孔说着东北话,住的是俄式木刻楞房子,冬暖夏凉。最有意思的体验是去列巴坊看大妈现烤列巴面包,配上自家腌的酸黄瓜和蓝莓酱,再喝杯俄式果茶。呼籁的行程安排在恩和骑马穿越——穿越草原、湿地、森林、河流四种地形,和其他地方骑马感受完全不同。", + "highlights": [ + "恩和沉浸式骑马穿越——草原、湿地、森林、河流四种地形", + "木刻楞民居——原木垒成的俄式传统木屋,走进去能闻到木头香", + "热尼亚列巴坊手作体验——看列巴烤制全过程,现烤现吃", + "额尔古纳河边看对岸俄罗斯——河对面就是俄罗斯村庄", + "画套娃、做列巴、品俄式果茶——沉浸式文化体验" + ], + "bestSeason": { + "primary": "7月-8月" + }, + "heroImage": "/images/destinations/shiwei.jpg", + "seasons": [ + "summer", + "autumn" + ] + }, + { + "id": "heishantou", + "name": "黑山头", + "subtitle": "呼伦贝尔骑马首选地 · 边境日落", + "tag": "骑马体验", + "description": "黑山头是呼伦贝尔公认的骑马最佳地点,原因很简单——这边草原特别开阔平坦,视野好,马场多且正规。不是景区里牵着走一小圈的那种,而是马倌带路你自己控马在草原上跑,大圈下来一个多小时。傍晚一定要去日落山,看夕阳把额尔古纳河和整片草原湿地染成金色。呼籁的探索版行程安排了恩和+黑山头两次骑马——白桦林间漫步和草原驰骋完全不同的体验。", + "highlights": [ + "草原骑马穿越——自己控马不是牵马,大圈1-1.5小时真实骑行", + "日落山观日落——看额尔古纳河湿地被夕阳染金,呼伦贝尔最美日落之一", + "中俄边防公路——左边是额尔古纳河和俄罗斯,右边是无边草原,路本身就是景", + "ATV穿越湿地——秋季五彩湿地中驾驶全地形车穿行", + "牧户家访——进蒙古包挤牛奶、喂小羊、喝奶茶" + ], + "bestSeason": { + "primary": "7月-8月" + }, + "heroImage": "/images/destinations/heishantou.jpg", + "seasons": [ + "summer", + "autumn" + ] + }, + { + "id": "manzhouli", + "name": "满洲里", + "subtitle": "中俄蒙三国交汇的异域边城", + "tag": "边境文化", + "description": "满洲里不像一个中国城市,更像是把俄罗斯小城搬了一半过来。街上到处是俄文招牌,餐厅菜单有俄文版,路上能碰到真正的俄罗斯人来采购。套娃广场那个巨型套娃建筑里面其实是个酒店,周围大大小小的套娃到了晚上全亮灯,效果很梦幻。国门景区能看到对面俄罗斯的后贝加尔斯克小镇。带孩子来最好——满洲里是少有的能让小孩主动问问题的地方:那个大套娃里面住着谁?对面河那边是哪个国家?", + "highlights": [ + "套娃广场夜景——晚上亮灯后整个广场变成童话世界,白天别去", + "国门景区——第五代国门,一侧中国一侧俄罗斯", + "俄罗斯大马戏——驯兽、空中飞人,欧式巴洛克风格剧场", + "套娃酒店入住——冬季北线行程安排住这里,体验异域风情", + "俄式餐厅——红菜汤和手工列巴味道正宗" + ], + "bestSeason": { + "primary": "6月-8月" + }, + "heroImage": "/images/destinations/manzhouli.jpg", + "seasons": [ + "summer", + "autumn", + "winter" + ] + }, + { + "id": "aershan", + "name": "阿尔山国家森林公园", + "subtitle": "AAAAA级 · 火山天池群 · 温泉之都", + "tag": "地质奇观", + "description": "阿尔山不是一座山,是一座小城,蒙语意思是「热的圣水」,说的就是温泉。森林公园是AAAAA级加世界地质公园,面积10万公顷,里面有50多座火山锥、19个火山口、8个天池。一天根本逛不完,门票可以两天内重复进园。必须去的是驼峰岭天池——火山口积水形成的湖,蓝得不真实,需要爬山但不高。杜鹃湖也值得,月牙形湖面春天周围开满杜鹃花。冬季的阿尔山是嗨冰雪线路的核心——白狼峰日出、不冻河、百里雾凇画廊、泡温泉,都安排在这。", + "highlights": [ + "驼峰岭天池——阿尔山天池群中最大最深的,蓝得不真实", + "白狼峰日出+泼水成冰——冬季必玩,零下三十度的视觉冲击", + "不冻河——零下几十度依然流淌,岸边雾凇配河面蒸腾雾气", + "石塘林——火山喷发岩浆凝固的石林,像外星地表", + "ATV卡丁车森林穿越——在林间小道上驾驶全地形车" + ], + "bestSeason": { + "primary": "9月中旬(秋色)" + }, + "heroImage": "/images/destinations/aershan.jpg", + "seasons": [ + "autumn", + "winter" + ] + }, + { + "id": "shiwei", + "name": "室韦·恩和", + "subtitle": "中国俄罗斯族第一村 · 边境秘境", + "tag": "民族文化", + "description": "室韦和恩和是额尔古纳河畔两座毗邻的边境小村,也是中国俄罗斯族聚居最集中的地方,被誉为「中国俄罗斯族第一村」。这里的居民多为中俄混血后裔,至今保留着俄罗斯族的生活习俗:木刻楞民居、手工列巴面包、俄式点心……走进村子,仿佛置身于西伯利亚的某个小村落。额尔古纳河在村前流淌,对岸便是俄罗斯,中俄两国鸡犬相闻的奇特景象在这里真实上演。室韦的夜晚宁静安详,星空灿烂如宝石,是厌倦城市喧嚣、寻求深度旅行体验的家庭的理想目的地。", + "highlights": [ + "参观俄罗斯族木刻楞民居,了解中俄混血文化的独特生活方式", + "品尝手工列巴和俄式点心,体验正宗俄罗斯族传统美食", + "额尔古纳河边远眺对岸俄罗斯,感受中俄边境的历史沧桑", + "室韦星空观测,远离城市光污染的绝佳观星胜地", + "骑马穿越边境草原,感受额尔古纳河流域独特的自然风光" + ], + "bestSeason": { + "primary": "7月-8月", + "secondary": "9月", + "description": "夏季绿意最浓,骑马和额尔古纳河景色最佳。9月秋色开始,边防公路两侧层林尽染。" + }, + "heroImage": "/images/destinations/shiwei.jpg", + "seasons": [ + "summer", + "autumn" + ], + "tips": [ + "室韦开发较早商业气息浓,恩和更安静有生活气息,推荐两个都去", + "额尔古纳河边可以望对岸俄罗斯村庄,注意不要越境", + "列巴面包上午去买,下午基本售罄", + "夜里气温低,即使夏天也要带薄外套" + ], + "relatedProducts": [ + "v9-5d4n", + "v9-6d5n-family", + "v9-7d6n-family", + "v9-7d6n-wild" + ], + "seo": { + "title": "室韦·恩和旅游攻略 - 中国俄罗斯族第一村 | 呼籁旅行", + "description": "室韦恩和是华俄后裔聚居的边境秘境,木刻楞民居、手工列巴、额尔古纳河边望俄罗斯。呼籁旅行带你深度体验这片独特的中俄边境风情。", + "keywords": "室韦,恩和,中国俄罗斯族,木刻楞,列巴,额尔古纳河,边境旅游" + } + }, + { + "id": "daxinganling", + "name": "大兴安岭·莫尔道嘎", + "subtitle": "中国最后一片寒温带原始森林 · 森林小火车", + "tag": "森林探秘", + "description": "莫尔道嘎国家森林公园是中国最后一片寒温带明亮针叶原始森林,森林覆盖率94.97%。最大的卖点是森林观光小火车——三节车厢全程9.87公里,时速15公里,绕公园一圈大约一个半小时。小火车穿行在林海里确实有童话感,沿途设了几个站可以下车拍照。最后一站有野生小松鼠和可以喂的小鹿,孩子特别开心。呼籁夏季亲子版行程安排了森林小火车+兴安神鹿园喂驯鹿,从草原走进森林,一路风景完全不同。", + "highlights": [ + "森林小火车穿行原始森林——全程9.87公里,每站可下车游览拍照", + "兴安神鹿园零距离喂驯鹿——大兴安岭深处的亲子亮点", + "樟子松林观景台——从这里看出去就是无尽的「林海」", + "秋季层林尽染——9月底到10月初目光所及都是色彩", + "原始森林徒步——空气负氧离子含量极高,真正的森林浴" + ], + "bestSeason": { + "primary": "9月底-10月初" + }, + "heroImage": "/images/destinations/daxinganling.jpg", + "seasons": [ + "summer", + "autumn" + ] + }, + { + "id": "hulunhu", + "name": "呼伦湖", + "subtitle": "北方第一大湖 · 冬季穿越蓝冰", + "tag": "湖泊景观", + "description": "呼伦湖是内蒙古最大的湖泊,面积约2339平方公里。夏季碧波万顷,岸线蜿蜒800多公里,和草原连成一片,日落时分整个湖面被染成金色。但真正让人印象深刻的反而是冬季——呼伦湖结冰后形成壮观的蓝冰,嗨冰雪北线行程安排了穿越呼伦湖蓝冰,在冰面上行走的体验完全不一样。湖里产鲤鱼、鲫鱼、白鱼,现捕现做的全鱼宴是来这儿的必吃项目。", + "highlights": [ + "冬季穿越蓝冰——呼伦湖结冰后形成的蓝冰奇观,嗨冰雪北线核心体验", + "湖边看日落——金色夕阳映照万顷碧波,草原与湖水连成一片", + "现捕现做全鱼宴——湖里的鲤鱼鲫鱼白鱼新鲜到桌", + "春秋候鸟迁徙——数万候鸟栖息湖面的壮观景象", + "风车公路——通往呼伦湖的公路两侧风力发电机阵列" + ], + "bestSeason": { + "primary": "7月-8月" + }, + "heroImage": "/images/destinations/hulunhu.jpg", + "seasons": [ + "summer", + "autumn" + ] + }, + { + "id": "aoluguya", + "name": "敖鲁古雅驯鹿部落", + "subtitle": "中国唯一的驯鹿民族 · 鄂温克使鹿文化", + "tag": "民族探访", + "description": "这是中国唯一的驯鹿部落,鄂温克族是中国仅存的游猎民族。但说实话:现在游客去的「敖鲁古雅」是政府修建的旅游景区,不是真正的猎民营地——真正的鄂温克猎民和驯鹿生活在150公里外的深山密林里。景区里能喂驯鹿、看博物馆、了解桦皮文化和萨满文化,商业化程度不低但如果调整好预期带孩子来还是很有教育意义的。冬季嗨冰雪北线安排了深入根河方向的布冬霞驯鹿部落,坐驯鹿雪橇、穿鄂温克民族服饰,体验更真实一些。", + "highlights": [ + "近距离喂驯鹿——买苔藓喂食拍照,驯鹿很温顺", + "鄂温克博物馆——了解驯鹿文化、狩猎文化、桦皮文化和萨满文化", + "撮罗子体验——鄂温克传统圆锥形住所,可以进去坐坐", + "冬季驯鹿雪橇——嗨冰雪北线安排的布冬霞驯鹿部落体验", + "鄂温克民族服饰体验——穿上传统服饰在雪地里拍照" + ], + "bestSeason": { + "primary": "7月-8月" + }, + "heroImage": "/images/destinations/aoluguya.jpg", + "seasons": [ + "summer", + "autumn", + "winter" + ] + }, + { + "id": "genhe", + "name": "根河·中国冷极", + "subtitle": "历史最低温-58°C · 不冻河奇观", + "tag": "冷极探秘", + "description": "根河是中国官方认定的最冷城市,历史最低温零下58度。但大多数游客不是冬天来的——夏天的根河其实是个避暑胜地,七八月也就20度出头。冬天来的话,泼水成冰是必玩项目:零下三四十度往空中泼热水瞬间变成冰晶散开,怎么拍怎么好看。嗨冰雪北线的行程最后安排在根河——布冬霞驯鹿部落喂驯鹿、铁锹烤肉、鄂温克民族服饰体验,然后从根河返回海拉尔。", + "highlights": [ + "泼水成冰——零下三四十度的经典打卡体验,怎么拍怎么好看", + "不冻河——零下几十度依然流淌,河面蒸腾的雾气配岸边雾凇", + "冷极碑打卡——标注「-58°C」的地标,冬季来必拍", + "铁锹烤肉——用真铁锹当烤盘,根河特色美食", + "夏季避暑——七八月白天20度左右,原始森林负氧离子爆表" + ], + "bestSeason": { + "primary": "12月-2月" + }, + "heroImage": "/images/destinations/genhe.jpg", + "seasons": [ + "winter" + ] + } + ] +} \ No newline at end of file diff --git a/data/destinations.json b/data/destinations.json new file mode 100644 index 0000000..4f03898 --- /dev/null +++ b/data/destinations.json @@ -0,0 +1,111 @@ +{ + "title": "亲子游目的地怎么选?", + "subtitle": "一份客观对比,帮你找到最适合全家的那个答案", + "intro": "很多家庭在规划暑假亲子游时,会在呼伦贝尔、新疆北疆和呼和浩特周边草原之间犹豫。三个目的地各有魅力,以下是我们基于真实数据的客观对比,不贬低任何目的地,只帮你找到最适合带孩子去的那个。", + "destinations": [ + { + "highlight": true, + "id": "hulunbuir", + "name": "呼伦贝尔", + "tag": "草原+森林+湿地" + }, + { + "id": "xinjiang", + "name": "北疆", + "tag": "雪山+草甸+湖泊" + }, + { + "id": "west-inner-mongolia", + "name": "呼和浩特周边", + "tag": "希拉穆仁+辉腾锡勒+响沙湾" + } + ], + "dimensions": [ + { + "label": "夏季气温", + "icon": "🌡️", + "values": [ + "均温20-21°C,天然避暑胜地", + "21-31°C,部分地区可达35°C+", + "呼和浩特17-28°C,响沙湾沙漠区域体感更热" + ] + }, + { + "label": "日均车程", + "icon": "🚗", + "values": [ + "2-3小时,日行150-250km", + "6-8小时,日行400-600km", + "景点集中,希拉穆仁80km、辉腾锡勒110km、响沙湾180km,3-4天可走完" + ] + }, + { + "label": "海拔", + "icon": "⛰️", + "values": [ + "600-770m,零高反风险", + "赛里木湖2072m、巴音布鲁克2500m,有轻微高反可能", + "呼和浩特1050m,辉腾锡勒1800-2100m,整体无高反风险" + ] + }, + { + "label": "景观密度", + "icon": "🏞️", + "values": [ + "草原+森林+湿地+河流+湖泊+边境小镇,紧凑环线一次体验", + "雪山+高山草甸+峡谷+湖泊极其壮美,但景点间距极大", + "草原+沙漠两种体验可兼得,行程紧凑高效,但草原辽阔感不如呼伦贝尔" + ] + }, + { + "label": "游客密度", + "icon": "👥", + "values": [ + "2024年全年3443万人次,区域25.3万km²,体感不拥挤", + "2024年全年3.02亿人次,独库公路日通车超2万辆", + "希拉穆仁暑期团队游较多,响沙湾人气旺但设施成熟不用排太久" + ] + }, + { + "label": "亲子适配", + "icon": "👨‍👩‍👧", + "values": [ + "地势平坦安全,成熟亲子营+研学体系,孩子跑得开", + "长途车程对孩子不友好,山路+高海拔有一定风险", + "响沙湾沙漠项目丰富孩子爱玩,草原部分体验较浅,适合首次体验草原+沙漠的家庭" + ] + }, + { + "label": "费用参考", + "icon": "💰", + "values": [ + "家庭4人5-7天约1-1.7万(含北京出发机票)", + "家庭4人7-10天约1.8-3.5万(距离远天数多)", + "家庭4人3-4天约0.5-1万,行程短费用低,性价比高" + ] + }, + { + "label": "文化体验", + "icon": "🎭", + "values": [ + "蒙古族+俄罗斯族+鄂温克族,三重文化交融", + "哈萨克族+维吾尔族+丝路历史,多民族风情", + "蒙古族文化+沙漠娱乐,适合短途初体验,深度稍浅" + ] + } + ], + "honestNote": { + "title": "我们的坦诚", + "subtitle": "呼伦贝尔也有不完美的地方", + "items": [ + "旺季房紧:7月中旬至8月中旬住宿紧张且价格上浮,建议提前1-2个月预订", + "南方航班少:广州、深圳出发直飞航班有限,可能需要中转", + "壮观度:呼伦贝尔的风景是辽阔舒展型的,不如新疆雪山峡谷那般「震撼」" + ] + }, + "closing": { + "title": "为什么呼籁只做呼伦贝尔?", + "text": "新疆壮美,呼和浩特周边方便,每个目的地都有自己的好。但我们选择只做呼伦贝尔,是因为11年的深耕让我们确信:如果你有5-7天假期,想带孩子看真正辽阔的草原、穿越森林湿地、体验多民族文化——呼伦贝尔是综合最优解。我们把所有精力放在一个地方,才能把每一条路线、每一个营地、每一位领队都打磨到最好。不是其他地方不好,而是对家庭亲子游这件事,呼伦贝尔真的很合适,而我们恰好最懂它。" + }, + "dataSources": "气温数据来源:中国气象局;旅游人次数据来源:呼伦贝尔市2024年统计公报、新疆维吾尔自治区文旅厅;距离数据来源:高德地图实测" +} \ No newline at end of file diff --git a/data/faq.json b/data/faq.json new file mode 100644 index 0000000..d80d37e --- /dev/null +++ b/data/faq.json @@ -0,0 +1,313 @@ +{ + "categories": [ + { + "id": "product", + "name": "产品类", + "questions": [ + { + "id": "what-is-eqi", + "question": "额吉的故乡是什么?", + "answer": "额吉的故乡是呼籁旅行的核心产品系列,目前已迭代至V9版本。「额吉」在蒙古语中是「母亲」的意思,这个名字承载着呼籁对呼伦贝尔这片土地的深厚感情——希望每个来到这里的家庭,都能感受到草原如母亲般的温暖和包容。产品采用一家一单一车的定制模式,涵盖4天3晚到7天6晚多个版本,满足不同家庭的假期安排和出行需求。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看所有产品版本" + } + ] + }, + { + "id": "what-products", + "question": "呼籁有哪些产品?", + "answer": "呼籁旅行目前有两大产品线:额吉的故乡V9系列和小蒙马夏令营。额吉的故乡V9系列是家庭定制游产品,一家一单一车,提供4天3晚至7天6晚共6个版本,适合不同假期和偏好的家庭。小蒙马夏令营是亲子夏令营路线,6天5晚,每期8组家庭同行,爸爸妈妈带着孩子一起出发,融入草原写生、非遗研学、民俗体验三大主题。两大产品线都走呼伦贝尔核心线路,区别在于形式:额吉的故乡是私家定制,小蒙马是亲子夏令营。", + "relatedLinks": [ + { + "url": "/products", + "text": "查看产品详情" + } + ] + }, + { + "id": "price-6d5n", + "question": "呼伦贝尔6天5晚多少钱?", + "answer": "呼籁旅行不在官网公示具体价格,因为每个家庭的人数、出行时间、住宿偏好不同,最终价格会有差异。但可以说清楚价格包含什么:全程专属用车和司机、精选住宿、专属领队服务、所有体验活动费用、旅行保险、呼籁自营旅拍服务等,没有隐形消费,不会中途加价。呼籁的价格确实比拼团游高,因为是一家一单一车的定制服务,品质和体验完全不同。建议直接联系定制师,根据您的具体需求获取详细报价。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师获取报价" + } + ] + }, + { + "id": "vs-group-tour", + "question": "亲子游和普通跟团什么区别?", + "answer": "区别主要在三个方面。第一,出行方式不同——跟团是几十人大巴统一行动,呼籁是一家一单一车,自由度完全不同。第二,行程设计不同——跟团走标准景点打卡路线,呼籁的行程专门为家庭和孩子设计,节奏更合理,体验活动更丰富,包含骑马、草原滑草、ATV、观日出日落、访牧户等。第三,服务配置不同——跟团只有导游,呼籁配备3管家(车务+房务+客服)+ 定制师 + 专属领队,全程只服务您一个家庭。", + "relatedLinks": [ + { + "url": "/products", + "text": "了解呼籁的产品" + } + ] + }, + { + "id": "how-many-days-with-kids", + "question": "带小孩子选几天合适?", + "answer": "如果孩子在3-5岁,建议选6天5晚亲子版,行程节奏专门为小朋友设计,不会太赶。如果孩子在6岁以上,7天6晚深度版体验更完整,孩子的体力和好奇心都跟得上。假期有限的话,4天3晚精华版也能涵盖草原核心体验。总的来说,6天是大多数家庭的选择,时间和体验的平衡比较理想。出发前呼籁的定制师会根据孩子年龄推荐合适版本。", + "relatedLinks": [ + { + "url": "/products#guide", + "text": "按孩子年龄选产品" + } + ] + }, + { + "id": "summer-camp-age", + "question": "小蒙马夏令营适合几岁?", + "answer": "小蒙马夏令营是亲子夏令营,爸爸妈妈带着孩子一起参加,适合有学龄儿童的家庭。行程中的活动会根据孩子年龄适配难度,比如骑马教练会匹配合适的马匹,绘画老师会按基础指导,非遗手工也简单易操作。小蒙马和额吉的故乡的区别在于:额吉的故乡是一家一单一车的私家定制游,小蒙马是每期8组家庭一起出发的亲子夏令营,孩子有伙伴一起玩,大人也能在团队氛围里放松。小蒙马还贴心设计了「爸妈托管」时段,专业工作人员带孩子做游戏,家长可以短暂休息。", + "relatedLinks": [ + { + "url": "/summer-camp", + "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": "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组家庭、累计近4万人次出行,安全记录良好。", + "relatedLinks": [ + { + "url": "/reviews", + "text": "查看其他家庭的评价" + } + ] + } + ] + }, + { + "id": "trust", + "name": "信任类", + "questions": [ + { + "id": "is-reliable", + "question": "呼籁旅行怎么样靠谱吗?", + "answer": "呼籁旅行是呼伦贝尔本地品牌,隶属内蒙古呼籁文旅投资开发集团有限公司,旗下9家企业。集团核心旅行社主体——呼籁山河国旅成立于2005年,深耕呼伦贝尔11年。呼籁拥有自有车队、自有营地、自营旅拍团队,已服务超过10000组家庭、累计近4万人次。所有行程签订正规电子合同,旅游责任险保额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": "呼籁的退改政策写在电子合同里,清晰透明。定金在出行前可申请退还,具体退改比例以合同条款为准。如果因为不可抗力(如极端天气等)无法出行,呼籁会协商妥善处理,可以选择改期或退款。所有费用和退改条款均在合同中明确约定,受法律保护。建议确认行程后联系定制师了解详细退改条款。", + "relatedLinks": [ + { + "url": "/contact", + "text": "联系定制师了解详情" + } + ] + }, + { + "id": "hidden-cost", + "question": "费用含什么?有隐形消费吗?", + "answer": "呼籁的报价包含:全程专属用车、司机、住宿、专属领队服务、行程内所有体验活动、旅行保险、呼籁自营旅拍服务。不包含的项目会在合同中明确列出,通常是往返大交通(机票/火车票)和个人消费。呼籁承诺没有隐形消费,不会在行程中推销购物店或加价项目。所有费用明细在签订合同时一目了然,让每一分钱都花在体验上。", + "relatedLinks": [ + { + "url": "/products", + "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": "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..4b65398 --- /dev/null +++ b/data/gallery.json @@ -0,0 +1,242 @@ +{ + "works": [ + { + "id": "gallery-001", + "title": "莫日格勒河畔·蒙古袍亲子写真", + "category": "family", + "location": "莫日格勒河", + "description": "清晨的莫日格勒河,河湾处光线最柔和。一家三口身着蒙古袍,是草原上最美的风景。", + "image": "/images/gallery/gallery-001.jpg" + }, + { + "id": "gallery-013", + "title": "父子蒙古袍·营地合影", + "category": "family", + "location": "呼籁营地", + "description": "父子俩身着蓝色蒙古袍,在呼籁营地指示牌前开心合影。", + "image": "/旅拍照片/IMG_1244.JPG" + }, + { + "id": "gallery-002", + "title": "额尔古纳湿地·情侣旅拍", + "category": "couple", + "location": "额尔古纳湿地", + "description": "湿地栈道尽头,两人相视而笑。蒙古族礼服在阳光下格外耀眼,湿地的翠绿是最好的背景。", + "image": "/images/gallery/gallery-002.jpg" + }, + { + "id": "gallery-014", + "title": "父子草原奔跑", + "category": "family", + "location": "呼籁营地", + "description": "穿着蒙古袍的父子俩在草原上并肩奔跑,笑容灿烂。", + "image": "/旅拍照片/IMG_1245.JPG" + }, + { + "id": "gallery-003", + "title": "白桦林间·闺蜜写真", + "category": "friends", + "location": "额尔古纳白桦林", + "description": "金秋的白桦林是最天然的摄影棚。三位闺蜜身着不同颜色的蒙古盛装,在金叶飘落中留下了这组写真。", + "image": "/images/gallery/gallery-003.jpg" + }, + { + "id": "gallery-015", + "title": "骑在爸爸肩上", + "category": "family", + "location": "呼籁营地", + "description": "儿子骑在爸爸肩膀上,父子同穿蓝色蒙古袍,蓝天绿草间的温馨瞬间。", + "image": "/旅拍照片/IMG_1246.JPG" + }, + { + "id": "gallery-004", + "title": "黑山头草原·三代同堂全家福", + "category": "group", + "location": "黑山头", + "description": "祖孙三代,一家十口,同穿蒙古袍站在草原最高处。他们说这张照片挂在客厅最显眼的地方。", + "image": "/images/gallery/gallery-004.jpg" + }, + { + "id": "gallery-016", + "title": "一家三口草地游戏", + "category": "family", + "location": "呼籁营地", + "description": "爸爸、妈妈和女儿围坐在草地上玩拍手游戏,女儿笑得合不拢嘴。", + "image": "/旅拍照片/IMG_1247.JPG" + }, + { + "id": "gallery-005", + "title": "草原深处·骑马个人写真", + "category": "portrait", + "location": "莫日格勒河源头", + "description": "骑马奔驰在无人草原,风吹起头饰上的流苏。这一刻,她成了草原上最自由的人。", + "image": "/images/gallery/gallery-005.jpg" + }, + { + "id": "gallery-017", + "title": "爸爸扛起小公主", + "category": "family", + "location": "呼籁营地", + "description": "爸爸把穿着蓝色蒙古裙的女儿扛在肩上奔跑,蓝天下尽情欢笑。", + "image": "/旅拍照片/IMG_1248.JPG" + }, + { + "id": "gallery-006", + "title": "呼伦湖畔·亲子骑马留影", + "category": "family", + "location": "呼伦湖", + "description": "湖边的夕阳把天空染成橙红,孩子骑在马背上,爸爸牵着缰绳。这张照片定格了一个家庭最美的时光。", + "image": "/images/gallery/gallery-006.jpg" + }, + { + "id": "gallery-018", + "title": "父女温馨时刻", + "category": "family", + "location": "呼籁营地", + "description": "小女儿调皮地捏爸爸的鼻子,穿蒙古袍的爸爸笑着配合,温馨又可爱。", + "image": "/旅拍照片/IMG_1249.JPG" + }, + { + "id": "gallery-007", + "title": "秋日白桦·情侣婚纱旅拍", + "category": "couple", + "location": "室韦白桦林", + "description": "他们把婚纱照拍到了室韦。金色白桦叶飘落,蒙古婚礼盛装在秋光中更显华美。这是他们说过最满意的照片。", + "image": "/images/gallery/gallery-007.jpg" + }, + { + "id": "gallery-019", + "title": "父女草原追逐", + "category": "family", + "location": "呼籁营地", + "description": "穿着蓝色裙子的女儿和蒙古袍爸爸在草原上开心追逐奔跑。", + "image": "/旅拍照片/IMG_1250.JPG" + }, + { + "id": "gallery-008", + "title": "冬日雪原·个人写真", + "category": "portrait", + "location": "海拉尔草原", + "description": "零下三十度的冬日草原,她穿着厚重的皮袍站在雪地里,背后是无垠的白色世界。沉静而有力量。", + "image": "/images/gallery/gallery-008.jpg" + }, + { + "id": "gallery-020", + "title": "一家三口·小推车", + "category": "family", + "location": "呼籁营地", + "description": "爸爸拉着绿色小推车载着女儿飞奔,妈妈在后面张开双臂追赶,快乐溢出画面。", + "image": "/旅拍照片/IMG_1251.JPG" + }, + { + "id": "gallery-009", + "title": "营地花海·闺蜜团写真", + "category": "friends", + "location": "呼籁自营营地", + "description": "营地的格桑花开了整个夏天。四个闺蜜相约来草原,在花海里留下了这组让她们争相转发的写真。", + "image": "/images/gallery/gallery-009.jpg" + }, + { + "id": "gallery-021", + "title": "粉色蒙古盛装·旗帜前", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿着精美的粉色蒙古盛装,在呼伦贝尔旗帜前巧笑嫣然。", + "image": "/旅拍照片/IMG_1252.JPG" + }, + { + "id": "gallery-010", + "title": "莫日格勒·同学聚会全家福", + "category": "group", + "location": "莫日格勒河", + "description": "同学聚会选择了草原,十五个人浩浩荡荡,每个人都穿上了不同颜色的蒙古袍,笑得合不拢嘴。", + "image": "/images/gallery/gallery-010.jpg" + }, + { + "id": "gallery-022", + "title": "草原上的旋转舞", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿粉色蒙古盛装在草原上翩翩旋转,裙摆飞扬。", + "image": "/旅拍照片/IMG_1253.JPG" + }, + { + "id": "gallery-011", + "title": "额尔古纳秋色·母女亲子写真", + "category": "family", + "location": "额尔古纳湿地", + "description": "妈妈和女儿穿着撞色亲子蒙古袍,在湿地木栈道上相互依偎。秋光洒下来,温柔又好看。", + "image": "/images/gallery/gallery-011.jpg" + }, + { + "id": "gallery-023", + "title": "草原上的飞踢", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿着粉色蒙古盛装在草原上踢腿跳跃,活力四射。", + "image": "/旅拍照片/IMG_1254.JPG" + }, + { + "id": "gallery-012", + "title": "冬季那达慕·节日盛装写真", + "category": "portrait", + "location": "呼伦贝尔冬季那达慕", + "description": "冬季那达慕现场,他穿上节日盛装,背后是策马奔腾的骑手。整组照片充满了草原特有的力量感。", + "image": "/images/gallery/gallery-012.jpg" + }, + { + "id": "gallery-024", + "title": "奔跑的背影", + "category": "solo", + "location": "呼籁营地", + "description": "粉色蒙古盛装的小女孩在草原上奔跑,辫子和裙摆随风飞扬的背影。", + "image": "/旅拍照片/IMG_1255.JPG" + }, + { + "id": "gallery-025", + "title": "白裙俏皮少女", + "category": "solo", + "location": "呼籁营地", + "description": "小女孩穿着白色蒙古裙搭配棕色马靴,在草原上俏皮摆pose。", + "image": "/旅拍照片/IMG_1256.JPG" + }, + { + "id": "gallery-026", + "title": "草原笑脸·蒙古头饰", + "category": "solo", + "location": "呼籁营地", + "description": "戴着精美蒙古族头饰的小女孩对着镜头伸出双手,笑容灿烂无比。", + "image": "/旅拍照片/IMG_1258.JPG" + }, + { + "id": "gallery-027", + "title": "母女牵手·草原漫步", + "category": "family", + "location": "呼籁营地", + "description": "妈妈和女儿穿着白色长裙手牵手漫步在草原上,温柔而美好。", + "image": "/旅拍照片/IMG_1259.JPG" + } + ], + "intro": { + "description": "呼籁旅行提供专业草原旅拍服务,200+件正宗蒙古袍,专业摄影师全程随行,营地即景即拍。", + "stats": [ + { + "value": "200+", + "label": "套蒙古服饰" + }, + { + "value": "11年", + "label": "深耕草原" + }, + { + "value": "3000+", + "label": "旅拍家庭" + } + ] + }, + "seo": { + "title": "呼籁草原旅拍 - 蒙古袍旅拍|呼伦贝尔专业旅拍服务", + "description": "呼籁旅行提供呼伦贝尔草原专业旅拍服务,200+套正宗蒙古袍,专业摄影师随行,营地即景即拍。亲子旅拍/情侣旅拍/全家福,3000+家庭选择。", + "keywords": "草原旅拍,蒙古袍旅拍,呼伦贝尔旅拍,亲子旅拍,情侣旅拍,全家福,呼籁旅拍" + } +} \ No newline at end of file diff --git a/data/guides.json b/data/guides.json new file mode 100644 index 0000000..0dab3b1 --- /dev/null +++ b/data/guides.json @@ -0,0 +1,522 @@ +{ + "pageIntro": "这份指南是呼籁团队根据多年带队经验整理的,从穿什么衣服、带什么东西、到各项活动的注意事项,帮您轻松准备呼伦贝尔之行。", + "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..6c43691 --- /dev/null +++ b/data/images.json @@ -0,0 +1,46 @@ +{ + "brandStory": { + "photo": "/images/team/hero-family.jpg" + }, + "hero": { + "background": "/images/team/hero-grassland.jpg" + }, + "logo": { + "main": "/images/logo.png", + "square": "/images/logo-square.png" + }, + "mascot": { + "banner": "/images/mascot/mascot-banner.png", + "front": "/images/mascot/mascot-front.png", + "stickerQr": "/images/mascot-sticker-qr.png", + "xiaomengma": "/images/mascot/xiaomengma.png" + }, + "seasons": { + "autumn-forest": "/images/seasons/autumn-forest.jpg", + "autumn-hero": "/images/seasons/autumn-hero.jpg", + "autumn-tianchi": "/images/seasons/autumn-tianchi.jpg", + "autumn-train": "/images/seasons/autumn-train.jpg", + "summer-car": "/images/seasons/summer-car.jpg", + "summer-hero": "/images/seasons/summer-hero.jpg", + "summer-river": "/images/seasons/summer-river.jpg", + "winter-frost": "/images/seasons/winter-frost.jpg", + "winter-hero": "/images/seasons/winter-hero.jpg", + "winter-tree": "/images/seasons/winter-tree.jpg", + "winter-yurt": "/images/seasons/winter-yurt.jpg" + }, + "summerCamp": { + "birch": "/images/summer-camp/birch-group.jpg", + "graduation": "/images/summer-camp/camp-graduation.jpg", + "grassland": "/images/summer-camp/grassland-group.jpg", + "river": "/images/summer-camp/river-banner.jpg" + }, + "team": { + "guideGroup": "/images/team/guide-group.jpg", + "guideTraining": "/images/team/guide-training.jpg", + "ranchStore": "/images/team/ranch-store.jpg", + "routeSurvey": "/images/team/route-survey-2025.jpg" + }, + "xiaohongshu": { + "storefront": "/images/xiaohongshu/storefront.jpg" + } +} \ No newline at end of file diff --git a/data/navigation.json b/data/navigation.json new file mode 100644 index 0000000..2ac7f02 --- /dev/null +++ b/data/navigation.json @@ -0,0 +1,124 @@ +{ + "header": [ + { + "text": "首页", + "to": "/" + }, + { + "text": "产品线", + "to": "/products", + "children": [ + { + "to": "/products", + "text": "额吉的故乡", + "season": "夏" + }, + { + "to": "/products/autumn", + "text": "游牧的森林", + "season": "秋" + }, + { + "to": "/products/winter", + "text": "嗨冰雪", + "season": "冬" + }, + { + "to": "/summer-camp", + "text": "小蒙马夏令营", + "season": "夏" + }, + { + "to": "/winter-camp", + "text": "小蒙马冬季营", + "season": "冬" + } + ] + }, + { + "text": "客户评价", + "to": "/reviews" + }, + { + "text": "出行指南", + "to": "/guides" + }, + { + "text": "常见问答", + "to": "/faq" + }, + { + "text": "关于我们", + "to": "/about" + }, + { + "text": "联系我们", + "to": "/contact" + } + ], + "footer": [ + { + "title": "了解呼籁", + "links": [ + { + "text": "关于我们", + "to": "/about" + }, + { + "text": "品牌故事", + "to": "/about#story" + }, + { + "text": "团队介绍", + "to": "/about#team" + } + ] + }, + { + "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": "/contact" + } + ] + } + ] +} \ No newline at end of file diff --git a/data/news.json b/data/news.json new file mode 100644 index 0000000..84f8101 --- /dev/null +++ b/data/news.json @@ -0,0 +1,44 @@ +{ + "articles": [ + { + "id": "news-3", + "title": "额吉的故乡V9正式发布:三大升级,一家一车", + "date": "2026-03-08", + "category": null, + "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": null, + "summary": "2026年小蒙马亲子夏令营正式开放报名,7天6晚,每期最多8组家庭,涵盖草原、森林、湿地三大研学模块,全程路虎头等舱车队、专属摄影师跟拍。", + "content": "2026年小蒙马亲子夏令营正式开放报名。小蒙马是呼籁旅行专为家庭设计的深度营地产品,行程7天6晚,每期最多8组家庭同行。课程围绕草原、森林、湿地三大研学模块设计,包含恩和骑马、乌兰山滑草、ATV越野、面包DIY、兰旗果舍等体验。全程配备路虎头等舱车队,每组家庭配专属摄影师全程跟拍。2026年夏季计划开设9期,名额有限,报名请联系定制师获取详细方案和排期。" + }, + { + "id": "news-5", + "title": "呼籁营地迁入敖包召回景区,2026赛季全面升级", + "date": "2026-02-10", + "category": null, + "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": null, + "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": null, + "summary": "呼籁旅行在2026小红书WILL商业大会上荣获「年度成长型品牌」,全国文旅行业仅6家品牌获此荣誉。6家品牌中,呼籁是深耕单一目的地的本地品牌代表。", + "content": "在2026年小红书WILL商业大会上,呼籁旅行荣获「年度成长型品牌」称号。全国文旅行业仅6家品牌入选,6家品牌中,呼籁是深耕单一目的地的本地品牌代表。呼籁小红书账号「Mr.小雷-呼籁旅行」由联合创始人孙雷运营,目前拥有9.5万+粉丝。这份荣誉属于每一位愿意在小红书分享呼伦贝尔旅行故事的客户和伙伴。" + } + ] +} \ No newline at end of file diff --git a/data/partners.json b/data/partners.json new file mode 100644 index 0000000..39edf72 --- /dev/null +++ b/data/partners.json @@ -0,0 +1,56 @@ +{ + "govPartners": [ + { + "name": "测试合作伙伴", + "description": "合作描述", + "website": null, + "verified": true + } + ], + "associations": [ + { + "name": "内蒙古自治区文化和旅游厅", + "description": "政府主管部门|颁发旅游经营许可证·认定研学旅游服务商", + "website": null, + "verified": true + } + ], + "academicCoops": [ + { + "name": "呼伦贝尔学院", + "description": "高校合作|旅游实习实训基地|校企合作,共同培养旅游管理专业人才,实践教学基地|合作始于:2024", + "website": null, + "verified": true + } + ], + "scenicPartners": [ + { + "name": "莫日格勒河景区", + "description": "呼籁行程核心目的地,提供专属通道和深度体验项目", + "website": null, + "verified": true + }, + { + "name": "额尔古纳湿地公园", + "description": "国家级自然保护区,呼籁行程必经目的地", + "website": null, + "verified": true + }, + { + "name": "黑山头景区", + "description": "呼籁自有骑马营地所在地,独家草原骑马体验", + "website": null, + "verified": true + } + ], + "hotelPartners": [], + "platformEndorsements": [ + { + "name": "小红书", + "description": "2025年度成长型品牌·2026 WILL商业大会受邀品牌|蓝V认证·旅行社|粉丝:9.5万+|账号:Mr.小雷-呼籁旅行", + "website": null, + "verified": true + } + ], + "mediaReports": [] +} \ No newline at end of file diff --git a/data/pricing.json b/data/pricing.json new file mode 100644 index 0000000..3f54902 --- /dev/null +++ b/data/pricing.json @@ -0,0 +1,164 @@ +{ + "products": [ + { + "id": "v9-4d3n", + "name": "额吉的故乡V9·4天3晚 精华版", + "priceLabel": "详询定制师", + "priceNote": "价格因人数、住宿选择和出行季节有所不同,请联系定制师获取专属报价", + "highlights": [ + "莫日格勒河草原深度穿越", + "黑山头骑马", + "走访蒙古族牧户家庭" + ], + "url": "/products/v9-4d3n" + }, + { + "id": "v9-5d4n-forest", + "name": "额吉的故乡V9·5天4晚 森林版", + "priceLabel": "2580元起", + "priceNote": "舒适套餐2580-4780元/人,高档套餐3380-5880元/人,价格因出行日期和住宿等级不同", + "highlights": [ + "草原+大兴安岭森林双线深度", + "森林小火车+兴安神鹿园", + "恩和骑马+全地形越野车" + ], + "url": "/products/v9-5d4n" + }, + { + "id": "v9-5d4n-prairie", + "name": "额吉的故乡V9·5天4晚 草原版", + "priceLabel": "2580元起", + "priceNote": "舒适套餐2580-4780元/人,高档套餐3380-5880元/人,价格因出行日期和住宿等级不同", + "highlights": [ + "草原+边境+满洲里不进森林", + "寻龙诀秘境+套娃大马戏", + "巴尔虎马之舞实景演出" + ], + "url": "/products/v9-5d4n" + }, + { + "id": "v9-5d4n", + "name": "额吉的故乡V9·5天4晚 经典版", + "priceLabel": "详询定制师", + "priceNote": "最受欢迎的版本,报价需结合家庭人数和住宿等级,请联系定制师", + "highlights": [ + "额尔古纳湿地全景", + "白桦林漫步", + "中俄边境公路" + ], + "url": "/products/v9-5d4n" + }, + { + "id": "v9-6d5n-family", + "name": "额吉的故乡V9·6天5晚 亲子版", + "priceLabel": "详询定制师", + "priceNote": "包含旅拍服务,具体报价根据孩子年龄和活动需求定制,请联系定制师", + "highlights": [ + "草原营地亲子活动", + "蒙古族手工体验", + "旅拍服务200+服饰" + ], + "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-comfort" + }, + { + "id": "v9-7d6n-family", + "name": "额吉的故乡V9·7天6晚 亲子版", + "priceLabel": "3680元起", + "priceNote": "舒适套餐3680-6280元/人,高档套餐4580-7980元/人,最完整亲子深度版", + "highlights": [ + "自有营地旅拍+非遗传承人授课", + "森林小火车+驯鹿+蒙古文化", + "寻龙诀秘境+套娃+马之舞" + ], + "url": "/products/v9-7d6n-family" + }, + { + "id": "v9-6d5n-comfort", + "name": "额吉的故乡V9·6天5晚 探索版", + "priceLabel": "详询定制师", + "priceNote": "全程精选品质酒店,住宿标准提升,请联系定制师获取报价", + "highlights": [ + "全程精选品质酒店", + "休闲节奏设计", + "深度体验不赶路" + ], + "url": "/products/v9-6d5n-comfort" + }, + { + "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": "/summer-camp" + }, + { + "id": "autumn", + "name": "游牧的森林·秋季产品", + "priceLabel": "详询定制师", + "priceNote": "秋季产品根据出行日期和人数定制,请联系定制师获取最新报价", + "highlights": [ + "大兴安岭秋色", + "白桦林金黄", + "额尔古纳秋景" + ], + "url": "/products/autumn" + } + ], + "intro": "呼籁旅行定制游按家庭整体报价,非人头计费。报价包含全程住宿、餐饮、景区交通、领队服务,不含大交通(飞机/火车)和个人消费。签正规电子合同,购买1000万旅游责任险,报价后2小时内回复。", + "included": [ + "全程住宿(3-4星精选酒店/特色民宿/营地帐篷)", + "全程餐饮(特色草原餐、营地BBQ)", + "全程专属车辆(商务车/越野车)", + "专职领队全程陪同服务", + "核心景点门票(含呼籁自营营地体验)", + "旅游意外险 + 1000万旅游责任险", + "行程期间24小时紧急服务" + ], + "excluded": [ + "往返大交通(飞机/高铁/火车票)", + "个人消费(纪念品、自选活动等)", + "部分自费景点(如需要单独购票的景区)", + "护照、签注等证件费用" + ], + "philosophy": { + "title": "价格透明,不绕弯子", + "honestNote": "我们不做低价吸引再加收各种费用的事。报价就是总价。", + "content": "报价后会详细说明包含和不包含的项目,没有任何隐形消费。定制游按家庭整体报价,一个家庭无论几口人都是统一价,不按人头收费。不同住宿等级价格有差异,我们会提供几档方案供选择。", + "promise": "对报价有任何疑问,欢迎直接问。我们的定制师会在2小时内详细回复。" + }, + "cta": { + "title": "获取专属报价", + "description": "告诉我们家庭人数、出行时间、大概预算,定制师2小时内给出详细方案", + "to": "/contact", + "button": "联系定制师获取报价" + } +} \ No newline at end of file diff --git a/data/products.json b/data/products.json new file mode 100644 index 0000000..98976ec --- /dev/null +++ b/data/products.json @@ -0,0 +1,202 @@ +{ + "narrative": "「额吉的故乡」是蒙古语中对母亲故土的深情称呼。这条定制游产品线从2023年诞生至今,已经迭代到了第9个版本。我们根据不同家庭的假期长度、孩子年龄和旅行偏好,打磨出6个版本——不是简单地增减天数,而是针对每一类家庭的需求重新设计节奏、线路和体验内容。每一个版本都遵循同一个承诺:一家一单一车,全程私家定制游,您的假期只属于您的家庭。", + "versions": [ + { + "id": "v9-4d3n", + "name": "额吉的故乡V9·4天3晚", + "days": 4, + "nights": 3, + "audience": "假期有限的家庭、初次体验草原", + "description": "呼伦贝尔定制游精华浓缩版,用4天时间串联最核心的风光与体验。一家一单一车,从海拉尔出发,穿越莫日格勒河草原腹地,抵达中俄边境小镇室韦,途经黑山头骑马,最终在满洲里收官。行程紧凑但不赶路,每一天都有记忆点。", + "highlights": [ + "莫日格勒河草原深度穿越,走进\"天下第一曲水\"的怀抱", + "黑山头专业马场骑马体验,在草原上策马奔腾", + "走访蒙古族牧户家庭,亲手挤牛奶、品尝手工奶制品" + ], + "tag": "精华版" + }, + { + "id": "v9-5d4n", + "name": "额吉的故乡V9·5天4晚", + "days": 5, + "nights": 4, + "audience": "希望深度体验又兼顾时间的家庭", + "description": "最受欢迎的经典版本,5天4晚覆盖呼伦贝尔精华景观和核心体验。在精华版基础上,增加了额尔古纳湿地、白桦林和中俄边境公路等标志性内容,体验层次更丰富,行程节奏刚刚好——既不浪费假期,也不走马观花。", + "highlights": [ + "登临额尔古纳湿地——\"亚洲第一湿地\"的壮阔全景尽收眼底", + "漫步白桦林,感受大兴安岭林区的静谧与诗意", + "驰骋中俄边境公路,一侧草原一侧界河,风景绝美" + ], + "tag": "经典版" + }, + { + "id": "v9-6d5n-family", + "name": "额吉的故乡V9·6天5晚亲子版", + "days": 6, + "nights": 5, + "audience": "带3-10岁孩子的家庭", + "description": "呼伦贝尔亲子定制游的代表版本,行程节奏配合孩子的体能和注意力,每天安排适龄的互动体验。一家一单一车,营地活动、亲子手工、草原游戏穿插其中,让孩子不只是「跟着走」,而是真正参与到旅行中来。同时配备旅拍服务,为全家留下草原上最自然的影像记录。", + "highlights": [ + "草原营地活动——放风筝、踢足球、搭帐篷,孩子撒欢的天堂", + "亲子互动体验——蒙古族手工制作、奶制品DIY、草原寻宝", + "呼籁营地定点旅拍,200+服饰可选,定格全家最自然的欢笑" + ], + "tag": "亲子版" + }, + { + "id": "v9-6d5n-comfort", + "name": "额吉的故乡V9·6天5晚探索版", + "days": 6, + "nights": 5, + "audience": "注重住宿品质的家庭、带老人出行", + "description": "同样的定制游线路精华,更从容的旅行节奏。一家一单一车,全程精选当地品质酒店,每天行车时间控制在合理范围,留出充足的休息和自由活动时间。适合对住宿有要求的家庭、带老人同行的家庭,或者只是想让旅行更松弛一些的人。少赶一段路,多看一会儿风景。", + "highlights": [ + "全程精选品质酒店,告别标准化快捷酒店,每晚都住得舒心", + "休闲节奏设计,每天行车不超额,留足时间享受当下", + "深度体验优先——不追求打卡数量,每个地方都停够、看够、感受够" + ], + "tag": "探索版" + }, + { + "id": "v9-7d6n-family", + "name": "额吉的故乡V9·7天6晚亲子版", + "days": 7, + "nights": 6, + "audience": "假期充足、希望深度探索的亲子家庭", + "description": "最完整的亲子深度版本,7天时间从容走遍呼伦贝尔精华,每一天都有不同主题的体验。草原、森林、湿地、边境小镇——多元地貌轮番呈现,活动内容从骑马到手工到自然探索一应俱全,配合全程摄影跟拍,是送给孩子最好的暑假礼物。", + "highlights": [ + "全程深度不赶路,7天覆盖草原、湿地、森林、边境四大主题", + "多元活动贯穿全程——骑马、射箭、手工、自然课堂,天天有新鲜", + "专业摄影师全程跟拍,旅行结束即获精修家庭影像大片" + ], + "tag": "深度亲子版" + }, + { + "id": "v9-7d6n-wild", + "name": "额吉的故乡V9·7天6晚狂野版", + "days": 7, + "nights": 6, + "audience": "追求深度体验、热爱户外的家庭", + "description": "为热爱户外探索的家庭量身定制的硬核版本。一家一单一车,解锁牧云山顶日落、ATV草原穿越、寻龙诀秘境等独家体验,深入常规线路到不了的地方。适合孩子年龄稍大、体能较好的家庭,也适合二刷呼伦贝尔想要全新体验的老朋友。", + "highlights": [ + "牧云山顶看日落——登上草原最高处,360度金色草海尽收眼底", + "ATV全地形车草原穿越,肾上腺素拉满的草原越野体验", + "寻龙诀秘境探秘,深入人迹罕至的草原腹地,发现隐藏风景" + ], + "tag": "狂野版" + } + ], + "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": "3-4天假期", + "recommendation": "v9-4d3n" + }, + { + "reason": "经典线路,体验最全", + "condition": "5天假期", + "recommendation": "v9-5d4n" + }, + { + "reason": "节奏从容,适合带娃", + "condition": "6天假期", + "recommendation": "v9-6d5n-family" + }, + { + "reason": "深度探索,不留遗憾", + "condition": "7天以上", + "recommendation": "v9-7d6n-family" + } + ], + "byChildAge": [ + { + "reason": "亲子版节奏舒缓,活动适龄", + "condition": "3-5岁幼儿", + "recommendation": "v9-6d5n-family" + }, + { + "reason": "深度版活动丰富,孩子最开心", + "condition": "6-10岁儿童", + "recommendation": "v9-7d6n-family" + }, + { + "reason": "小蒙马夏令营,8组家庭同行", + "condition": "亲子夏令营", + "recommendation": "summer-camp" + }, + { + "reason": "狂野版户外体验更刺激", + "condition": "10岁以上", + "recommendation": "v9-7d6n-wild" + } + ], + "byPreference": [ + { + "reason": "精选住宿,行程不赶", + "condition": "追求舒适", + "recommendation": "v9-6d5n-comfort" + }, + { + "reason": "小众秘境,深入草原", + "condition": "追求深度", + "recommendation": "v9-7d6n-wild" + }, + { + "reason": "探索版最适合全家出行", + "condition": "带老人同行", + "recommendation": "v9-6d5n-comfort" + }, + { + "reason": "亲子版孩子们可以结伴玩耍", + "condition": "多家庭同行", + "recommendation": "v9-6d5n-family" + } + ] + }, + "pricingPhilosophy": "呼籁定制游的价格包含了车辆、住宿、领队服务、活动体验、旅行摄影和保险。看起来比拼团贵,但每一分钱都花在了体验上——没有购物店、没有隐形消费、没有赶场式行程。一家一单一车的定制游模式意味着所有资源都是为您的家庭专属调配的:您的领队只服务您一家,您的车只拉您一家,您的行程可以根据实际情况灵活调整。这不是高价版的跟团游,而是完全不同的旅行方式。这是呼籁对品质的坚持,也是我们9年来口碑积累的底气。" +} \ No newline at end of file diff --git a/data/qualifications.json b/data/qualifications.json new file mode 100644 index 0000000..7fc3b18 --- /dev/null +++ b/data/qualifications.json @@ -0,0 +1,137 @@ +{ + "licenses": [ + { + "title": "旅游经营许可证", + "issuer": "内蒙古自治区文化和旅游厅", + "description": "证件号:L-NMG-101453|持证主体:内蒙古呼籁文旅投资开发集团有限公司|法人:刘涛|经营范围:境内旅游业务、入境旅游业务|统一信用代码:91150702MACYA3MN0U|集团母公司,统筹旗下所有业务板块" + }, + { + "title": "旅游经营许可证", + "issuer": "内蒙古自治区文化和旅游厅", + "description": "证件号:L-NMG00210|持证主体:内蒙古呼籁山河国际旅行社有限公司|法人:刘涛|经营范围:境内旅游业务、入境旅游业务|统一信用代码:911507007722296570|成立于2005年,集团旅行社资质中历史最悠久的主体" + } + ], + "insurance": { + "title": "旅游责任险 · 1000万保障", + "issuer": null, + "description": "全程旅游责任险覆盖,出行安全有兜底。保单号:6203130180266250001337,保额10,000,000.00元,有效期2026年01月01日至2026年12月31日。|" + }, + "awards": [ + { + "title": "2026小红书WILL商业大会·年度成长型品牌", + "issuer": "小红书", + "year": 2026, + "description": "文旅行业仅6家品牌获此荣誉,是平台对呼籁内容质量与品牌成长的认可" + }, + { + "title": "内蒙古自治区研学旅游服务商", + "issuer": "内蒙古自治区文化和旅游厅", + "year": 2026, + "description": "全区97家之一,具备官方认可的研学服务资质,可承接中小学研学项目" + }, + { + "title": "呼伦贝尔学院旅游实习实训基地", + "issuer": "呼伦贝尔学院", + "year": 2024, + "description": "校企合作,共同培养旅游管理人才,呼籁每年接收旅游管理专业实习生" + } + ], + "heritage": { + "title": "品牌资历:11年深耕呼伦贝尔", + "description": "|2005年:内蒙古呼籁山河国际旅行社有限公司成立,取得旅游经营许可证,开始深耕呼伦贝尔旅游市场;2015年:呼籁品牌创立,开始专注于家庭定制游和深度体验型旅游产品;2022年:呼伦贝尔呼籁牧场商贸有限公司成立,打通本地牧场和特产供应链;2023年:内蒙古呼籁文旅投资开发集团有限公司成立,完成集团化布局;内蒙古呼籁国际旅行社有限公司同年成立;2024年:呼籁旅游客运公司、呼籁露营地公司相继成立,实现自有车队+自有营地双重保障;2025年:获评小红书2025年度成长型品牌;内蒙古呼籁培训有限公司、内蒙古呼籁文化科技有限公司相继成立;2026年:呼伦贝尔呼籁研学文化旅游有限责任公司成立;入选小红书WILL商业大会·年度成长型品牌(文旅行业仅6家)" + }, + "safetyGuarantees": [ + { + "title": "三重旅行社资质", + "detail": "旗下三家主体均持有旅游经营许可证" + }, + { + "title": "1000万旅游责任险", + "detail": "每单行程全程覆盖旅游意外责任" + }, + { + "title": "「呼籁」注册商标", + "detail": "第39类旅游服务注册商标持有方" + }, + { + "title": "深耕呼伦贝尔11年", + "detail": "2015年创立,本地团队深耕运营" + } + ], + "enterpriseMatrix": { + "totalCount": 9, + "description": "呼籁集团旗下覆盖旅行社、营地、车队、牧场等多业态企业", + "companies": [ + { + "name": "呼伦贝尔呼籁旅行社有限公司", + "type": "旅行社", + "license": "旅游经营许可证" + }, + { + "name": "呼籁旅游有限公司", + "type": "旅行社", + "license": "旅游经营许可证" + }, + { + "name": "嘎查旅行社有限公司", + "type": "旅行社", + "license": "旅游经营许可证" + }, + { + "name": "呼籁旅游客运有限公司", + "type": "旅游客运", + "license": "道路运输许可证" + }, + { + "name": "呼籁草原营地", + "type": "营地运营", + "license": "营地经营许可" + }, + { + "name": "呼籁牧场商贸有限公司", + "type": "农牧产品", + "license": "营业执照" + }, + { + "name": "呼籁研学教育有限公司", + "type": "研学教育", + "license": "营业执照" + }, + { + "name": "额吉的故乡文化传媒有限公司", + "type": "文化传媒", + "license": "营业执照" + }, + { + "name": "呼籁科技有限公司", + "type": "互联网科技", + "license": "营业执照" + } + ] + }, + "intellectualProperty": { + "trademark": { + "name": "呼籁", + "scope": "第39类旅游、旅行社、交通运输服务", + "holder": "呼伦贝尔呼籁旅行社有限公司", + "description": "「呼籁」商标已在国家知识产权局完成注册,保护呼伦贝尔旅游定制服务领域的核心品牌权益。" + }, + "copyrights": [ + { + "title": "呼籁旅行官方网站", + "type": "软件著作权", + "year": "2024" + }, + { + "title": "额吉的故乡旅游产品系列", + "type": "文字作品著作权", + "year": "2023" + }, + { + "title": "小蒙马研学课程体系", + "type": "教育课程著作权", + "year": "2024" + } + ] + } +} \ No newline at end of file diff --git a/data/reviews.json b/data/reviews.json new file mode 100644 index 0000000..dff4265 --- /dev/null +++ b/data/reviews.json @@ -0,0 +1,1297 @@ +{ + "summary": { + "totalCount": 10000, + "approvalRate": "98%", + "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..f36680f --- /dev/null +++ b/data/selector.json @@ -0,0 +1,281 @@ +{ + "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": 9, + "v9-6d5n-family": 2, + "v9-5d4n": 9 + }, + "6天": { + "v9-5d4n": 3, + "v9-6d5n-family": 10, + "v9-5d4n": 3, + "v9-6d5n-family": 9 + }, + "7天": { + "v9-7d6n-wild": 9, + "v9-6d5n-family": 3, + "v9-7d6n-family": 9 + } + }, + "q2": { + "情侣": { + "v9-7d6n-wild": 4, + "v9-5d4n": 5, + "v9-6d5n-family": 6 + }, + "朋友": { + "v9-7d6n-wild": 6, + "v9-5d4n": 4, + "v9-6d5n-family": 5 + }, + "独行": { + "v9-5d4n": 4, + "v9-5d4n": 5, + "v9-6d5n-family": 6 + }, + "带孩子的家庭": { + "v9-5d4n": 4, + "v9-6d5n-family": 9, + "v9-7d6n-family": 8, + "v9-5d4n": 4 + } + }, + "q3": { + "3-6岁": { + "v9-5d4n": 4, + "v9-6d5n-family": 10, + "v9-7d6n-family": 8 + }, + "6-12岁": { + "v9-6d5n-family": 9, + "v9-7d6n-family": 8, + "v9-6d5n-family": 5 + }, + "3岁以下": { + "v9-5d4n": 5, + "v9-6d5n-family": 8, + "v9-5d4n": 6 + }, + "12岁以上": { + "v9-7d6n-wild": 9, + "v9-7d6n-family": 4, + "v9-6d5n-family": 8 + } + }, + "q4": { + "不差钱": { + "v9-7d6n-wild": 8, + "v9-7d6n-family": 6, + "v9-6d5n-family": 4 + }, + "品质优先": { + "v9-6d5n-family": 6, + "v9-7d6n-family": 6, + "v9-6d5n-family": 5 + }, + "经济实惠": { + "v9-5d4n": 7, + "v9-6d5n-family": 3, + "v9-5d4n": 7 + } + }, + "q5": { + "亲子互动": { + "v9-5d4n": 3, + "v9-6d5n-family": 10, + "v9-7d6n-family": 8 + }, + "极致冒险": { + "v9-7d6n-wild": 10, + "v9-6d5n-family": 5 + }, + "深度探索": { + "v9-7d6n-wild": 6, + "v9-7d6n-family": 4, + "v9-6d5n-family": 9 + }, + "自然风光": { + "v9-5d4n": 8, + "v9-7d6n-family": 4, + "v9-5d4n": 6 + } + } + }, + "matchReasons": { + "v9-7d6n-wild": { + "default": "旷野探索,装甲车穿越+湿地漂流+帐篷营地+专业航拍,解锁常规线路到不了的地方", + "q1:7天": "7天硬核户外——住帐篷营地和草原木屋,装甲车+漂流+航拍全部安排", + "q2:朋友": "和好友一起装甲车穿越、湿地漂流、秘境航拍,肾上腺素拉满", + "q4:不差钱": "全程特色住宿+装甲车+漂流+航拍+自有营地旅拍,体验价值最高", + "q3:12岁以上": "装甲车穿越+湿地漂流+全地形越野车+帐篷营地,最硬核的户外版本", + "q5:极致冒险": "装甲车穿越草地溪流+额尔古纳湿地漂流+寻龙诀秘境航拍,极致冒险之选" + }, + "v9-5d4n": { + "default": "草原+大兴安岭森林双线深度,5天走遍两种风光", + "q1:5天": "5天假期想看草原又想进森林——森林版专为这种需求设计", + "q4:经济实惠": "5天4晚起步价最亲民,森林小火车+驯鹿+骑马一个不少", + "q5:自然风光": "草原+白桦林+大兴安岭+森林小火车+驯鹿园,自然风光层次最丰富" + }, + "v9-6d5n-family": { + "default": "6天5晚亲子主推版,自有营地旅拍+非遗手作+骑马越野+蒙古文化,专为带孩子的家庭设计", + "q1:6天": "6天时间刚好——自有营地旅拍+非遗传承人授课+骑马越野+蒙古文化体验全覆盖", + "q3:3-6岁": "非遗传承人按年龄分层教学+搭蒙古包+熬奶茶+做羊毛毡,学前宝宝最爱的版本", + "q3:6-12岁": "骑马穿越+越野车+白桦林非遗手作+蒙古文化四合一,每天都有新体验", + "q3:3岁以下": "行程节奏最舒缓,单日最长不超300公里,小宝宝也能轻松跟上", + "q5:亲子互动": "非遗传承人授课+搭蒙古包+捡牛粪+熬奶茶+做羊毛毡+专属亲子手册,亲子互动最丰富", + "q2:带孩子的家庭": "主推亲子版——非遗按年龄分层、蒙古文化还原真实生活、专属亲子手册记录旅途发现" + }, + "v9-7d6n-family": { + "default": "最完整亲子深度版,自有营地旅拍+非遗手作+森林小火车+蒙古文化体验", + "q1:7天": "7天假期值得最完整的行程——草原、森林、边境、满洲里全覆盖", + "q3:3-6岁": "非遗传承人按年龄分层教学+搭蒙古包+熬奶茶+做羊毛毡,内容最丰富", + "q3:6-12岁": "森林小火车+驯鹿+白桦林非遗手作+蒙古文化体验,每天都有新鲜感", + "q5:亲子互动": "非遗传承人授课+搭蒙古包+捡牛粪+熬奶茶+做羊毛毡,亲子互动最丰富", + "q2:带孩子的家庭": "专为带孩子的家庭设计,非遗按年龄分层,蒙古文化还原真实生活场景" + }, + "v9-5d4n": { + "default": "不进森林,走草原+边境+满洲里环线,错峰安排", + "q1:5天": "5天假期不进森林——草原+寻龙诀秘境+套娃大马戏+马之舞,精彩不打折", + "q3:3岁以下": "不进深山森林,行程节奏更平缓,小宝宝也能轻松跟上" + }, + "v9-6d5n-family": { + "default": "越野穿越、两次骑马、不走寻常路,更适合大孩子与成人的进阶体验", + "q1:6天": "6天时间够从容——自有营地旅拍+大力山穿越+两次骑马+秘境探索", + "q2:情侣": "大力山穿越+两次骑马+秘境航拍+风车公路,很适合追求深度的两人世界", + "q3:12岁以上": "两次骑马+全地形越野车+大力山穿越,大孩子最爱的进阶版本", + "q5:深度探索": "大力山穿越全程不走柏油路+两次骑马+寻龙诀秘境,探索感十足" + } + } +} \ No newline at end of file diff --git a/data/seo.json b/data/seo.json new file mode 100644 index 0000000..5f4d203 --- /dev/null +++ b/data/seo.json @@ -0,0 +1,60 @@ +{ + "pages": { + "home": { + "title": "呼籁旅行 - 呼伦贝尔家庭定制游·一家一单一车", + "description": "呼籁旅行是呼伦贝尔家庭定制游品牌,深耕呼伦贝尔11年,已服务10000+组家庭。提供4-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系列4-7天 - 呼籁旅行", + "description": "呼籁旅行夏季定制游产品「额吉的故乡V9」,4天3晚至7天6晚多版本亲子行程,莫日格勒河、边境公路、呼伦湖、自有营地。一家一单一车,专属私家团。", + "h1": "额吉的故乡 · 呼伦贝尔夏季定制游", + "ogImage": "/images/og-products.jpg", + "keywords": "额吉的故乡,呼伦贝尔夏季定制游,呼伦贝尔亲子游,额吉的故乡V9,呼伦贝尔几天合适,4天3晚,5天4晚,6天5晚,7天6晚" + }, + "faq": { + "title": "呼伦贝尔亲子游常见问题 - 价格·行程·安全·穿搭全解答 - 呼籁旅行", + "description": "呼伦贝尔定制游和亲子游常见问题解答:价格、行程天数、穿搭准备、安全保障、退改政策等高频问题,呼籁旅行为您详细解答。", + "h1": "呼伦贝尔定制游常见问答", + "ogImage": "/images/og-faq.jpg", + "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": "呼伦贝尔夏令营,草原亲子夏令营,小蒙马夏令营,呼伦贝尔亲子营,研学旅行" + }, + "contact": { + "title": "联系呼籁旅行 - 微信客服·电话·小程序预订", + "description": "联系呼籁旅行:微信客服、电话咨询、小程序预订。所有行程签订正规电子合同,请认准官方渠道。", + "h1": "联系我们", + "ogImage": "/images/og-contact.jpg", + "keywords": "呼籁旅行联系方式,呼伦贝尔定制游咨询,呼籁旅行微信,呼伦贝尔旅游电话" + } + } +} \ No newline at end of file diff --git a/data/stories.json b/data/stories.json new file mode 100644 index 0000000..78fb59d --- /dev/null +++ b/data/stories.json @@ -0,0 +1,409 @@ +{ + "stories": [ + { + "id": "story-3", + "title": "一家四口的6天5晚", + "subtitle": "爸爸妈妈带着6岁的妹妹和9岁的哥哥走进呼伦贝尔,本以为是一次普通的暑假旅行,却在莫日格勒河边、在马背上、在营地的篝火旁,找到了一家人好久没有过的那种安静的快乐。", + "coverImage": "/images/stories/placeholder-family-four.jpg", + "familyType": "亲子家庭", + "travelDate": "2025年7月", + "product": "eji-v9-family", + "tags": [ + "亲子", + "额吉的故乡V9", + "骑马", + "草原星空", + "营地篝火" + ], + "summary": "爸爸妈妈带着6岁的妹妹和9岁的哥哥走进呼伦贝尔,本以为是一次普通的暑假旅行,却在莫日格勒河边、在马背上、在营地的篝火旁,找到了一家人好久没有过的那种安静的快乐。", + "content": "

出发前:爸爸被说服的那个晚上

\n决定去呼伦贝尔这件事,在这个四口之家里酝酿了大半年。妈妈最早动了念头,是在朋友圈看到一个同事发的草原照片——不是那种精修的风景大片,就是一张孩子站在草地上、风把头发吹得乱七八糟的抓拍。她存了图,但没马上说。\n\n爸爸一开始是犹豫的。六天时间不短,两个孩子一个6岁一个9岁,小的那个还会晕车,大的那个正在\"什么都不感兴趣\"的阶段。\"去海边不好吗?近一点。\"爸爸说。\n\n后来有一天晚饭后,妈妈把呼籁的行程发给爸爸看。额吉的故乡V9亲子版,六天五晚,海拉尔进满洲里出。爸爸看了一会儿,问了一句:\"骑马安全吗?\"妈妈知道,这句话的意思是——他动心了。\n\n定下行程那晚,9岁的哥哥问:\"草原上有WiFi吗?\"妈妈说没有。他皱了皱眉。六天后他回来的时候,已经不问这个问题了。\n

旅途中:莫日格勒河的风和马背上的妹妹

\n到海拉尔那天是个阴天。领队在机场接他们,车上备了儿童安全座椅和一个小箱子——里面是湿巾、驱蚊贴、小零食,还有两瓶常温的矿泉水。妈妈后来说,就是这个箱子让她觉得\"选对了\"。\n\n第二天去莫日格勒河。车开到一片高坡上停下来,眼前的河像一条银色的丝带在草原上弯来弯去,弯了不知道多少道。6岁的妹妹蹲在地上看蚂蚱,完全没理会大人在拍照。爸爸站在那里,手插在口袋里,很久没说话。妈妈拍了张爸爸的背影,后来发朋友圈用的就是这张。\n\n骑马那天,妹妹一开始是害怕的。马很高,她伸手够不到马背。牧民大哥把她稳稳抱上去,走了两步她就不怕了。哥哥骑得比较远,回来的时候脸是红的,不知道是晒的还是兴奋的。\"再来一次可以吗?\"——这是这趟旅行里他说的第一句有热情的话。\n\n在黑山头的那个傍晚,一家人在山丘上看日落。草原的日落很慢,太阳像是不太舍得走。天边从橙色变成粉色再变成紫色,妹妹靠在爸爸怀里,快睡着了。哥哥拿着妈妈的手机拍了很多张,挑来挑去觉得都不如眼睛看到的好看。\n

最难忘的瞬间:营地篝火旁那半小时

\n如果问这一家人旅途中最难忘的是什么,答案不是莫日格勒河,不是骑马,也不是满洲里的夜景。是营地篝火旁的那半个小时。\n\n那天晚上住的是草原上的营地。吃完晚饭,领队在空地上点了篝火。火苗一起来,妹妹就兴奋了,绕着火堆跑圈。哥哥一开始假装不感兴趣,坐得远远的,后来还是凑过来了。\n\n爸爸去车上拿了外套给两个孩子披上——七月的草原,白天热,晚上凉得快,温差能有十几度。四个人坐在篝火旁边,没人说话。草原的夜很安静,只有火烧木柴的噼啪声和远处不知道什么虫子的叫声。\n\n妹妹抬头看天,问了一句:\"妈妈,星星怎么这么多?\"这个问题没人回答,因为不需要回答。在城市里长大的孩子,这是她第一次看到真正的银河。不是天文馆的投影,不是绘本上的插画,就是头顶上实实在在的、密密麻麻的、亮得不像真的星星。\n\n哥哥后来在开学的作文里写了这个晚上。老师给了高分,评语是\"细节真实,有画面感\"。妈妈觉得,这趟旅行值了。\n

回来后:手机相册里多了400张照片

\n从满洲里坐飞机回家那天,妹妹在机场哭了一场,说不想走。哥哥没哭,但整个人明显沉默了——和去的时候那种\"无所谓\"的沉默不一样,这次是真的舍不得。\n\n回到家,爸爸发现手机里多了400多张照片。草原、河流、马、日落、营地、孩子跑着的背影、一家人歪歪扭扭的合照。他挑了九张发了朋友圈,配文就四个字:\"不虚此行。\"\n\n妈妈后来跟朋友说,这趟旅行最大的收获不是风景,是一家人终于从各自的屏幕前走出来,在同一个地方,看同一片天,说了很多平时不会说的话。\n\n\"我们家哥哥现在动不动就说'去草原那次怎样怎样',\"妈妈笑着说,\"以前让他出门比什么都难。\"\n\n临走前领队送了两个小朋友一人一条蒙古族的五彩绳。妹妹的那条到现在还系在书包上,已经旧了也不让摘。" + }, + { + "id": "story-8", + "title": "向往大草原呼伦贝尔之行", + "subtitle": "终于实现了走进大草原的心愿,记录这段呼伦贝尔旅行中的所见所感,向往已久的草原比想象中更辽阔。", + "coverImage": "/images/stories/xhs-6857c36c000000002400b119.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "大草原", + "呼伦贝尔", + "圆梦之旅", + "草原旅行" + ], + "summary": "终于实现了走进大草原的心愿,记录这段呼伦贝尔旅行中的所见所感,向往已久的草原比想象中更辽阔。", + "content": "" + }, + { + "id": "story-4", + "title": "带3岁宝宝的草原初体验", + "subtitle": "妈妈纠结了两个月——3岁的孩子去呼伦贝尔会不会太折腾?直到出发后才发现,呼籁团队准备的备品箱、放慢的节奏、和领队弯下腰跟孩子说话的耐心,让她后悔没有更早来。", + "coverImage": "/images/stories/placeholder-toddler.jpg", + "familyType": "小龄宝宝家庭", + "travelDate": "2025年8月", + "product": "eji-v9-family", + "tags": [ + "小龄宝宝", + "额吉的故乡V9", + "领队服务", + "节奏放慢", + "备品箱" + ], + "summary": "妈妈纠结了两个月——3岁的孩子去呼伦贝尔会不会太折腾?直到出发后才发现,呼籁团队准备的备品箱、放慢的节奏、和领队弯下腰跟孩子说话的耐心,让她后悔没有更早来。", + "content": "

出发前:妈妈群里问了三遍'能去吗'

\n在决定去呼伦贝尔之前,这位妈妈至少在三个妈妈群里问过同一个问题:\"3岁的娃能去草原吗?\"\n\n回答分两派。去过的说没问题,没去过的说太远了孩子遭罪。她老公倒是无所谓:\"你想去就去呗。\"但妈妈想的事情比较多——六个小时飞机坐不坐得住?草原上有没有蚊子?万一拉肚子附近有医院吗?水土不服怎么办?防晒霜够不够?奶粉能不能带够?\n\n她给呼籁的定制师发了一长串问题。定制师没有敷衍,一条一条回了。回答里有一句话她记住了:\"我们接待过很多2-3岁的宝宝,行程节奏会根据孩子年龄调整,不用担心赶路。\"\n\n她后来说,就是\"不用担心赶路\"这五个字让她下了单。因为之前带孩子去过一次跟团游,全程赶赶赶,孩子在车上睡,到了景点哭,大人比上班还累。她怕的不是草原,是那种被行程推着走的感觉。\n

旅途中:那个让妈妈放下心的备品箱

\n到海拉尔的那天,宝宝在飞机上睡了一大半,落地状态还行。领队接机的时候,车里的儿童安全座椅已经装好了。后排还有一个透明的收纳箱,领队说这是\"备品箱\"——里面有儿童湿巾、驱蚊手环、防晒小喷雾、一次性围兜、小包装的饼干和果泥、还有几个贴纸和小玩具。\n\n妈妈打开箱子看了一眼,转头跟老公说:\"这些东西我都带了,但他们也准备了一份,就很……安心。\"\n\n行程确实和普通团不一样。每天出发时间比常规的晚半小时到一小时,中午一定安排午休时间。第三天本来计划去一个比较远的景点,领队看宝宝上午有点闹觉,主动提了一句:\"要不今天下午的行程换个近一点的?那边有一片矮矮的草地,适合他跑。\"妈妈没想到领队会主动提调整。\n\n在草原上的那几天,宝宝的状态出乎意料地好。他不太在意风景好不好看,他在意的是地上的石子能不能捡、草丛里有没有蚂蚱、牛是不是会走过来。领队每次蹲下来跟他说话都是平视的角度,不会站着居高临下地逗他。妈妈注意到了这个细节。\n

最难忘的瞬间:白桦林里追蝴蝶的十分钟

\n整趟旅行妈妈拍了很多视频,但她反复看的一段只有42秒。\n\n那天去白桦林,阳光从树叶缝隙里漏下来,地上是一块一块的光斑。宝宝走在前面,突然看到一只蝴蝶。他伸手去抓,蝴蝶飞了,他就追,蝴蝶落在另一棵树上,他又去追。追了大概十分钟,没追到,但他一直在笑。\n\n那42秒的视频拍的是宝宝跑着跑着被树根绊了一下,没摔倒,自己稳住了,然后回头看妈妈,咧嘴一笑。背景是笔直的白桦树干和金绿色的光。没有配乐,只有风声和孩子哒哒哒跑路的脚步声。\n\n妈妈说她在回程飞机上看这段视频看了五六遍。不是因为拍得多好,是因为这种画面在城市里根本不会有——一个三岁的孩子,在一片安全的、干净的、没有车没有人群的林子里,想跑就跑,想停就停,完全自由。\n\n\"他平时在小区花园里跑我都紧张,怕磕了碰了。在那片白桦林里我居然一点都不担心,\"妈妈说,\"我不知道为什么,就是觉得放松。可能是因为那个地方太干净了,干净到你觉得什么危险都不会有。\"\n

回来后:朋友圈底下的37条评论

\n回来后妈妈发了一条朋友圈,九张图,第一张就是白桦林里那个追蝴蝶的背影。配文写得很短:\"事实证明,3岁可以去草原。很可以。\"\n\n底下37条评论,大部分都是别的妈妈在问:真的可以带小宝宝去吗?累不累?选的哪家?\n\n她一条一条回了。有一条回复很长,大意是:关键不是孩子能不能去,是你选的团队愿不愿意为小孩子调整节奏。如果他们的态度是\"小孩也得跟上大人的安排\"那就别去了。但如果他们愿意蹲下来跟你的孩子说话,那就没问题。\n\n老公的反馈倒是简单:\"比我预想的轻松多了。\"他甚至在回来的第二周就开始查明年暑假的机票了。\n\n宝宝自己可能记不住太多细节。但有一天晚上洗澡的时候,他突然指着浴室的小鸭子说:\"牛牛!\"妈妈愣了一下才反应过来——他说的是在草原上看到的那群牛。\n\n三岁的孩子,把黄色小鸭子认成了草原上的牛。妈妈觉得好笑又有点感动。那片草原在他的小脑袋里留下了什么,说不清楚,但确实留下了。" + }, + { + "id": "story-9", + "title": "呼伦贝尔大草原吹自由的风", + "subtitle": "在呼伦贝尔大草原感受自由的风,记录草原旅行中身心彻底放松的美好体验,每一帧都是治愈。", + "coverImage": "/images/stories/xhs-68457e180000000021000dfe.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "大草原", + "自由", + "放松", + "呼伦贝尔", + "草原风光" + ], + "summary": "在呼伦贝尔大草原感受自由的风,记录草原旅行中身心彻底放松的美好体验,每一帧都是治愈。", + "content": "" + }, + { + "id": "story-5", + "title": "三代同堂的呼伦贝尔之旅", + "subtitle": "带着60多岁的爷爷奶奶和8岁的孙子走进呼伦贝尔。爷爷在莫日格勒河边站了很久不说话,孙子拉着爷爷的手在草地上数牛羊,一家三代在草原上拍了这辈子最好的一张全家福。", + "coverImage": "/images/stories/placeholder-three-gen.jpg", + "familyType": "三代同堂", + "travelDate": "2025年7月", + "product": "eji-v9-family", + "tags": [ + "三代同堂", + "老人出行", + "全家福", + "额吉的故乡V9", + "代际互动" + ], + "summary": "带着60多岁的爷爷奶奶和8岁的孙子走进呼伦贝尔。爷爷在莫日格勒河边站了很久不说话,孙子拉着爷爷的手在草地上数牛羊,一家三代在草原上拍了这辈子最好的一张全家福。", + "content": "

出发前:说服爷爷是最难的部分

\n提议去呼伦贝尔的是妈妈。她的想法很简单:公公婆婆年纪大了,趁还走得动,一家人出去一趟。儿子8岁,正是对什么都好奇的年纪,而且再过两年课业重了就不好请假。\n\n爸爸同意了,但说了一句:\"你去跟我爸说。\"\n\n爷爷是那种一辈子没怎么出过远门的人。不是没条件,是觉得\"没必要\"。退休以后每天的生活就是早起遛弯、买菜、看新闻、带孙子写作业。他的口头禅是\"在家待着多好\"。\n\n妈妈跟爷爷说了三次。第一次爷爷说\"太远了\",第二次说\"花那个钱干嘛\",第三次妈妈把孙子搬出来了——\"爷爷,老师说呼伦贝尔的草原上能看到银河!\"爷爷看了孙子一眼,沉默了一会儿,说了句:\"那去就去吧。\"\n\n奶奶倒是高兴的。她开始提前半个月收拾行李,棉毛衫带了三件,常备药装了一袋,还往箱子里塞了一袋她自己炸的小麻花——\"怕孙子在外面吃不惯\"。\n\n出发那天在机场,爷爷显得有些局促。他大概有十几年没坐过飞机了。但他没说什么,只是把孙子的手拉得紧了一点。\n

旅途中:爷爷在草原上走得比谁都慢

\n到了呼伦贝尔,爷爷的变化是慢慢来的。\n\n第一天他还是那副\"到哪儿都一样\"的样子。在车上看着窗外的草原,嘴上说\"嗯,挺大的\",表情没什么波动。领队安排他坐副驾驶,腿能伸开,也方便上下车。\n\n第二天到莫日格勒河,变化就开始了。车停下来,一家人沿着山坡往上走了一小段。爷爷走得慢,大家放慢了速度等他。等他走到坡顶往下一看——河流在草原上弯了九道十八弯,阳光打在水面上,远处是一群小黑点一样的牛。\n\n爷爷站在那里很久没说话。奶奶在旁边叫他拍照,他说\"等一下\"。就那么站着看。后来他转头跟儿子说了一句:\"我这辈子没见过这么大的地方。\"\n\n这句话不重,但儿子听了觉得眼眶有点酸。爷爷活了六十多年,去过最远的地方是省城。他不是没有见识,是他的生活半径一直就那么大。突然站在一片看不到边的草原上,对他来说不只是风景,是世界在他眼前突然变大了。\n\n孙子不懂这些。他拉着爷爷的手往坡下跑,要去数牛。\"爷爷你看那个最大的是不是牛爸爸?\"爷爷被拽着跑了两步,乐了。\n

最难忘的瞬间:那张在草原上拍的全家福

\n这趟旅行最好的一张照片,是领队帮拍的全家福。\n\n那天下午在一片开阔的草坡上,领队说:\"在这儿拍张全家福吧,光线正好。\"一家五口站在一起,背后是绿色的草原和蓝白相间的天。领队让大家不要刻意摆姿势,\"就像平时在家一样\"。\n\n后来出来的照片是这样的:爷爷站在中间,奶奶挽着他的胳膊,爸爸妈妈站两边,孙子蹲在前面,手里抓了一把草正准备往爷爷身上撒。每个人都在笑,不是那种\"看镜头笑一个\"的标准笑,是被孙子那个动作逗的真笑。\n\n妈妈后来把这张照片洗出来了,十寸,放在客厅电视柜上。她说这家里合影不少,但之前的合影都是在照相馆或者饭店拍的——背景要么是假布景,要么是一张大圆桌。这张不一样。背后是真的天、真的草、真的风。人也是最放松的样子。\n\n爷爷的那张照片里他笑得眼睛眯成了一条缝。奶奶说,他上一次笑成这样还是孙子出生那天。\n\n旅途中还有一个小插曲。有天晚上孙子缠着爷爷讲\"小时候的事\",爷爷坐在营地的椅子上,慢慢讲起他年轻时候的故事——种地、赶集、第一次坐火车去县城。孙子听得认真,妈妈在旁边悄悄录了一段。\n\n她说这段录音比任何照片都珍贵。平时在家,爷爷从来不讲这些。可能是在草原上,人自然而然就松了,话也多了。\n

回来后:爷爷把手机壁纸换了

\n回家后最明显的变化是爷爷。\n\n他把手机壁纸从孙子的证件照换成了草原那张全家福。每天早起遛弯遇到老伙伴,会主动把手机翻出来给人看照片:\"这是呼伦贝尔,大不大?\"\"这个河叫莫日格勒,弯成那样,厉害吧?\"\"这是我孙子骑马呢。\"\n\n奶奶说他回来以后明显精神好了,话也多了。以前每天看完新闻就坐着发呆,现在会翻手机相册,看着看着自己笑一下。\n\n有一天晚饭时爷爷突然说了一句:\"明年能不能去那个……什么湖来着?\"奶奶说:\"呼伦湖。\"爷爷点头:\"对,那个地方没去成。\"\n\n全家人都愣了一下。这是爷爷第一次主动说\"想去哪里\"。在这之前,他对任何出行计划的回应都是\"你们去吧,我在家\"。\n\n妈妈后来跟朋友说:\"带老人出门最大的障碍不是体力,是他们觉得'不值得''没必要'。你得让他真的站到那个地方,他才会知道值不值得。\"\n\n孙子开学写了一篇作文,题目是\"我和爷爷的暑假\"。里面有一句话:\"爷爷在草原上走得很慢很慢,但他比平时开心很多很多。\"" + }, + { + "id": "story-10", + "title": "一次净化心灵的草原之行", + "subtitle": "系列游记开篇,记录这次走进草原净化心灵之旅的第一章,草原的辽阔让人重新找回内心的平静。", + "coverImage": "/images/stories/xhs-68458364000000000f03a03b.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "净化心灵", + "草原旅行", + "系列游记", + "呼伦贝尔" + ], + "summary": "系列游记开篇,记录这次走进草原净化心灵之旅的第一章,草原的辽阔让人重新找回内心的平静。", + "content": "" + }, + { + "id": "story-6", + "title": "从犹豫到二刷的妈妈", + "subtitle": "第一年做了半个月功课、比了十几家才下单,紧张得在出发前一晚还想退。第二年,她提前三个月就给呼籁定制师发了消息:今年暑假还有位置吗?", + "coverImage": "/images/stories/placeholder-repeat.jpg", + "familyType": "回头客家庭", + "travelDate": "2025年7月(二刷)", + "product": "eji-v9-family", + "tags": [ + "二刷", + "回头客", + "信任", + "额吉的故乡V9", + "口碑" + ], + "summary": "第一年做了半个月功课、比了十几家才下单,紧张得在出发前一晚还想退。第二年,她提前三个月就给呼籁定制师发了消息:今年暑假还有位置吗?", + "content": "

第一年:做了两周攻略还是不放心

\n她是那种做决定特别慎重的妈妈。买个书包都要看三天测评,更别说花上万块带孩子出去玩六天。\n\n决定去呼伦贝尔之后,她花了两周时间做功课。小红书刷了上百篇笔记,马蜂窝看了几十篇游记,问了至少十几家旅行机构。她做了一张表格,把每家的报价、行程、包含内容、车辆类型、评价全列出来,一行一行对比。\n\n后来选了呼籁,原因也不算特别。并不是说呼籁哪里突出得特别明显,而是定制师在沟通过程中的几个细节让她觉得\"靠谱\":回复及时但不催,问什么答什么不夸张,有一次她问了一个比较刁钻的问题——\"如果下雨行程怎么调整\"——定制师没有说\"不会下雨的放心\",而是认真解释了备选方案。\n\n但即便下了单,她心里还是有一根弦绷着。出发前一晚她跟老公说:\"要不别去了?\"老公说:\"钱都交了。\"她说:\"我就是怕到了跟说好的不一样。\"\n\n结果呢——到了之后发现,不是跟说好的一样,是比说好的还好一点点。不是好很多,就是好那么一点点。车比她想的新,领队比她想的用心,伙食比她想的丰富。她形容这种感觉是\"预期刚好被超过一点\"。\n

第一次旅途中:被一个细节打动

\n第一次去的那趟旅行,整体体验很顺。行程安排合理,该打卡的地方打到了,不该赶的路没赶。但真正让她从\"满意\"变成\"想再来\"的,是一个很小的细节。\n\n第四天的傍晚在黑山头,她家孩子跟另一个孩子玩得开心,结果不小心摔了一跤,膝盖蹭破了皮。不严重,但小朋友哭了。她正在手忙脚乱地翻包找创可贴,领队已经走过来了,蹲下来看了看伤口,从随身的小急救包里拿出碘伏棉签和透气创可贴。一边给孩子处理一边说:\"没事的,很勇敢。你看这个创可贴是恐龙的。\"\n\n孩子看到恐龙图案就不哭了。\n\n她后来跟朋友说这个事的时候,重点不在创可贴上。重点是领队随身带了儿童创可贴——不是普通的肤色创可贴,是带卡通图案的那种。这不是标准配备能要求的,是一个人真的在意小朋友才会做的准备。\n\n\"你知道什么叫用心吗?用心不是把行程排得多满、把酒店订得多贵。用心是他兜里揣着一片恐龙创可贴。\"她后来在朋友圈写了这句话,底下好多妈妈回复\"戳了\"。\n

第二年:提前三个月发消息问'还有位吗'

\n第一年回来之后,她没有立刻说\"明年还去\"。但变化是潜移默化的。秋天看到朋友圈有人发草原的秋景,她会停下来多看两秒。冬天看到呼伦贝尔的雪景推文,她转给老公说\"冬天好像也好看\"。\n\n到了第二年春天,她做了一件之前的自己绝对不会做的事情——没有再做攻略、没有再比价、没有再列表格。她直接给呼籁的定制师发了一条消息:\"今年暑假还有位置吗?我们想再去一次。\"\n\n定制师回了一个笑脸:\"有的,给你留着。\"\n\n这次出发前她没有焦虑,甚至还有点期待。她跟孩子说\"我们要去找去年的那匹马\",虽然她知道大概率找不到同一匹。\n\n第二次去和第一次的感受不一样。第一次是新鲜感——第一次看到草原、第一次骑马、第一次住蒙古包。第二次新鲜感淡了,但多了一种类似\"回去\"的感觉。领队换了一个人,但那种不急不赶的节奏还在。莫日格勒河还是那样弯来弯去,黑山头的日落还是那么慢。\n\n她发现自己第二次拍照少了很多。第一次去的时候一天拍两三百张,生怕错过什么。第二次她放下手机的时间更多了,因为知道这些东西不会跑掉——不是说风景不会变,而是她知道自己还会再来。\n

回来后:她变成了'自来水'

\n两次呼伦贝尔之旅之后,她变成了呼籁的\"自来水\"——就是那种没人请她推荐但她会主动推荐的人。\n\n妈妈群里有人问\"暑假去哪儿好\",她第一个跳出来说\"呼伦贝尔\"。同事聊到亲子旅行,她说\"去草原吧,我知道一家靠谱的\"。甚至有一次接孩子放学,跟另一个妈妈在校门口聊了半小时呼伦贝尔。\n\n她不是做广告那种推法。她说的都是具体的东西:领队兜里的恐龙创可贴、备品箱里刚好是常温的矿泉水、行程中间那个留给孩子午睡的空档。都是小事,但小事加在一起就成了信任。\n\n老公开玩笑说:\"你是不是收了人家广告费?\"她说:\"你去了两次还说这种话。\"\n\n她后来自己总结了一句话,说得很朴实:\"第一次去之前我怕踩雷,做了那么多功课,就是怕花了钱不值。去了之后发现,不是'不踩雷',是'超出预期一点点'。这个一点点,就是让你第二年还想去的理由。\"\n\n至于第三年去不去?她说要看孩子的意见。但孩子已经在问了:\"妈妈,今年暑假我们去哪?\"她还没回答,孩子自己接了一句:\"还是去草原吧。\"" + }, + { + "id": "story-11", + "title": "大草原上有家超Chill的露营地", + "subtitle": "在呼伦贝尔大草原发现这处超级放松的露营地,帐篷、草原、星空……记录极致Chill的草原露营体验。", + "coverImage": "/images/stories/xhs-6842c5a60000000021006499.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "露营", + "草原露营", + "Chill", + "呼伦贝尔", + "营地体验" + ], + "summary": "在呼伦贝尔大草原发现这处超级放松的露营地,帐篷、草原、星空……记录极致Chill的草原露营体验。", + "content": "" + }, + { + "id": "story-7", + "title": "闺蜜四人的草原自驾", + "subtitle": "四个妈妈,认识十几年,自从有了孩子就再没一起出过远门。这次终于下了决心——把孩子丢给爸爸,去呼伦贝尔的草原上做四天没有人叫妈妈的自己。", + "coverImage": "/images/stories/placeholder-girlfriends.jpg", + "familyType": "闺蜜出行", + "travelDate": "2025年8月", + "product": "eji-v9-classic", + "tags": [ + "闺蜜旅行", + "女性出行", + "自由", + "草原自驾", + "放飞" + ], + "summary": "四个妈妈,认识十几年,自从有了孩子就再没一起出过远门。这次终于下了决心——把孩子丢给爸爸,去呼伦贝尔的草原上做四天没有人叫妈妈的自己。", + "content": "

出发前:四个家庭的'战前部署'

\n这次旅行的起源是一个妈妈群里的一句话:\"好想出去玩啊,不带孩子的那种。\"\n\n发这句话的人也就是随口一说。但另外三个人接了:\"走啊。\"\"我也想。\"\"什么时候?\"\n\n四个人是大学同学,认识十五六年了。毕业后散在不同城市,有的做财务有的做设计有的全职带娃,每年见面的次数用一只手数得过来。自从都当了妈妈之后,\"一起出去玩\"这个念头提过很多次,每次都因为各种原因没成——孩子太小走不开、老公出差没人带、工作请不了假、觉得花钱内疚。\n\n这次不知道为什么就成了。可能是因为四个人的孩子都大了一点,最小的也上幼儿园了。可能是因为有人先说了\"我已经跟我老公说好了\",其他人就也有了底气。\n\n出发前的准备更像是一场\"战前部署\"。每个人都得安顿好后方——冰箱里的菜备好,孩子的课外班时间写成表格贴墙上,老公能不能按时接送反复确认。有一个妈妈出门前录了三段视频教老公怎么扎辫子。\n\n她们选了呼籁的经典版行程。一个人说:\"不要太累的,我们去是为了放松不是打卡。\"另一个说:\"但也不要太闲,闲了我会想孩子。\"\n

旅途中:在草原上找回'女孩'的感觉

\n到海拉尔的那天下午,四个人在酒店房间里发了十分钟呆。不是累,是突然意识到:这是她们当了妈妈之后第一次出远门时身边没有孩子。安静得有点不真实。\n\n第一天的行程是从海拉尔出发,沿着草原公路往北。车窗外的景色从城市变成牧场,又从牧场变成一望无际的绿。有人把车窗摇下来,风灌进来,头发全吹乱了。另一个人喊:\"别关窗!就要这个感觉!\"\n\n她们从第一天就开始拍照——不是妈妈那种举着手机给孩子拍照的姿势,是自己站在草地上、躺在花丛里、靠在白桦树上的照片。她们互相拍,也让领队帮拍。有一张四个人手拉手跑向镜头的照片,后来成了四个人共同的微信头像。\n\n在草原上有一个下午完全是自由时间。领队把车停在一片高坡上,说:\"这一两个小时随便你们,想坐着发呆也行,想往前走也行。\"\n\n四个人就坐在草地上聊天。聊了很多——工作的压力、孩子的教育焦虑、和老公的关系、对自己未来的想法。这些话题在微信群里也聊,但在草原上聊感觉不一样。没有信号催她们回复消息,没有孩子在旁边打断,天很高风很大,说什么好像都变得轻了一些。\n\n有一个人说:\"我有多久没这样坐下来聊天了?上一次好像还是大学毕业那个暑假。\"\n

最难忘的瞬间:满洲里夜晚的那顿火锅

\n四个人一致同意最难忘的不是草原上的风景——虽然风景确实美——而是在满洲里的最后一个晚上。\n\n那天晚上她们去吃了一顿涮羊肉火锅。锅里咕嘟咕嘟冒着泡,羊肉卷一放进去就变了色,窗外是满洲里亮着灯的俄式建筑。四个人喝了点酒——白天在草原上买的蓝莓酒,甜甜的不上头。\n\n喝到微醺的时候,有人突然说:\"你们还记得大二那次我们四个去吃自助烤肉,吃到被服务员催我们走。\"大家全笑了。然后话题就从大学聊到毕业、聊到第一份工作、聊到结婚生孩子、聊到现在。\n\n聊着聊着一个人眼眶红了。不是因为伤心,是因为意识到时间过得太快了。上一次她们四个人毫无顾虑地坐在一起吃饭聊天,好像真的是十年前的事了。\n\n\"我们应该每年这样出来一次,\"有人提议。\"那你先搞定你老公,\"另一个人说。全桌又笑了。\n\n那天晚上回酒店已经快十一点了。四个人躺在各自的床上还在聊天,聊到困了才安静。有一个人最后发了一条朋友圈,只有一张满洲里夜景的照片,配文是:\"青春没有散场,只是暂停了十年。\"\n

回来后:爸爸们的求生欲和下一次的约定

\n回来那天四个人在机场各自分开。拥抱的时候有人说\"下次什么时候\",另一个人说\"冬天来看雪\"。也不知道能不能成,但至少说出来了。\n\n回到家的场景各不相同但大同小异。家里不算太乱,但也绝对没有她们在的时候整洁。有一个妈妈进门看到茶几上放着三个外卖盒,心里一声叹气但没发火。另一个妈妈的孩子冲过来抱住她的腿说\"妈妈我想你了\",她蹲下来抱了很久。\n\n爸爸们在这几天里表现出了惊人的\"求生欲\"。有一个爸爸提前把家打扫了一遍,冰箱里补了菜。有一个在她出门的第三天开始每天发照片汇报带娃进度——可能是怕她不回来了。\n\n四个人回家后在群里做了一次\"旅行总结\"。总结的内容不是攻略也不是行程,是每个人的感受。有人说:\"我发现我不是不喜欢出去玩,我只是太久没有为自己出去玩了。\"有人说:\"带孩子旅行是给孩子看世界,不带孩子旅行是给自己找回来。\"\n\n最实际的一条总结来自最\"理性\"的那位:\"结论——妈妈每年至少应该有一次不带孩子的旅行。这不是自私,是续命。\"\n\n后来她们真的开始看冬季的行程了。群里发了一张呼伦贝尔冬天白雪覆盖的照片,下面四条消息几乎是同时发的:\"去。\"" + }, + { + "id": "story-12", + "title": "一年仅开放90天的露营地,长什么样", + "subtitle": "实地探访这处全年只开放90天的草原露营地,揭秘它为何如此珍贵,记录这段限时限量的特殊体验。", + "coverImage": "/images/stories/xhs-6814ae2d0000000021002253.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "限时露营", + "90天", + "草原营地", + "稀缺体验", + "呼伦贝尔" + ], + "summary": "实地探访这处全年只开放90天的草原露营地,揭秘它为何如此珍贵,记录这段限时限量的特殊体验。", + "content": "" + }, + { + "id": "story-13", + "title": "呼伦贝尔 Day1 海拉尔", + "subtitle": "旅行第一天从海拉尔出发,记录抵达呼伦贝尔的初印象与第一天的行程安排,精彩旅程的开始。", + "coverImage": "/images/stories/xhs-684240880000000023002d94.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "Day1", + "海拉尔", + "行程记录", + "旅行日记", + "呼伦贝尔" + ], + "summary": "旅行第一天从海拉尔出发,记录抵达呼伦贝尔的初印象与第一天的行程安排,精彩旅程的开始。", + "content": "" + }, + { + "id": "story-14", + "title": "全家老小草原撒欢记 · 6天5晚保姆级攻略", + "subtitle": "全家老小一起来草原撒欢,6天5晚行程完整记录,从行前准备到每日安排的保姆级家庭旅行攻略。", + "coverImage": "/images/stories/xhs-6839bf360000000021003152.jpg", + "familyType": "亲子家庭", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "家庭旅行", + "6天5晚", + "保姆级攻略", + "全家老小", + "草原撒欢" + ], + "summary": "全家老小一起来草原撒欢,6天5晚行程完整记录,从行前准备到每日安排的保姆级家庭旅行攻略。", + "content": "" + }, + { + "id": "story-15", + "title": "呼伦贝尔大草原 · 牛马的加油站", + "subtitle": "把呼伦贝尔大草原称作「牛马的加油站」,记录在草原上彻底放松充电、找回人生动力的真实体验。", + "coverImage": "/images/stories/xhs-68369d87000000000f0303c0.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "草原旅行", + "充电放松", + "呼伦贝尔", + "心灵加油站" + ], + "summary": "把呼伦贝尔大草原称作「牛马的加油站」,记录在草原上彻底放松充电、找回人生动力的真实体验。", + "content": "" + }, + { + "id": "story-16", + "title": "我在呼伦贝尔大草原啦", + "subtitle": "终于来到呼伦贝尔大草原!记录和小羊们同框的快乐瞬间,分享在草原上的真实体验与美好感受。", + "coverImage": "/images/stories/xhs-6835866c0000000012002b58.jpg", + "familyType": "旅行者", + "travelDate": "2025年夏季", + "product": null, + "tags": [ + "大草原", + "呼伦贝尔", + "小羊", + "旅行打卡" + ], + "summary": "终于来到呼伦贝尔大草原!记录和小羊们同框的快乐瞬间,分享在草原上的真实体验与美好感受。", + "content": "" + }, + { + "id": "story-17", + "title": "呼伦贝尔好好玩", + "subtitle": "呼伦贝尔好好玩!简单直接地分享这趟草原旅行的快乐,每一个体验都超出预期,推荐每个人都来一次。", + "coverImage": "/images/stories/xhs-66b9f9220000000025032961.jpg", + "familyType": "旅行者", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "呼伦贝尔", + "好好玩", + "草原旅行", + "真实推荐" + ], + "summary": "呼伦贝尔好好玩!简单直接地分享这趟草原旅行的快乐,每一个体验都超出预期,推荐每个人都来一次。", + "content": "" + }, + { + "id": "story-18", + "title": "Vlog4 | 小孩哥最高兴的一天", + "subtitle": "系列旅行Vlog第4集,记录孩子在呼伦贝尔最开心的一天,童真笑脸和草原风光交织成最美好的家庭旅行记忆。", + "coverImage": "/images/stories/xhs-669543dd000000000500781c.jpg", + "familyType": "亲子家庭", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "Vlog", + "亲子旅行", + "最开心", + "小孩", + "呼伦贝尔" + ], + "summary": "系列旅行Vlog第4集,记录孩子在呼伦贝尔最开心的一天,童真笑脸和草原风光交织成最美好的家庭旅行记忆。", + "content": "" + }, + { + "id": "story-19", + "title": "交作业啦!呼伦贝尔六天五晚亲子游攻略出炉", + "subtitle": "旅行结束后认真「交作业」,整理六天五晚呼伦贝尔亲子游完整攻略,是家庭出行规划的实用参考。", + "coverImage": "/images/stories/xhs-66aa392f000000000600d605.jpg", + "familyType": "亲子家庭", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "亲子游攻略", + "六天五晚", + "旅行总结", + "实用攻略" + ], + "summary": "旅行结束后认真「交作业」,整理六天五晚呼伦贝尔亲子游完整攻略,是家庭出行规划的实用参考。", + "content": "" + }, + { + "id": "story-20", + "title": "Vlog2 | 呼伦贝尔已返程,后劲太大", + "subtitle": "系列旅行Vlog第2集,记录返程后心情:人已回家,心却留在了草原上,呼伦贝尔的后劲让人魂牵梦绕。", + "coverImage": "/images/stories/xhs-66936acf000000000a007ca4.jpg", + "familyType": "亲子家庭", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "Vlog", + "返程", + "后劲大", + "草原留恋", + "呼伦贝尔" + ], + "summary": "系列旅行Vlog第2集,记录返程后心情:人已回家,心却留在了草原上,呼伦贝尔的后劲让人魂牵梦绕。", + "content": "" + }, + { + "id": "story-21", + "title": "不与四时同 | 莫日格勒河航拍", + "subtitle": "用无人机从空中俯瞰莫日格勒河,记录这条被称为「中国最美曲流」的震撼之美,每一张航拍都是艺术。", + "coverImage": "/images/stories/xhs-669405df0000000025007216.jpg", + "familyType": "旅行者", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "莫日格勒河", + "航拍", + "曲流", + "草原摄影", + "风光" + ], + "summary": "用无人机从空中俯瞰莫日格勒河,记录这条被称为「中国最美曲流」的震撼之美,每一张航拍都是艺术。", + "content": "" + }, + { + "id": "story-22", + "title": "夏天的呼伦贝尔", + "subtitle": "盛夏的呼伦贝尔万亩碧绿铺展,记录这个最美季节里草原的颜色、气息与感动,夏天来草原就对了。", + "coverImage": "/images/stories/xhs-6674e453000000001c029913.jpg", + "familyType": "旅行者", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "夏季草原", + "呼伦贝尔", + "绿色草原", + "夏日旅行" + ], + "summary": "盛夏的呼伦贝尔万亩碧绿铺展,记录这个最美季节里草原的颜色、气息与感动,夏天来草原就对了。", + "content": "" + }, + { + "id": "story-23", + "title": "不与四时同 | 白桦林游学之旅", + "subtitle": "深入白桦林的游学之旅,记录孩子在自然中学习探索的珍贵时光,让旅行与教育在草原上完美融合。", + "coverImage": "/images/stories/xhs-6696776b00000000250147dd.jpg", + "familyType": "亲子家庭", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "白桦林", + "游学", + "自然教育", + "生态旅行", + "呼伦贝尔" + ], + "summary": "深入白桦林的游学之旅,记录孩子在自然中学习探索的珍贵时光,让旅行与教育在草原上完美融合。", + "content": "" + }, + { + "id": "story-24", + "title": "6天5晚呼伦贝尔亲子游,来啦", + "subtitle": "和孩子一起完成6天5晚呼伦贝尔亲子游,全程记录草原、河流、白桦林与营地的精彩体验,满满的家庭回忆。", + "coverImage": "/images/stories/xhs-66752db6000000001e012119.jpg", + "familyType": "亲子家庭", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "亲子旅行", + "6天5晚", + "呼伦贝尔", + "家庭游" + ], + "summary": "和孩子一起完成6天5晚呼伦贝尔亲子游,全程记录草原、河流、白桦林与营地的精彩体验,满满的家庭回忆。", + "content": "" + }, + { + "id": "story-25", + "title": "这里是呼伦贝尔大草原", + "subtitle": "静静地感受呼伦贝尔大草原的宁静与壮阔,用镜头记录那些让人屏住呼吸的美好瞬间,旅行让人学会放慢脚步。", + "coverImage": "/images/stories/xhs-669781320000000003027150.jpg", + "familyType": "旅行者", + "travelDate": "2024年夏季", + "product": null, + "tags": [ + "呼伦贝尔", + "大草原", + "风光摄影", + "宁静之旅" + ], + "summary": "静静地感受呼伦贝尔大草原的宁静与壮阔,用镜头记录那些让人屏住呼吸的美好瞬间,旅行让人学会放慢脚步。", + "content": "" + } + ] +} \ No newline at end of file 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..9e6556b --- /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": "到北方看雪,很多人第一反应是哈尔滨。冰雕大、亮、好看,航班多,项目也密集。但热闹的反面是去哪都排队,假期被人流和「同款路线」填满。呼伦贝尔的冬天没有那么多「摆拍打卡点」,最打动人的就是那种一望无际的白:雪原铺到天际,风吹过来很干净,脚下踩雪的「咯吱」声,会让人一下子安静下来。不拥挤,不排队,也不赶时间。对带孩子的家庭来说,这种「纯粹的舒服」,反而比什么都值得。", + "closingNote": "我们不打算把自己说得多厉害,但有一点可以很坦诚地说:我们真的是用父母的视角,拿「自己带孩子的标准」在设计这条线。不是为了多一个产品,而是觉得——愿意选择小蒙马的家庭,值得在这个冬天,在一片干净的雪原里,拥有一次只属于他们自己的记忆。", + "photographer": { + "name": "小E", + "description": "夏季小蒙马11期的全能摄影师。不是那种拿着相机「拍你」的摄影师,更像一个能瞬间融入孩子世界的大哥哥。孩子们超级黏他,能捕捉到很多大人看不到的瞬间——自然、不刻意、带着真情绪的画面。", + "specialDay2": "行程第二天(大雪原日)额外增加一位摄影师协作,确保每个家庭在最好的光线、最舒服的状态下拍到属于自己的大片,并为每个家庭拍一支小Vlog。" + }, + "winterClothing": { + "lower": "保暖秋裤/抓绒裤 + 防风外裤(羽绒裤/雪裤/软壳裤/厚棉裤)", + "shoes": "雪地靴为主,建议略大半码,加厚羊毛鞋垫+暖足贴", + "upper": "保暖内衣(排汗)+ 抓绒/毛衣/卫衣做中层 + 滑雪服或防风保暖棉服/羽绒服", + "accessories": "护耳帽子、防水滑雪手套、围巾/脖套、墨镜、护肤霜、防晒、润唇膏" + }, + "campAdvantages": [ + "孩子有年龄相仿的伙伴,有领队带着玩,不用一直黏着爸妈", + "每个环节都有安排、有照看,有专业研学领队看管孩子,孩子在玩的时候也在接触书本外的世界", + "家长无需不断做选择,不用跟着孩子满场跑;带娃不再是负担,而是一起参与,省心省力", + "随团配备专职摄影师,全程跟拍,家长也不用再纠结「谁来帮我们拍」" + ], + "serviceConfig": [ + "亲子领队 1 名", + "副领队 1 名", + "摄影师 1 名(D2配备2名)", + "专业马术教练(马术日)", + "专业滑雪教练(滑雪日)" + ], + "campEssentials": [ + "备用手套", + "保温水壶热水", + "孩子状态观察", + "简易补能零食" + ], + "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 + } + ], + "faq": [ + { + "q": "呼伦贝尔冬天冷不冷?孩子受得了吗?", + "a": "冷是肯定的,海拉尔、阿尔山冬季-20℃~-35℃为常态。但冷不等于「难受」。户外活动时,只要节奏安排得好、活动够有趣,孩子很少喊冷。真正怕冷的是「站着等、排队、干耗着」,我们把干耗着的时间压到最低。按照穿衣指南准备装备,完全没问题。" + }, + { + "q": "冬季营需要家长陪同吗?", + "a": "是的,小蒙马是亲子营,爸爸妈妈带着孩子一起出发。行程中D5特别设计了「孩子托管研学」时段——专业领队带孩子做冰灯、太阳花,家长可以完全自由:泡温泉、补觉、散步都行。" + }, + { + "q": "为什么选呼伦贝尔而不是哈尔滨?", + "a": "哈尔滨冰雕大、亮、好看,第一次看雪没毛病。但如果心里更想看一场真正纯净的雪,不想被人群裹挟着走,呼伦贝尔会更适合。一望无际的白,随便站在哪儿都有一大片只属于自己的雪原。不拥挤,不排队,也不赶时间。" + }, + { + "q": "行程会因天气调整吗?", + "a": "冬季受天气影响较大。如遇暴雪、大风(≥6级)、道路封控、极端低温(-30℃以下)等情况,我们会调整体验顺序或进行替代项目。安全第一,不会在不安全的条件下带孩子户外体验。" + }, + { + "q": "定金和退改政策是什么?", + "a": "定金2000元/人,尾款出发前补齐。出发前≥15天可退全部定金并可调团期;10-14天扣50%定金;6-9天扣80%定金;0-5天不退。如因不可抗力导致无法出行,可提交证明协商处理。" + }, + { + "q": "住宿条件怎么样?", + "a": "全程精选酒店:海拉尔嘉世豪(携程5钻)连住2晚、阿尔善温泉酒店(携程5钻)连住2晚带私汤、阿尔山成悦(携程4钻)2晚。连住设计不折腾行李,不折腾孩子。" + } + ] +} \ No newline at end of file diff --git a/data/winter-products.json b/data/winter-products.json new file mode 100644 index 0000000..067bb08 --- /dev/null +++ b/data/winter-products.json @@ -0,0 +1,325 @@ +{ + "brand": "嗨冰雪", + "version": "V3", + "season": "冬季(11月-次年3月)", + "narrative": "呼伦贝尔和阿尔山的冬,安静的不像一个旅游地。你不需要到哪都排很长时间的队,却可以独享一整片无际的雪原和茫茫林海。这里也是呼籁旅行的家,所以这不单是一条旅行路线,也是一次跟我们回家的冬季体验之旅。", + "style": "独立成团不拼团 · 一单一车 · 随走随停 · 不错过每处风景", + "versions": [ + { + "id": "winter-south-5d4n", + "name": "嗨冰雪V3·南线5天4晚", + "days": 5, + "nights": 4, + "tag": "精华版", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "audience": "假期有限、想体验冬季精华的家庭", + "description": "冬季南线精华浓缩版,5天时间串联呼伦贝尔雪原与阿尔山冰雪世界。冰雪那达慕、雪地狼群、摩托车穿越、骑马、不冻河、白狼峰日出,核心体验一个不少。行程紧凑但不赶路,适合假期有限但想深度体验冬季呼伦贝尔的旅行者。", + "highlights": [ + "冰雪那达慕+雪地狼群+围炉煮茶,感受草原冬日的生命力", + "雪地骑马+摩托车穿越,速度与激情的冬日体验", + "白狼峰日出+不冻河奇观,阿尔山冬季精华" + ], + "itinerary": [ + "D1 各地→呼伦贝尔(接机/站+自由闲逛)", + "D2 冰雪那达慕-莫日格勒河+断崖-冰雪火锅-雪地狼群-围炉煮茶-日落-海拉尔", + "D3 雪地骑马+摩托车穿越-蓝房子-不冻河日落-泡温泉-阿尔山森林公园", + "D4 白狼峰日出-泼水成冰-百里雾凇画廊-森林越野-驯鹿拉车-海拉尔", + "D5 烟火早市-伊敏河嘉年华(超长冰滑梯)-返程" + ] + }, + { + "id": "winter-south-6d5n", + "name": "嗨冰雪V3·南线6天5晚", + "days": 6, + "nights": 5, + "tag": "经典版", + "line": "南线", + "route": "呼伦贝尔+阿尔山", + "audience": "想深度体验阿尔山冬景的家庭", + "description": "冬季南线经典版本,6天5晚从容走遍呼伦贝尔雪原与阿尔山冰雪世界。在精华版基础上,增加了阿尔山森林公园深度游览、网红牛打卡、百里雾凇画廊等内容,在童话小城阿尔山住两晚,节奏更从容。平均每天车程不超180公里,走走停停、边走边玩。", + "highlights": [ + "冰雪那达慕+雪地狼群+雪地火锅+围炉煮茶,冬日草原生命力", + "雪地骑马+摩托车穿越+不冻河日落+冬日烟花+泡温泉", + "网红牛-百里雾凇画廊-森林越野10公里-驯鹿拉车-白狼峰日出" + ], + "itinerary": [ + "D1 各地→呼伦贝尔(接机/站+自由闲逛)", + "D2 冰雪那达慕-莫日格勒河+断崖-冰雪火锅-雪地狼群-围炉煮茶-日落-海拉尔(140公里)", + "D3 雪地骑马+摩托车穿越-蓝房子-不冻河日落-冬日烟花-泡温泉-阿尔山森林公园(300公里)", + "D4 网红牛-百里雾凇画廊-森林越野10公里-赏梅花鹿-驯鹿拉车-雪村-阿尔山(100公里)", + "D5 阿尔山-白狼峰日出-泼水成冰-日式火车站-樟子松林-海拉尔(350公里)", + "D6 海拉尔-烟火早市-伊敏河嘉年华(超长冰滑梯)-历史或民俗博物馆-返程(20公里)" + ] + }, + { + "id": "winter-north-7d6n", + "name": "嗨冰雪V3·北线7天6晚", + "days": 7, + "nights": 6, + "tag": "深度版", + "line": "北线", + "route": "呼伦贝尔+大兴安岭", + "audience": "假期充足、想深度探索冬季北线的家庭", + "description": "冬季北线深度版,7天6晚从容走遍呼伦贝尔与大兴安岭。从草原雪原到中俄蒙边境满洲里,从呼伦湖蓝冰到恩和雪地骑马,从敖鲁古雅驯鹿部落到根河铁锹烤肉。入住套娃酒店体验异域风情,望见林悦独栋别墅感受静谧山野。平均每天车程不超210公里,走走停停、边走边玩。", + "highlights": [ + "冰雪那达慕+雪地狼群+围炉煮茶,冬日草原原始体验", + "满洲里套娃酒店+国门+呼伦湖穿越蓝冰,边境异域风情", + "恩和雪地骑马+敖鲁古雅驯鹿部落+铁锹烤肉,大兴安岭深度探索" + ], + "itinerary": [ + "D1 各地→呼伦贝尔(接机/站+自由闲逛)", + "D2 那达慕-莫日格勒河+断崖-冰雪火锅-雪地狼群-围炉煮茶-冬日烟花-海拉尔(140公里)", + "D3 烟火早市-伊敏河嘉年华+超长冰滑梯-扎赉诺尔博物馆-北欧夜景-套娃酒店(230公里)", + "D4 国门+北疆明珠观光塔-风车公路-呼伦湖穿越-边防公路-雪原日落-额尔古纳(280公里)", + "D5 雪圆圆-三河村景+小楼山打卡点-泼水成冰-恩和骑马-恩和日落+夜景-望见林悦(110公里)", + "D6 望见林悦-室韦+临江后山-敖鲁古雅乡-圣诞小屋+敖乡夜景-根河(230公里)", + "D7 根河-布冬霞驯鹿部落-铁锹烤肉-鄂温克民族服饰体验-海拉尔-返程(250公里)" + ] + } + ], + "highlights": [ + { + "title": "呼伦贝尔大雪原", + "description": "一望无际的大雪原,不必担心过度的商业化,也不必担心看不到好看的雪景,这片大雪原足以满足你对冰雪的幻想,而且你完全可以独享一片梦幻的雪原。" + }, + { + "title": "课本里的《大兴安岭》", + "description": "无边无际的森林海洋,蕴藏着数之不尽的宝藏!每年的11月至次年4月,这里就会变成一个冰雪的世界,无比震撼的美,让人流连忘返。" + }, + { + "title": "小型冰雪那达慕", + "description": "体验冬日草原少数民族的「生命力」,天地之间千里冰封的莫日格勒河畔,一场小型那达慕正在举办,身着蒙古族传统盛装,载歌载舞,体验摔跤的力量较量以及射箭带来的乐趣。" + }, + { + "title": "雪地狼群", + "description": "这里是中科院狼行为学的科研基地,狼群数量达到上百只,狼通常成群生活,狩猎时默契得像经过多年训练一样。在其他地方很少会见到如此多的狼群,近距离观赏狼、投喂狼,感受草原狼文化。" + }, + { + "title": "雪地火锅+围炉煮茶", + "description": "在这片纯白里,围上一锅热气腾腾的火锅,汤底翻滚、香气四散,寒意一下就被驱散了。还有小炉慢慢地煨着茶,水声轻沸腾,茶香在冷空气中更显清甜。吃火锅、煮热茶,在雪地里形成一个温暖的小宇宙。" + }, + { + "title": "雪地野骑", + "description": "冬季骑马更独具一番感受,在一望无际的雪原和白桦林之间,感受冬季的速度与激情,用骑行的角度丈量这片神奇的土地,深入茫茫无际的雪原,欣赏绝美的冬日风光。" + } + ], + "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": "呼伦湖是我国北方第一大湖,一旦进入冬季千里冰封、万里雪飘的时候,呼伦湖就会变成一整块巨冰;湖面穿越+寻找蓝冰的体验活动,乘车行驶在一望无际的冰面上,是一次特别且难忘的旅行体验。" + } + ], + "timeline": [ + { + "version": "V3", + "date": "2025.11", + "title": "南北双线全面升级,新增5天4晚精华版", + "changes": [ + { + "text": "南线新增5天4晚精华版,假期有限也能体验冬季精华", + "type": "add" + }, + { + "text": "北线重新加入满洲里行程,新增套娃酒店+呼伦湖穿越蓝冰", + "type": "add" + }, + { + "text": "南线新增摩托车穿越、冰雪森林轻徒步体验", + "type": "add" + }, + { + "text": "全线升级住宿标准,新增望见林悦独栋别墅等特色住宿", + "type": "update" + } + ], + "reason": "V2取消满洲里后客户反馈北线内容偏少,同时很多客户假期有限但想体验冬季。V3重新优化满洲里行程(套娃酒店+呼伦湖蓝冰),同时新增南线5天4晚精华版满足短假期需求。" + }, + { + "version": "V2(北线)", + "date": "2024.11", + "title": "深入大兴安岭腹地,探访原始鄂温克部落", + "changes": [ + { + "text": "新增大兴安岭徒步,穿军大衣戴狗皮帽子踏入银装素裹的林海", + "type": "add" + }, + { + "text": "新增铁锹烤肉,雪地里就地取材生火烤肉", + "type": "add" + }, + { + "text": "新增原始鄂温克寻鹿点,走进真正的驯鹿部落", + "type": "add" + }, + { + "text": "取消满洲里行程,把时间留给更值得的地方", + "type": "remove" + }, + { + "text": "增加冬季随车备品,让寒冷的冬天充满温度", + "type": "update" + } + ], + "reason": "前往满洲里路途景色单一,俄罗斯大马戏、马术表演停止演出,呼伦湖湖面被雪覆盖难看到大面积蓝冰。取消满洲里后把时间给了大兴安岭深度体验——徒步、铁锹烤肉、原始鄂温克部落。" + }, + { + "version": "V2(南线)", + "date": "2024.11", + "title": "新增森林牧场UTV穿越体验", + "changes": [ + { + "text": "新增森林牧场UTV卡丁车穿越,在林海雪原中自由驰骋", + "type": "add" + }, + { + "text": "取消满洲里行程,优化时间分配", + "type": "remove" + } + ], + "reason": "距离阿尔山仅3公里的森林牧场,被冰雪覆盖宛如童话中的银色世界。驾驶雪地全地形越野车穿梭于林海雪原之间,取代满洲里的单调路程。" + }, + { + "version": "V1(北线)", + "date": "2023.11", + "title": "嗨冰雪首发·北线呼伦贝尔+满洲里+大兴安岭", + "changes": [ + { + "text": "冰雪那达慕·莫日格勒河畔蒙古族传统活动", + "type": "add" + }, + { + "text": "雪原骑马/骑骆驼,驰骋在被雪覆盖的原野上", + "type": "add" + }, + { + "text": "驯鹿拉爬犁,属于鄂温克人的浪漫", + "type": "add" + }, + { + "text": "冷极村森林民俗体验馆+冰雪乐园", + "type": "add" + }, + { + "text": "敖鲁古雅驯鹿苑+博物馆,国内独一的驯鹿主题博物馆", + "type": "add" + }, + { + "text": "呼伦湖成吉思汗拴马桩,中国最大一块冰", + "type": "add" + } + ], + "reason": "呼籁深耕呼伦贝尔多年后首次推出冬季产品线。北线串联草原雪原、满洲里边境、大兴安岭森林三大核心场景,让冬天的呼伦贝尔不再只是一个冷的概念。" + }, + { + "version": "V1(南线)", + "date": "2023.11", + "title": "嗨冰雪首发·南线呼伦贝尔+阿尔山", + "changes": [ + { + "text": "冰雪那达慕·莫日格勒河畔体验冬日草原活力", + "type": "add" + }, + { + "text": "雪原骑马/骑骆驼,在大雪原中策马奔腾", + "type": "add" + }, + { + "text": "森林牧场UTV全地形越野车穿越林海雪原", + "type": "add" + }, + { + "text": "阿尔山雪村,逃离喧嚣的冬日胜地", + "type": "add" + }, + { + "text": "不冻河漂流,零下30℃的河面云蒸霞蔚", + "type": "add" + }, + { + "text": "白狼峰日出+泼水成冰,山顶看群山云雾", + "type": "add" + }, + { + "text": "百里雾凇画廊,仿佛踏入童话世界的雪挂林", + "type": "add" + } + ], + "reason": "南线以阿尔山为核心,串联草原雪原与大兴安岭腹地的童话小城。阿尔山不是山,风景却美过任何一座山,被称为「东方瑞士」,冬季更是一个让时间慢下来的地方。" + } + ], + "selectionGuide": { + "byPreference": [ + { + "reason": "白狼峰日出+不冻河+童话小城", + "condition": "想看阿尔山", + "recommendation": "winter-south-6d5n" + }, + { + "reason": "满洲里+呼伦湖蓝冰+驯鹿部落", + "condition": "想去边境", + "recommendation": "winter-north-7d6n" + }, + { + "reason": "5天精华浓缩,核心不缺", + "condition": "假期有限", + "recommendation": "winter-south-5d4n" + } + ], + "byVacationLength": [ + { + "reason": "精华浓缩,核心体验一个不少", + "condition": "5天假期", + "recommendation": "winter-south-5d4n" + }, + { + "reason": "阿尔山住两晚,节奏更从容", + "condition": "6天假期", + "recommendation": "winter-south-6d5n" + }, + { + "reason": "深度探索,大兴安岭+边境全覆盖", + "condition": "7天以上", + "recommendation": "winter-north-7d6n" + } + ] + } +} \ No newline at end of file diff --git a/dist b/dist new file mode 120000 index 0000000..e4ef7d6 --- /dev/null +++ b/dist @@ -0,0 +1 @@ +/Users/mg/workSpace/呼籁文旅/hulai-website/.output/public \ No newline at end of file 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/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/nuxt.config.js b/nuxt.config.js new file mode 100644 index 0000000..dd94ab2 --- /dev/null +++ b/nuxt.config.js @@ -0,0 +1,74 @@ +// 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', + '/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 索引 + { name: 'robots', content: 'index, follow, max-snippet:-1, max-image-preview:large' }, + ], + }, + }, + + 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..e2a880c --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "hulai-website", + "version": "1.0.0", + "private": true, + "description": "呼籁旅行官网 - 呼伦贝尔家庭定制游", + "scripts": { + "dev": "nuxt dev", + "build": "nuxt build", + "generate": "nuxt generate", + "preview": "nuxt preview" + }, + "dependencies": { + "less": "^4.6.4", + "nuxt": "^3.17.5" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "@parcel/watcher", + "esbuild" + ] + } +} \ No newline at end of file diff --git a/pages/about.vue b/pages/about.vue new file mode 100644 index 0000000..2312521 --- /dev/null +++ b/pages/about.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/pages/blog/[id].vue b/pages/blog/[id].vue new file mode 100644 index 0000000..ee9e371 --- /dev/null +++ b/pages/blog/[id].vue @@ -0,0 +1,591 @@ + + + + + diff --git a/pages/blog/index.vue b/pages/blog/index.vue new file mode 100644 index 0000000..6416f25 --- /dev/null +++ b/pages/blog/index.vue @@ -0,0 +1,363 @@ + + + + + diff --git a/pages/calendar.vue b/pages/calendar.vue new file mode 100644 index 0000000..baadaca --- /dev/null +++ b/pages/calendar.vue @@ -0,0 +1,519 @@ + + + + + diff --git a/pages/contact.vue b/pages/contact.vue new file mode 100644 index 0000000..5aba918 --- /dev/null +++ b/pages/contact.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/pages/courses.vue b/pages/courses.vue new file mode 100644 index 0000000..7a59073 --- /dev/null +++ b/pages/courses.vue @@ -0,0 +1,775 @@ + + + + + diff --git a/pages/customize.vue b/pages/customize.vue new file mode 100644 index 0000000..619ba48 --- /dev/null +++ b/pages/customize.vue @@ -0,0 +1,1009 @@ +