看完攻略,准备出发了吗?
-呼籁旅行为每个家庭提供专属定制方案,告诉我们你的需求,我们帮你把行程安排得妥妥的。
-diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..258ee65 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "hulai-dev", + "runtimeExecutable": "npx", + "runtimeArgs": ["nuxt", "dev", "--port", "3000"], + "port": 3000, + "cwd": "/Users/liutao/Desktop/呼籁智库/hulai-website" + } + ] +} diff --git a/CMS-INTEGRATION.md b/CMS-INTEGRATION.md index a6a5a11..45ef3df 100644 --- a/CMS-INTEGRATION.md +++ b/CMS-INTEGRATION.md @@ -20,7 +20,7 @@ | 模块 | 当前文件 | 操作类型 | 更新频率 | 说明 | |------|---------|---------|---------|------| | **产品版本** | `products.json → versions` | 增、改、删 | 每季 | 产品迭代到V10、新增冬季版等 | -| **小蒙马夏令营** | `products.json → summerCamp` | 改 | 每年 | 年龄、活动、定位调整 | +| **小蒙马亲子游学营** | `products.json → summerCamp` | 改 | 每年 | 年龄、活动、定位调整 | | **选择指南** | `products.json → selectionGuide` | 改 | 每季 | 新产品上线后需要更新推荐逻辑 | | **定价说明** | `products.json → pricingPhilosophy` | 改 | 偶尔 | 价格策略调整时 | | **产品叙事** | `products.json → narrative` | 改 | 偶尔 | 品牌定位调整时 | diff --git a/README-HANDOFF.md b/README-HANDOFF.md index 664cc24..04cf6d4 100644 --- a/README-HANDOFF.md +++ b/README-HANDOFF.md @@ -37,7 +37,7 @@ npx serve .output/public | `/` | 首页 | `pages/index.vue` | | `/about` | 关于我们 | `pages/about.vue` | | `/products` | 产品线(额吉的故乡V9) | `pages/products.vue` | -| `/summer-camp` | 小蒙马夏令营 | `pages/summer-camp.vue` | +| `/summer-camp` | 小蒙马亲子游学营 | `pages/summer-camp.vue` | | `/guides` | 出行指南 | `pages/guides.vue` | | `/faq` | 常见问答 | `pages/faq.vue` | | `/reviews` | 客户评价 | `pages/reviews.vue` | @@ -136,8 +136,8 @@ npx serve .output/public } ], - "summerCamp": { // 小蒙马夏令营 - "name": "小蒙马夏令营", + "summerCamp": { // 小蒙马亲子游学营 + "name": "小蒙马亲子游学营", "positioning": "产品定位描述...", "days": 6, "nights": 5, @@ -382,7 +382,7 @@ npx serve .output/public { "text": "首页", "to": "/" }, { "text": "关于我们", "to": "/about" }, { "text": "产品线", "to": "/products" }, - { "text": "小蒙马夏令营", "to": "/summer-camp" }, + { "text": "小蒙马亲子游学营", "to": "/summer-camp" }, { "text": "出行指南", "to": "/guides" }, { "text": "常见问答", "to": "/faq" }, { "text": "客户评价", "to": "/reviews" }, @@ -492,7 +492,7 @@ public/images/ │ ├── mascot-front.png # 正面 │ ├── mascot-banner.png # 横幅 │ └── xiaomengma.png # 小蒙马 -├── summer-camp/ # 小蒙马夏令营照片(4张) +├── summer-camp/ # 小蒙马亲子游学营照片(4张) │ ├── river-banner.jpg │ ├── grassland-group.jpg │ ├── birch-group.jpg @@ -555,7 +555,7 @@ public/images/ → 1. 截图放 `public/images/reviews/` → 2. 在 `data/reviews.json` 的 `items` 末尾加新对象 -### 更新小蒙马夏令营行程 +### 更新小蒙马亲子游学营行程 → 改 `data/products.json` 的 `summerCamp` 部分 ### 添加新FAQ diff --git a/components/about/BrandStory.vue b/components/about/BrandStory.vue index c76968d..b138a20 100644 --- a/components/about/BrandStory.vue +++ b/components/about/BrandStory.vue @@ -6,7 +6,7 @@
{{ brand.slogan.emotional }}
+{{ seo.h1 }}
+{{ brand.slogan.functional }}
呼伦贝尔的旅游季从6月一直延续到9月,每个阶段的草原状态、游客密度和价格都不一样。选时间的核心不是\"哪个月最好\",而是根据你家的假期安排,找到体验和性价比的最优解。
\n7月-8月上旬是经典旺季——草原最绿、天气最稳定、所有体验项目全部开放。但旺季也意味着游客多、住宿紧张、价格最高,热门蒙古包营地要提前两个月抢。
\n6月中下旬性价比很高——草已经绿了,野花刚开,游客只有旺季的三分之一。人少、景美、服务资源充裕。
\n8月中下旬也不错——草原从纯绿开始带一点金色,白桦林有了初秋的颜色,人流量明显回落。
\n呼伦贝尔夏季日温差可达10-15度,草原上体感很舒服但紫外线强,穿衣和防晒两件事都别大意。
\n\n先确定进出城市。呼伦贝尔有两个机场:海拉尔东山机场和满洲里西郊机场。大部分行程是海拉尔往返,但如果走环线,\"海拉尔进/满洲里出\"可以减少回头路。
\n直飞还是经停?能直飞当然最好。呼伦贝尔直飞航线有限,优先选经停航班——中途停一下但不换飞机,行李直达,带孩子不用中间折腾。
\n什么时候买?建议提前1-1.5个月预订,价格相对稳定、选择也多。
\n跨城市比价:不要只看你所在城市出发的航班。江浙沪地区可以对比上海、杭州、南通、南京几个机场;哈尔滨、沈阳中转也是常见选择。
\n中转注意事项:
\n\"纯玩\"在2026年已经变成了最低门槛,不是品质指标。真正决定你这趟旅行体验的,是以下几个细节:
\n车况。呼伦贝尔日均行驶150-200公里,一趟行程车上时间很长。问清楚车型、车龄、有没有独立空调。
\n住宿配置。同样叫\"蒙古包住宿\",差别天差地远。带孩子的话,热水和独立卫生间是底线,不是加分项。
\n领队素质。一个好的领队不只是带路,他要能讲清楚草原的故事、每个景点的门道,还要能根据天气和人流灵活调整行程。
\n餐标。\"含餐\"和\"含什么餐\"是两回事。问清楚每餐吃什么、在哪吃。
\n对照方法:找两个价位不同的产品,把每天的酒店名称、车型、餐厅名称列出来对比——配置差异一目了然。
\n\n呼伦贝尔亲子游同样5天4晚的行程,从两三千到七八千都有。差在哪?就差在车、住宿、餐、领队、体验项目的配置。
\n判断方法:当你看到两个产品价格差异超过三成,把每天的住宿名称、车型、含不含特色体验列出来逐项对比——差价基本都能找到出处。
\n底线原则:价格明显低于市场均价的产品,大概率是在某些环节做了缩减。没有哪个服务商会做亏本生意。
\n\n选蒙古包的时候重点看三项:
\n各区域住宿特点:海拉尔城市酒店选择多;额尔古纳住宿品质最好,有全景落地窗对着湿地的独栋小别墅;恩和特色是木刻楞俄式木屋;黑山头是体验蒙古包的核心区域,但品质参差不齐。
\n带0-3岁宝宝特别注意:提前确认能不能加婴儿床、有没有电热水壶,蒙古包环节选有硬件保障的营地。
\n\n很多产品把本来一个景区里的小活动拆开来写,凑出十几项。看行程不要数\"体验项目有几项\",要看\"去了几个真正不同的地方\"。
\n带孩子的行程设计有一个铁律:留白。孩子需要在草地上跑、在河边发呆、和牧场里的小羊待半个小时。这些\"无意义\"的时间,其实是孩子最快乐的部分。
\n判断行程好不好,看三样:
\n呼伦贝尔旅游市场上有三类服务商:
\n外地组团社:客源地收客,再转包给本地地接社执行,售前承诺和售后体验中间隔了一层。
\n本地旅行社:本地注册、本地运营,执行力强,出了问题能快速响应。但水平也参差不齐。
\n个人包车师傅:灵活便宜但没有正规资质和保险保障,带孩子建议慎重。
\n判断服务商靠不靠谱的四个维度:
\n0-3岁:能去,但需要特殊准备——行程不能太赶,每天活动时间控制在4-5小时,住宿优先选城市酒店,自带推车/腰凳、防晒帽。
\n4-7岁:黄金年龄段——牧场体验、非遗手工、轻度骑马、滑草,参与度最高。多安排\"做\"的项目,少安排\"看\"的项目。
\n8-12岁:可以解锁进阶体验——独立骑马、皮划艇漂流、草原徒步、观星课程、湿地鸟类观察。
\n\n证件:身份证(成人)、户口本(16周岁以下)、学生证(如有)、医保卡。
\n穿搭原则——洋葱式穿搭:层层叠加,随时增减。7月短袖短裤+防晒装备+早晚薄外套;6月/8月加长袖外套。鞋子以运动鞋为主。
\n防晒:SPF50+防晒霜每2小时补涂、宽檐帽、UV400墨镜、冰袖+防晒衣、保湿面霜+润唇膏。
\n健康:防蚊液、肠胃药+益生菌、晕车药、保温杯、过敏药。
\n\n骑马:不要站到马的正后方,穿长裤和运动鞋,听从马师指引。
\n滑草:不要戴没有系绳的帽子,穿运动鞋和长裤。
\n蜱虫:穿长袖长裤、扎紧裤脚袖口,每天活动结束后仔细检查皮肤。万一发现蜱虫叮咬,用尖头镊子贴近皮肤夹住蜱虫头部稳定拔出,不要用手硬拽。
\n\n3岁以上就适合去呼伦贝尔。但不同年龄段玩法完全不同——2-4岁重感官体验、5-7岁重互动参与、8-12岁重深度探索。
\n在呼伦贝尔做旅游11年,\"孩子多大能去呼伦贝尔\"这个问题被问过的次数可能比\"多少钱\"还多。答案很简单:能去。但怎么去、怎么玩,差别非常大。
\n\n这个年龄段的孩子,别指望他记住什么景点名字。他能记住的,是草地的触感、羊羔的叫声、夜里抬头看到满天星星时的那个表情。
\n| 活动 | 为什么适合 | 注意事项 |
|---|---|---|
| 在草地上自由跑、打滚 | 城市孩子太缺这种\"无目的\"的释放 | 提前备好防蚊喷雾 |
| 近距离看牛羊、喂小羊羔 | 触摸真实动物比看绘本震撼一百倍 | 2-3岁孩子看羊就好,别硬靠近牛群 |
| 看星空、看日落 | 草原的天是真的大,光污染几乎为零 | 晚上温差大,外套必带 |
| 坐车看风景(短途) | 车窗外就是连续几百公里的草原 | 每天车程控制在2小时以内 |
行程建议:不超过4天。2-4岁的孩子生物钟很固定,午睡不能省,长时间坐车受不了。4天够了:海拉尔进出,走个东线小环线,节奏放慢,不赶路。
\n骑马建议:2岁不建议独立骑。可以让大人抱着坐一下马背拍个照。3-4岁可以由马倌牵着走一小段,全程大人在旁边扶着。
\n\n5岁以上的孩子有了基本的理解力和动手能力。他不只是\"看\"了,他会\"做\"——做奶制品、喂牛犊、学几句蒙古语、画一幅草原写生。
\n| 活动 | 为什么适合 | 注意事项 |
|---|---|---|
| 牧场互动(喂牛羊、挤牛奶、做奶制品) | 完整的\"从牛到奶到食物\"链条 | 确认牧场有洗手设施 |
| 骑马体验(牵引) | 5岁以上体重够了,马倌牵着走 | 必须戴头盔,穿长裤 |
| 草原徒步(1-2小时短途) | 草甸、湿地、小河,边走边观察动植物 | 带够水,穿防滑鞋 |
| 蒙古包体验 | 住一晚蒙古包,吃手把肉,看篝火 | 带孩子建议选有独立卫浴的改良蒙古包 |
行程建议:5-6天比较合适。可以走经典东线环线:海拉尔→额尔古纳→恩和→室韦→黑山头→满洲里→海拉尔。每天车程3小时以内。
\n这个年龄段有一个特点——他会不停问问题。所以如果领队能回答\"这个草叫什么\"\"那个鸟为什么飞那么低\"这些问题,孩子的体验会完全不一样。
\n\n8岁以上的孩子已经有了相当的理解力和体力,可以玩得很深入——观察、记录、思考。
\n| 活动 | 为什么适合 | 注意事项 |
|---|---|---|
| 半天草原徒步+自然观察笔记 | 认识草原生态,边走边画 | 有专业自然导师带最好 |
| 独立骑马(有马倌随行) | 8岁以上可以自己坐稳 | 穿长裤+硬底鞋+头盔,首次不要跑 |
| 蒙古文化深度体验 | 学射箭、搭蒙古包、了解游牧迁徙逻辑 | 找真正懂蒙古文化的讲解 |
| 边境口岸参观 | 满洲里国门,了解中俄边境历史地理 | 国门景区需要身份证 |
| 湿地/森林徒步 | 额尔古纳湿地、莫尔道嘎国家森林公园 | 森林蚊虫比草原更多,长袖长裤必须 |
行程建议:6-7天。可以走完整的大环线,甚至加上阿尔山方向。特别适合\"任务制\"玩法:给孩子一个自然观察任务,或者让他当一天的\"摄影师\"。
\n\n| 维度 | 2-4岁 | 5-7岁 | 8-12岁 |
|---|---|---|---|
| 核心体验 | 感官启蒙 | 互动参与 | 深度探索 |
| 建议天数 | 3-4天 | 5-6天 | 6-7天 |
| 每天最大车程 | 2小时 | 3小时 | 4小时 |
| 骑马 | 抱着坐一下 | 马倌牵引慢走 | 可独立骑行 |
| 住宿建议 | 酒店为主 | 酒店+1晚改良蒙古包 | 酒店+蒙古包+可尝试营地 |
| 家长精力 | 高(全程看护) | 中(适当放手) | 低(基本独立) |
按小的来定节奏,按大的来加内容。总天数和每天车程按小孩子的承受力定,但在每个停留点给大孩子安排额外的活动。
\n核心原则是\"分开玩一部分,一起玩一部分\"。所有年龄段都能一起参与的活动:看星空、篝火、草地野餐、喂小羊羔。需要分开的活动:骑马(大的骑、小的看)、徒步(大的走远、小的原地玩)。
\n\n呼伦贝尔的骑马体验安全不安全,取决于你选的类型和安全保障程度。这不是一个\"安全\"或\"不安全\"的二选一题目,而是你需要知道该看哪些指标。
\n\n呼伦贝尔的亲子骑马分两种,差别之大,说它们是\"两个不同的产品\"不夸张。
\n景区马场骑乘:在围栏内或固定路线上骑行,时长15-30分钟。有工作人员牵马,马走惯了那条路,不需要骑手做任何操作。价格50-150元一次。核心价值是拍照和\"体验了一下\"。
\n草原穿越式骑行:在真实草原上骑,路线经过草甸、湿地、白桦林、小河甚至坡地,单次约1小时。马会跑起来,骑手需要做基本控制。需要经过训练的马匹和专业马师全程陪同。核心价值是真实的骑马体验——孩子下马以后会说\"好厉害我居然骑了一匹马走了那么远\"。
\n\n如果选择草原穿越式骑行,以下五项指标决定了安全性:
\n\n这是底线中的底线。用于亲子骑行的马必须经过专门训练——对突然的尖叫声、挥手、掉东西等刺激不产生应激反应。判断方法:预订时直接问\"用于亲子骑行的马是经过训练的吗\"。含糊其辞说\"马都很温顺的\"——这不够,温顺不等于训练过。
\n\n重点是\"全程跟骑\"。有些地方在出发点送你上马,在终点等你——这不叫安全保障。真正的安全保障是马师骑着另一匹马全程在你旁边,能在马匹状态变化时第一时间干预。
\n\n害怕或哭闹的孩子不建议上马。马对声音非常敏感,孩子哭闹可能导致马受惊。好的骑马服务,出发前马师会观察孩子的情绪状态:
\n草原穿越骑行走出去以后可能已经深入草原很远,中途想下马并不现实。安全判断必须在出发前完成。
\n\n很多旅游意外险把骑马归为\"高风险运动\"——免赔。预订时要让旅行社出示保单,看保单原文中是否明确包含\"骑马\"或\"马术体验\"。口头承诺不算数。
\n\n草原穿越的路线不是随便找一片草地就能骑的。哪段有鼠洞、哪段地面松软、哪个坡度适合儿童、过河的水有多深——这些都需要事先踩线评估。成熟的骑马基地有固定安全路线,每年根据草场和地形变化调整。
\n\n| 年龄段 | 建议 |
|---|---|
| 0-2岁 | 不建议参加,无法配合基本指令 |
| 3-4岁 | 可由马师抱着骑,感受马背节奏 |
| 5-6岁 | 大部分可自己坐稳,马师在旁牵行 |
| 7岁以上 | 可尝试在马师跟骑保护下独立骑行 |
| 身高1.4米以上 | 基本可独立骑行,由马师现场评估 |
年龄只是一个维度,最终判断应由马师根据孩子的身高、胆量和身体协调能力现场决定。
\n\n呼伦贝尔做草原穿越骑行比较成熟的区域:恩和、黑山头、额尔古纳。这些地方地势相对平缓、草场开阔,有运营多年的骑马基地。
\n具体选哪家不是关键——关键是上面那张清单逐项确认。
\n\n骑马是呼伦贝尔亲子游里体验感最强的项目,也是安全门槛最高的。做好功课不是为了不骑,是为了骑得安心。
" + }, + { + "id": "hulunbuir-local-vs-national-travel", + "title": "呼伦贝尔旅游的两条路:在地深耕和全国跑场", + "subtitle": "两种经营模式各自的逻辑是什么?对消费者意味着什么?", + "author": "呼籁旅行", + "date": "2026-04-14", + "category": "行业", + "summary": "呼伦贝尔旅游市场正在分化成两种模式:本地团队深耕单一目的地,与全国布局旺季跑场。本文分析两种模式的核心差异,以及消费者该怎么选。", + "coverImage": "/images/seasons/summer-car.jpg", + "tags": [ + "行业分析", + "选旅行社", + "本地旅行社", + "定制游", + "呼伦贝尔旅游" + ], + "seo": { + "title": "呼伦贝尔旅游怎么选:本地深耕vs全国跑场模式分析 - 呼籁旅行", + "description": "呼伦贝尔旅游市场两种经营模式分析:本地团队在地深耕vs全国品牌旺季跑场,核心差异在哪?家庭亲子游该怎么选?5个判断指标帮你做决定。", + "keywords": "呼伦贝尔旅行社怎么选,呼伦贝尔本地旅行社,呼伦贝尔定制游,呼伦贝尔旅游市场,选旅行社攻略" + }, + "relatedProducts": [ + "v9-5d4n", + "v9-6d5n-family" + ], + "content": "呼伦贝尔旅游市场上有两种旅行社:一种是扎根本地的,另一种是全国各地都做、旺季来呼伦贝尔接单的。这两种模式差在哪里?对你的出行体验有什么影响?
\n\n呼伦贝尔旅游旺季就三个月——6月到8月。很多外地旅行社旺季来开分站,招一批临时领队、临时司机,培训一两周就上岗;旺季一过团队就散了。
\n本地旅行社不一样。团队全年在呼伦贝尔,定制师、客服、房务管家、车务管家十二个月都有人。领队和司机很多合作了好几年。
\n这意味着什么?领队认识路上每一段哪里容易堵、哪个时间段人最少。司机知道哪段路雨天容易打滑。客服能准确回答\"7月中旬恩和的天气大概是什么样\"——因为她经历过好几个7月。
\n\n呼伦贝尔旺季的酒店、车辆、营地资源紧张程度超出很多人想象。好酒店的房间每年三四月份就开始被锁了。本地旅行社因为全年经营,和酒店、牧场、景区是长期合作关系,旺季到来之前资源已经到位。你出发前就知道住哪个酒店、什么房型,不会被临时调换。
\n全国旅行社旺季进来,酒店靠临时谈、车辆靠临时租、供应商靠临时凑。你能住到什么酒店,很大程度上取决于那一周还剩什么。
\n\n呼伦贝尔有一个经典案例:莫日格勒河。大部分旅行团上午去,结果那条路车排长龙、景区人挤人。本地做了多年的旅行社怎么处理?上午安排客人在其他地方做体验,下午错峰去。时间差两三个小时,景还是那个景,人少了一大半。
\n类似的经验还有很多:哪个骑马场景观丰富、马温顺、适合孩子;哪段路旺季容易堵换哪条备选路线;哪个酒店隔音差不适合带娃家庭。这些不是看攻略能想到的,是在路上一个旺季一个旺季走出来的。
\n\n有人觉得本地旅行社规模小、不靠谱。全国品牌确实有标准化和品牌信任度的优势,这没什么好回避的。
\n但一个同时做五六个目的地的旅行社,分给呼伦贝尔的精力就那么多。一个只做呼伦贝尔的旅行社,全年的时间和资源都扎在这一个地方。对于大部分家庭来说,你不是在选一家全国最大的旅行社,你是在选\"谁在呼伦贝尔做得最扎实\"。
\n\n选哪家不重要,重要的是选\"真的在这里\"的。
" + }, { "id": "hulunbuir-travel-guide-2026", "title": "2026年呼伦贝尔旅游攻略:第一次去必看", @@ -9,13 +118,21 @@ "category": "攻略", "summary": "第一次去呼伦贝尔?本文涵盖最佳季节、核心景点、行程天数、交通方式、预算参考,帮你少走弯路,把每一天都过得值。", "coverImage": "/images/seasons/summer-river.jpg", - "tags": ["呼伦贝尔攻略", "首次出行", "行程规划", "呼伦贝尔旅游"], + "tags": [ + "呼伦贝尔攻略", + "首次出行", + "行程规划", + "呼伦贝尔旅游" + ], "seo": { "title": "2026年呼伦贝尔旅游攻略:第一次去必看 - 呼籁旅行", "description": "第一次去呼伦贝尔必看攻略:最佳出行季节、核心景点推荐、行程天数建议、交通方式对比、预算参考,呼籁旅行深耕11年总结的实用干货。", "keywords": "呼伦贝尔旅游攻略,呼伦贝尔第一次去,呼伦贝尔怎么玩,呼伦贝尔旅游必看,2026呼伦贝尔" }, - "relatedProducts": ["v9-5d4n", "v9-6d5n-family"], + "relatedProducts": [ + "v9-5d4n", + "v9-6d5n-family" + ], "content": "呼伦贝尔是中国最大的地级市,草原面积达148万平方公里,占全国草原总面积的近三分之一。这里有莫日格勒河的九曲弯,有额尔古纳湿地的晨雾,有边境公路的无尽延伸,有根河的驯鹿文化。每年6月至8月,这里是真正意义上的「绿色乌托邦」。
呼伦贝尔一年四季各有特色,但对于第一次来的游客,6月下旬至8月下旬是最推荐的时间窗口。这个阶段草原最绿、天气最稳定、活动最丰富。
如果你喜欢秋色,9月的白桦林和湿地同样值得一来;冬季则适合雪原探险和冰雪那达慕。
呼伦贝尔幅员辽阔,景点分布分散。以下是第一次来必须打卡的核心区域:
呼伦贝尔不是一个「走马观花」的目的地,建议最少安排5天4晚。如果带孩子或希望深度体验,6-7天更从容。时间紧张的朋友可以选5天4晚精华线路。
从北京/上海/成都等主要城市均有直飞海拉尔(呼伦贝尔市区机场)的航班。到达后,建议选择专业包车+本地领队的方式,原因是:
草原的紫外线强度是城市的2-3倍,防晒是第一要务。早晚温差可达15-20℃,即使夏天也要带一件厚外套。草原上蚊虫活跃,防虫喷雾不可少。如果带孩子,骑马等活动要确认安全规范后再参与。
7月旺季的行程和住宿至少提前2-3个月预订,热门日期可能更早售罄。选择有资质的本地旅行社,签订正规电子合同,避免行程缩水或临时换车换导游。呼籁旅行深耕呼伦贝尔11年,一家一单一车,是家庭出行的可靠选择。
" }, { @@ -27,13 +144,21 @@ "category": "亲子", "summary": "带孩子去呼伦贝尔草原,什么年龄合适?哪些活动安全?怎么选行程?呼籁旅行10年亲子游经验,帮你把每一个细节都想清楚。", "coverImage": "/images/summer-camp/grassland-group.jpg", - "tags": ["亲子游", "带娃旅行", "草原亲子", "家庭出游"], + "tags": [ + "亲子游", + "带娃旅行", + "草原亲子", + "家庭出游" + ], "seo": { "title": "呼伦贝尔亲子游完全指南:带娃怎么玩 - 呼籁旅行", "description": "呼伦贝尔亲子游完全指南:各年龄段活动推荐、亲子行程天数、安全注意事项、儿童餐饮住宿,呼籁旅行10年亲子游经验整理。", "keywords": "呼伦贝尔亲子游,带娃去草原,呼伦贝尔儿童旅游,草原亲子活动,呼伦贝尔家庭游" }, - "relatedProducts": ["v9-6d5n-family", "v9-7d6n-family"], + "relatedProducts": [ + "v9-6d5n-family", + "v9-7d6n-family" + ], "content": "这是父母们最常问的问题。答案是:基本上没有年龄下限,但不同年龄段的体验侧重点不同。我们服务过最小3个月的宝宝,也服务过带14岁少年来「二刷」的家庭。
1. 草原骑马
这是孩子们最期待的活动。建议选择有专业牵马师陪同的体验,而非放任独骑。正规的亲子骑马会为孩子配备头盔和安全背心,牵马师全程陪伴。
2. 挤牛奶·做奶制品
去牧民家体验传统奶制品制作:手工奶酪、酸奶、黄油。孩子通过亲手操作,理解食物从哪里来,是自然教育的绝佳场景。
3. 篝火晚会
夏夜草原的篝火晚会是行程高潮。蒙古族歌手现场演唱,孩子们学跳安代舞,手持火把绕圈,在黑色天幕和满天星辰下留下一生难忘的记忆。
4. 捡牛粪·认植物
这是我们专为亲子家庭设计的自然教育环节。草原上有200余种野花,牧民带孩子认识常见草本植物,讲解草原生态。
5. 边境公路探秘
从室韦到黑山头的边境公路全程约200公里,孩子趴在车窗上看对岸的俄罗斯小屋,听领队讲两岸的历史故事,地理课在真实场景中发生。
建议带孩子至少安排6天5晚,这样行程节奏从容,孩子不会因赶路而疲惫。7天6晚亲子版则可以增加深度体验环节,例如驯鹿基地参观和湿地探秘。
避免选择强调「效率」的快行程,草原旅行的意义在于让孩子有足够时间在一片草地上发呆、跑动、和牧民家的狗玩耍——这些「无意义」的时间,往往是他们记忆最深的片段。
呼籁旅行的自有营地提供亲子友好的蒙古包住宿,内置独立卫浴,不必担心如厕问题。营地备有儿童餐,对食材过敏的家庭请提前告知定制师。草原的饮食以牛羊肉为主,挑食的孩子可以准备一些备用零食。
选择有资质的旅行社是保障安全的第一步。呼籁旅行为每位游客购买旅行意外险,专业领队均接受过急救培训,骑马等高风险活动全程配备专业人员。草原紫外线强,儿童防晒霜建议每2小时补涂一次。
" }, { @@ -45,13 +170,22 @@ "category": "攻略", "summary": "春夏秋冬各有千秋,但不同月份的差异远比你想象得大。本文用数据说话,帮你选出最适合自己的出行时间。", "coverImage": "/images/seasons/autumn-lake.jpg", - "tags": ["出行时间", "季节推荐", "气候攻略", "呼伦贝尔旅游"], + "tags": [ + "出行时间", + "季节推荐", + "气候攻略", + "呼伦贝尔旅游" + ], "seo": { "title": "呼伦贝尔几月份去最好?四季月份对比全解析 - 呼籁旅行", "description": "呼伦贝尔几月份去最好?本文详细对比1-12月气候、草原状态、景色特点和适合人群,帮你找到最适合自己的出行时间窗口。", "keywords": "呼伦贝尔几月份去最好,呼伦贝尔最佳旅游季节,呼伦贝尔几月去,呼伦贝尔旅游旺季,呼伦贝尔气候" }, - "relatedProducts": ["v9-5d4n", "v9-6d5n-family", "v9-6d5n-comfort"], + "relatedProducts": [ + "v9-5d4n", + "v9-6d5n-family", + "v9-6d5n-comfort" + ], "content": "如果只能给一个答案:7月中旬至8月上旬是综合体验最好的时间段——草最绿、天最蓝、活动最丰富。但这也是最贵、最挤的时候。根据你的出行目的、预算和喜好,不同月份各有优势。
5月气温回升,草原开始泛绿,但草色尚浅,偶尔还有寒潮。适合摄影爱好者追逐「初绿」感,以及预算有限的旅行者。日均气温10-18℃,晚上仍需厚外套。
6月草原进入盛放期,各色野花铺满大地,是全年最适合摄影的月份之一。游客量约为7月的60%,价格相对低15-20%。日均气温18-24℃,天气舒适。强烈推荐不赶热闹、喜欢自然的旅行者。
7月草原达到一年中最高颜值。7月中下旬那达慕期间民俗活动丰富,是体验蒙古族文化的最佳时机。日均气温22-28℃。缺点:预订需提前2-3个月,价格为全年最高。
8月上旬草色仍旺,中旬开始草色转黄。游客量逐渐减少,各类资源预订难度下降。日均气温18-25℃。适合不想在旺季挤着玩又想看到绿草的家庭。
9月呼伦贝尔的重心从草原转向森林。大兴安岭白桦林金黄,额尔古纳湿地芦苇变金,莫尔道嘎国家森林公园层林尽染。是秋色爱好者和摄影人的首选月份。气温10-18℃,早晚凉,穿着要比夏季厚一层。
10月中下旬开始降雪,草原景观结束,进入「雪原模式」。适合喜欢人迹罕至、想看初雪草原的探险旅行者。非常规旅游旺季,部分营地已关闭。
呼伦贝尔冬季最低气温可达-40℃,是中国最冷地区之一。但这里也是国内冰雪体验最丰富的目的地:冰雪那达慕、驯鹿文化、雾凇奇景、冰上车队。适合追求极致体验、耐寒能力强的旅行者。
春季融雪期,道路泥泞,草原泥泞,景色荒芜,是一年中最不适合旅游的时段。
没有「最好」的月份,只有「最适合你」的月份。建议结合自己的行程安排、孩子年龄和旅行目的综合判断。如果拿不定主意,欢迎联系呼籁旅行的定制师,我们会根据你的具体情况给出最适合的建议。
" }, { @@ -63,13 +197,22 @@ "category": "攻略", "summary": "呼伦贝尔自驾还是包车,这个问题困扰着大多数第一次去的旅行者。本文从路况、费用、自由度、安全性四个维度全面对比。", "coverImage": "/images/seasons/summer-car.jpg", - "tags": ["自驾攻略", "包车攻略", "交通方式", "呼伦贝尔旅游"], + "tags": [ + "自驾攻略", + "包车攻略", + "交通方式", + "呼伦贝尔旅游" + ], "seo": { "title": "呼伦贝尔自驾vs包车哪个好?深度对比分析 - 呼籁旅行", "description": "呼伦贝尔自驾还是包车?本文从路况复杂度、费用对比、安全性、自由度、适合人群五个维度深度对比,帮你做出最适合的选择。", "keywords": "呼伦贝尔自驾,呼伦贝尔包车,呼伦贝尔自驾攻略,呼伦贝尔包车价格,呼伦贝尔怎么去" }, - "relatedProducts": ["v9-5d4n", "v9-6d5n-comfort", "v9-7d6n-wild"], + "relatedProducts": [ + "v9-5d4n", + "v9-6d5n-comfort", + "v9-7d6n-wild" + ], "content": "对于第一次去呼伦贝尔、带有孩子或老人的家庭旅行者,包车+本地领队是更优解。有越野经验、团队人数较多(6人以上)、追求极致自由的旅行者可以考虑自驾。
很多人以为呼伦贝尔只是开车在草原上走走,实际上情况复杂得多:
这些问题对有经验的自驾游客不构成障碍,但对普通家庭旅行者而言风险较高。
自驾费用(以5天为例,2大2小):
包车费用(同等行程):
费用相差不大,但包车额外包含了专业服务价值。
自驾最大的优势是时间完全自由——想在哪个路边停就停,想在哪个景点多待就多待,不必配合其他人的节奏。这对摄影发烧友尤其重要,追光追云需要极大的时间弹性。
但包车并非完全不自由。选择优质旅行社的私家包车(一家一单),你同样可以提出自己的节奏要求,领队会配合调整。
草原上的安全隐患不止于交通。本地领队了解哪片草场近期有狼群活动,知道哪个景点的悬崖边栏杆不稳,在应急情况下(陷车、孩子受伤、天气突变)能快速调动本地资源。这是任何导航软件都无法替代的本地经验。
包车最大的坑在于「人头团」——名义上包车,实际上拼车,或者中途换车换领队。选择包车要注意:签订正规合同、确认是否一家一单、确认车辆型号和领队信息。呼籁旅行提供「一家一单一车」的私家定制,从签约到结束同一个领队全程陪同,这是我们的核心承诺。
" }, { @@ -81,13 +224,22 @@ "category": "攻略", "summary": "呼伦贝尔一趟到底花多少钱?本文拆解机票、住宿、交通、餐饮、活动、购物各项费用,给出高中低三档真实预算参考。", "coverImage": "/images/seasons/summer-hero.jpg", - "tags": ["旅游花费", "预算攻略", "性价比", "呼伦贝尔费用"], + "tags": [ + "旅游花费", + "预算攻略", + "性价比", + "呼伦贝尔费用" + ], "seo": { "title": "呼伦贝尔旅行花费多少钱?2026年真实预算明细 - 呼籁旅行", "description": "2026年呼伦贝尔旅行花费明细:机票、住宿、定制游套餐、餐饮、景点费用逐项拆解,高中低三档预算参考,4人家庭出行真实花费。", "keywords": "呼伦贝尔旅游费用,呼伦贝尔旅游多少钱,呼伦贝尔花费,呼伦贝尔旅游预算,呼伦贝尔定制游价格" }, - "relatedProducts": ["v9-5d4n-forest", "v9-5d4n-prairie", "v9-6d5n-family"], + "relatedProducts": [ + "v9-5d4n-forest", + "v9-5d4n-prairie", + "v9-6d5n-family" + ], "content": "以2大2小(4-10岁孩子)5天4晚为例,中档出行总预算约15000-22000元,人均约3750-5500元。预算差异主要来自机票舱位、住宿档次和是否选择旺季出行。
北京/上海至海拉尔(HLD)直飞约2.5小时,无直飞城市需转机。
选择呼籁旅行的定制游套餐,包含车辆、领队、大部分景区门票和营地住宿:
套餐包含:专属领队、7座商务车、自有营地住宿(含早餐)、主要景区门票、部分活动费用。
套餐外的自费活动参考价(旺季):
建议提前了解套餐包含哪些活动,避免到现场发现核心项目都要单独付费。
草原上的饮食选择相对有限。住宿套餐一般含早餐,午晚餐需自理或选择套餐附带版本。
呼伦贝尔特产推荐:风干牛肉、马奶酒、风干羊腿、各类奶制品、蒙古族手工艺品。预算控制在500-1500元较为合理,注意辨别正规商家,避免购买过度加工的旅游纪念品。
心理学研究表明,3-6岁是儿童自然依恋期的关键窗口。在这个阶段接触大自然,对孩子的感知发育、情绪调节和环境认知有深远影响。草原的开阔空间、野生动植物、以及与城市截然不同的生活方式,对这个年龄段的孩子有天然的吸引力。但同时,4-6岁孩子的自我保护意识尚未成熟,需要大人更细心的陪伴和防护。
推荐参与:
不推荐参与:
草原海拔约600-800米,加上没有城市遮蔽物,紫外线强度是城市的2-3倍。4-6岁孩子皮肤薄、防晒能力弱,晒伤在草原上非常常见。
草原的饮食以牛羊肉为主,酸奶、奶茶、奶豆腐等奶制品是当地特色。几点注意:
4-6岁孩子每天有效活动时间约4-6小时,之后需要午休。建议行程安排:
蚊虫叮咬:草原蚊虫活跃,出发前涂抹含DEET或派卡瑞丁的儿童驱蚊产品。被叮咬后用冰块冷敷,切勿让孩子抓挠。
感冒发烧:早晚温差大,备好儿童退烧药和感冒药。若发烧超过38.5℃,需及时就医(海拉尔有三甲医院)。
晕车:草原路颠簸,晕车的孩子出发前1小时服用晕车药,行程中准备好塑料袋。
皮肤过敏:草原花粉较多,有过敏体质的孩子备好抗组胺药物,出门戴口罩。
带4-6岁孩子去草原,做好防晒、管好饮食、控制节奏,其余的交给草原——孩子对自然的好奇心会帮你完成剩下的事情。
" }, { @@ -117,13 +277,21 @@ "category": "避坑", "summary": "呼伦贝尔旅游的坑不少:强制购物、人头拼团、低价陷阱、景区宰客……这篇避坑指南帮你把雷都踩在出发之前。", "coverImage": "/images/team/campsite-team.jpg", - "tags": ["避坑指南", "旅游陷阱", "消费提醒", "呼伦贝尔旅游"], + "tags": [ + "避坑指南", + "旅游陷阱", + "消费提醒", + "呼伦贝尔旅游" + ], "seo": { "title": "呼伦贝尔旅游避坑指南:10大常见陷阱完整解析 - 呼籁旅行", "description": "呼伦贝尔旅游避坑必看:低价团陷阱、人头团、强制购物、景区宰客、住宿虚假宣传……10大高频坑位逐一解析,附辨别方法。", "keywords": "呼伦贝尔旅游避坑,呼伦贝尔旅游陷阱,呼伦贝尔旅游注意事项,呼伦贝尔旅游黑心导游,呼伦贝尔避雷" }, - "relatedProducts": ["v9-5d4n", "v9-6d5n-family"], + "relatedProducts": [ + "v9-5d4n", + "v9-6d5n-family" + ], "content": "在各大平台搜索「呼伦贝尔旅游」,会出现标价极低的产品,比市场均价低30-50%。这类产品的常见套路:
辨别方法:对比行程中是否包含室韦/黑山头边境公路、自有营地住宿、额尔古纳湿地等核心节点。正规套餐不会比市场均价低超过15%。
很多旅行社打着「私家包车」的旗号,实际是把多组家庭拼在同一辆车上,变成了效率低、节奏不一的大团。辨别方式:在合同中明确写入「一家一单,不拼团,同一辆车只接待本组家庭」,并注明车辆型号和领队姓名。
草原上部分非正规马场、摄影点、手工艺品摊位存在漫天要价的情况。常见场景:骑马前未谈好价格,骑完被要天价;照相「免费」,洗出来才知道每张100元以上。
应对方法:任何消费前先确认价格并口头确认,有争议项目拍视频留证据。选择有本地领队陪同的出行方式,领队通常会提前提醒这类情况。
部分民宿或营地在网上发布的照片与实际差距悬殊:图片是高级帐篷,实际是没有卫浴的简易蒙古包;宣传「草原深处」,实际在城郊农家乐。
辨别方法:要求提供真实照片(不修图)、卫浴配置、与草原核心区的距离。呼籁旅行的自有营地提供真实照片和视频参考,可在预订前查看。
7月草原旺季,优质营地和酒店经常提前2个月以上售罄。若临时决定出行,只能选择剩余的低品质住宿,严重影响体验。教训:确定要去就立刻预订,尤其是7月15日至8月5日的黄金期。
小作坊式的旅行社常见问题:仅口头承诺行程,不提供书面合同;出现问题无凭据。正规旅行社必须签订包含行程细节、退改条款、投诉渠道的正式旅游合同(电子版也算)。无合同,不出发。
草原天气变化快,有时会遭遇大雨导致部分景点无法前往。部分旅行社在合同中以「不可抗力」条款免除一切责任。查看合同时重点关注:因天气原因导致行程调整,旅行社如何补偿或安排替代方案。
部分旅行社与当地购物点有合作,在行程中安排1-2小时甚至更长的购物时间,以「体验当地文化」为名实为强制购物。选择旅行社时直接问:行程中是否有购物环节?是否有强制购物?获得明确承诺后写入合同。
草原上的骑马、ATV等活动存在一定风险。不规范的活动场地:无头盔提供、马匹未经专业训练、无安全员陪同。参与任何体力活动前确认安全装备是否齐全,拒绝没有安全保障的项目。
这不是「坑」,但是认知偏差。呼伦贝尔最精华的景点高度分散,如果只在海拉尔周边转,会错过所有核心风景。行程规划时确认包含:莫日格勒河、额尔古纳湿地、边境公路(室韦-黑山头段)这三个核心节点,否则相当于白跑一趟。
" }, { @@ -135,14 +303,23 @@ "category": "穿搭", "summary": "去草原不知道穿什么?本文从色系选择、服装款式、配件搭配到拍摄时机,手把手教你在呼伦贝尔草原拍出大片感。", "coverImage": "/images/seasons/autumn-forest.jpg", - "tags": ["草原穿搭", "旅拍穿搭", "拍照技巧", "呼伦贝尔摄影"], + "tags": [ + "草原穿搭", + "旅拍穿搭", + "拍照技巧", + "呼伦贝尔摄影" + ], "seo": { "title": "草原旅拍穿搭指南:呼伦贝尔怎么穿才好看 - 呼籁旅行", "description": "呼伦贝尔草原旅拍穿搭指南:适合草原的色系推荐、蒙古风服装选择、亲子穿搭配色、最佳拍照时机,帮你在草原拍出大片感。", "keywords": "草原穿搭,呼伦贝尔穿搭,草原旅拍,呼伦贝尔旅拍穿搭,草原拍照穿什么" }, - "relatedProducts": ["v9-6d5n-family", "v9-6d5n-comfort", "v9-7d6n-wild"], + "relatedProducts": [ + "v9-6d5n-family", + "v9-6d5n-comfort", + "v9-7d6n-wild" + ], "content": "草原摄影不同于城市街拍,背景是无边绿色+蓝天白云的极简组合,这意味着服装颜色是决定出片质量的第一要素。颜色选对了,随手一拍都是大片;颜色选错了,专业摄影师也救不回来。
最推荐:
慎用:
女生首选:
男生推荐:
亲子家庭:
草原光线变化极大,拍摄时机比服装更重要:
带至少2套不同颜色的外出服装,根据当天景点背景灵活切换。在营地可以借穿当地蒙古族传统服装,通常收费50-100元/套,非常值得体验。草原风大,长裙拍摄时顺风站立,裙摆自然飘起效果最好。最后,记得在出发前充满手机电量,草原上充电不方便,备一个移动电源是必要的。
" } ] -} +} \ No newline at end of file diff --git a/data/brand-wiki.json b/data/brand-wiki.json new file mode 100644 index 0000000..572706b --- /dev/null +++ b/data/brand-wiki.json @@ -0,0 +1,164 @@ +{ + "title": "呼籁旅行", + "subtitle": "专注于呼伦贝尔地区的家庭旅行品牌", + "summary": "呼籁旅行是一个专注于呼伦贝尔地区的家庭旅行品牌,隶属于内蒙古呼籁文旅投资开发集团有限公司。呼籁旅行专注于呼伦贝尔目的地的深度旅行服务,主要面向亲子家庭客群,提供私家团定制旅行产品,采用独立成团、一家一单一车的服务模式,旗下设有“额吉的故乡”、“游牧的森林”、“嗨 冰雪”三条季节产品线和“小蒙马”亲子游学营。", + "logo": "/images/brand/logo.png", + "infoBox": { + "中文名": "呼籁旅行", + "外文名": "HULAI TRAVEL", + "所属行业": "旅游服务", + "创始人": "刘涛", + "所属公司": "内蒙古呼籁文旅投资开发集团有限公司", + "商标注册号": "75165836" + }, + "sections": [ + { + "title": "品牌起源", + "content": "2015年,品牌创始人刘涛在呼伦贝尔开始从事家庭旅行服务,早期以“牵手草原”为团队名经营。经过多年发展,团队于2023年正式启用“呼籁旅行”品牌,同年推出核心产品“额吉的故乡”家庭深度游线路。同年,成立内蒙古呼籁文旅投资开发集团有限公司,旗下设有旅行社、旅游客运、营地、牧场商贸等业务板块。" + }, + { + "title": "品牌历史", + "subsections": [ + { + "title": "第一阶段:品牌起步期(2015-2022)", + "content": "2015年,品牌创始人刘涛自呼伦贝尔学院毕业后进入旅游行业,以“牵手草原”品牌为呼伦贝尔本地游客提供旅行服务,积累了呼伦贝尔全域的酒店、车辆、领队等核心资源,并打磨出以亲子家庭为核心客群的产品体系。" + }, + { + "title": "第二阶段:品牌升级期(2022-2024)", + "content": "2022年,成立呼籁牧场商贸公司,拓展旅行+特产电商联动模式;2023年10月,正式组建内蒙古呼籁文旅投资开发集团,完成品牌从“牵手草原”到“呼籁旅行”的升级;同期收购/整合2005年注册的呼籁山河国际旅行社;2024年,自建旅游客运公司和露营地公司,实现全链条自营。" + }, + { + "title": "第三阶段:规模化发展期(2025至今)", + "content": "旗舰产品“额吉的故乡”迭代至V9版本,持续深化家庭游学产品,升级伴手礼体系,优化旅行中的文化体验模块。2025年,推出《小蒙马亲子游学营》首发11期期期满员;2026年升级至2.0版本,计划开设30期。" + } + ] + }, + { + "title": "产品及服务", + "intro": "呼籁旅行专注于呼伦贝尔地区,采用独立成团模式,以单个家庭或亲友团为单位出行,配备专属车辆和司导。", + "products": [ + { + "name": "额吉的故乡", + "description": "“额吉的故乡”是呼籁旅行的核心产品,该产品专注于家庭旅行,采用独立成团、一家一车的私家团模式,为每个家庭提供专属车辆与司导服务。线路涵盖草原、湿地、森林、边境等多种自然地貌,设有亲子版、探索版、草原版、森林版、旷野版等多个系列。" + }, + { + "name": "小蒙马", + "description": "亲子游学产品,该系列产品专注于呼伦贝尔草原的亲子游学营服务。首期游学营于2025年夏季开营,采用固定班期、小团制模式,每期限7-9 组参与,配备领队、摄影师和专属司机全程陪伴。" + }, + { + "name": "游牧的森林", + "description": "秋季旅行产品,专注于呼伦贝尔与大兴安岭、阿尔山地区的秋季深度旅行服务,运营时间为每年9月至10月。采用独立成团、一家一车的私家团模式,线路覆盖森林、草原、湿地、边境公路、火山地质等多种秋季自然景观。" + }, + { + "name": "嗨 冰雪", + "description": "冬季主题产品线,专注于呼伦贝尔冬季定制游,采用独立成团、一单一车的私家团模式,可体验冰雪越野、雪地策马、冬季那达慕等。" + } + ] + }, + { + "title": "服务流程", + "steps": [ + { + "step": "1", + "name": "一对一咨询", + "detail": "定制师了解家庭成员构成、孩子年龄和兴趣偏好,量身定制行程方案" + }, + { + "step": "2", + "name": "方案确认", + "detail": "行程单、报价、注意事项全部书面确认,无隐藏费用" + }, + { + "step": "3", + "name": "行前准备", + "detail": "出发前定制师发送详细行前指南,包括穿搭建议、天气提醒和携带清单" + }, + { + "step": "4", + "name": "领队接机", + "detail": "专属领队提前到机场等候,全程一对一陪伴" + }, + { + "step": "5", + "name": "全程陪同", + "detail": "领队既是向导也是安全保障,熟悉每一条路线和每一个值得停留的地方" + }, + { + "step": "6", + "name": "旅拍记录", + "detail": "呼籁旅拍用专业设备记录旅途中的珍贵瞬间" + }, + { + "step": "7", + "name": "送机告别", + "detail": "领队送至机场,确认安全登机后才离开" + }, + { + "step": "8", + "name": "旅后回访", + "detail": "旅行结束后定制师回访收集反馈,整理照片和视频素材发送给家庭" + } + ] + }, + { + "title": "服务模式", + "content": "呼籁的服务采用“3管+1师+1队”全程护航模式。3管家——车务管家负责车辆调度和路线安排,房务管家负责住宿预订和品质把控,客服管家负责行前沟通和售后跟进。1定制师在出行前一对一沟通,了解家庭成员构成、孩子年龄和兴趣偏好,量身定制行程方案。1专属领队全程陪同,既是向导也是安全保障,熟悉每一条路线。旅拍部分由呼籁旅拍完成,用专业设备记录旅途中的珍贵瞬间。" + }, + { + "title": "Logo释义", + "content": "“呼籁”一词源自蒙古语,为一种语气助词,象征着草原人对美好的向往。品牌标识中的马形图案取自蒙文“ᠬᠤᠷᠤᠭ”的字形变化,在蒙古族牧民心中马代表着忠诚、温顺、可靠以及长久的陪伴。", + "image": "/images/brand/logo-horse.png" + }, + { + "title": "获奖荣誉", + "content": "荣获2026小红书WILL Club “年度成长型品牌”" + }, + { + "title": "品牌文化", + "items": [ + { + "label": "品牌定位", + "value": "一个深耕呼伦贝尔的旅行品牌" + }, + { + "label": "品牌初衷", + "value": "深耕呼伦贝尔一地的春夏秋冬,把这个目的地打深打透,给每一个选择呼籁的家庭更好的体验。" + }, + { + "label": "品牌信念", + "value": "真正值得的旅行,从不只是一趟路,更是一段生命的温度。" + } + ] + } + ], + "gallery": [ + "/images/brand/photo-01.jpeg", + "/images/brand/photo-02.jpeg", + "/images/brand/photo-03.jpeg", + "/images/brand/photo-04.jpeg", + "/images/brand/photo-05.jpeg", + "/images/brand/photo-06.jpeg", + "/images/brand/photo-07.jpeg", + "/images/brand/photo-08.jpeg", + "/images/brand/photo-09.jpeg", + "/images/brand/photo-10.jpeg", + "/images/brand/photo-11.jpeg", + "/images/brand/photo-12.jpeg", + "/images/brand/photo-13.jpeg", + "/images/brand/photo-14.jpeg", + "/images/brand/photo-15.jpeg", + "/images/brand/photo-16.jpeg", + "/images/brand/photo-17.jpeg", + "/images/brand/photo-18.jpeg", + "/images/brand/photo-19.jpeg", + "/images/brand/photo-20.jpeg", + "/images/brand/photo-21.jpeg", + "/images/brand/photo-22.jpeg", + "/images/brand/photo-23.jpeg" + ], + "seo": { + "title": "呼籁旅行 - 专注呼伦贝尔的家庭旅行品牌", + "description": "呼籁旅行是专注于呼伦贝尔地区的家庭旅行品牌,隶属于内蒙古呼籁文旅投资开发集团有限公司,提供私家团定制旅行产品,旗下设有额吉的故乡、游牧的森林、嗨冰雪三条季节产品线和小蒙马亲子游学营。", + "keywords": "呼籁旅行,HULAI TRAVEL,呼伦贝尔旅行,呼伦贝尔亲子游,额吉的故乡,呼籁文旅" + } +} \ No newline at end of file diff --git a/data/brand.json b/data/brand.json index d24d766..ea84626 100644 --- a/data/brand.json +++ b/data/brand.json @@ -21,7 +21,8 @@ { "value": "98%", "unit": "", - "label": "客户好评率" + "label": "客户好评率", + "attribution": "基于历年行程结束后满意度回访统计" }, { "value": "9", @@ -68,7 +69,7 @@ {"step": 3, "label": "看价格", "to": "/pricing"}, {"step": 4, "label": "在线定制", "to": "/customize"} ], - "icpEntity": "内蒙古呼籁文化科技有限公司", + "icpEntity": "内蒙古呼籁文化科技有限公司(提供技术支持)", "icp": "蒙ICP备2025033324号-2", "icpUrl": "https://beian.miit.gov.cn", "eContract": "所有行程签订正规电子合同" diff --git a/data/calendar.json b/data/calendar.json index f64fcdf..5b695ef 100644 --- a/data/calendar.json +++ b/data/calendar.json @@ -152,7 +152,7 @@ "highlights": ["6月中下旬性价比最高", "草原已非常美", "各项活动全面开展", "骑马体验最舒适"], "clothingTips": "薄外套 + 防晒衣 + 长裤,早晚加薄羽绒,备雨衣", "isPeakSeason": true, - "recommendedProducts": ["额吉的故乡V9", "小蒙马夏令营"], + "recommendedProducts": ["额吉的故乡V9", "小蒙马亲子游学营"], "tagline": "性价比最高,强烈推荐" }, { @@ -165,7 +165,7 @@ "highlights": ["那达慕传统节庆", "草原鲜花盛放至极", "额尔古纳湿地最美", "民俗体验最丰富"], "clothingTips": "轻薄长袖 + 防晒 + 备风衣,中午注意防暑,水分补充充足", "isPeakSeason": true, - "recommendedProducts": ["额吉的故乡V9", "小蒙马夏令营"], + "recommendedProducts": ["额吉的故乡V9", "小蒙马亲子游学营"], "tagline": "旺季巅峰,提前3个月预订" }, { @@ -178,7 +178,7 @@ "highlights": ["草原仍绿意盎然", "早晚清凉舒适", "夕阳草原最美角度", "雨后彩虹奇景常见"], "clothingTips": "薄外套 + 长裤,备一件薄羽绒,早晚温差8-10°C不可忽视", "isPeakSeason": true, - "recommendedProducts": ["额吉的故乡V9", "小蒙马夏令营"], + "recommendedProducts": ["额吉的故乡V9", "小蒙马亲子游学营"], "tagline": "旺季尾声,舒爽清凉" }, { diff --git a/data/company-wiki.json b/data/company-wiki.json new file mode 100644 index 0000000..ae21b94 --- /dev/null +++ b/data/company-wiki.json @@ -0,0 +1,157 @@ +{ + "title": "内蒙古呼籁文旅投资开发集团有限公司", + "subtitle": "以呼伦贝尔为核心目的地的文化旅游综合服务企业", + "summary": "内蒙古呼籁文旅投资开发集团有限公司(简称“呼籁文旅集团”),成立于2023年10月,注册地位于内蒙古自治区呼伦贝尔市海拉尔区,是一家以呼伦贝尔为核心目的地的文化旅游综合服务企业。集团旗下拥有旅行社、旅游客运、露营地、研学基地、牧场商贸、文化科技等多个业务板块,覆盖旅游产品研发、交通服务、住宿运营、文创电商、技术开发等领域。", + "logo": "/images/company/logo-horse.png", + "infoBox": { + "中文名": "内蒙古呼籁文旅投资开发集团有限公司", + "所属行业": "文化旅游", + "成立日期": "2023年10月10日", + "法定代表人": "刘涛", + "注册资本": "100万元人民币", + "统一社会信用代码": "91150702MACYA3MN0U", + "注册地址": "内蒙古自治区呼伦贝尔市海拉尔区奋斗镇学府路煤校3号楼212号", + "经营范围": "旅游业务(境内旅游、入境旅游)、旅游开发、投资管理等" + }, + "sections": [ + { + "title": "发展历程", + "timeline": [ + { + "year": "2015年", + "content": "创始人刘涛大学毕业后开始从事呼伦贝尔旅游行业,着手建立本地旅行服务体系。" + }, + { + "year": "2022年1月", + "content": "呼伦贝尔呼籁牧场商贸有限公司成立,开展呼伦贝尔地区特色农牧产品的线上销售业务。" + }, + { + "year": "2023年10月", + "content": "内蒙古呼籁文旅投资开发集团有限公司正式成立,整合旗下旅行社、客运、商贸等业务板块,形成集团化运营架构。同月,内蒙古呼籁国际旅行社有限公司成立。" + }, + { + "year": "2024年7月", + "content": "呼籁旅游客运(内蒙古)有限公司成立,建立自有车队体系,提供旅游交通保障服务。同年11月,呼籁露营地(呼伦贝尔)有限公司成立。" + }, + { + "year": "2025年9月", + "content": "内蒙古呼籁培训有限公司成立,拓展业务培训和研学教育板块。同年12月,内蒙古呼籁文化科技有限公司成立,布局技术研发和AI业务领域。" + }, + { + "year": "2026年1月", + "content": "呼伦贝尔呼籁研学文化旅游有限责任公司成立,进一步拓展研学旅游业务。" + } + ] + }, + { + "title": "核心品牌", + "content": "呼籁文旅集团的核心品牌“呼籁旅行”专注于呼伦贝尔目的地的深度旅行服务,主要面向亲子家庭客群,提供私家团定制旅行产品,采用独立成团、一家一单一车的服务模式,旗下设有“额吉的故乡”、“游牧的森林”、“嗨 冰雪”三条季节产品线和“小蒙马”亲子游学营。" + }, + { + "title": "组织架构", + "intro": "呼籁文旅集团作为母公司,持有旗下多家企业股权,形成以集团公司为核心的企业群。旗下主要企业包括:", + "subsidiaries": [ + "内蒙古呼籁山河国际旅行社有限公司,经营境内旅游和入境旅游业务", + "内蒙古呼籁国际旅行社有限公司,经营境内旅游和入境旅游业务", + "呼籁旅游客运(内蒙古)有限公司,提供旅游客运交通服务", + "呼伦贝尔呼籁牧场商贸有限公司,经营呼伦贝尔特色农牧产品电商业务", + "呼籁露营地(呼伦贝尔)有限公司,运营露营地及营地活动", + "呼伦贝尔呼籁研学文化旅游有限责任公司,开展研学旅行和自然教育", + "内蒙古呼籁培训有限公司,负责业务培训及研学教育", + "内蒙古呼籁文化科技有限公司,从事技术研发与AI应用" + ] + }, + { + "title": "管理团队", + "content": "集团管理层由三位联合创始人组成:刘涛负责集团整体运营管理,孙雷负责内容品牌与产品研发,杨春生负责客户服务与牧场供应链运营。集团下设财务与人力资源部、车队、房务部、技术部、售后服务部、运营服务部、营地、客服部、牧场等部门。", + "images": [ + "/images/company/team-01.jpeg", + "/images/company/team-02.jpeg" + ] + }, + { + "title": "主要业务", + "businesses": [ + { + "name": "旅行产品", + "description": "呼籁旅行的核心产品为“额吉的故乡”系列,为6天5晚呼伦贝尔亲子私家团产品,以独立成团模式运营,主要服务暑期(5-8月)亲子家庭客群。", + "extra": "此外,集团还运营秋季赏秋产品“游牧的森林”和冬季冰雪产品“嗨 冰雪”,以及面向亲子家庭的“小蒙马”亲子游学营。" + }, + { + "name": "旅游客运", + "description": "集团旗下呼籁旅游客运公司拥有自有车队,为游客提供旅游交通保障服务。" + }, + { + "name": "牧场商贸", + "description": "集团旗下呼伦贝尔呼籁牧场商贸有限公司经营呼伦贝尔地区牛羊肉、奶制品等特色农牧产品,通过微信小程序“呼籁牧场旗舰店”进行线上销售,采用顺丰冷链运输。" + }, + { + "name": "研学教育", + "description": "集团通过呼籁研学文化旅游公司和呼籁培训公司,开展以草原生态、蒙古族文化为主题的研学旅行和自然教育课程。" + }, + { + "name": "营地运营", + "description": "呼籁露营地公司运营自有营地,提供蒙古族文化体验、户外活动等营地服务。" + } + ] + }, + { + "title": "Logo释义", + "content": "“呼籁”一词源自蒙古语,为一种语气助词,象征着草原人对美好的向往。品牌标识中的马形图案取自蒙文“ᠬᠤᠷᠤᠭ”的字形变化,在蒙古族牧民心中马代表着忠诚、温顺、可靠以及长久的陪伴。", + "image": "/images/company/logo-horse.png" + }, + { + "title": "知识产权", + "content": "呼籁文旅集团持有多项注册商标,包括“呼籁”“呼籁旅行”“额吉的故乡”“小蒙马”“呼籁山河”“游牧的森林”“嗨 冰雪”等,覆盖旅游服务、广告、教育等多个商标分类。" + }, + { + "title": "行业资质", + "content": "全资子公司内蒙古呼籁国际旅行有限公司“入选内蒙古自治区旅游协会研学旅游服务商名单”" + }, + { + "title": "企业文化", + "items": [ + { + "label": "企业定位", + "value": "一家以呼伦贝尔为核心目的地的文化旅游综合服务企业。" + }, + { + "label": "企业初衷", + "value": "深耕呼伦贝尔一地的春夏秋冬,把这个目的地打深打透,给每一个选择呼籁的家庭更好的体验。" + }, + { + "label": "企业信念", + "value": "真正值得的旅行,从不只是一趟路,更是一段生命的温度。" + } + ] + } + ], + "gallery": [ + "/images/company/photo-01.jpeg", + "/images/company/photo-02.jpeg", + "/images/company/photo-03.jpeg", + "/images/company/photo-04.jpeg", + "/images/company/photo-05.jpeg", + "/images/company/photo-06.jpeg", + "/images/company/photo-07.jpeg", + "/images/company/photo-08.jpeg", + "/images/company/photo-09.jpeg", + "/images/company/photo-10.jpeg", + "/images/company/photo-11.jpeg", + "/images/company/photo-12.jpeg", + "/images/company/photo-13.jpeg", + "/images/company/photo-14.jpeg", + "/images/company/photo-15.jpeg", + "/images/company/photo-16.jpeg", + "/images/company/photo-17.jpeg", + "/images/company/photo-18.jpeg", + "/images/company/photo-19.jpeg", + "/images/company/photo-20.jpeg", + "/images/company/photo-21.jpeg" + ], + "seo": { + "title": "内蒙古呼籁文旅投资开发集团有限公司 - 呼伦贝尔文化旅游综合服务企业", + "description": "内蒙古呼籁文旅投资开发集团有限公司,成立于2023年10月,是一家以呼伦贝尔为核心目的地的文化旅游综合服务企业,旗下拥有旅行社、旅游客运、露营地、研学基地、牧场商贸、文化科技等多个业务板块。", + "keywords": "呼籁文旅集团,内蒙古呼籁文旅,呼伦贝尔旅游集团,呼籁旅行,呼伦贝尔文旅" + } +} \ No newline at end of file diff --git a/data/courses.json b/data/courses.json index da5372d..02306d1 100644 --- a/data/courses.json +++ b/data/courses.json @@ -216,7 +216,7 @@ "faq": [ { "q": "几岁的孩子适合参加小蒙马研学?", - "a": "3-12岁均可参加。我们按3-6岁(探索组)、7-9岁(探险组)、10-12岁(领袖组)三个年龄段分组设计课程,学习目标和活动难度不同。3岁以下的幼儿建议参加小蒙马夏令营亲子营,全程有家长陪同。" + "a": "3-12岁均可参加。我们按3-6岁(探索组)、7-9岁(探险组)、10-12岁(领袖组)三个年龄段分组设计课程,学习目标和活动难度不同。3岁以下的幼儿建议参加小蒙马亲子游学营,全程有家长陪同。" }, { "q": "孩子不会骑马,马术课能参加吗?", diff --git a/data/faq.json b/data/faq.json index 3373b89..db38b6e 100644 --- a/data/faq.json +++ b/data/faq.json @@ -18,7 +18,7 @@ { "id": "what-products", "question": "呼籁有哪些产品?", - "answer": "呼籁旅行目前有两大产品线:额吉的故乡V9系列和小蒙马夏令营。额吉的故乡V9系列是家庭亲子游产品,一家一单一车,提供5天4晚至7天6晚共6个版本,适合不同假期和偏好的家庭。小蒙马夏令营是亲子夏令营路线,6天5晚,每期8组家庭同行,爸爸妈妈带着孩子一起出发,融入草原写生、非遗研学、民俗体验三大主题。两大产品线都走呼伦贝尔核心线路,区别在于形式:额吉的故乡是私家定制,小蒙马是亲子夏令营。", + "answer": "呼籁旅行目前有两大产品线:额吉的故乡V9系列和小蒙马亲子游学营。额吉的故乡V9系列是家庭亲子游产品,一家一单一车,提供5天4晚至7天6晚共6个版本,适合不同假期和偏好的家庭。小蒙马亲子游学营是亲子游学营路线,6天5晚,每期7-9组家庭同行,5-12岁亲子同行,融入草原写生、非遗研学、民俗体验三大主题,配备双领队和全程摄影师,餐食全含。两大产品线都走呼伦贝尔核心线路,区别在于形式:额吉的故乡是私家定制,小蒙马是亲子游学营。", "relatedLinks": [ { "url": "/products", @@ -61,12 +61,12 @@ }, { "id": "summer-camp-age", - "question": "小蒙马夏令营适合几岁?", - "answer": "小蒙马夏令营是亲子夏令营,爸爸妈妈带着孩子一起参加,适合有学龄儿童的家庭。行程中的活动会根据孩子年龄适配难度,比如骑马教练会匹配合适的马匹,绘画老师会按基础指导,非遗手工也简单易操作。小蒙马和额吉的故乡的区别在于:额吉的故乡是一家一单一车的私家亲子游,小蒙马是每期8组家庭一起出发的亲子夏令营,孩子有伙伴一起玩,大人也能在团队氛围里放松。小蒙马还贴心设计了「爸妈托管」时段,专业工作人员带孩子做游戏,家长可以短暂休息。", + "question": "小蒙马亲子游学营适合几岁?", + "answer": "小蒙马亲子游学营适合5-12岁孩子的家庭,爸爸妈妈带着孩子一起参加。活动设计上不按年龄分组,但每个环节都有弹性——写生、喂驯鹿、捡牛粪不分年龄都能玩;骑马有马匹匹配,小一点的孩子由教练抱着骑。小蒙马和额吉的故乡的区别在于:额吉的故乡是一家一单一车的私家亲子游,小蒙马是每期7-9组家庭一起出发的亲子游学营,孩子有伙伴一起玩,大人也能在团队氛围里放松。小蒙马还配备双领队和全程摄影师,贴心设计了「爸妈托管」时段。", "relatedLinks": [ { "url": "/summer-camp", - "text": "了解小蒙马夏令营" + "text": "了解小蒙马亲子游学营" } ] }, @@ -299,7 +299,7 @@ { "id": "driver-guide-quality", "question": "司机和领队怎么样?", - "answer": "呼籁的司机都经过严格筛选、培训和考核,熟悉呼伦贝尔的每条路线。领队都是经过呼籁体系化培训和严格考核的,统一服务标准。额吉的故乡等一单一团产品配备3管家(车务管家+房务管家+客服管家)+ 1定制师 + 1专属领队,全程只服务您一个家庭,旅拍部分含呼籁自营旅拍服务。小蒙马夏令营配备全程2位亲子领队 + 1位跟拍摄影师 + 专属司机。很多回头客会指定同一位领队,就是因为服务到位、值得信赖。在客户评价中,司机和领队是被提及频率很高的好评项。", + "answer": "呼籁的司机都经过严格筛选、培训和考核,熟悉呼伦贝尔的每条路线。领队都是经过呼籁体系化培训和严格考核的,统一服务标准。额吉的故乡等一单一团产品配备3管家(车务管家+房务管家+客服管家)+ 1定制师 + 1专属领队,全程只服务您一个家庭,旅拍部分含呼籁自营旅拍服务。小蒙马亲子游学营配备全程2位亲子领队 + 1位跟拍摄影师 + 专属司机。很多回头客会指定同一位领队,就是因为服务到位、值得信赖。在客户评价中,司机和领队是被提及频率很高的好评项。", "relatedLinks": [ { "url": "/reviews", diff --git a/data/navigation.json b/data/navigation.json index 7622388..4c54bbe 100644 --- a/data/navigation.json +++ b/data/navigation.json @@ -24,7 +24,7 @@ "season": "冬" }, { - "text": "小蒙马夏令营", + "text": "小蒙马亲子游学营", "to": "/summer-camp", "season": "夏" }, @@ -32,6 +32,11 @@ "text": "小蒙马冬令营", "to": "/winter-camp", "season": "冬" + }, + { + "text": "选版工具", + "to": "/selector", + "highlight": true } ] }, @@ -53,6 +58,10 @@ } ] }, + { + "text": "旅行攻略", + "to": "/blog" + }, { "text": "客户评价", "to": "/reviews", @@ -87,6 +96,14 @@ "text": "关于呼籁", "to": "/about" }, + { + "text": "呼籁旅行", + "to": "/brand" + }, + { + "text": "呼籁文旅集团", + "to": "/company" + }, { "text": "最新动态", "to": "/news" @@ -110,6 +127,14 @@ "text": "关于我们", "to": "/about" }, + { + "text": "呼籁旅行", + "to": "/brand" + }, + { + "text": "呼籁文旅集团", + "to": "/company" + }, { "text": "最新动态", "to": "/news" @@ -136,7 +161,7 @@ "to": "/products/winter" }, { - "text": "小蒙马夏令营", + "text": "小蒙马亲子游学营", "to": "/summer-camp" }, { @@ -156,6 +181,10 @@ "text": "常见问答", "to": "/faq" }, + { + "text": "旅行攻略", + "to": "/blog" + }, { "text": "客户评价", "to": "/reviews" diff --git a/data/news.json b/data/news.json index 4e17997..47cc32f 100644 --- a/data/news.json +++ b/data/news.json @@ -10,11 +10,11 @@ }, { "id": "news-4", - "title": "2026小蒙马亲子夏令营开放报名", + "title": "2026小蒙马亲子游学营开放报名·全面升级2.0版", "date": "2026-02-20", "category": "产品", - "summary": "2026年小蒙马亲子夏令营正式开放报名,6天5晚,每期最多8组家庭,涵盖草原、森林、湿地三大研学模块,全程路虎头等舱车队、专属摄影师跟拍。", - "content": "2026年小蒙马亲子夏令营正式开放报名。小蒙马是呼籁旅行专为家庭设计的深度营地产品,行程6天5晚,每期最多8组家庭同行。课程围绕草原、森林、湿地三大研学模块设计,包含恩和骑马、乌兰山滑草、ATV越野、面包DIY、兰旗果舍等体验。全程配备路虎头等舱车队,每组家庭配专属摄影师全程跟拍。2026年夏季计划开设9期,名额有限,报名请联系定制师获取详细方案和排期。" + "summary": "2026年小蒙马亲子游学营2.0正式开放报名,6天5晚,每期7-9组家庭,5-12岁亲子同行。住宿全面升级、餐食全含、双领队+全程摄影师,2026年计划开设30期。", + "content": "2026年小蒙马亲子游学营2.0正式开放报名。小蒙马是呼籁旅行专为家庭设计的深度亲子游学营产品,行程6天5晚,每期7-9组家庭同行。2025年首发11期期期满员,2026年全面升级至2.0版本。行程融入草原音乐会、写生创作、白桦林非遗研学、亲子马术、做列巴、1200米滑草畅玩、勇士越野车穿越等体验。住宿全面升级(蒙古包+独栋木屋别墅连住2晚+边境景观木屋),餐食全含(5早5中4晚),配备双领队和全程专属摄影师。2026年计划开设30期(早鸟2期+小高峰4期+暑假黄金24期),名额有限,报名请联系定制师。" }, { "id": "news-5", @@ -30,7 +30,7 @@ "date": "2026-01-15", "category": "公告", "summary": "呼籁旅行2025年度接待约18000人次,自2015年创立以来,累计服务家庭突破10000组、39000余人次。感谢每一个信任呼籁的家庭。", - "content": "回顾2025年,呼籁旅行全年接待约18000人次。自2015年创立以来,呼籁累计服务家庭已突破10000组,共计39000余人次踏上呼伦贝尔草原。这一年,额吉的故乡从V8迭代到V9,小蒙马亲子夏令营正式上线,自有车队和自营营地投入运营——这些变化的背后,是每一个选择信任呼籁的家庭给了我们持续投入的底气。2026年,我们会继续深耕呼伦贝尔家庭定制游,把更多精力放在服务本身。" + "content": "回顾2025年,呼籁旅行全年接待约18000人次。自2015年创立以来,呼籁累计服务家庭已突破10000组,共计39000余人次踏上呼伦贝尔草原。这一年,额吉的故乡从V8迭代到V9,小蒙马亲子游学营正式上线,自有车队和自营营地投入运营——这些变化的背后,是每一个选择信任呼籁的家庭给了我们持续投入的底气。2026年,我们会继续深耕呼伦贝尔家庭定制游,把更多精力放在服务本身。" }, { "id": "news-7", diff --git a/data/pricing.json b/data/pricing.json index 6d1004c..30c0498 100644 --- a/data/pricing.json +++ b/data/pricing.json @@ -74,13 +74,13 @@ }, { "id": "summer-camp", - "name": "小蒙马夏令营", - "priceLabel": "详询定制师", - "priceNote": "每期仅限8组家庭,名额有限,请提前联系定制师了解营期和报名方式", + "name": "小蒙马亲子游学营", + "priceLabel": "13960元起", + "priceNote": "早鸟13960元起/1大1小,暑假黄金17960元起/1大1小,含住宿+餐食+门票+活动+双领队+摄影师+研学物料", "highlights": [ "草原写生·非遗研学·民俗体验", - "每期仅限8组家庭", - "含爸妈托管时段" + "每期7-9组家庭,双领队+全程摄影师", + "餐食全含·住宿全程升级" ], "url": "/summer-camp" }, diff --git a/data/products.json b/data/products.json index 469cbf5..b660958 100644 --- a/data/products.json +++ b/data/products.json @@ -1,5 +1,5 @@ { - "narrative": "「额吉的故乡」是蒙古语中对母亲故土的深情称呼。这条定制游产品线从2023年诞生至今,已经迭代到了第9个版本,连续三年累计服务超过10000组家庭。我们根据不同家庭的假期长度、出行偏好和体验诉求,打磨出5个版本——不是简单地增减天数,而是针对每一类家庭的需求重新设计节奏、线路和体验内容。每一个版本都遵循同一个承诺:不拼团,不赶路,不将就。一家一单一车,全程私家定制游,您的假期只属于您的家庭。", + "narrative": "「额吉的故乡」是蒙古语中对母亲故土的深情称呼。这条定制游产品线从2023年诞生至今,已经迭代到了第9个版本,连续三年累计服务近万组家庭。我们根据不同家庭的假期长度、出行偏好和体验诉求,打磨出6个版本——不是简单地增减天数,而是针对每一类家庭的需求重新设计节奏、线路和体验内容。每一个版本都遵循同一个承诺:不拼团,不赶路,不将就。专车专属、独立成团,您的假期只属于您的家庭。", "versions": [ { "id": "v9-5d4n-forest", @@ -380,13 +380,114 @@ } ], "summerCamp": { - "name": "小蒙马夏令营", - "positioning": "孩子在探索世界,你也在找回自己。小蒙马是呼籁旅行打造的呼伦贝尔草原亲子夏令营路线,6天5晚,每期仅限8组家庭同行,爸爸妈妈带着孩子一起出发,行程融入草原写生、非遗研学、民俗体验三大主题,孩子沉浸式学习成长,大人也能真正被照顾、被理解,找回属于自己的节奏。", + "name": "小蒙马亲子游学营", + "version": "2.0", + "slogan": "更懂妈妈的呼伦贝尔亲子游学营", + "positioning": "孩子在探索世界,你也在找回自己。小蒙马是呼籁旅行打造的呼伦贝尔草原亲子游学营路线,6天5晚,每期7-9组家庭同行,爸爸妈妈带着孩子一起出发,行程融入草原写生、非遗研学、民俗体验三大主题,孩子沉浸式学习成长,大人也能真正被照顾、被理解,找回属于自己的节奏。", + "ageRange": "5-12岁", "days": 6, "nights": 5, + "familiesPerSession": "7-9组", "sessions": { "2025": 11, - "2026plan": 30 + "2026": 30, + "2026detail": { + "earlyBird": { + "label": "早鸟优惠", + "count": 2, + "sessions": [ + { "id": 1, "dates": "6.25—6.30" }, + { "id": 2, "dates": "6.30—7.05" } + ] + }, + "shoulder": { + "label": "小高峰", + "count": 4, + "sessions": [ + { "id": 3, "dates": "7.02—7.07" }, + { "id": 4, "dates": "7.04—7.09" }, + { "id": 5, "dates": "7.05—7.10" }, + { "id": 6, "dates": "7.06—7.11" } + ] + }, + "peak": { + "label": "暑假黄金", + "count": 24, + "sessions": [ + { "id": 7, "dates": "7.09—7.14" }, + { "id": 8, "dates": "7.10—7.15" }, + { "id": 9, "dates": "7.11—7.16" }, + { "id": 10, "dates": "7.12—7.17" }, + { "id": 11, "dates": "7.13—7.18" }, + { "id": 12, "dates": "7.14—7.19" }, + { "id": 13, "dates": "7.18—7.23" }, + { "id": 14, "dates": "7.19—7.24" }, + { "id": 15, "dates": "7.20—7.25" }, + { "id": 16, "dates": "7.25—7.30" }, + { "id": 17, "dates": "7.25—7.30" }, + { "id": 18, "dates": "7.26—7.31" }, + { "id": 19, "dates": "7.27—8.01" }, + { "id": 20, "dates": "7.28—8.02" }, + { "id": 21, "dates": "8.01—8.06" }, + { "id": 22, "dates": "8.02—8.07" }, + { "id": 23, "dates": "8.03—8.08" }, + { "id": 24, "dates": "8.04—8.09" }, + { "id": 25, "dates": "8.06—8.11" }, + { "id": 26, "dates": "8.08—8.13" }, + { "id": 27, "dates": "8.09—8.14" }, + { "id": 28, "dates": "8.10—8.15" }, + { "id": 29, "dates": "8.13—8.18" }, + { "id": 30, "dates": "8.15—8.20" } + ] + } + } + }, + "pricing": { + "deposit": 2000, + "depositUnit": "元/人", + "tiers": [ + { + "label": "早鸟优惠", + "sessionRange": "第1-2期", + "adultPrice": 6980, + "childPrice": 5980, + "childNote": "儿童价格为不占床位,仅适用于儿童与两位成人同住同行", + "packages": [ + { "type": "1大1小", "price": 13960 }, + { "type": "2大1小 / 1大2小", "price": 19940 }, + { "type": "2大2小", "price": 25920 } + ] + }, + { + "label": "小高峰", + "sessionRange": "第3-6期", + "adultPrice": 7980, + "childPrice": 6580, + "childNote": "儿童价格为不占床位,仅适用于儿童与两位成人同住同行", + "packages": [ + { "type": "1大1小", "price": 15960 }, + { "type": "2大1小 / 1大2小", "price": 22540 }, + { "type": "2大2小", "price": 29120 } + ] + }, + { + "label": "暑假黄金", + "sessionRange": "第7-30期", + "adultPrice": 8960, + "childPrice": 7980, + "childNote": "儿童价格为不占床位,仅适用于儿童与两位成人同住同行", + "packages": [ + { "type": "1大1小", "price": 17960 }, + { "type": "2大1小 / 1大2小", "price": 24940 }, + { "type": "2大2小", "price": 31920 } + ] + } + ], + "notes": [ + "三档价格差异是因为呼伦贝尔夏季酒店资源、景区运力有淡旺季浮动", + "出发前的价格以实际咨询时为准", + "定金2,000元/人,锁定名额" + ] }, "principles": [ "住得好、不赶路", @@ -394,34 +495,133 @@ "大人孩子都照顾", "走心不走马观花" ], - "coreActivities": [], + "coreActivities": [ + "牧云山顶不插电草原音乐会——蒙古族艺人现场演奏马头琴,没有音响没有舞台", + "呼伦贝尔大草原写生创作——苏苏老师(美术教育11年)现场带课", + "白桦林非遗传承人刘叔现场授课——桦树皮画制作+鄂温克文化", + "恩和亲子马术——先认识马再上马,穿越草原、白桦林、湿地、河流", + "华俄后裔玛妮娅奶奶家——做列巴、参观家庭博物馆、了解四代传承", + "全地形越野车草原穿越——亲子同乘,草原、湿地、河流一路变换", + "乌兰山1200米滑草畅玩不限次——山顶俯瞰额尔古纳河太极图", + "呼籁牧场蒙古族文化研学——搭蒙古包、捡牛粪、熬奶茶、做非遗羊毛毡" + ], "itinerary": [ - "Day1 全国→海拉尔|接机入住,调整状态", - "Day2 海拉尔→牧云山顶音乐会→图嘎营地亲子破冰+游戏互动|爸妈托管时间", - "Day3 图嘎→莫尔格勒河写生→白桦林非遗研学+喂驯鹿→望见林悦|连住两晚不搬家", - "Day4 望见林悦→恩和骑马→华俄后裔家做列巴→UTV→河边烧烤", - "Day5 望见林悦→乌兰山滑草→越野车穿越→民族服饰拍照→烤全羊+篝火晚会", - "Day6 呼籁牧场非遗羊毛毡+蒙古族民俗体验+云朵牧场→午餐后返程" + { + "day": 1, + "title": "小蒙马集合啦!", + "summary": "全国各地→海拉尔|接机入住,签到领研学手册和物料包,自由活动", + "distance": "机场到酒店12公里" + }, + { + "day": 2, + "title": "牧云山顶音乐会·图嘎营地", + "summary": "开营仪式→牧云山顶草原音乐会+旅拍→图嘎营地→午休→孩子托管破冰+爸妈自由时光→篝火+星空", + "distance": "全天车程100公里,分段走,约2小时" + }, + { + "day": 3, + "title": "草原写生·白桦林研学·入住望见林悦", + "summary": "苏苏老师草原写生→白桦林非遗桦树皮画+DIY文创→专属驯鹿+驯鹿园→入住恩和望见林悦(连住2晚)", + "distance": "全天车程210公里,分段走,约2.5小时" + }, + { + "day": 4, + "title": "亲子马术·做列巴·河边烧烤", + "summary": "亲子马术课堂(恩和周边)→玛妮娅奶奶家做列巴+家庭博物馆→全地形越野车→河边烧烤", + "distance": "都在恩和周边,车程很短" + }, + { + "day": 5, + "title": "千米滑草·勇士车穿越·烤全羊", + "summary": "沿中俄边防卡线→乌兰山1200米滑草畅玩→190天边草原→勇士越野车18公里穿越→下午茶→民族服饰拍照→跨国日落→烤全羊+篝火", + "distance": "全天车程210公里,分段走,约3.5小时" + }, + { + "day": 6, + "title": "牧场最后一课·回程", + "summary": "呼籁牧场(捡牛粪+熬奶茶+搭蒙古包+非遗羊毛毡)→颁发草原研学证书→云朵牧场(羊驼+小羊+土拨鼠)→闭营仪式→额尔古纳午餐→海拉尔送机", + "distance": "全天车程190公里,分段走,约3小时" + } + ], + "accommodation": [ + { + "day": "Day 1", + "name": "海堂酒店", + "rating": "携程4.9分", + "description": "房间够大、设施够新、早餐丰富" + }, + { + "day": "Day 2", + "name": "图嘎营地度假酒店·河畔牧居蒙古包", + "rating": "携程4.6分", + "description": "草原深处蒙古包,独立卫浴、24小时热水、空调制暖,推开门就是草原" + }, + { + "day": "Day 3-4", + "name": "望见·林悦·独栋木屋别墅", + "rating": "携程4.8分", + "description": "恩和俄罗斯民族乡,北欧风独栋木屋,连住2晚不搬家,院子大适合孩子跑" + }, + { + "day": "Day 5", + "name": "190天边草原游牧部落·景观木屋", + "rating": "携程4.8分", + "description": "中俄边境制高点,推开门对面就是界河,窗外九曲十八弯彩带河,跨国日落" + } + ], + "included": { + "accommodation": "全程住宿(指定行程内酒店,房源已提前锁定)", + "tickets": "行程内所有门票及活动费", + "meals": "餐食(5早5中4晚,含烤全羊、铁锹烤肉、河边烧烤、中俄家常菜、羊肉火锅;第一天集合日和第六天晚餐不含,其余全含;儿童也已包含早餐)", + "transport": "空调旅游巴士(陆地头等舱车型)", + "transfer": "24小时接机接站", + "leaders": "两位亲子领队(持国家导游证+亲子研学导师证,带亲子团至少三年)", + "photographer": "全程专属摄影师(每日精修照片发群)", + "materials": "研学物料包(含为孩子定制的民族服饰,客服提前确认身高体重)", + "insurance": "旅行社综合险" + }, + "notIncluded": "往返大交通(机票/火车票)、个人消费、旅游意外险(建议自行购买)", + "refundPolicy": [ + { "period": "出发前15天以上取消", "refund": "定金全退" }, + { "period": "出发前8—14天取消", "refund": "定金退还70%" }, + { "period": "出发前4—7天取消", "refund": "定金退还50%" }, + { "period": "出发前3天内取消", "refund": "定金退还20%" } + ], + "groupGuarantee": "每期限6组家庭以上成团。如果某一期没有凑够,出发前15天通知,帮你调到临近的其他期,或者定金全退。", + "travelNotes": [ + "机场选择海拉尔机场,行程为海拉尔起始", + "行程不含满洲里,如想顺便去可集合前先玩1-2天或行程结束后前往", + "第1天为集合日,几点抵达都可以,24小时接机接站", + "返程航班建议17:00以后,最后一天返回海拉尔预计下午14:00左右", + "临近出发统一发送详细《行前攻略》" ], "faq": [ { - "question": "小蒙马夏令营需要家长陪同吗?", - "answer": "是的,小蒙马是亲子夏令营,爸爸妈妈带着孩子一起出发。行程中既有全家共同参与的活动(骑马、写生、做列巴),也贴心设计了「爸妈托管」时段——专业工作人员陪同孩子做游戏,家长可以短暂放松休息。特别适合一个人带孩子出行的妈妈,行程有人安排,孩子有人带着玩,你也能真正歇一歇。" + "question": "孩子5岁和12岁差很多,活动能一起参与吗?", + "answer": "可以。活动设计上不按年龄分组,但每个环节都有弹性——写生、喂驯鹿、捡牛粪这些不分年龄都能玩;骑马有马匹匹配,小一点的孩子由教练抱着骑。教练会根据现场情况照顾节奏。" }, { - "question": "小蒙马和额吉的故乡有什么区别?", - "answer": "两者都是呼籁出品,都走呼伦贝尔核心线路。核心区别在于形式:额吉的故乡是一家一单一车的私家定制游,您的家庭独享车和领队,行程灵活自由。小蒙马是亲子夏令营,每期8组家庭一起出发,融入草原写生、非遗研学、民俗体验三大主题,孩子有伙伴一起学一起玩,大人也能在团队氛围里放松社交。" + "question": "每天在车上要坐多久?", + "answer": "整个行程不走回头路,每天根据活动和住宿分段安排,最长的一段车程约1.5小时。不是一直赶路,基本不用坐车。Day 4在恩和和周边活动,基本不用坐车。车上有零食和水,晕车的孩子提前备好晕车药就行(我们也会准备晕车贴)。" }, { - "question": "行程会不会太赶?孩子体力跟得上吗?", - "answer": "不会。小蒙马的行程设计遵循「舒适适配」原则,充分考虑孩子的体能和注意力。比如牧云山顶音乐会安排在上午精力充沛时段,住宿安排连住两晚减少搬家奔波,每天的活动节奏都留有休息缓冲时间。所有户外活动也会根据孩子年龄适配难度,确保参与感和安全性。" + "question": "下雨了行程怎么办?", + "answer": "草原天气变化快,偶尔下雨很正常。导游会根据天气灵活调整顺序,户外活动和室内体验穿插安排。骑马和滑草在小雨情况下正常进行,暴雨会改为备选方案。雨衣我们会提前准备。" }, { - "question": "夏令营一般什么时候开营?怎么报名?", - "answer": "小蒙马夏令营在每年暑假期间开营,具体开营时间和营期安排会在每年春季公布。2025年成功举办11期,2026年计划开设30期。建议关注呼籁旅行小红书账号或添加微信客服获取最新营期信息和报名方式。" + "question": "草原蚊虫多吗?孩子怎么防?", + "answer": "7-8月草原确实有蚊虫,尤其傍晚。车上常备驱蚊液,营地、酒店也会提前做防蚊处理。建议给孩子带长袖薄外套,傍晚活动时穿上就好。" + }, + { + "question": "一个妈妈带两个孩子,住宿怎么安排?", + "answer": "每组含1间独立双床房,一大两小住一间完全够。价格按「1大2小」组合计算。导游会多照顾一拖二的家庭,这种情况每期都有,不用担心。" + }, + { + "question": "草原上如果孩子生病或受伤怎么办?", + "answer": "导游全部持有急救资质,随队配备急救包。特殊药品建议自己提前买好,当地药店品种有限。恩和、黑山头等乡镇设有卫生院,额尔古纳市有二甲医院,海拉尔有三甲医院(呼伦贝尔市人民医院)。如遇紧急情况,导游会第一时间处理并协调就近就医。" } ], - "differenceFromV9": "小蒙马和额吉的故乡都是呼籁出品,都走呼伦贝尔核心线路,很多体验项目也是同一套标准。核心区别在于形式和节奏:额吉的故乡是一家一单一车的私家定制游,您的家庭独享一辆车和一位领队,行程灵活自由。小蒙马是亲子夏令营形式,每期8组家庭一起出发,融入草原写生、非遗研学、民俗体验三大主题,孩子有伙伴一起学一起玩,大人也能在团队氛围里放松社交。小蒙马还贴心设计了「爸妈托管」时段——专业工作人员陪同孩子做游戏,家长可以短暂放松休息。特别适合一个人带孩子出行的妈妈。" + "differenceFromV9": "小蒙马和额吉的故乡都是呼籁出品,同样6天5晚,同样用心,但设计思路不一样。小蒙马亲子游学营:7-9组家庭拼团出发,孩子有同龄玩伴;两位亲子领队全程带队,家长可以当甩手掌柜;每天都有设计好的研学课程和亲子活动;全程跟拍摄影师,每天精修照片发群;餐食全含,不用操心吃什么。适合想让孩子交朋友、有收获,自己也能放松的家庭。额吉的故乡亲子版:一单一团,你的家庭独享一辆车、一位领队;路线更远,含满洲里,覆盖草原+森林+边境+城市;正餐不含,可以自己探索当地美食;累计10000+家庭选择,国家版权局版权认证产品。适合喜欢自由、一家人按自己节奏走的家庭。" }, "selectionGuide": { "byVacationLength": [ @@ -463,8 +663,8 @@ "recommendation": "v9-6d5n-explore" }, { - "reason": "小蒙马夏令营,8组家庭同行", - "condition": "亲子夏令营", + "reason": "小蒙马亲子游学营,7-9组家庭同行", + "condition": "亲子游学营", "recommendation": "summer-camp" } ], diff --git a/data/reviews.json b/data/reviews.json index b4bb366..e76495c 100644 --- a/data/reviews.json +++ b/data/reviews.json @@ -1,8 +1,9 @@ { "summary": { - "totalCount": 10000, + "totalCount": 82, + "familyCount": "10000+", "approvalRate": "98%", - "approvalRateNote": "基于历年客户行程结束后的满意度反馈统计", + "approvalRateNote": "基于历年客户行程结束后的满意度反馈统计(覆盖10000+组家庭)", "repeatRate": "很多家庭来了还想二刷", "keywords": [ "孩子玩疯了", diff --git a/data/seo.json b/data/seo.json index 511d69e..4a22171 100644 --- a/data/seo.json +++ b/data/seo.json @@ -2,14 +2,14 @@ "pages": { "home": { "title": "呼籁旅行 - 呼伦贝尔亲子游·家庭定制游·一家一单一车", - "description": "呼籁旅行是呼伦贝尔亲子游品牌,深耕呼伦贝尔11年,已服务10000+组家庭。提供5-7天额吉的故乡V9系列亲子定制行程及小蒙马夏令营,一家一单一车,不拼团不赶路。", + "description": "呼籁旅行是呼伦贝尔亲子游品牌,深耕呼伦贝尔11年,已服务近万组家庭。提供5-7天额吉的故乡V9系列亲子定制行程及小蒙马亲子游学营,专车专属独立成团,不拼团不赶路。", "h1": "呼籁旅行 — 呼伦贝尔亲子游", "ogImage": "/images/og-home.jpg", "keywords": "呼伦贝尔亲子游,呼伦贝尔家庭定制游,呼籁旅行,一家一单一车,呼伦贝尔旅游,草原亲子游,额吉的故乡,呼伦贝尔定制游" }, "about": { "title": "关于呼籁旅行 - 品牌故事·旗下9家企业·深耕呼伦贝尔11年", - "description": "呼籁旅行集团旗下9家企业,深耕呼伦贝尔11年,已服务10000+组家庭。了解呼籁的品牌故事、资质认证、服务保障和企业文化。", + "description": "呼籁旅行集团旗下9家企业,深耕呼伦贝尔11年,已服务近万组家庭。了解呼籁的品牌故事、资质认证、服务保障和企业文化。", "h1": "关于呼籁旅行", "ogImage": "/images/og-about.jpg", "keywords": "呼籁旅行,呼伦贝尔旅行社,自有营地,自有车队,呼籁文旅集团,深耕呼伦贝尔11年" @@ -36,7 +36,7 @@ }, "reviews": { "title": "呼伦贝尔亲子游客户评价 - 真实口碑·10000+家庭的选择 - 呼籁旅行", - "description": "查看呼籁旅行呼伦贝尔亲子游客户真实评价,涵盖亲子游、家庭定制游等场景。好评率98%,听听10000+家庭的呼伦贝尔旅行体验。", + "description": "查看呼籁旅行呼伦贝尔亲子游客户真实评价,涵盖亲子游、家庭定制游等场景。基于行程结束后满意度回访统计好评率超98%,听听10000+组家庭的呼伦贝尔旅行体验。", "h1": "客户评价", "ogImage": "/images/og-reviews.jpg", "keywords": "呼伦贝尔旅游评价,呼籁旅行怎么样,呼伦贝尔亲子游评价,呼伦贝尔定制游口碑" @@ -49,11 +49,11 @@ "keywords": "呼伦贝尔穿搭指南,呼伦贝尔行李清单,呼伦贝尔几月份去最好,呼伦贝尔骑马安全,草原旅游注意事项" }, "summer-camp": { - "title": "小蒙马夏令营 - 呼伦贝尔草原亲子夏令营·6天5晚 - 呼籁旅行", - "description": "小蒙马夏令营是呼籁旅行打造的呼伦贝尔草原亲子夏令营路线,6天5晚,每期仅限8组家庭,爸爸妈妈带着孩子一起出发。融入草原写生、非遗研学、民俗体验三大主题,骑马、做列巴、越野穿越、篝火晚会,孩子沉浸式成长,大人也能真正放松。", - "h1": "小蒙马夏令营", + "title": "小蒙马亲子游学营 - 呼伦贝尔草原亲子游学营·6天5晚 - 呼籁旅行", + "description": "小蒙马亲子游学营是呼籁旅行打造的呼伦贝尔草原亲子游学营路线,6天5晚,每期7-9组家庭,5-12岁亲子同行。草原音乐会、写生创作、白桦林非遗研学、亲子马术、做列巴、1200米滑草畅玩,双领队+全程摄影师+餐食全含。2025年11期期期满员,2026年开设30期。", + "h1": "小蒙马亲子游学营", "ogImage": "/images/og-summer-camp.jpg", - "keywords": "呼伦贝尔夏令营,草原亲子夏令营,小蒙马夏令营,呼伦贝尔亲子营,研学旅行" + "keywords": "呼伦贝尔亲子游学营,草原亲子营,小蒙马亲子游学营,呼伦贝尔亲子营,研学旅行,呼伦贝尔夏令营" }, "qualifications": { "title": "资质荣誉 - 三重旅行社资质·1000万责任险·行业认证 - 呼籁旅行", diff --git a/layouts/admin.vue b/layouts/admin.vue index 58e822e..c3ad394 100644 --- a/layouts/admin.vue +++ b/layouts/admin.vue @@ -118,6 +118,8 @@ const menuOptions = computed(() => { label: menuLabel('关于我们'), key: 'g-about', children: [ { label: menuLabel('关于呼籁'), key: '/admin/content/about' }, + { label: menuLabel('呼籁旅行百科'), key: '/admin/content/brand-wiki' }, + { label: menuLabel('呼籁文旅集团'), key: '/admin/content/company-wiki' }, { label: menuLabel('最新动态'), key: '/admin/articles' }, { label: menuLabel('资质荣誉'), key: '/admin/content/qualifications' }, { label: menuLabel('合作伙伴'), key: '/admin/content/partners' }, @@ -169,7 +171,7 @@ const groupMappings = { 'g-products': [], 'g-destinations': ['destinations', 'calendar', 'guides'], 'g-reviews': ['reviews', 'xiaohongshu', 'youji', 'gallery', 'stories'], - 'g-about': ['about', 'articles', 'qualifications', 'partners'], + 'g-about': ['about', 'articles', 'qualifications', 'partners', 'brand-wiki', 'company-wiki'], 'g-settings': ['navigation', 'seo', 'brand', 'images', 'versions', 'customize'], } diff --git a/nuxt.config.js b/nuxt.config.js index 88e9550..f59c7ff 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -15,6 +15,7 @@ export default defineNuxtConfig({ '/products/v9-6d5n-family', '/products/v9-6d5n-explore', '/products/v9-7d6n-family', '/products/v9-7d6n-wild', '/products/autumn', '/products/winter', + '/brand', '/company', '/gallery', '/news', '/calendar', '/stories', '/xiaohongshu', '/youji', '/blog', '/blog/hulunbuir-travel-guide-2026', @@ -25,6 +26,7 @@ export default defineNuxtConfig({ '/blog/hulunbuir-travel-with-toddlers-4-6', '/blog/hulunbuir-travel-tips-avoid-pitfalls', '/blog/grassland-photography-outfit-guide', + '/blog/hulai-red-cross-first-aid-training-2026', '/destinations', '/destinations/moriguole', '/destinations/eergunashire', '/destinations/baihualin', '/destinations/enhe-shiwei', '/destinations/heishantou', '/destinations/manzhouli', diff --git a/package-lock.json b/package-lock.json index bc9e97e..6a63911 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,17 @@ "name": "hulai-website", "version": "1.0.0", "dependencies": { + "@css-render/vue3-ssr": "^0.15.14", + "better-sqlite3": "^12.8.0", + "drizzle-orm": "^0.45.1", "less": "^4.6.4", + "naive-ui": "^2.44.1", + "nodemailer": "^8.0.3", "nuxt": "^3.17.5" + }, + "devDependencies": { + "@types/better-sqlite3": "^7.6.13", + "drizzle-kit": "^0.31.10" } }, "node_modules/@babel/code-frame": { @@ -462,6 +471,31 @@ "node": ">=18.0.0" } }, + "node_modules/@css-render/plugin-bem": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@css-render/plugin-bem/-/plugin-bem-0.15.14.tgz", + "integrity": "sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==", + "license": "MIT", + "peerDependencies": { + "css-render": "~0.15.14" + } + }, + "node_modules/@css-render/vue3-ssr": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/@css-render/vue3-ssr/-/vue3-ssr-0.15.14.tgz", + "integrity": "sha512-//8027GSbxE9n3QlD73xFY6z4ZbHbvrOVB7AO6hsmrEzGbg+h2A09HboUyDgu+xsmj7JnvJD39Irt+2D0+iV8g==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.11" + } + }, + "node_modules/@drizzle-team/brocli": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@dxup/nuxt": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@dxup/nuxt/-/nuxt-0.4.0.tgz", @@ -515,6 +549,448 @@ "tslib": "^2.4.0" } }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "license": "MIT" + }, + "node_modules/@esbuild-kit/core-utils": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.18.20", + "source-map-support": "^0.5.21" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "@esbuild-kit/core-utils": "^3.3.2", + "get-tsconfig": "^4.7.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.4", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.4.tgz", @@ -1100,6 +1576,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", + "license": "Apache-2.0" + }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", @@ -1765,9 +2247,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1784,9 +2263,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1803,9 +2279,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1822,9 +2295,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1841,9 +2311,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -1860,9 +2327,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1879,9 +2343,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -1898,9 +2359,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2109,9 +2567,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2128,9 +2583,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2147,9 +2599,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2166,9 +2615,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2185,9 +2631,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2204,9 +2647,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2223,9 +2663,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2242,9 +2679,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2462,9 +2896,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2481,9 +2912,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2500,9 +2928,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2519,9 +2944,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2538,9 +2960,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2557,9 +2976,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2576,9 +2992,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2595,9 +3008,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2809,9 +3219,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2832,9 +3239,6 @@ "cpu": [ "arm" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2855,9 +3259,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2878,9 +3279,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2901,9 +3299,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2924,9 +3319,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3333,9 +3725,6 @@ "cpu": [ "arm" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3349,9 +3738,6 @@ "cpu": [ "arm" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3365,9 +3751,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3381,9 +3764,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3397,9 +3777,6 @@ "cpu": [ "loong64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3413,9 +3790,6 @@ "cpu": [ "loong64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3429,9 +3803,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3445,9 +3816,6 @@ "cpu": [ "ppc64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3461,9 +3829,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3477,9 +3842,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3493,9 +3855,6 @@ "cpu": [ "s390x" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3509,9 +3868,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3525,9 +3881,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3652,12 +4005,47 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/better-sqlite3": { + "version": "7.6.13", + "resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz", + "integrity": "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "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/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.19.0" + } + }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", @@ -4281,6 +4669,12 @@ "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", "license": "MIT" }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, "node_modules/autoprefixer": { "version": "10.4.27", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", @@ -4459,6 +4853,20 @@ "node": ">=6.0.0" } }, + "node_modules/better-sqlite3": { + "version": "12.9.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.9.0.tgz", + "integrity": "sha512-wqUv4Gm3toFpHDQmaKD4QhZm3g1DjUBI0yzS4UBl6lElUmXFYdTQmmEDpAFa5o8FiFiymURypEnfVHzILKaxqQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x" + } + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -4477,6 +4885,55 @@ "url": "https://github.com/sponsors/antfu" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -4971,6 +5428,22 @@ "postcss": "^8.0.9" } }, + "node_modules/css-render": { + "version": "0.15.14", + "resolved": "https://registry.npmjs.org/css-render/-/css-render-0.15.14.tgz", + "integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "~0.8.0", + "csstype": "~3.0.5" + } + }, + "node_modules/css-render/node_modules/csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==", + "license": "MIT" + }, "node_modules/css-select": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", @@ -5139,6 +5612,25 @@ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-tz": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-3.2.0.tgz", + "integrity": "sha512-sg8HqoTEulcbbbVXeg84u5UnlsQa8GS5QXMqjjYIhS4abEVVKIUwe0/l/UhrZdKaL/W5eWZNlbTeEIiOXTcsBQ==", + "license": "MIT", + "peerDependencies": { + "date-fns": "^3.0.0 || ^4.0.0" + } + }, "node_modules/db0": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/db0/-/db0-0.3.4.tgz", @@ -5190,6 +5682,30 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -5384,6 +5900,631 @@ "url": "https://dotenvx.com" } }, + "node_modules/drizzle-kit": { + "version": "0.31.10", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.10.tgz", + "integrity": "sha512-7OZcmQUrdGI+DUNNsKBn1aW8qSoKuTH7d0mYgSP8bAzdFzKoovxEFnoGQp2dVs82EOJeYycqRtciopszwUf8bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@drizzle-team/brocli": "^0.10.2", + "@esbuild-kit/esm-loader": "^2.5.5", + "esbuild": "^0.25.4", + "tsx": "^4.21.0" + }, + "bin": { + "drizzle-kit": "bin.cjs" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/drizzle-kit/node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" + } + }, + "node_modules/drizzle-orm": { + "version": "0.45.2", + "resolved": "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.45.2.tgz", + "integrity": "sha512-kY0BSaTNYWnoDMVoyY8uxmyHjpJW1geOmBMdSSicKo9CIIWkSxMIj2rkeSR51b8KAPB7m+qysjuHme5nKP+E5Q==", + "license": "Apache-2.0", + "peerDependencies": { + "@aws-sdk/client-rds-data": ">=3", + "@cloudflare/workers-types": ">=4", + "@electric-sql/pglite": ">=0.2.0", + "@libsql/client": ">=0.10.0", + "@libsql/client-wasm": ">=0.10.0", + "@neondatabase/serverless": ">=0.10.0", + "@op-engineering/op-sqlite": ">=2", + "@opentelemetry/api": "^1.4.1", + "@planetscale/database": ">=1.13", + "@prisma/client": "*", + "@tidbcloud/serverless": "*", + "@types/better-sqlite3": "*", + "@types/pg": "*", + "@types/sql.js": "*", + "@upstash/redis": ">=1.34.7", + "@vercel/postgres": ">=0.8.0", + "@xata.io/client": "*", + "better-sqlite3": ">=7", + "bun-types": "*", + "expo-sqlite": ">=14.0.0", + "gel": ">=2", + "knex": "*", + "kysely": "*", + "mysql2": ">=2", + "pg": ">=8", + "postgres": ">=3", + "sql.js": ">=1", + "sqlite3": ">=5" + }, + "peerDependenciesMeta": { + "@aws-sdk/client-rds-data": { + "optional": true + }, + "@cloudflare/workers-types": { + "optional": true + }, + "@electric-sql/pglite": { + "optional": true + }, + "@libsql/client": { + "optional": true + }, + "@libsql/client-wasm": { + "optional": true + }, + "@neondatabase/serverless": { + "optional": true + }, + "@op-engineering/op-sqlite": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@prisma/client": { + "optional": true + }, + "@tidbcloud/serverless": { + "optional": true + }, + "@types/better-sqlite3": { + "optional": true + }, + "@types/pg": { + "optional": true + }, + "@types/sql.js": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/postgres": { + "optional": true + }, + "@xata.io/client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "bun-types": { + "optional": true + }, + "expo-sqlite": { + "optional": true + }, + "gel": { + "optional": true + }, + "knex": { + "optional": true + }, + "kysely": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "postgres": { + "optional": true + }, + "prisma": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + } + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -5423,6 +6564,15 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.20.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", @@ -5592,6 +6742,12 @@ "bare-events": "^2.7.0" } }, + "node_modules/evtd": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/evtd/-/evtd-0.2.4.tgz", + "integrity": "sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==", + "license": "MIT" + }, "node_modules/execa": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", @@ -5615,6 +6771,15 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, "node_modules/exsolve": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", @@ -5755,6 +6920,12 @@ "node": ">= 0.8" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -5829,6 +7000,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/giget": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/giget/-/giget-3.1.2.tgz", @@ -5838,6 +7022,12 @@ "giget": "dist/cli.mjs" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, "node_modules/glob": { "version": "13.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", @@ -5958,6 +7148,15 @@ "node": ">= 0.4" } }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/hookable": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.0.tgz", @@ -6584,6 +7783,12 @@ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", @@ -6801,6 +8006,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "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", @@ -6816,6 +8033,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", @@ -6837,6 +8063,12 @@ "node": ">= 18" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, "node_modules/mlly": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.1.tgz", @@ -6893,6 +8125,38 @@ "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", "license": "MIT" }, + "node_modules/naive-ui": { + "version": "2.44.1", + "resolved": "https://registry.npmjs.org/naive-ui/-/naive-ui-2.44.1.tgz", + "integrity": "sha512-reo8Esw0p58liZwbUutC7meW24Xbn3EwNv91zReWKm2W4JPu+zfgJRn/F7aO0BFmvN+h2brA2M5lRvYqLq4kuA==", + "license": "MIT", + "dependencies": { + "@css-render/plugin-bem": "^0.15.14", + "@css-render/vue3-ssr": "^0.15.14", + "@types/lodash": "^4.17.20", + "@types/lodash-es": "^4.17.12", + "async-validator": "^4.2.5", + "css-render": "^0.15.14", + "csstype": "^3.1.3", + "date-fns": "^4.1.0", + "date-fns-tz": "^3.2.0", + "evtd": "^0.2.4", + "highlight.js": "^11.8.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "seemly": "^0.3.10", + "treemate": "^0.3.11", + "vdirs": "^0.1.8", + "vooks": "^0.2.12", + "vueuc": "^0.4.65" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -6917,6 +8181,12 @@ "integrity": "sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==", "license": "MIT" }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, "node_modules/needle": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/needle/-/needle-3.5.0.tgz", @@ -7133,6 +8403,30 @@ "node": ">=18.12.0" } }, + "node_modules/node-abi": { + "version": "3.89.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", + "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/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/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -7197,6 +8491,15 @@ "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", "license": "MIT" }, + "node_modules/nodemailer": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.5.tgz", + "integrity": "sha512-0PF8Yb1yZuQfQbq+5/pZJrtF6WQcjTd5/S4JOHs9PGFxuTqoB/icwuB44pOdURHJbRKX1PPoJZtY7R4VUoCC8w==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/nopt": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", @@ -7478,6 +8781,15 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/onetime": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", @@ -8233,6 +9545,33 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/pretty-bytes": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-7.1.0.tgz", @@ -8267,6 +9606,16 @@ "license": "MIT", "optional": true }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/quansync": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", @@ -8327,6 +9676,27 @@ "node": ">= 0.6" } }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, "node_modules/rc9": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/rc9/-/rc9-3.0.0.tgz", @@ -8470,6 +9840,16 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "devOptional": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -8646,6 +10026,12 @@ "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", "license": "MIT" }, + "node_modules/seemly": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/seemly/-/seemly-0.3.10.tgz", + "integrity": "sha512-2+SMxtG1PcsL0uyhkumlOU6Qo9TAQ/WyH7tthnPIOQB05/12jz9naq6GZ6iZ6ApVsO3rr2gsnTf3++OV63kE1Q==", + "license": "MIT" + }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -8779,6 +10165,51 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/simple-git": { "version": "3.33.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.33.0.tgz", @@ -8982,6 +10413,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-literal": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", @@ -9133,6 +10573,54 @@ "node": ">=18" } }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/tar-fs/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tar-stream": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.8.tgz", @@ -9272,6 +10760,12 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/treemate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/treemate/-/treemate-0.3.11.tgz", + "integrity": "sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==", + "license": "MIT" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -9279,6 +10773,38 @@ "license": "0BSD", "optional": true }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-fest": { "version": "5.4.4", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", @@ -9368,6 +10894,13 @@ "node": ">=18.12.0" } }, + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "devOptional": true, + "license": "MIT" + }, "node_modules/unenv": { "version": "2.0.0-rc.24", "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", @@ -9730,6 +11263,18 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, + "node_modules/vdirs": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/vdirs/-/vdirs-0.1.8.tgz", + "integrity": "sha512-H9V1zGRLQZg9b+GdMk8MXDN2Lva0zx72MPahDKc30v+DtwKjfyOSXWRIX4t2mhDubM1H09gPhWeth/BJWPHGUw==", + "license": "MIT", + "dependencies": { + "evtd": "^0.2.2" + }, + "peerDependencies": { + "vue": "^3.0.11" + } + }, "node_modules/vite": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", @@ -10085,6 +11630,18 @@ "@types/estree": "^1.0.0" } }, + "node_modules/vooks": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/vooks/-/vooks-0.2.12.tgz", + "integrity": "sha512-iox0I3RZzxtKlcgYaStQYKEzWWGAduMmq+jS7OrNdQo1FgGfPMubGL3uGHOU9n97NIvfFDBGnpSvkWyb/NSn/Q==", + "license": "MIT", + "dependencies": { + "evtd": "^0.2.2" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, "node_modules/vscode-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", @@ -10142,6 +11699,24 @@ "vue": "^3.5.0" } }, + "node_modules/vueuc": { + "version": "0.4.65", + "resolved": "https://registry.npmjs.org/vueuc/-/vueuc-0.4.65.tgz", + "integrity": "sha512-lXuMl+8gsBmruudfxnMF9HW4be8rFziylXFu1VHVNbLVhRTXXV4njvpRuJapD/8q+oFEMSfQMH16E/85VoWRyQ==", + "license": "MIT", + "dependencies": { + "@css-render/vue3-ssr": "^0.15.10", + "@juggle/resize-observer": "^3.3.1", + "css-render": "^0.15.10", + "evtd": "^0.2.4", + "seemly": "^0.3.6", + "vdirs": "^0.1.4", + "vooks": "^0.2.4" + }, + "peerDependencies": { + "vue": "^3.0.11" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -10214,6 +11789,12 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, "node_modules/ws": { "version": "8.19.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", diff --git a/pages/about.vue b/pages/about.vue index a975d15..081f8c9 100644 --- a/pages/about.vue +++ b/pages/about.vue @@ -17,7 +17,7 @@ -管理"呼籁旅行"品牌百科页面内容
+管理"呼籁文旅集团"公司百科页面内容
+管理研学课程体系,对应官网「夏令营」页面
呼籁旅行为每个家庭提供专属定制方案,告诉我们你的需求,我们帮你把行程安排得妥妥的。
-{{ data?.summary }}
+{{ sub.content }}
+{{ section.intro }}
+{{ prod.description }}
+{{ s.detail }}
+{{ item.value }}
+{{ section.content }}
+{{ data?.summary }}
+{{ item.content }}
+{{ section.content }}
+{{ section.intro }}
+{{ section.content }}
+{{ biz.description }}
+{{ biz.extra }}
+{{ item.value }}
+呼籁旅行是深耕呼伦贝尔11年的专属旅行品牌,创立于2015年,已服务超10000个家庭。不做拼团、不走马观花;提供额吉的故乡V9系列定制游(4-7天)、小蒙马亲子夏令营(6天5晚)及秋冬季专属产品,全程一单一车、独立成团。
+呼籁旅行是深耕呼伦贝尔11年的专属旅行品牌,创立于2015年,已服务近万组家庭。不做拼团、不走马观花;提供额吉的故乡V9系列定制游(4-7天)、小蒙马亲子游学营(6天5晚)及秋冬季专属产品,全程专车专属、独立成团。
草原的风,已经在等您了。
适合:{{ product.audience }}
-{{ product.days }}天{{ product.nights }}晚 · 一家一单一车
+{{ product.days }}天{{ product.nights }}晚 · 专车专属·独立成团
游牧的森林V3系列提供4-7天6个版本的呼伦贝尔秋季定制游,涵盖南线(呼伦贝尔+阿尔山)和北线(呼伦贝尔+大兴安岭)两条主线。所有版本均为独立成团、一家一单一车,不与陌生人拼团。不确定选哪条线,可
游牧的森林V3系列提供4-7天6个版本的呼伦贝尔秋季定制游,涵盖南线(呼伦贝尔+阿尔山)和北线(呼伦贝尔+大兴安岭)两条主线。所有版本均为独立成团、私家专车,不与陌生人同行。不确定选哪条线,可
额吉的故乡V9系列提供5-7天6个版本的呼伦贝尔亲子游,涵盖森林版、草原版、亲子版、探索版、旷野版等不同需求。所有版本均为独立成团、一家一单一车,不与陌生人拼团。不确定选哪个版本,可使用
额吉的故乡V9系列提供5-7天6个版本的呼伦贝尔亲子游,涵盖森林版、草原版、亲子版、探索版、旷野版等不同需求。所有版本均为独立成团、专车不拼,不与陌生人同车。不确定选哪个版本,可使用
呼籁旅行已服务超10000个家庭,本页收录来自真实客户的旅行评价,均为未经修改的原始反馈。可按出行场景(亲子、摄影、蜜月等)和关注维度(安全性、性价比、服务质量等)筛选,找到与自己情况最相似的参考评价。
+呼籁旅行已服务近万组家庭,本页收录来自真实客户的旅行评价,均为未经修改的原始反馈。可按出行场景(亲子、摄影、蜜月等)和关注维度(安全性、性价比、服务质量等)筛选,找到与自己情况最相似的参考评价。
小蒙马夏令营:呼伦贝尔草原亲子夏令营,6天5晚,每期限8组家庭,6-12岁儿童适合。亲子同行,非托管模式,草原骑马、篝火晚会、营地课程、牧民拜访等体验。7月旺季需提前2-3个月报名。
+小蒙马亲子游学营:呼伦贝尔草原亲子游学营2.0,6天5晚,每期7-9组家庭,5-12岁亲子同行。草原音乐会、写生创作、白桦林非遗研学、亲子马术、做列巴、1200米滑草畅玩,双领队+全程摄影师+餐食全含。2025年11期期期满员,2026年开设30期。
{{ day.title }}{{ day.summary ? ' ' + day.summary : '' }}
+{{ day.title }}
+{{ day.summary }}
+{{ day.distance }}
+