From 35958290188ccbcea9b30235e09371693b71a73b Mon Sep 17 00:00:00 2001
From: Staaaaaaaaar <2300012435@stu.pku.edu.cn>
Date: Wed, 5 Aug 2026 13:37:51 +0800
Subject: [PATCH 1/6] content: update site content and improve messaging across
pages
- Revised the footer slogan to better reflect the mission of sharing Earth and planetary science knowledge.
- Enhanced the about page with clearer messaging on the accessibility of Earth science and the importance of connecting knowledge and experience.
- Updated the homepage hero section to emphasize understanding Earth's evolution and the interconnectedness of its systems.
- Refined quotes and introductory texts for improved clarity and engagement.
---
src/data/site.ts | 2 +-
src/pages/about.astro | 12 ++++++------
src/pages/index.astro | 6 +++---
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/data/site.ts b/src/data/site.ts
index 0142eff..a142c3f 100644
--- a/src/data/site.ts
+++ b/src/data/site.ts
@@ -45,7 +45,7 @@ export const featuredCarouselConfig = {
} as const;
export const footerConfig = {
- slogan: '从岩石、时间与人的故事里,重新认识这颗行星。',
+ slogan: '共享地球与行星科学知识,连接学习、研究与探索。',
rights: '© 2026 GeoGenesis. All rights reserved.',
socialLinks: [
{ label: 'GitHub', icon: '/icons/social/github.svg', href: 'https://github.com/geogenesis-org' },
diff --git a/src/pages/about.astro b/src/pages/about.astro
index 717af95..93460a6 100644
--- a/src/pages/about.astro
+++ b/src/pages/about.astro
@@ -10,15 +10,15 @@ import { sitePath } from '../utils/paths';
title="关于我们"
description="了解 GeoGenesis 的使命、原则和内容共建方式。"
eyebrow="关于 GeoGenesis"
- heading="科学在被分享时,才真正抵达更多人。"
- intro="我们正在建设一种更开放、更诚实也更有吸引力的地球科学入口:足够清晰,足够严谨,也足够让人记住。"
+ heading="让地球科学走向更多人,让更多人走近地球科学。"
+ intro="我们用清晰、可靠且有吸引力的内容降低入门门槛,同时不省略证据、方法与科学认识中的不确定性。"
marker="ABOUT"
>
我们的使命
- 连接知识的骨架与做科学的真实经验。文档解释地球如何运作,访谈则让人看见:我们如何学会向它提出更好的问题。
+ 我们希望帮助初学者从兴趣走向系统理解:建立相互关联的知识框架,认识观察、实验与建模等研究方法,并从真实的学习与科研经验中看见继续深入的方向。
@@ -36,11 +36,11 @@ import { sitePath } from '../utils/paths';
地球科学 · 知识与故事
- 探索地球,
- 理解我们的行星。
+ 从深时到此刻,
+ 读懂演化中的地球。
一个由学生共同建设的地球科学知识平台。我们连接严谨的学科内容、真实的科研经验,以及持续发生的地球故事。
@@ -108,7 +108,7 @@ const latestNews = (await getCollection('news'))
一颗运动中的行星
-
现在是通往过去的钥匙,也是我们对未来的责任。
+
以现在为线索,追溯地球的过去;以过去为参照,理解未来的变化。
45.4亿年的行星历史
1个相互连接的地球系统
From ec6bc647cd10a3340c3f8b1cbcb746627368c2f9 Mon Sep 17 00:00:00 2001
From: Staaaaaaaaar <2300012435@stu.pku.edu.cn>
Date: Wed, 5 Aug 2026 13:59:51 +0800
Subject: [PATCH 2/6] content: update interview content and remove outdated
entries
- Deleted the interview with Amara Okafor and Lin Yao to streamline content.
- Added new interviews with anonymous geochemist, Dong Lin, Du Jianghui, Huang Dongyang, Li Jiaqi, Li Mingsong, Liu Kouqi, Tang Ming, Wang Chao, Wang Shan, Wu Hui, and Zhang Chuan, focusing on diverse perspectives in Earth science education and research.
- Enhanced the section description for interviews to better reflect the purpose and insights shared by researchers.
---
src/content/interviews/amara-okafor.md | 17 -----------------
src/content/interviews/anonymous.md | 18 ++++++++++++++++++
src/content/interviews/dong-lin.md | 18 ++++++++++++++++++
src/content/interviews/du-jianghui.md | 20 ++++++++++++++++++++
src/content/interviews/huang-dongyang.md | 18 ++++++++++++++++++
src/content/interviews/li-jiaqi.md | 20 ++++++++++++++++++++
src/content/interviews/li-mingsong.md | 18 ++++++++++++++++++
src/content/interviews/lin-yao.md | 17 -----------------
src/content/interviews/liu-kouqi.md | 20 ++++++++++++++++++++
src/content/interviews/tang-ming.md | 20 ++++++++++++++++++++
src/content/interviews/wang-chao.md | 18 ++++++++++++++++++
src/content/interviews/wang-shan.md | 20 ++++++++++++++++++++
src/content/interviews/wu-hui.md | 20 ++++++++++++++++++++
src/content/interviews/zhang-chuan.md | 18 ++++++++++++++++++
src/content/interviews/zhou-wen.md | 17 -----------------
src/data/sections.ts | 6 +++---
16 files changed, 231 insertions(+), 54 deletions(-)
delete mode 100644 src/content/interviews/amara-okafor.md
create mode 100644 src/content/interviews/anonymous.md
create mode 100644 src/content/interviews/dong-lin.md
create mode 100644 src/content/interviews/du-jianghui.md
create mode 100644 src/content/interviews/huang-dongyang.md
create mode 100644 src/content/interviews/li-jiaqi.md
create mode 100644 src/content/interviews/li-mingsong.md
delete mode 100644 src/content/interviews/lin-yao.md
create mode 100644 src/content/interviews/liu-kouqi.md
create mode 100644 src/content/interviews/tang-ming.md
create mode 100644 src/content/interviews/wang-chao.md
create mode 100644 src/content/interviews/wang-shan.md
create mode 100644 src/content/interviews/wu-hui.md
create mode 100644 src/content/interviews/zhang-chuan.md
delete mode 100644 src/content/interviews/zhou-wen.md
diff --git a/src/content/interviews/amara-okafor.md b/src/content/interviews/amara-okafor.md
deleted file mode 100644
index 53e4e3d..0000000
--- a/src/content/interviews/amara-okafor.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: 深海既是档案,也是引擎
-summary: 海洋科学家 Amara Okafor 谈深海观测、沉积记录,以及我们为什么仍然只理解海洋的一小部分。
-guest: Amara Okafor
-role: 海洋科学家
-affiliation: 海洋与地球系统科学系
-publishedAt: 2026-03-26
-readTime: 1 分钟阅读
-quote: 深海一半是档案,一半是引擎,而其中绝大部分仍然未知。
-tone: dark
-featured: false
-order: 3
----
-
-Amara Okafor 将深海描述为地球系统的档案与引擎。沉积物保存大气尘埃、生物活动和环境变化的记录,深层环流、热液活动与海底化学反应又持续参与全球物质和能量交换。两种角色同时存在,使深海成为理解行星变化不可替代的现场。
-
-海上观测的窗口有限,天气、设备与航次安排随时可能改变计划,因此研究者既要准备充分,也要接受海洋自身的节奏。她尤其看重跨尺度思考:从一个水样的同位素组成走向整个洋盆的环流,需要模型、统计,以及对有限证据保持诚实的耐心。
diff --git a/src/content/interviews/anonymous.md b/src/content/interviews/anonymous.md
new file mode 100644
index 0000000..d1f97e9
--- /dev/null
+++ b/src/content/interviews/anonymous.md
@@ -0,0 +1,18 @@
+---
+title: '那一年,TA 拒绝了百万年薪'
+summary: '一位匿名地球化学教师谈离开高薪工作投身科研、实验室轮转,以及如何在不确定性中带着问题学习。'
+affiliation: '地球化学研究所'
+anonymous: true
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '带着问题去学习,才是地学的正确打开方式。'
+tone: mid
+featured: true
+order: 4
+---
+
+24 岁那年,TA 已经在一家知名公司拿到百万年薪——这是许多毕业生向往的终点,却成了 TA 转身离开的起点。“我不甘于过那种枯燥的生活。”回忆这段经历时,TA 显得云淡风轻。放弃高薪投身科研,对 TA 而言并不是一时冲动,而是选择把时间花在自己真正想做的事情上。
+
+带着这份理想主义,TA 对本科生的科研建议也格外强调探索。TA 反对过早进入极度细分的领域,鼓励学生通过实验室轮转建立宏观的解决问题能力。在 TA 看来,本科阶段最漂亮的科研,是“用更简单的模型,做出更优雅的结果”。
+
+对于地球科学的本质,TA 给出的关键词是“不确定性”:“物理和化学往往有确定的逻辑约束,但地学充满了不确定性。学会接受并适应这种不确定性,是新生的第一课。”TA 将复杂的地球化学体系概括为:在电荷守恒等约束下,通过自由能最小化发生元素与同位素的重新分配。面对那些想把数理化全部学通后再研究地学的完美主义者,TA 提醒道:“不用等到把每一门基础学科都学得无懈可击,带着问题去学习,才是地学的正确打开方式。”
diff --git a/src/content/interviews/dong-lin.md b/src/content/interviews/dong-lin.md
new file mode 100644
index 0000000..34adb5b
--- /dev/null
+++ b/src/content/interviews/dong-lin.md
@@ -0,0 +1,18 @@
+---
+title: '人生就是一直在入门的路上'
+summary: '董琳老师谈地学整体认知、过早进入细分方向的风险,以及如何在不确定的评价体系中保持耐心。'
+guest: '董琳老师'
+affiliation: '矿物、岩石、矿床研究所'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '人生一直在入门和做得“更对”的路上。'
+tone: light
+featured: true
+order: 1
+---
+
+对于这位曾在石油公司任职、后来回归高校的老师来说,地学教育中最让她担忧的现象,是学生过早“抢跑”。
+
+“很多人过早地投入某一细分领域的研究,虽然短期能出结果,但后劲不足。”在她看来,学习地学首先需要建立整体认知。她回忆,自己早年并没想过会成为老师,总担心知识储备不足而“误人子弟”;在石油公司参加多次企业培训后,她才逐渐建立起较完整的地学体系。面对信息爆炸时代的焦虑,她安慰学生:“不必焦虑当下做得够不够好、做得对不对。教书这么多年,我感觉人生一直在入门和做得‘更对’的路上。”
+
+对于学生关心的“公平性”问题,她同样表示理解:科研也并非百分之百公平的象牙塔。选课和专业有时看上去“选择大于努力”,但多数路径最终殊途同归,真正决定结果的仍是个人如何行动。她给出的建议积极而务实:“当你进入一个评价体系,先接受它;最后如果你掌握了话语权,再去使它变得更公平。”
diff --git a/src/content/interviews/du-jianghui.md b/src/content/interviews/du-jianghui.md
new file mode 100644
index 0000000..6338cbe
--- /dev/null
+++ b/src/content/interviews/du-jianghui.md
@@ -0,0 +1,20 @@
+---
+title: 'GPA 够用就行,Connection 很重要'
+summary: '杜江辉老师谈主动联系教师、通过课题组低成本试错,以及如何在开放的大学路径中形成自己的判断。'
+guest: '杜江辉老师'
+affiliation: '史前生命与环境研究所'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '高中的路径是一眼看到头的;但在大学,路要自己找。'
+tone: light
+featured: true
+order: 6
+---
+
+杜江辉老师很重视师生之间的交流。他理解学生“因敬畏而犹豫”的心态,但也提醒道:“绝大部分老师都乐意与本科生交流,不要在联络老师这件事上纠结太久。”
+
+相比学生对绩点的执着,他表现得颇为洒脱:“GPA 只要过保研线就行。”在他看来,除了努力做出好成果,Connection(人际连接)和 Social(社交)能力同样重要。“机会要自己争取。”他也描绘了地学本科生多样的出路:有人毕业后从事同声传译,有人进行高温高压实验,也有人转向新能源汽车研发。“高中的路径是一眼看到头的,朝着一个方向努力就行;但在大学,路要自己找。”
+
+对于科研启蒙,他给出了一种低成本试错的策略:尽早接触不同课题组,大一就可以去听组会,“不感兴趣了就离开,不用有心理负担”。本科阶段的方向选择通常不会决定一生,但博士方向需要更加慎重。
+
+他也谈到对地学不确定性的适应:“高中物理有标准答案,但地球科学很多专业课没有定论。你们要习惯通过文献和讨论,对科学问题形成‘相对准确的主观认知’。”
diff --git a/src/content/interviews/huang-dongyang.md b/src/content/interviews/huang-dongyang.md
new file mode 100644
index 0000000..ba2cca1
--- /dev/null
+++ b/src/content/interviews/huang-dongyang.md
@@ -0,0 +1,18 @@
+---
+title: '读书,思考,做一个不那么功利的理想主义者'
+summary: '黄东洋老师谈绩点焦虑、哲学阅读与理想主义,也鼓励学生跨越学科边界,把探索星空的魅力传递给更多人。'
+guest: '黄东洋老师'
+affiliation: '地球化学研究所'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '多看书,少焦虑。探索的过程本身,可能比一个确定的终点更重要。'
+tone: mid
+featured: true
+order: 7
+---
+
+在效率至上的环境里,大学生越来越关注绩点、综测与排名,成功也常被简化为数字层面的胜出。面对这样的趋势,黄东洋老师感叹:“我记得北大学生曾经是很理想主义的。”
+
+他希望学生不要过分关注充满不确定性的未来,而是“多看书,少焦虑”。他也建议理科生读一些哲学:当实验数据不够显著,或身边优秀的同辈带来压力时,哲学可以帮助人建立精神锚点,抵御单一评价体系的冲击。在他看来,这个年纪经历迷茫再正常不过。“远虑是现代社会的特征。我们不妨有底气一些,因为探索的过程本身,可能比一个确定的终点更重要。”
+
+不过,他所强调的理想主义并不意味着躲进象牙塔。随着人类社会的发展,深空探测在国家航天与商业航天等领域都展现出新的机会。他鼓励学生打破学科壁垒,多与不同背景的同学交流,去领略星空的魅力,也把这份魅力传递给更多人。
diff --git a/src/content/interviews/li-jiaqi.md b/src/content/interviews/li-jiaqi.md
new file mode 100644
index 0000000..cb9179f
--- /dev/null
+++ b/src/content/interviews/li-jiaqi.md
@@ -0,0 +1,20 @@
+---
+title: '越是开心,越能长期坚持'
+summary: '李嘉琪老师谈本科科研的节奏、完整研究流程带来的自信,以及从深地、深海到深空的地球科学新图景。'
+guest: '李嘉琪老师'
+affiliation: '地球物理研究所'
+publishedAt: 2026-08-05
+readTime: '4 分钟阅读'
+quote: '科研是一场长跑,越是开心,越能长期坚持。'
+tone: light
+featured: true
+order: 12
+---
+
+在李嘉琪老师眼中,大学里的科研不是一场充满条条框框的考核,而是一次遍布未知的探索。许多新生一入学就背上“必须早进组”的包袱,但他并不赞成盲目地扎进某个项目。他鼓励学生在大一、大二打好数理基础,将科研视作课业之外开阔眼界的活动:多听不同课题组的组会,勤思考、多提问。这种看似广泛的接触,正是培养思考和解决问题能力的关键。
+
+对于在探索中找到真正热爱方向的学生,他鼓励他们在高年级时放手一搏,尝试发表自己的文章。这不只是为了履历,也是为了尽早体验完整的科研流程,并从中建立自信;研究成果还可能帮助本科生获得更多基金支持。但这一切的前提,是在科研道路上走得开心:“科研是一场长跑,越是开心,越能长期坚持。”
+
+这种积极、开放的心态,也体现在他对行业前景的描绘中。他眼中的地球科学,是在传统地质基础上将“深地、深海、深空”紧密结合的庞大体系。比较行星学、天体生物学等新兴领域,正在等待新一代探索者。学习地球科学,可以参与生态遥感中的碳排放监测、智慧城市建设,也可以离开地表,尝试给火星“做 CT”、去小行星上采矿。
+
+在他看来,地球科学正在填补现代科学体系中尚未被充分连接的部分。它提供给学生的,是一个宽广而可以自由探索的空间。
diff --git a/src/content/interviews/li-mingsong.md b/src/content/interviews/li-mingsong.md
new file mode 100644
index 0000000..3cb9aaa
--- /dev/null
+++ b/src/content/interviews/li-mingsong.md
@@ -0,0 +1,18 @@
+---
+title: '建立一份大学通关的“成功学”模板'
+summary: '李明松老师回顾从地质学调剂生到研究者的经历,谈野外实习、经验阅读与实验室轮转如何帮助学生找到方向。'
+guest: '李明松老师'
+affiliation: '史前生命与环境研究所'
+publishedAt: 2026-08-05
+readTime: '2 分钟阅读'
+quote: '在做中学,通过动手操作去试错,才能逐渐发现自己真正擅长和喜欢的方向。'
+tone: mid
+featured: true
+order: 2
+---
+
+李明松老师被录取到地质学专业时,地质学并非他的第一志愿。在吉林大学学习基础课程的几年里,他一度觉得内容枯燥;直到走出教室,那些看似呆板的知识突然在野外实习中融会贯通,他才真正发现地学的魅力。这段“先苦后甜”的经历,也塑造了他对大学规划的理解。
+
+他建议学生阅读《金榜题名之后》《批判性思维十讲》等讨论学习与成长的书。在他看来,总结前人的经验并不是急功近利,而是避免盲目努力的必要方式。“为自己建立一个大学入门的‘成功学’模板。”他打趣道。
+
+在具体的科研实践上,他反对纸上谈兵,认为本科生可以通过实验室轮转进行低成本探索:“在做中学,通过动手操作去试错,你才能逐渐发现自己真正擅长和喜欢的方向。”
diff --git a/src/content/interviews/lin-yao.md b/src/content/interviews/lin-yao.md
deleted file mode 100644
index be40655..0000000
--- a/src/content/interviews/lin-yao.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: 倾听山脉缓慢移动
-summary: 构造地质学者林遥谈野外工作、不确定性,以及如何把看似静止的风景理解为运动中的瞬间。
-guest: 林遥 博士
-role: 构造地质学者
-affiliation: 地球与行星科学系
-publishedAt: 2026-06-18
-readTime: 1 分钟阅读
-quote: 山脉不是一个物体,而是一个恰好被我们看见的过程。
-tone: light
-featured: true
-order: 1
----
-
-林遥把山脉理解为一段仍在发生的过程,而不是静止的地貌。褶皱、断层、河流转向与岩层倾角,都是漫长运动在当下留下的瞬间。野外工作的重要之处,不只是辨认结构,更是准确描述证据,并允许真实的岩石修正既有模型。
-
-她认为,不确定性并不意味着缺少知识,而是诚实标记推断的边界。理解构造运动也不应止于解释自然过程,还要看到灾害暴露、基础设施与社区韧性之间的关系。对刚进入地学的学生而言,保持问题意识、尽早走进野外,比急于得到一个确定答案更重要。
diff --git a/src/content/interviews/liu-kouqi.md b/src/content/interviews/liu-kouqi.md
new file mode 100644
index 0000000..35d44f2
--- /dev/null
+++ b/src/content/interviews/liu-kouqi.md
@@ -0,0 +1,20 @@
+---
+title: '学会田忌赛马的智慧'
+summary: '刘扣其老师谈如何面对同辈差异、理解地学的苦与乐,并在行走和探索中找到真正适合自己的方向。'
+guest: '刘扣其老师'
+affiliation: '北京大学能源研究院'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '不要拿自己的短处去和别人的长处比,要学会“田忌赛马”的智慧。'
+tone: mid
+featured: true
+order: 10
+---
+
+在长期的招生工作中,刘扣其老师与学生保持着密切交流,也形成了自己对心态调整的理解。在优秀同学云集的环境里,不同地区和教育背景带来的差异,难免让人产生心理落差。对此,他宽慰道,每个人都有自己的长处,在某些方面暂时落后于身边同学十分正常。
+
+“不要拿自己的短处去和别人的长处比,要学会‘田忌赛马’的智慧。”做好自己,与过去的自己比较,只要保持稳定的心态,结果往往不会差。
+
+许多学生在进入大学前对地球科学了解有限,也有人认为地学是一门“很苦”的学科。刘扣其老师认为,地学是苦与乐的结合:苦在野外考察和采样中的风吹日晒,乐在能够走进不同地域,接触多样的自然与人文景观。地学的精髓之一就是“行走”——在路上探索,满足好奇心,感受自然的复杂与奇妙。
+
+他曾遇到一位凭兴趣驱动、走遍全国研究白云岩“刀砍状溶沟”的学生,最终完成了数百页的调研报告。像这样在行走中找到兴趣并潜心探索,是一件幸福的事。但对于始终无法建立兴趣的同学,他也不建议勉强自己,可以及时了解并把握转专业的机会,走向真正适合自己的方向。
diff --git a/src/content/interviews/tang-ming.md b/src/content/interviews/tang-ming.md
new file mode 100644
index 0000000..a305a8d
--- /dev/null
+++ b/src/content/interviews/tang-ming.md
@@ -0,0 +1,20 @@
+---
+title: '不要把鸡蛋放在一个篮子里'
+summary: '唐铭老师从科研风险、课题组轮转与信息过载谈起,建议学生保持主动,也把自己的感受放在决策的重要位置。'
+guest: '唐铭老师'
+affiliation: '地球化学研究所'
+publishedAt: 2026-08-05
+readTime: '4 分钟阅读'
+quote: '科研的不确定性是常态。'
+tone: light
+featured: true
+order: 9
+---
+
+“不要把鸡蛋放在一个篮子里。”唐铭老师借用经济学中的风险意识,为学生解释科研投入与产出的不对称性。他曾在一个基础课题上投入三年却进展受阻,而同期开展的另一项研究,从起步到发表成果只用了五个月。
+
+“科研的不确定性是常态。”研究当然需要专注,但他建议有余力的学生在挑战高风险课题时,可以考虑主、副课题搭配,穿插开展工作:一方面拓展思路,另一方面也降低不确定性带来的风险。
+
+对于科研规划,他分享了一个颇为鲜明的观点:“在一个组里最多待五年。和一个老师待太久,优点吸收完了,剩下的可能是局限,毕竟每个人都有自己的边界。”他把轮转视为本科生最大的特权——这是从学习走向创造的启蒙阶段。如果还不确定自己喜欢的方向,不妨在不同课题组中体验;但过程中一定要保持主动,持续提问、追问,实质性地参与科研活动。
+
+谈及普遍的内卷焦虑,他认为根源之一是信息过载:知道得太多,反而干扰了独立决策。他回忆自己上学时对许多事情都“不知道”,这种钝感反而形成了保护。因此,他建议学生减少社交平台上的信息浏览,关注当下,也不必比较“进组早晚”,把自己的真实感受放在决策的重要位置。
diff --git a/src/content/interviews/wang-chao.md b/src/content/interviews/wang-chao.md
new file mode 100644
index 0000000..09e34e5
--- /dev/null
+++ b/src/content/interviews/wang-chao.md
@@ -0,0 +1,18 @@
+---
+title: '科研是讲好一个自圆其说的故事'
+summary: '王潮老师谈本科阶段的学习优先级、科研所需的热爱,以及地球科学如何在确定性与不确定性之间建立解释。'
+guest: '王潮老师'
+affiliation: '矿物、岩石、矿床研究所'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '我们要做的,就是用逻辑和证据,讲好一个自圆其说的故事。'
+tone: dark
+featured: true
+order: 5
+---
+
+在鼓励本科生尽早进组科研的热潮中,王潮老师给出了更谨慎的建议:“本科期间更重要的事情是维持成绩。只有在保证学有余力的情况下,才建议接触科研。”
+
+他认为科研不仅是一份工作,也是一种生活状态。“不够热爱的话,我不建议你做科研。”科研没有明显的上下班界限,对于缺乏兴趣的人来说,长期维持高强度的思考状态,会带来深深的疲惫感。
+
+对于地质学这门古老的学科,他有自己的理解。面对学生对繁重记忆内容的抱怨,他从学科起源出发解释:“地球科学起源于博物学,分门别类是基础,记忆力是科研做得好的人的共同特质。”他把板块构造视为理解众多地质现象最坚实的理论框架;另一方面,也承认地学仍充满未解之谜:“对于几百万年前发生的事情,其实没有人拥有确切的答案。”两者并不矛盾——正是在确定性与不确定性之间的张力里,地学形成了独特的研究方式。“我们要做的,就是用逻辑和证据,讲好一个自圆其说的故事。”
diff --git a/src/content/interviews/wang-shan.md b/src/content/interviews/wang-shan.md
new file mode 100644
index 0000000..5f883cd
--- /dev/null
+++ b/src/content/interviews/wang-shan.md
@@ -0,0 +1,20 @@
+---
+title: '当科研让你怀疑人生时,人文社科能救你'
+summary: '汪珊老师从人文素养、专业选择与身心健康出发,谈如何在科研压力和单一评价标准之外建立更完整的生活。'
+guest: '汪珊老师'
+affiliation: '空间物理与应用技术研究所'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: '保持对这个学科的热情,比过早进组更重要。'
+tone: dark
+featured: true
+order: 8
+---
+
+不同于人们对理工科教授“沉迷公式”的刻板印象,汪珊老师在访谈中谈论最多的不是磁层或等离子体,而是“人”。
+
+“我最后悔本科没谈恋爱。”她半开玩笑地说。她观察到,当下的大学生很容易陷入自我消耗,因此特别强调人文素养的重要性:“在研究做到怀疑人生的时候,你很需要哲学、社会学的东西来解答困惑。”
+
+对于专业出路,她并不认为学习空间物理就必须终身从事研究:“去大厂实习、去做金融、从事商业航天,都是很好的选择。”但她同时强调基础知识的不可替代性:“学好四大力学,对以后无论做什么都有好处。保持对这个学科的热情,比过早进组更重要。”
+
+比起学术成就,她更关心学生的身心状态。她把焦虑部分归因于评价标准的单一化,鼓励学生多出去看看,在不同环境中开阔视野。“北大的同学只要保持心理健康,未来都不会有问题的。”她最后补充道,“千万不要因为学习和工作把身体熬坏了。”
diff --git a/src/content/interviews/wu-hui.md b/src/content/interviews/wu-hui.md
new file mode 100644
index 0000000..beb5b33
--- /dev/null
+++ b/src/content/interviews/wu-hui.md
@@ -0,0 +1,20 @@
+---
+title: '让一切自然发生'
+summary: '吴辉老师回顾偶然转向岩石力学的经历,谈本科阶段的低成本试错、海外交流,以及地球科学面向现实需求的新方向。'
+guest: '吴辉老师'
+affiliation: '大陆动力学与资源工程研究所'
+publishedAt: 2026-08-05
+readTime: '4 分钟阅读'
+quote: '做好当下感兴趣的事情,未来的一切会逐渐水到渠成。'
+tone: dark
+featured: true
+order: 11
+---
+
+回看自己的经历,吴辉老师发现一路上充满偶然。本科就读工科的他,因为一次赴美深造的机会转向岩石力学,后来又逐渐发展出对这一方向的兴趣,可谓无心插柳。
+
+面对大一新生对未来的迷茫,他没有急于让学生“停止无用的焦虑”,反而肯定道:“能在大一就开始思考未来的出路,说明你的思维很缜密,这本身就是很厉害的表现。”在他看来,除非一开始就拥有极为坚定的志向,否则人的目标总会随着时间不断变化。我们能把握的是当下;做好眼前真正感兴趣的事情,未来的一切会逐渐水到渠成。
+
+他将本科阶段视为低成本试错的黄金时期,建议学生多去不同课题组看看。谈及深造路径,他同样鼓励学生走向更广阔的世界:“去了解不同文化背景下课题组的氛围,去看看领域内优秀的研究者如何工作。”即使学校的综合排名并非顶尖,只要在相关地学领域拥有独特优势,也值得去历练和开阔眼界。
+
+对于学科前景,他指出,地球科学研究的是复杂系统,很难用单一理论或模型解释所有现象;它也不是脱离现实的理论科学。当前至少有两个重要的实践方向:面向能源开发的“工科化”,以及围绕战略资源与深空探索的“行星化”。未来仍有许多机会,值得耐心探索。
diff --git a/src/content/interviews/zhang-chuan.md b/src/content/interviews/zhang-chuan.md
new file mode 100644
index 0000000..4f817d8
--- /dev/null
+++ b/src/content/interviews/zhang-chuan.md
@@ -0,0 +1,18 @@
+---
+title: 'Always look at the big picture'
+summary: '张川老师谈可持续发展、人工智能时代的批判性思维,以及年轻人为什么要主动表达并走向更广阔的世界。'
+guest: '张川老师'
+affiliation: '北京大学能源研究院'
+publishedAt: 2026-08-05
+readTime: '3 分钟阅读'
+quote: 'Always look at the big picture, happy life.'
+tone: dark
+featured: true
+order: 3
+---
+
+相比“敲石头”的传统印象,张川老师所描绘的地球科学更具现代感。他指出,这门学科的边界正从传统的固体地球研究持续拓展到面向人类未来的可持续发展。“看看斯坦福大学新成立的可持续发展学院,”他提醒学生把眼光放长远,“碳中和、气候变化,这些时髦的问题其实都是地学的主场。”
+
+对于本科生中常见的进组焦虑,他不赞成过早把自己限制在某个细分方向。“我观察到一个不太赞同的现象:很多本科生很早就进入特定课题组,花大量时间做窄口径的工作。”在他看来,人工智能让知识获取变得更加容易,真正重要的是批判性思维。他鼓励学生即使只是听一场讲座,也要尝试质疑老师,思考“这个问题是不是还有其他解”。
+
+“Always look at the big picture, happy life.”这是他反复送给学生的一句话。他鼓励年轻人有机会时去海外生活一段时间,接触不同的环境与观点;也提醒习惯沉默的学生,不要默认别人理所当然地知道自己的诉求,尤其是在与导师相处时,更要主动、清楚地表达想法。
diff --git a/src/content/interviews/zhou-wen.md b/src/content/interviews/zhou-wen.md
deleted file mode 100644
index 6caeb1e..0000000
--- a/src/content/interviews/zhou-wen.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: 从另一颗行星回望地球
-summary: 行星地质研究者周雯谈火星遥感、尺度感,以及为什么陌生世界总能改变我们对地球的认识。
-guest: 周雯
-role: 行星地质研究者
-affiliation: 行星科学与遥感研究所
-publishedAt: 2026-05-09
-readTime: 1 分钟阅读
-quote: 来自另一个世界的每一张图像,都在要求我们重新思考自己的世界。
-tone: mid
-featured: true
-order: 2
----
-
-周雯在研究火星时,最常重新思考的其实是地球。火星河谷、三角洲和沉积层所呈现的差异,让地球水循环的特殊性更加清晰。行星对比并不是寻找完全相同的过去,而是借陌生世界理解一个过程发生所需要的条件。
-
-遥感图像同时带来证据与距离感。一幅影像可能覆盖数百公里,也可能只记录数米范围,研究者必须不断校准尺度,并意识到判断如何受到仪器、轨道和光照影响。行星科学也因此天然要求协作:地质、物理、化学、工程与数据科学需要共同建立解释一颗行星的语言。
diff --git a/src/data/sections.ts b/src/data/sections.ts
index a6300e0..4b02e5f 100644
--- a/src/data/sections.ts
+++ b/src/data/sections.ts
@@ -30,10 +30,10 @@ export const collectionSections: Record
},
interviews: {
title: '访谈',
- description: '记录观察、研究和讲述地球的人。',
+ description: 'GeoGenesis 地球科学微访谈:研究者的经历、判断与给学习者的建议。',
eyebrow: 'GeoGenesis 访谈',
- heading: '那些正在阅读这颗行星的人。',
- intro: '以简短的人物笔记,记录研究者的观察、关键转折与开放问题,以及他们如何拓展我们对地球的理解。',
+ heading: '听见不同路径,也看见地球科学的更多可能。',
+ intro: '从学科认识、大学学习到科研选择。我们以短篇访谈记录地球科学教师与研究者的经历、判断和建议,为刚起步的学习者提供可以参考的方向。',
marker: 'INTERVIEWS',
indexClass: 'interviews',
carouselLabel: '精选访谈',
From 53876c9eea0c83ade010007802c7a0934a0f7ba4 Mon Sep 17 00:00:00 2001
From: Staaaaaaaaar <2300012435@stu.pku.edu.cn>
Date: Wed, 5 Aug 2026 15:21:53 +0800
Subject: [PATCH 3/6] content: restructure and expand documentation for Earth
and planetary science
- Removed outdated course notes on course organization.
- Introduced new sections on deep space exploration, planetary science, and geoscience foundations, enhancing the breadth of topics covered.
- Updated the FAQ and how-to-use pages for clarity and improved user guidance.
- Enhanced the homepage and document index to better reflect the interconnectedness of Earth and planetary science.
- Improved navigation and readability across various documentation pages, ensuring a more cohesive learning experience.
---
src/content/docs/course-notes/index.md | 25 -----
.../docs/deep-space-exploration/index.md | 34 ++++++
.../mission-challenges.md | 104 ++++++++++++++++++
.../deep-space-exploration/mission-methods.md | 90 +++++++++++++++
.../deep-space-exploration/orbital-basics.md | 83 ++++++++++++++
.../deep-space-exploration/why-and-where.md | 80 ++++++++++++++
.../docs/geoscience-foundations/index.md | 32 ++++++
.../orders-of-magnitude.md | 72 ++++++++++++
.../geoscience-foundations/plate-tectonics.md | 77 +++++++++++++
.../universe-to-earth.md | 59 ++++++++++
.../docs/paleontology/fossils-and-history.md | 79 +++++++++++++
src/content/docs/paleontology/index.md | 41 +++++++
.../paleontology/learning-paleontology.md | 80 ++++++++++++++
.../docs/paleontology/taxonomy-and-naming.md | 88 +++++++++++++++
.../docs/planetary-evolution/formation.md | 39 -------
src/content/docs/planetary-evolution/index.md | 12 --
.../planetary-evolution/surface-and-life.md | 51 ---------
.../classification-and-naming.md | 76 +++++++++++++
.../planetary-science/finding-exoplanets.md | 79 +++++++++++++
.../planetary-science/formation-and-orbits.md | 74 +++++++++++++
src/content/docs/planetary-science/index.md | 36 ++++++
.../docs/planetary-science/planetary-cases.md | 68 ++++++++++++
src/content/docs/welcome/faq.md | 25 ++++-
src/content/docs/welcome/how-to-use.md | 23 ++--
src/content/docs/welcome/index.md | 28 +++--
src/data/sections.ts | 6 +-
src/pages/docs/index.astro | 5 +-
src/pages/index.astro | 2 +-
src/utils/contentListing.ts | 32 +++++-
29 files changed, 1340 insertions(+), 160 deletions(-)
delete mode 100644 src/content/docs/course-notes/index.md
create mode 100644 src/content/docs/deep-space-exploration/index.md
create mode 100644 src/content/docs/deep-space-exploration/mission-challenges.md
create mode 100644 src/content/docs/deep-space-exploration/mission-methods.md
create mode 100644 src/content/docs/deep-space-exploration/orbital-basics.md
create mode 100644 src/content/docs/deep-space-exploration/why-and-where.md
create mode 100644 src/content/docs/geoscience-foundations/index.md
create mode 100644 src/content/docs/geoscience-foundations/orders-of-magnitude.md
create mode 100644 src/content/docs/geoscience-foundations/plate-tectonics.md
create mode 100644 src/content/docs/geoscience-foundations/universe-to-earth.md
create mode 100644 src/content/docs/paleontology/fossils-and-history.md
create mode 100644 src/content/docs/paleontology/index.md
create mode 100644 src/content/docs/paleontology/learning-paleontology.md
create mode 100644 src/content/docs/paleontology/taxonomy-and-naming.md
delete mode 100644 src/content/docs/planetary-evolution/formation.md
delete mode 100644 src/content/docs/planetary-evolution/index.md
delete mode 100644 src/content/docs/planetary-evolution/surface-and-life.md
create mode 100644 src/content/docs/planetary-science/classification-and-naming.md
create mode 100644 src/content/docs/planetary-science/finding-exoplanets.md
create mode 100644 src/content/docs/planetary-science/formation-and-orbits.md
create mode 100644 src/content/docs/planetary-science/index.md
create mode 100644 src/content/docs/planetary-science/planetary-cases.md
diff --git a/src/content/docs/course-notes/index.md b/src/content/docs/course-notes/index.md
deleted file mode 100644
index 6a9a2b5..0000000
--- a/src/content/docs/course-notes/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: 课程笔记整理指南
-summary: 如何将课堂内容与自学笔记整理为可共享的文档,便于后来者快速入门。
-publishedAt: 2026-02-15
-readTime: 6 分钟阅读
-tone: mid
-order: 2
----
-一份好的课程笔记,应当让从未上过这门课的人也能建立基本框架。
-
-## 建议结构
-
-1. **课程概述**:学科背景、先修要求、学习目标
-2. **核心概念**:按章节梳理关键术语与定义
-3. **重点推导**:保留必要的公式推导与图示说明
-4. **延伸阅读**:推荐教材、论文与在线资源
-5. **常见问题**:整理讨论区或答疑中的典型疑问
-
-## 写作原则
-
-- 用自己的语言复述,而非照搬 PPT
-- 标注来源与版本(哪学年、哪位老师)
-- 保持可更新:注明最后修订日期
-
-欢迎贡献你的整理成果,详见社区贡献流程(待补充)。
diff --git a/src/content/docs/deep-space-exploration/index.md b/src/content/docs/deep-space-exploration/index.md
new file mode 100644
index 0000000..04a0599
--- /dev/null
+++ b/src/content/docs/deep-space-exploration/index.md
@@ -0,0 +1,34 @@
+---
+title: 深空探测入门
+summary: 从科学问题、目标天体与任务类型,到轨道、推进、通信和极端环境,理解一项深空任务如何成为可能。
+publishedAt: 2026-08-05
+readTime: 4 分钟阅读
+tone: light
+featured: true
+order: 4
+---
+
+深空探测把地球上的问题带到其他世界:太阳系如何形成?行星为何演化出不同环境?地外是否存在适合生命的条件?小天体撞击会带来怎样的风险?回答这些问题,需要把行星科学与航天工程结合起来。
+
+“深空”没有适用于所有机构和任务的唯一距离边界。在工程实践中,月球及更远目标通常被纳入深空任务;不同定义也可能按照通信距离、地球引力主导范围或任务管理体系划分。相比争论一条固定界线,更重要的是理解距离增加后出现的通信时延、导航误差、能源和自主运行问题。
+
+## 阅读路径
+
+1. [为什么探测深空](./why-and-where/):认识核心科学问题、行星防御与主要目标天体。
+2. [怎样进行深空探测](./mission-methods/):比较飞越、环绕、着陆、巡视、撞击和采样返回任务。
+3. [轨道与火箭基础](./orbital-basics/):从卡门线、开普勒定律、环绕与逃逸速度,到火箭方程和多级火箭。
+4. [深空任务为什么困难](./mission-challenges/):理解通信、能源、推进、环境、自主性和任务成本之间的权衡。
+
+## 科学目标决定任务设计
+
+如果目标是绘制全球地形,环绕器通常比一次飞越更合适;如果要分析岩石矿物,着陆器、巡视器或采样返回任务能提供更直接的证据;如果要调查巨行星磁层,一条经过多个卫星的飞越轨迹可能更有效。
+
+任务不是航天器类型的简单堆叠,而是一条完整证据链:先把科学问题转化为可测量量,再选择仪器、轨道和工作时长,最后评估数据能否在资源和风险约束下传回地球。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《深空探测》
+- 空天社,《小科普专栏》
+- NASA, *Basics of Space Flight*
+- NASA Solar System Exploration
+- 中国国家航天局,探月工程与行星探测工程公开资料
diff --git a/src/content/docs/deep-space-exploration/mission-challenges.md b/src/content/docs/deep-space-exploration/mission-challenges.md
new file mode 100644
index 0000000..0c5d102
--- /dev/null
+++ b/src/content/docs/deep-space-exploration/mission-challenges.md
@@ -0,0 +1,104 @@
+---
+title: 深空任务为什么困难
+summary: 理解距离、通信、能源、推进、极端环境、自主运行与任务成本如何彼此制约,并塑造航天器设计。
+publishedAt: 2026-08-05
+readTime: 9 分钟阅读
+tone: mid
+featured: false
+order: 4
+---
+
+深空任务的困难不是某一个零件不够强,而是多个约束同时存在。更远的目标意味着更长通信时延和更弱信号,也意味着航天器必须运行更久;更长寿命又要求更多能源、更高可靠性和更严格的热控制,而这些都会增加质量与成本。
+
+## 通信:光速也会带来等待
+
+无线电信号以光速传播,仍需要时间跨越行星际距离。地球与火星的位置不断变化,单向光行时大约从 3 分钟到 22 分钟不等。地面发出指令、航天器执行并返回结果,可能要等待近一小时。
+
+距离还会使信号迅速变弱。深空通信依赖大口径地面天线、高灵敏接收机、精确指向、纠错编码和有限带宽分配。航天器不能像地球上的设备一样持续传输全部原始数据,必须压缩、筛选并安排下行顺序。
+
+太阳位于地球与航天器视线附近时,太阳等离子体会干扰通信,任务可能进入合日静默期。行星遮挡和天线姿态也会造成中断。
+
+## 导航与自主运行
+
+地面团队通过测量无线电信号的距离、频移和方向估计航天器轨道,再结合星敏感器、太阳传感器和惯性测量更新姿态。
+
+随着时延增加,航天器必须独立完成更多工作:
+
+- 检测危险并进入安全模式;
+- 在着陆过程中识别地形和避障;
+- 管理能源、温度和数据存储;
+- 发现异常后重启或切换冗余设备;
+- 在短暂飞越中自主指向目标并触发观测。
+
+自主性越高,软件验证越困难。系统既要对未知情况作出反应,又不能因误判放弃关键任务。
+
+## 能源与热控制
+
+太阳辐射强度大致按距离平方反比下降。木星接收的太阳能约为地球轨道的二十七分之一,海王星附近则更弱。大型太阳能电池阵可以支持部分木星任务,但更远目标和长期阴影环境常需要放射性同位素电源。
+
+航天器对外散热最终主要依赖热辐射,内部还可以通过结构传导、热管或流体回路搬运热量。它既可能在阳光下过热,也可能在阴影中低温失效。加热器、隔热层、散热器和姿态共同维持仪器工作区间。
+
+能源方案还必须覆盖峰值需求。通信、雷达、钻取和加热可能不能同时运行,需要按时间表分配功率。
+
+## 推进与轨迹
+
+目标越远不一定意味着只需“带更多燃料”。推进剂质量会反过来增加所需推进剂,火箭方程使这种关系迅速恶化。任务常通过以下方式降低需求:
+
+- 使用引力助推交换轨道能量;
+- 选择较长但更省能量的转移轨道;
+- 用电推进长期积累速度变化;
+- 利用大气制动降低捕获后降轨或圆化所需的推进剂;
+- 把大型任务拆成多个平台或阶段。
+
+每种节省都有代价。引力助推受行星排列限制,低能轨道飞行更久,电推进需要持续能源,大气制动则引入热和密度不确定性。
+
+## 辐射、尘埃与极端环境
+
+高能粒子会使电子器件出现单粒子翻转或永久损伤,也会增加探测器噪声。木星强辐射带尤其严酷,需要屏蔽、抗辐射器件和精心设计的轨道。
+
+不同目标还有不同环境风险:
+
+- 月球尘埃尖锐、带电且容易附着机械与密封结构;
+- 火星尘暴会降低太阳能并改变热环境;
+- 金星表面高温高压,腐蚀性大气使电子设备难以长期工作;
+- 小天体重力极弱、表面可能松散,接触时容易反弹或扬起碎屑;
+- 冰卫星低温且可能承受强辐射。
+
+在发射前,团队会使用热真空、振动、声学、辐射和材料试验模拟环境,但地面测试无法完全复制多年任务中的所有组合条件。
+
+## 可靠性:很难派人去修
+
+深空航天器必须在发射后独立工作多年。关键系统常采用冗余,但冗余也增加质量、功耗和接口复杂度。工程师需要判断哪些故障必须有备份,哪些可以通过软件或改变任务目标绕过。
+
+长期任务还面临元件老化、润滑剂失效、推进剂泄漏和知识传承问题。旅行者等任务跨越数代计算平台,地面团队必须维护旧软件、文档与操作经验。
+
+## 载人任务增加了另一组约束
+
+人员需要空气、水、食物、废物处理、医疗与避难空间。微重力会影响骨骼、肌肉、心血管和感知系统,深空辐射也缺少地球磁场和大气的保护。隔离、时延和狭小环境还会带来心理与协作压力。
+
+闭环生命保障可以回收水和空气,但任何损失都需要补给;设备维护和医疗决策也必须考虑无法及时返回地球的情况。载人任务因此不是无人任务的简单放大。
+
+## 成本、周期与失败风险
+
+一项旗舰任务可能从概念研究到抵达目标历时十几年。科学目标会在技术、预算、发射机会和国际合作中反复权衡。任务拖延不仅增加费用,还可能错过窗口或使部分元件过时。
+
+风险无法被完全消除。合理的任务管理不是承诺“绝不失败”,而是识别最关键失效模式,验证可控制的部分,并明确在资源有限时优先保护哪些科学目标。
+
+## 把约束转化为设计
+
+深空工程的核心问题常以权衡形式出现:
+
+- 传回更多数据,还是降低功耗并延长寿命?
+- 选择安全着陆区,还是接近更有价值但更危险的地形?
+- 使用成熟技术降低风险,还是发展新技术获得关键能力?
+- 一次完成复杂任务,还是分阶段积累证据?
+
+优秀任务不是在每个指标上都达到最大,而是在明确目标下形成可解释、可验证的整体方案。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《深空探测》
+- NASA, *Basics of Space Flight*
+- NASA Deep Space Network
+- European Space Agency, spacecraft operations and space environment resources
+- National Academies, planetary science decadal survey
diff --git a/src/content/docs/deep-space-exploration/mission-methods.md b/src/content/docs/deep-space-exploration/mission-methods.md
new file mode 100644
index 0000000..5faa904
--- /dev/null
+++ b/src/content/docs/deep-space-exploration/mission-methods.md
@@ -0,0 +1,90 @@
+---
+title: 怎样进行深空探测
+summary: 比较飞越、环绕、着陆、巡视、撞击与采样返回任务,理解航天器、载荷和轨道如何共同服务科学目标。
+publishedAt: 2026-08-05
+readTime: 9 分钟阅读
+tone: light
+featured: false
+order: 2
+---
+
+深空任务的核心不是“把什么飞到那里”,而是“怎样获得能够回答问题的数据”。同一目标可以被飞越、长期环绕、着陆或采样;每增加一种能力,通常也会增加质量、能源、导航和故障风险。
+
+## 远程观测与现场测量
+
+探测方式可以先分为两类:
+
+- **遥感**:相机、光谱仪、雷达等不直接接触目标,通过接收电磁波研究形貌、成分、温度和大气;
+- **就位探测**:仪器在目标表面或大气中直接测量,例如显微成像、质谱、钻取、地震和气象观测。
+
+遥感覆盖范围大且可以长期重复,就位测量更接近样品真实环境,但只代表有限地点。两者相互校准,通常比单独使用更有解释力。
+
+## 飞越:用一次相遇换取多个目标
+
+飞越探测器沿既定轨迹高速经过目标,在数小时到数天的关键窗口集中观测。它不需要减速进入目标轨道,因而节省推进剂,也可以借助引力助推访问多个天体。
+
+旅行者 1 号和 2 号通过多次行星飞越研究外太阳系,新视野号则飞掠冥王星及柯伊伯带天体。飞越的局限是观测时间短、可调整空间小,一旦错过就难以重来。
+
+## 环绕:把时间变成数据
+
+环绕器减速并被目标引力捕获,可以在不同时间、光照和经纬度反复观测。它适合全球制图、重力场与磁场测量、大气监测和中继通信。
+
+轨道本身也能提供科学信息:航天器速度的微小变化可以反演天体重力场,雷达可以穿透云层或探测地表以下的浅层结构,不同波段的光谱仪则识别矿物、冰与气体。
+
+进入轨道需要精确制动。捕获容差和所需速度增量取决于目标引力参数、到达时的双曲余速、近拱点高度与计划轨道;小天体因引力弱,导航和稳定环绕往往更加苛刻。部分任务使用大气阻力逐步改变轨道,但这要求目标有足够大气,并能承受热与姿态风险。
+
+## 大气探测器、着陆器与巡视器
+
+### 大气探测器
+
+探测器在下降过程中直接测量温度、压力、风和大气组成。伽利略号大气探测器进入木星,惠更斯号穿过土卫六大气并着陆。它们提供遥感难以获得的垂直剖面,但工作时间通常有限。
+
+### 着陆器
+
+着陆器固定在表面,可以开展地震、热流、气象和化学分析。选择着陆点必须兼顾科学价值与工程安全:过陡坡度、大块岩石、沙尘或通信遮挡都可能使任务失败。
+
+### 巡视器
+
+巡视器可以跨越地形,比较不同岩层和地貌。它需要导航、避障、能源管理和机械系统,也必须在通信延迟下自主执行部分操作。火星车把轨道影像中的区域线索与厘米尺度的岩石观察连接起来。
+
+## 撞击、附着与浮空
+
+- **撞击器**可以暴露地下物质,或测试改变小天体轨道的能力;Deep Impact 和 DART 分别代表科学撞击与行星防御实验。
+- **附着或接触探测**适合引力极弱的小天体,但表面可能松散,传统“着陆”概念并不适用。
+- **浮空器**利用大气飞行,可在金星云层或土卫六等环境覆盖比固定着陆器更大范围。
+- **穿透器**尝试高速进入表层,在不进行完整软着陆的情况下部署仪器,但承受的冲击很大。
+
+## 采样返回:把目标带进地球实验室
+
+采样返回任务把岩石、土壤、尘埃或气体密封后带回地球。实验室可以使用大型、不断更新的仪器,对微量样品进行同位素定年、显微结构和有机分子分析;样品还可以保存数十年,等待未来技术。
+
+典型流程包括采样、封装、从目标起飞或离开、行星际返回、地球再入与回收。每一步都可能影响样品纯度和任务安全。对于可能具有宜居环境的目标,还必须执行严格的行星保护与地球生物安全程序。
+
+嫦娥五号、隼鸟 2 号和 OSIRIS-REx 已分别返回月球或小行星样品。采样返回任务并非只是把样品运回地球;采样位置选择、现场记录和样品封装本身就是科学工作的一部分。
+
+## 中继通信与协同任务
+
+目标背面、峡谷或着陆区可能无法直接看见地球。中继卫星可以在合适轨道转发数据,例如鹊桥号在地月 L2 点附近的晕轨道支持月球背面通信。
+
+复杂任务往往由多个平台协同:环绕器先测绘着陆区并承担中继,着陆器部署巡视器,返回器接收上升器送来的样品。系统越复杂,接口和故障传播越需要提前验证。
+
+## 常见科学载荷
+
+| 载荷 | 主要测量 |
+|---|---|
+| 可见光与多光谱相机 | 地貌、颜色、云和表面变化 |
+| 光谱仪 | 矿物、冰、有机物和大气气体 |
+| 雷达 | 云层下地表、浅层结构、冰层厚度 |
+| 磁强计与粒子仪 | 磁场、太阳风和等离子体环境 |
+| 质谱仪 | 大气、挥发分和同位素组成 |
+| 地震仪 | 内部结构、撞击与构造活动 |
+| 重力科学实验 | 质量分布与内部结构 |
+
+仪器读数不是最终答案。数据必须经过标定、定位、误差评估,并与实验、模型和其他任务结果比较,才能转化为对一个世界的解释。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《深空探测》
+- NASA, *Basics of Space Flight*
+- NASA Planetary Data System
+- 中国国家航天局,探月工程公开资料
diff --git a/src/content/docs/deep-space-exploration/orbital-basics.md b/src/content/docs/deep-space-exploration/orbital-basics.md
new file mode 100644
index 0000000..b773b20
--- /dev/null
+++ b/src/content/docs/deep-space-exploration/orbital-basics.md
@@ -0,0 +1,83 @@
+---
+title: 轨道与火箭基础
+summary: 从太空边界、开普勒定律和环绕与逃逸速度,到火箭方程、多级火箭与引力助推,建立理解任务轨迹的基本框架。
+publishedAt: 2026-08-05
+readTime: 10 分钟阅读
+tone: dark
+featured: false
+order: 3
+---
+
+航天器不是“飞出重力以后”才开始绕行。低轨卫星仍受到接近地表强度的地球引力,只是它拥有足够大的水平速度,在持续下落时不断错过弯曲的地表。轨道本质上是受引力支配的自由落体。
+
+## 太空从哪里开始
+
+大气不会在某个高度突然消失,而是随高度逐渐变稀。国际航空运动联合会常用海拔 100 千米的卡门线作为航空与航天的约定边界;其他机构也可能采用不同标准。
+
+这条线便于记录与管理,却不是物理屏障。低地球轨道上仍有稀薄大气产生阻力,航天器会缓慢降低轨道;更高处的大气、磁层和太阳风则继续影响空间环境。
+
+## 开普勒三定律
+
+在理想二体近似下,两个天体只受彼此引力作用。开普勒定律描述了束缚轨道的核心几何:
+
+1. **椭圆定律**:行星沿椭圆轨道运行,中心天体位于一个焦点;
+2. **面积定律**:行星与中心天体的连线在相等时间扫过相等面积,因此近点速度更快、远点速度更慢;
+3. **周期定律**:对环绕同一中心天体的对象,轨道周期平方与半长轴立方成正比。
+
+牛顿万有引力解释了这些规律,并把它们推广到卫星、双星和航天器。真实任务还要考虑其他天体摄动、非球形重力场、大气阻力、太阳辐射压和相对论修正。
+
+## 环绕速度与逃逸速度
+
+在忽略大气、地球自转和高度差的理想模型中:
+
+- 贴近地表的圆轨道速度约为 `7.9 km/s`,常称第一宇宙速度;
+- 从地表出发、仅靠初始速度无限远离地球且最终速度趋近于零,需要约 `11.2 km/s`,即地球逃逸速度;
+- 从地球出发并进一步摆脱太阳引力,理想最小发射速度常写作约 `16.7 km/s`,即第三宇宙速度。
+
+这些数值是理解能量尺度的参照,不是实际任务必须瞬间达到的固定门槛。运载火箭持续工作,地球自转可以贡献速度,航天器还会先进入停泊轨道,再通过多次变轨获得行星际速度。
+
+逃逸速度取决于中心天体质量和当前位置,到天体中心越远,所需逃逸速度越低。一个航天器即使超过地球逃逸速度,也仍然受到太阳引力,通常会进入日心轨道。
+
+所谓第四、第五及更高“宇宙速度”缺少统一、实用的学术定义,不应与前三个常用工程概念并列为确定标准。
+
+## 火箭为什么能在真空中推进
+
+火箭不需要“推空气”。发动机把推进剂向后高速喷出,火箭因动量守恒获得向前速度。推力取决于单位时间喷出多少质量、喷流速度以及喷口压力条件。
+
+化学火箭在燃烧室产生高温高压气体,再通过先收缩后扩张的拉瓦尔喷管把热能转化为高速定向流动。它能够提供离开地面所需的大推力。
+
+电推进包括电热式、静电式和电磁式。离子与霍尔推进器主要加速带电粒子,电热式则用电能加热推进剂。许多电推进系统的有效喷流速度和比冲高于化学推进,但推力通常很小。它适合在太空中持续数月工作,不适合单独从地面起飞。不同推进方式解决的是不同任务阶段的问题。
+
+## 火箭方程与质量比
+
+齐奥尔科夫斯基火箭方程把理想速度增量写作:
+
+`Δv = vₑ × ln(m₀ / m_f)`
+
+其中 `vₑ` 是有效喷流速度,`m₀` 是点火前总质量,`m_f` 是推进剂消耗后的质量。公式揭示了一个困难:想获得线性增加的速度增量,质量比必须指数增长。
+
+任务规划中的 `Δv` 不是航天器最终速度,而是完成发射、变轨、捕获和着陆等操作所需速度变化的总预算。结构、发动机、隔热和载荷都不是推进剂,却必须一起加速。
+
+## 为什么使用多级火箭
+
+一级发动机和贮箱完成任务后,如果继续携带就会成为无用质量。多级火箭在适当时机抛弃空贮箱和发动机,让后续级只加速剩余结构与载荷,从而改善可实现的质量比。
+
+火箭方程并没有从数学上证明单级入轨绝对不可能;真正限制来自推进剂性能、结构质量、空气阻力、重力损失、发动机工作范围和安全余量。现有大型运载任务因此普遍采用两级或多级结构。
+
+## 发射窗口与引力助推
+
+行星在各自轨道上运动,任务必须选择合适出发时间,使航天器轨迹与目标未来位置相交。这个时间范围就是发射窗口。窗口由轨道几何、飞行时间、运载能力和到达条件共同决定。
+
+航天器经过运动中的行星附近时,可以在行星参考系中改变方向,并在太阳参考系中交换能量,这就是引力助推。它不凭空创造能量,而是从行星轨道运动中取得或交还极小部分。旅行者任务借助外行星排列完成多目标飞越,部分水星任务则通过多次助推逐步降低相对太阳的轨道能量。
+
+## 模型的边界
+
+开普勒定律、宇宙速度和理想火箭方程提供第一层理解。真正任务使用高精度数值积分、导航测量、发动机性能数据和不确定性分析。入门公式的价值在于揭示约束,而不是替代工程设计。
+
+## 资料来源与延伸阅读
+
+- 空天社,《小科普专栏》第 2、4、5、6、10 与 11 期
+- NASA Glenn Research Center, *Beginner’s Guide to Rockets*
+- NASA, *Basics of Space Flight*
+- George P. Sutton & Oscar Biblarz, *Rocket Propulsion Elements*
+- Fédération Aéronautique Internationale (FAI), “Statement about the Karman Line”
diff --git a/src/content/docs/deep-space-exploration/why-and-where.md b/src/content/docs/deep-space-exploration/why-and-where.md
new file mode 100644
index 0000000..5bb3d0e
--- /dev/null
+++ b/src/content/docs/deep-space-exploration/why-and-where.md
@@ -0,0 +1,80 @@
+---
+title: 为什么探测深空
+summary: 从太阳系起源、行星宜居性与行星防御出发,认识月球、火星、冰卫星和小天体为何成为重点目标。
+publishedAt: 2026-08-05
+readTime: 7 分钟阅读
+tone: mid
+featured: false
+order: 1
+---
+
+深空探测成本高、周期长、失败风险大。选择一项任务之前,研究者必须把“去看看”转化为足够明确的问题:目标天体保存了什么独特记录?哪些观测只能在现场完成?数据将如何区分不同解释?
+
+## 太阳系如何形成和演化
+
+行星、小行星和彗星都来自约 45.7 亿年前的原行星盘,却经历了不同程度的加热、分异、撞击和地质改造。
+
+- 月球和部分小天体保存了地球上已被板块活动抹去的早期撞击记录;
+- 碳质小行星含有水合矿物和有机物,可约束挥发分如何进入内太阳系;
+- 彗星来自寒冷外太阳系,保存较原始的冰与尘埃;
+- 巨行星的大气和内部结构记录了太阳星云中的气体与重元素分布。
+
+把不同天体的年龄、成分和轨道放在一起,才能检验行星形成与迁移模型。
+
+## 行星为什么走向不同命运
+
+金星、地球和火星形成于相近区域,却拥有完全不同的表面环境。比较它们的大气、火山活动、水历史、内部热量和磁场,可以研究岩质行星如何获得或失去宜居条件。
+
+巨行星的冰卫星提供另一类自然实验。木卫二、木卫三和土卫二可能在冰壳下拥有液态水层,维持液态层的热源因天体而异:木卫二和土卫二的潮汐加热尤其重要,木卫三则更多依赖岩石内部的放射性热。它们不处于太阳传统宜居带,却可能具备研究生命所需条件的环境。
+
+探测“宜居性”与探测“生命”不是一回事。前者判断液态溶剂、能量和化学原料等条件,后者需要更严格地排除非生物过程和地球污染。
+
+## 保护地球
+
+近地小行星和彗星的轨道监测属于行星防御的重要部分。研究者需要发现目标、改进轨道、估计尺寸与结构,再评估撞击概率和后果。
+
+DART 任务通过撞击小行星伴星 Dimorphos,首次在真实天体上验证了动能撞击改变轨道周期的效果。观测确认撞击抛射物显著增强了动量传递;目标内部结构也会影响效率,但其定量作用仍需要 Hera 等近距离观测进一步约束。
+
+太阳活动也会影响卫星、通信、电网和宇航员安全。研究太阳风、日冕物质抛射与行星磁层,有助于改进空间天气预报。
+
+## 主要目标
+
+### 月球
+
+月球距离较近,既是研究早期太阳系、地月系统和无大气天体地质过程的对象,也是测试着陆、巡视、采样返回与长期表面工作的场所。嫦娥五号和嫦娥六号返回的月球样品,为月球火山活动与月球背面物质组成提供了直接证据。
+
+### 火星与金星
+
+火星保留河谷、湖泊沉积和含水矿物,适合研究早期气候与潜在宜居环境。金星表面极热、压力极高,浓厚大气和云层使长期着陆困难,却是理解失控温室、大气演化和岩质行星构造的重要对照。
+
+### 巨行星与冰卫星
+
+木星和土星影响整个太阳系的小天体与卫星系统。木卫二、土卫二和土卫六等天体具有地下海洋、有机化学或浓厚大气,是研究行星环境多样性的重点。
+
+### 小行星与彗星
+
+小天体既保存早期物质,也涉及撞击风险和潜在资源。隼鸟 2 号和 OSIRIS-REx 等小天体采样返回任务显示,把少量材料带回地球可以使用远超航天器载荷能力的实验室仪器长期研究。
+
+### 太阳与日球层
+
+帕克太阳探测器、太阳轨道器和旅行者任务研究从日冕到日球层边界的空间环境。它们通常归入太阳物理或日球物理任务,也与广义的深空探测共享导航、通信和长期运行技术。
+
+## 如何选择下一个目标
+
+任务优先级通常综合考虑:
+
+1. 问题是否重要且能够被观测回答;
+2. 目标是否存在不可替代的记录;
+3. 技术成熟度与可接受风险;
+4. 发射窗口、飞行时间和通信条件;
+5. 经费、国际合作与数据开放;
+6. 行星保护和样品安全要求。
+
+深空探测既受好奇心驱动,也受现实资源约束。清晰的科学目标,是判断一项任务是否值得出发的第一道标准。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《深空探测》
+- NASA Solar System Exploration
+- National Academies, *Origins, Worlds, and Life: A Decadal Strategy for Planetary Science and Astrobiology*
+- 中国国家航天局,月球与行星探测公开资料
diff --git a/src/content/docs/geoscience-foundations/index.md b/src/content/docs/geoscience-foundations/index.md
new file mode 100644
index 0000000..dc41e22
--- /dev/null
+++ b/src/content/docs/geoscience-foundations/index.md
@@ -0,0 +1,32 @@
+---
+title: 地球科学的尺度与起点
+summary: 从原子到行星、从瞬时过程到深时,建立进入地球与行星科学所需的尺度感、系统观和证据意识。
+publishedAt: 2026-08-05
+readTime: 4 分钟阅读
+tone: light
+featured: true
+order: 1
+---
+
+地球科学研究的不是单一对象,而是一组跨越巨大尺度、彼此作用的系统。矿物晶格中的原子排列影响岩石性质,岩石圈的运动塑造大陆与海洋,大气、海洋和生命又持续交换物质与能量。要理解这些过程,第一步不是记住更多名词,而是知道问题发生在什么尺度、能够留下什么证据。
+
+## 这一系列讨论什么
+
+1. [从数量级开始](./orders-of-magnitude/):用十的幂比较空间与时间尺度,理解研究工具为什么决定观察边界。
+2. [从宇宙到地球](./universe-to-earth/):沿着宇宙、恒星与太阳系的演化,认识构成地球的物质从何而来。
+3. [板块构造如何成为理论](./plate-tectonics/):从大陆轮廓、化石与岩石证据,到海底扩张、古地磁和现代测量。
+
+## 三种基本习惯
+
+- **先问尺度**:对象有多大?过程持续多久?观测分辨率是否足够?
+- **区分观察与解释**:数据是直接测得的,还是依赖模型推断的?
+- **保留不确定性**:证据能够排除哪些解释,又有哪些问题仍然开放?
+
+这三种习惯贯穿地质学、地球物理学、地球化学、古生物学、气候科学与行星科学。它们不会替代具体知识,却能帮助不同学科的知识彼此连接。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《GeoGenesis 入门手册》
+- Marcia Bjornerud,《垂向的时间》
+- USGS, *This Dynamic Earth: The Story of Plate Tectonics*
+- Steven Earle, *Physical Geology*
diff --git a/src/content/docs/geoscience-foundations/orders-of-magnitude.md b/src/content/docs/geoscience-foundations/orders-of-magnitude.md
new file mode 100644
index 0000000..fd76940
--- /dev/null
+++ b/src/content/docs/geoscience-foundations/orders-of-magnitude.md
@@ -0,0 +1,72 @@
+---
+title: 从数量级开始
+summary: 学会用十的幂比较空间与时间尺度,并把观测工具、过程速度和证据分辨率放在同一张地图上。
+publishedAt: 2026-08-05
+readTime: 8 分钟阅读
+tone: light
+featured: false
+order: 1
+---
+
+## 什么是数量级
+
+数量级(order of magnitude)通常用最接近的十的幂表示数值规模。1 米和 3 米属于相近尺度;1 米与 1000 米相差约三个数量级。它不是为了替代精确数值,而是帮助我们先判断:哪些过程可以直接比较,哪些差异大到必须使用不同方法研究。
+
+地球科学尤其依赖这种判断。同一块岩石可以在原子尺度上讨论晶体结构,在毫米尺度上观察矿物颗粒,在千米尺度上进入岩体与构造,在行星尺度上成为地壳的一部分。
+
+## 空间尺度:从原子到行星
+
+| 代表尺度 | 地球科学中的例子 | 常见研究方式 |
+|---|---|---|
+| `10⁻¹⁰ m` | 原子间距、化学键长、晶格常数 | X 射线衍射、光谱学、计算模拟 |
+| `10⁻⁶ m` | 细菌、微体化石、细小矿物包裹体 | 光学与电子显微镜 |
+| `10⁻³ m` | 砂粒、晶体、薄层结构 | 手标本、薄片、粒度分析 |
+| `10⁰ m` | 露头局部、断层擦痕、人的观察尺度 | 野外描述、测量与采样 |
+| `10³ m` | 山体、火山、沉积剖面 | 地形测量、地震成像、遥感 |
+| `10⁶ m` | 大型盆地、造山带、板块边界的一部分 | 卫星观测、区域地球物理 |
+| `10⁷ m` | 地球直径约 `1.27 × 10⁷ m` | 全球地震学、重力场与数值模型 |
+| `10⁸ m` | 地月平均距离约 `3.84 × 10⁸ m` | 测距、轨道动力学 |
+| `10¹¹ m` | 1 天文单位约 `1.50 × 10¹¹ m` | 行星轨道与空间探测 |
+| `10¹⁶ m` | 1 光年约 `9.46 × 10¹⁵ m` | 天文观测 |
+
+表中的边界不是学科边界。显微分析可以解释一次全球事件留下的微小化学异常,卫星观测也需要由地面样品校准。真正重要的是把不同尺度的证据连接起来。
+
+## 时间尺度:从瞬间到深时
+
+地球系统同时包含快过程与慢过程。地震破裂可以在几秒内发生,洋流和气候振荡持续数月到数年,山脉生长、板块重组和生物演化则以百万年计。
+
+| 代表尺度 | 过程示例 | 需要注意的问题 |
+|---|---|---|
+| 毫秒至秒 | 岩石破裂、地震波传播 | 仪器采样频率能否记录瞬态变化 |
+| 小时至天 | 潮汐、天气过程、火山喷发阶段 | 连续观测是否完整 |
+| 年至十年 | 河道变化、冰川消融、地壳形变 | 如何区分趋势与短期波动 |
+| 千年至万年 | 湖泊沉积、冰期变化、人类活动记录 | 年代误差与记录是否连续 |
+| 百万年至千万年 | 物种演化、盆地沉降、造山作用 | 地层缺失和后期改造 |
+| 亿年至十亿年 | 超大陆循环、行星热演化 | 可用证据稀少,模型依赖更强 |
+
+地质学中的“深时”(deep time)不是简单的“很久以前”。它意味着许多微小变化能够长期累积,也意味着绝大部分历史没有被完整保存。地层是一部残缺的档案:沉积、侵蚀、变质和构造运动都会决定哪些页面留下、哪些页面消失。
+
+## 尺度如何改变问题
+
+同一个现象在不同尺度上会得到不同描述。以河流为例:
+
+- 在秒到小时尺度,研究水流速度与颗粒起动;
+- 在季节到十年尺度,研究洪水、河道迁移与人类工程;
+- 在千年到百万年尺度,研究河流下切、沉积盆地与构造抬升。
+
+这些问题不能只靠同一种数据回答。研究设计通常要同时考虑对象尺度、过程尺度和观测尺度;当三者不匹配时,再精确的数字也可能回答了错误的问题。
+
+## 阅读数据时的三个问题
+
+1. 数值的单位和数量级是什么?
+2. 观测的空间分辨率与时间分辨率是多少?
+3. 从观测尺度外推到更大或更长尺度,需要哪些假设?
+
+建立尺度感并不是背诵一张从小到大的表,而是在遇到新问题时,能够迅速判断证据的能力与边界。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《GeoGenesis 入门手册》
+- Marcia Bjornerud,《垂向的时间》
+- Steven Earle, *Physical Geology*, “Geological Time”
+- NASA, “Solar System Exploration”
diff --git a/src/content/docs/geoscience-foundations/plate-tectonics.md b/src/content/docs/geoscience-foundations/plate-tectonics.md
new file mode 100644
index 0000000..a7336ff
--- /dev/null
+++ b/src/content/docs/geoscience-foundations/plate-tectonics.md
@@ -0,0 +1,77 @@
+---
+title: 板块构造如何成为理论
+summary: 追踪大陆漂移从大胆假说走向成熟理论的过程,理解岩石、化石、海底地形、古地磁和现代测量如何共同形成证据链。
+publishedAt: 2026-08-05
+readTime: 9 分钟阅读
+tone: dark
+featured: false
+order: 3
+---
+
+板块构造不是由某一次灵感或某一张地图直接证明的。它经历了数百年的观察、争论和技术进步:早期学者看见大陆轮廓的相似,20 世纪的地质学家比较岩石、化石与古气候,海洋调查发现洋中脊和深海沟,古地磁测量给出海底扩张的时间记录,最后才形成统一的运动框架。
+
+## 从大陆轮廓开始
+
+16 世纪末,地图制作者 Abraham Ortelius 已注意到大西洋两岸轮廓似乎能够拼合。19 世纪,Eduard Suess 根据南半球不同大陆上相似的地层和化石,提出冈瓦纳大陆(Gondwana)这一古大陆概念。
+
+这些观察提示大陆位置可能发生过变化,但轮廓相似本身并不足以证明运动。海岸线会受海平面、沉积与侵蚀影响,真正需要比较的是大陆架边缘,以及分布在海洋两侧、能够彼此对应的地质记录。
+
+## 魏格纳的大陆漂移
+
+1912 年,气象学家 Alfred Wegener 系统提出大陆漂移假说;1915 年,他在《海陆的起源》中进一步整理证据。他认为今天分离的大陆曾组成盘古大陆(Pangaea),后来逐渐裂解并移动到现在的位置。
+
+支持这一想法的证据包括:
+
+- **岩石与山系**:北美阿巴拉契亚山脉、格陵兰、不列颠群岛和斯堪的纳维亚的古老造山带可以跨越大西洋对应;
+- **化石分布**:中龙等难以跨越大洋的生物化石同时出现在今天相隔遥远的大陆;
+- **古气候记录**:南半球多地保存同期冰川沉积,而南极洲又有形成于较温暖环境的煤层;
+- **大陆几何**:按大陆架边缘而非现代海岸线拼合时,吻合程度更高。
+
+问题在于机制。魏格纳曾尝试用地球自转和潮汐力推动大陆,但计算表明这些力远不足以使大陆“犁过”坚硬的海洋地壳。证据能够说明大陆相对位置变过,却还不能回答它们如何运动。
+
+## 从地幔到海底
+
+20 世纪 20 年代末,Arthur Holmes 提出地幔对流可能驱动地壳水平运动。这一想法提供了方向,但当时对地球内部与海底的认识仍然有限。
+
+第二次世界大战前后,回声测深和海洋地球物理调查迅速积累数据。科学家发现:
+
+- 全球海洋中存在相互连接的洋中脊系统;
+- 洋中脊处热流较高,地震与火山活动集中;
+- 深海沟附近分布着向地球内部延伸的地震带;
+- 海洋地壳整体年轻,越靠近洋中脊通常越年轻。
+
+20 世纪 60 年代初,Harry Hess 和 Robert Dietz 等人提出海底扩张:岩浆在洋中脊形成新的海洋地壳,新生洋壳向两侧移动,较老的洋壳最终在俯冲带返回地幔。大陆不再被设想为穿过海底的孤立“浮体”,而是与海洋地壳一起位于运动的岩石圈板块上。
+
+## 地磁条带:可以检验的预测
+
+岩浆在洋中脊处冷却时,含磁性矿物的岩石会记录当时地球磁场的方向。地球磁场在历史中多次倒转,因此不断形成的洋壳应保存交替的正常极性和反向极性条带。
+
+海洋磁测确实发现洋中脊两侧近似镜像对称的磁异常。1963 年,Frederick Vine 与 Drummond Matthews 将这些条带解释为海底扩张与地磁倒转共同作用的结果;Lawrence Morley 也独立提出了相同思想。
+
+这一解释的重要之处在于它不只说明已有现象,还给出了可检验的预测:条带应在脊轴两侧对应,海底年龄应随离开脊轴而增加,条带宽度还应记录扩张速率和地磁极性持续时间。钻探、测年与后续磁测支持了这些预测。
+
+## 从多个假说到统一框架
+
+20 世纪 60 年代后期,转换断层、板块边界和刚性板块运动的几何理论逐渐建立。J. Tuzo Wilson、Dan McKenzie、Robert Parker、Jason Morgan 等人的工作,把大陆漂移、海底扩张、地震带、火山带与造山作用放进同一个全球框架。
+
+现代板块构造理论认为,地球外部较坚硬的岩石圈被分成若干板块,它们在较弱的软流圈之上运动。板块边界主要分为:
+
+1. **离散边界**:板块分离,常形成洋中脊或大陆裂谷;
+2. **汇聚边界**:板块相向运动,发生俯冲或大陆碰撞;
+3. **转换边界**:板块沿边界水平错动。
+
+板块运动的动力并不只是一个简单的“地幔传送带”。板片下沉产生的拉力、洋脊附近的重力势能差、地幔流动以及板块边界阻力都会参与,不同板块的主导因素可能不同。
+
+## 今天如何直接测量
+
+全球导航卫星系统可以测得地表测站每年毫米到厘米量级的相对运动。海底测地、地震层析成像、重力场和热流数据则继续补充海洋板块与地球内部的信息。现代观测不仅确认板块正在移动,也能够检验其速度、方向与形变是否符合模型。
+
+板块构造是一套成熟理论,但并不意味着所有问题已经解决。板块何时在早期地球启动、地幔与板块如何耦合、为什么地球与其他岩质行星走向不同的构造状态,仍然是活跃研究方向。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《GeoGenesis 入门手册》
+- USGS, *This Dynamic Earth: The Story of Plate Tectonics*
+- Naomi Oreskes, *Plate Tectonics: An Insider’s History of the Modern Theory of the Earth*
+- Arthur Holmes, *Principles of Physical Geology*
+- Marcia Bjornerud,《垂向的时间》
diff --git a/src/content/docs/geoscience-foundations/universe-to-earth.md b/src/content/docs/geoscience-foundations/universe-to-earth.md
new file mode 100644
index 0000000..02f2b1e
--- /dev/null
+++ b/src/content/docs/geoscience-foundations/universe-to-earth.md
@@ -0,0 +1,59 @@
+---
+title: 从宇宙到地球
+summary: 从早期宇宙、恒星核合成与太阳星云出发,理解地球的物质来源,以及行星形成中仍然开放的问题。
+publishedAt: 2026-08-05
+readTime: 7 分钟阅读
+tone: mid
+featured: false
+order: 2
+---
+
+地球的历史约有 45.4 亿年,但组成地球的物质更古老。氢主要来自早期宇宙,碳、氧、硅和铁等元素则在恒星内部或恒星演化末期形成。理解地球从哪里来,需要把地质记录接入更长的宇宙演化链条。
+
+## 一个膨胀并冷却的宇宙
+
+现代宇宙学认为,约 138 亿年前的宇宙处于极热、极密的状态,此后空间持续膨胀、物质逐渐冷却。“大爆炸”并不是物质从某个中心炸向空旷空间,而是可观测宇宙整体尺度的演化。
+
+最初几分钟内发生的原初核合成,形成了以氢、氦为主的轻元素。约 38 万年后,电子与原子核结合成中性原子,光子得以长距离传播。今天观测到的宇宙微波背景,就是这段早期历史留下并被宇宙膨胀拉长波长的辐射。
+
+我们无法直接观看更早阶段的全部过程。暴胀、暗物质和暗能量等概念能够解释多类观测,但其物理本质仍是开放研究问题。科学叙述需要区分“观测支持的框架”与“尚待检验的具体机制”。
+
+## 恒星制造了更重的元素
+
+早期宇宙几乎没有碳、氧、硅和铁。碳和氧主要由恒星内部的核反应合成,硅和铁族元素还大量形成于大质量恒星演化晚期及超新星爆发;中子星并合则是许多比铁更重的快中子俘获过程元素的重要来源。恒星演化与爆发事件释放的物质进入星际介质,参与下一代恒星与行星系统的形成。
+
+因此,“我们由星尘组成”并不只是一句比喻。岩石中的硅和氧、地核中的铁、生命体中的碳,都连接着太阳诞生之前的恒星演化史。不过,不同元素的主要来源并不相同,精确比例仍依赖核天体物理观测与模型。
+
+## 太阳系从一张盘开始
+
+约 45.7 亿年前,一团分子云的一部分在引力作用下坍缩。角动量守恒使物质逐渐形成扁平的原行星盘,中央区域成长为太阳,盘中的尘埃则经历碰撞、黏结和吸积,形成星子、行星胚胎,最终组成行星及其他小天体。
+
+温度梯度影响了盘中物质能够凝结的种类:
+
+- 靠近太阳的高温区域以金属和硅酸盐为主,形成了水星、金星、地球和火星等岩质行星;
+- 更远处的低温区域允许水、氨和甲烷等挥发性物质凝结,为巨行星核心与冰质小天体提供原料;
+- 行星之间的引力相互作用会改变彼此的轨道并散射小天体,因此今天的排列并不是一张未经改变的“初始照片”。
+
+陨石的放射性定年、年轻恒星周围的盘观测和数值模拟,共同约束着这一过程。行星形成没有单一的现场录像,而是由多种不完整证据拼接出的历史。
+
+## 地球、月球与水
+
+年轻地球经历了吸积、熔融与内部化学分异,较重的铁镍向中心集中,硅酸盐物质组成地幔和早期地壳。关于月球形成,目前最有力的框架是一次大型碰撞:一颗原行星与早期地球相撞,喷出的物质在地球轨道附近聚集成月球。碰撞的具体几何、物质混合程度和后续演化仍在持续研究。
+
+地球上的水也不应被归因于单一事件。水可能来自地球吸积时已经含水的物质、后续富含挥发分的小天体输入,以及内部脱气。氢同位素等证据可以排除部分来源,却尚不能给出一个适用于全部水库的简单比例。
+
+现有较可靠的生命记录至少可追溯到约 35 亿年前,更早的化学或形态证据仍有争议。从有机分子到能够遗传和演化的生命系统,中间发生了哪些关键步骤,依然是地球科学、化学与生命科学共同面对的问题。
+
+## 为什么还要比较其他行星
+
+地球科学研究岩石、海洋、大气、冰冻圈、生物圈与内部结构;行星科学则把同样的问题放到其他天体上。火星失去大部分表面液态水的过程、金星的极端温室环境、冰卫星的地下海洋,都为理解行星为何走向不同命运提供了对照。
+
+地球不是宇宙演化的终点,而是目前唯一能够被我们深入采样、长期观测,并确认存在生命的行星。认识其他世界,最终也会改变我们提出地球问题的方式。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《GeoGenesis 入门手册》
+- NASA, *Universe Overview* 与 *Solar System Exploration*
+- ESA/Planck, *The Cosmic Microwave Background*
+- John Chambers & Jacqueline Mitton, *From Dust to Life*
+- Philip J. Armitage, *Astrophysics of Planet Formation*
diff --git a/src/content/docs/paleontology/fossils-and-history.md b/src/content/docs/paleontology/fossils-and-history.md
new file mode 100644
index 0000000..df073e1
--- /dev/null
+++ b/src/content/docs/paleontology/fossils-and-history.md
@@ -0,0 +1,79 @@
+---
+title: 化石如何成为证据
+summary: 认识实体化石、印痕与遗迹化石,理解保存偏差,并回顾人类如何从神奇石头走向对生命历史的科学解释。
+publishedAt: 2026-08-05
+readTime: 9 分钟阅读
+tone: dark
+featured: false
+order: 2
+---
+
+## 什么是化石
+
+化石是过去生命的遗体、遗迹或活动记录,经自然过程保存在地质材料中。古生物学并没有一个适用于所有情形的“超过多少年才算化石”的严格年龄门槛;关键在于它是否是经自然过程保存的过去生命证据。
+
+常见类型包括:
+
+- **实体化石**:骨骼、牙齿、贝壳、木材等生物体部分;
+- **印模与铸型**:生物硬体可在围岩中留下内模或外模;硬体溶解后的空腔若再次充填,可形成铸型;
+- **压型与碳膜**:植物、羽毛或软体生物受压后留下轮廓或富碳薄膜;
+- **特殊保存**:琥珀、冻土、焦油坑、磷酸盐化或硅化等条件下保存的细节;
+- **遗迹化石**:足迹、潜穴、钻孔、取食痕迹和爬行迹等行为记录;
+- **粪化石与蛋化石**:能够提供食性、繁殖和行为信息;
+- **化学化石**:可能与生物活动相关的分子、同位素或元素模式。
+
+化石不一定是“变成石头的骨头”,也不一定保留原始物质。判断保存方式是解释化石之前的第一步。
+
+## 成为化石需要经过哪些筛选
+
+一个生物死亡后,遗体可能被食腐、分解、搬运和破碎。只有在适当条件下快速埋藏,才更可能进入沉积记录。之后,压实、胶结、矿物置换、溶解、变质、构造变形和侵蚀还会继续改变它。
+
+因此,化石记录存在系统偏差:
+
+- 有硬壳或骨骼的生物通常比软体生物容易保存;
+- 水域沉积环境往往比山地或森林地表保存更连续;
+- 数量多、分布广的类群更容易被发现;
+- 年代越古老,岩石被改造或消失的机会越大;
+- 人类的采集地点和研究兴趣也会造成采样偏差。
+
+“没有发现”不等于“当时不存在”。研究一个类群的首次出现、灭绝或多样性变化时,必须评估地层完整性与采样强度。
+
+## 人类并非一开始就认识化石
+
+古代不同文化都注意到岩石中的生物形状,却不一定把它们解释为曾经存活的生命。猛犸象头骨可能启发巨人传说,海百合茎节曾被称为“星石”。中国传统中的“石燕”来自形似展翅燕子的腕足动物化石;药材“龙骨”则可能包括多种古代哺乳动物骨骼化石。
+
+英语 `fossil` 源自拉丁语 `fossilis`,原意接近“从地下挖出的东西”,早期可泛指晶体、结核和真正的生物遗存。要把这些对象转化为生命历史证据,还需要地层学和比较解剖的发展。
+
+## 科学解释如何建立
+
+17 世纪,Nicolas Steno 研究岩层与“舌石”,指出它们其实是鲨鱼牙齿,并提出叠覆律等地层学原则。Robert Hooke 通过显微观察讨论化石与现生生物的相似,也意识到某些化石可能代表已经灭绝的类群。
+
+18 至 19 世纪的关键变化包括:
+
+- Georges Cuvier 用比较解剖证明灭绝真实发生;
+- William Smith 发现特定化石组合可用于对比岩层;
+- 地质时间尺度逐步建立,使生命变化能够按先后顺序排列;
+- Darwin 的演化理论为类群出现、分化和灭绝提供统一的历史框架。
+
+进入 20 世纪后,放射性定年提供更精确的绝对年龄,板块构造解释大陆与海洋位置变化,系统发生方法把形态特征转化为可检验的亲缘假说。今天,CT、同步辐射、同位素、古蛋白质和古 DNA 等方法进一步扩展了可读取的信息。
+
+## 一件化石可以回答什么
+
+单件标本通常不能独立重建一个物种的全部生活。可靠解释会把多类证据组合起来:
+
+| 证据 | 可能回答的问题 | 主要限制 |
+|---|---|---|
+| 形态与磨损 | 分类、个体年龄、运动方式或食性 | 个体差异与保存变形 |
+| 岩层与沉积构造 | 年代顺序、生活或埋藏环境 | 搬运与地层缺失 |
+| 化石组合 | 群落、环境变化、地层对比 | 采样和保存偏差 |
+| 同位素与微量元素 | 温度、食性、迁移、水体性质 | 成岩作用可能改写信号 |
+| 系统发生分析 | 类群亲缘与特征演化 | 特征编码和模型选择 |
+
+古生物学的力量不在于让化石“自己说话”,而在于让不同证据相互约束,并允许新标本推翻旧解释。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《古生物学》
+- Donald R. Prothero, *Bringing Fossils to Life*
+- Michael J. Benton & David A. T. Harper, *Introduction to Paleobiology and the Fossil Record*
+- University of California Museum of Paleontology, “Understanding the Fossil Record”
diff --git a/src/content/docs/paleontology/index.md b/src/content/docs/paleontology/index.md
new file mode 100644
index 0000000..ba95ca3
--- /dev/null
+++ b/src/content/docs/paleontology/index.md
@@ -0,0 +1,41 @@
+---
+title: 古生物学入门
+summary: 把化石放回岩层、环境与演化历史中,认识古生物学如何用残缺证据研究曾经存在的生命。
+publishedAt: 2026-08-05
+readTime: 4 分钟阅读
+tone: dark
+featured: true
+order: 3
+---
+
+古生物学(paleontology)位于地球科学与生命科学的交界。它研究过去的生命,也研究生命与地球环境如何共同变化。化石不是脱离背景的古老物件;它的形态、埋藏方式、所在岩层和化学组成,必须放在同一条证据链中解释。
+
+> The fossil hunter does not kill; he resurrects.
+> 化石猎人并不猎杀;他让逝去的生命复活。
+> ——George Gaylord Simpson, *Attending Marvels*
+
+## 这一系列讨论什么
+
+1. [如何学习古生物学](./learning-paleontology/):从地质、生物、形态、演化和生态等视角建立学习路径。
+2. [化石如何成为证据](./fossils-and-history/):认识不同化石类型、形成偏差,以及人类如何逐渐理解化石。
+3. [分类、命名与演化树](./taxonomy-and-naming/):理解双名法、分类阶元和系统发生之间的关系。
+
+## 从现在推断过去
+
+过去无法重演,但地层、化石和化学信号保存了部分结果。古生物学常使用“将今论古”的方法:用今天能够观察的生物过程、沉积过程和物理规律理解过去,同时警惕过去的环境、类群和过程速率可能与今天不同。
+
+这不是假设“过去与现在完全相同”,而是从可检验的现代过程出发,逐步判断哪些类比成立。例如,现代生物的骨骼与肌肉关系可以帮助重建化石动物姿态,但软组织缺失、演化关系和埋藏变形都会限制结论。
+
+## 一份不完整但可研究的档案
+
+只有极少数生物能够成为化石。是否具有硬体、生活环境是否利于快速埋藏、岩层后来是否被侵蚀或变质,都会改变保存概率。因此化石记录天然偏向某些环境和类群。
+
+不完整不等于无法研究。研究者可以把形态比较、地层关系、年代测定、系统发生、同位素和统计模型结合起来,明确哪些结论证据充分,哪些只是一组可能解释。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《古生物学》
+- Donald R. Prothero, *Bringing Fossils to Life*
+- Michael J. Benton, *Vertebrate Palaeontology*
+- Michael J. Benton & David A. T. Harper, *Introduction to Paleobiology and the Fossil Record*
+- Øyvind Hammer & David A. T. Harper, *Paleontological Data Analysis*
diff --git a/src/content/docs/paleontology/learning-paleontology.md b/src/content/docs/paleontology/learning-paleontology.md
new file mode 100644
index 0000000..979da35
--- /dev/null
+++ b/src/content/docs/paleontology/learning-paleontology.md
@@ -0,0 +1,80 @@
+---
+title: 如何学习古生物学
+summary: 从地层、形态、演化、生态与定量方法出发,为不同背景的学习者建立一条可执行的古生物学路径。
+publishedAt: 2026-08-05
+readTime: 8 分钟阅读
+tone: mid
+featured: false
+order: 1
+---
+
+古生物学没有一张适合所有人的固定课程表。学习路径取决于你想回答的问题:识别常见化石、重建古环境、研究某一类群的演化,或使用化石约束地球历史,需要的知识组合并不相同。
+
+## 先建立地质背景
+
+化石的意义来自它所在的地质背景。入门阶段至少需要理解:
+
+- **地层学**:岩层的上下关系、对比方法与时间含义;
+- **沉积学**:河流、湖泊、三角洲、浅海和深海等环境如何留下沉积记录;
+- **地质年代学**:相对年代与绝对年龄如何建立;
+- **埋藏学**:生物死亡、搬运、埋藏、成岩和发现过程如何改变样本;
+- **古环境指标**:岩性、沉积构造、化石组合和地球化学信号如何共同约束环境。
+
+如果只看化石形态而忽略层位与埋藏背景,就可能把不同时间的样本放在一起,或把运输和破坏造成的差异误认为生物差异。
+
+## 再补足生物学视角
+
+研究古生物的生物学问题,需要把化石与现生生物比较。常用基础包括:
+
+- **比较解剖与形态学**:准确描述结构,识别同源与相似;
+- **演化生物学**:理解遗传、变异、自然选择、漂变与物种形成;
+- **系统发生学**:用共享衍征和模型推断类群关系;
+- **生态学**:研究生物之间以及生物与环境之间的相互作用;
+- **发育生物学**:理解个体生长如何影响最终形态。
+
+分子数据已经深刻改变现生生物系统学,但多数古老化石不保留可用 DNA。古生物研究因此仍高度依赖形态,同时也越来越多地使用成像、地球化学和计算方法。
+
+## 学会描述,再开始解释
+
+高质量描述不是“只做分类”的低层次工作。研究者必须先说明标本保存了什么、缺失什么、哪些结构能够稳定比较,才有资格讨论功能和演化。
+
+观察时可以依次记录:
+
+1. 标本来源、层位和保存状态;
+2. 尺寸、方向与测量基准;
+3. 可识别结构及其变异;
+4. 变形、破损或修复痕迹;
+5. 与近缘或相似类群的共同点和差异。
+
+从形态推断功能时,应提出多个可检验解释。例如,一种牙齿形态可能与食性有关,也可能受个体年龄、磨损或系统关系影响。生物力学模拟和现生类比能够缩小范围,却不会自动给出唯一答案。
+
+## 定量方法正在改变学科
+
+现代古生物学既保留博物学传统,也广泛使用定量工具:
+
+- 几何形态测量比较形状;
+- CT 和同步辐射成像观察内部结构;
+- 系统发生方法评估演化关系;
+- 稳定同位素和微量元素重建食性、温度与迁移;
+- 数据库与统计模型研究多样性、灭绝率和采样偏差;
+- 数值模拟检验运动、流体和结构力学假说。
+
+定量结果仍依赖样本质量、变量定义和模型假设。学习软件之前,先理解数据如何产生,通常比记住命令更重要。
+
+## 一条可执行的入门路线
+
+1. 认识常见化石类群与基本地层单位;
+2. 在博物馆标本、教学图册或野外记录中练习描述;
+3. 选择一个感兴趣的类群,了解它的现生近缘、解剖和演化史;
+4. 阅读一篇描述性论文和一篇问题导向论文,比较证据组织方式;
+5. 再根据问题补充地球化学、成像、统计或建模工具。
+
+野外采集还涉及地点保护、许可、标本归属和信息记录。脱离层位与坐标的化石会损失大量科学价值;重要标本应进入能够长期保存并供研究复核的公共收藏机构。
+
+## 推荐书目
+
+- Donald R. Prothero, *Bringing Fossils to Life*
+- Michael J. Benton, *Vertebrate Palaeontology*
+- Thomas N. Taylor, Edith L. Taylor & Michael Krings, *Paleobotany*
+- Douglas J. Futuyma & Mark Kirkpatrick, *Evolution*
+- Øyvind Hammer & David A. T. Harper, *Paleontological Data Analysis*
diff --git a/src/content/docs/paleontology/taxonomy-and-naming.md b/src/content/docs/paleontology/taxonomy-and-naming.md
new file mode 100644
index 0000000..84f5ac1
--- /dev/null
+++ b/src/content/docs/paleontology/taxonomy-and-naming.md
@@ -0,0 +1,88 @@
+---
+title: 分类、命名与演化树
+summary: 从双名法和模式标本,到分类阶元与系统发生,理解古生物学家如何给对象命名并提出亲缘关系假说。
+publishedAt: 2026-08-05
+readTime: 8 分钟阅读
+tone: light
+featured: false
+order: 3
+---
+
+分类学回答“我们正在比较哪些生物”,命名法规保证不同研究者可以稳定指向同一对象,系统发生学则尝试回答“它们之间具有怎样的演化关系”。三者相互关联,但不是同一件事。
+
+## 双名法
+
+现代物种学名通常采用双名法,由属名与种加词组成:
+
+> *Genus species*
+
+以灰狼为例,学名写作 *Canis lupus*:
+
+- 属名 *Canis* 首字母大写;
+- 种加词 *lupus* 小写;
+- 两部分都使用斜体;手写时可分别加下划线;
+- 首次写出全名后,在不产生歧义时可缩写为 *C. lupus*。
+
+种加词不能脱离属名单独当作物种名使用。学名还常附带命名人和年份,这部分不使用斜体,并能指向最初描述。
+
+Carl Linnaeus 在 18 世纪的植物与动物分类著作中推广并标准化了双名法。今天,不同生物群由不同国际法规管理,例如动物命名遵循《国际动物命名法规》(ICZN),藻类、真菌和植物遵循《国际藻类、真菌和植物命名法规》(ICN)。
+
+## 为什么需要模式标本
+
+一个物种名必须连接到可复核的实物依据。现代新物种描述必须明确命名模式,通常指定一个正模标本(holotype);动物命名法规也允许明确指定一组合模式(syntypes)。模式材料应保存在能够长期维护并供研究复核的科研收藏机构。模式标本不是“最典型的个体”,而是名称的客观承载者。
+
+当后续发现更多材料、认识发生变化时,物种的诊断和归属可以修订,但名称与模式标本的关系使讨论保持连续。若标本缺失、描述不足或多个名称指向同一物种,命名法规提供优先权、新模式指定等处理规则。
+
+古生物尤其依赖完整的标本信息:采集地点、层位、编号、保存机构和合法来源都应能够追踪。只有照片而没有可复核标本,通常不足以支持正式命名。
+
+## 分类阶元
+
+传统分类使用一组嵌套阶元。灰狼可以表示为:
+
+| 阶元 | 灰狼 |
+|---|---|
+| 域 Domain | 真核域 Eukaryota |
+| 界 Kingdom | 动物界 Animalia |
+| 门 Phylum | 脊索动物门 Chordata |
+| 纲 Class | 哺乳纲 Mammalia |
+| 目 Order | 食肉目 Carnivora |
+| 科 Family | 犬科 Canidae |
+| 属 Genus | 犬属 *Canis* |
+| 种 Species | 灰狼 *Canis lupus* |
+
+主要阶元之间还可使用总、亚、下等层级。阶元便于组织信息,但“科”和“目”等等级并不表示所有类群经历了同样长时间或拥有同样程度的差异。
+
+## 从相似性到系统发生
+
+早期分类主要依据整体相似性。演化理论建立后,分类逐渐转向反映共同祖先。支序系统学关注共享衍征:如果一个新特征出现在某个共同祖先,并由其后代继承,它可以帮助识别一个演化支。
+
+现代系统发生分析通常会:
+
+1. 选择研究对象与外群;
+2. 定义并编码可比较特征;
+3. 使用简约法、最大似然或贝叶斯方法寻找较符合数据的树;
+4. 评估不同分支的支持度与不确定性;
+5. 用新标本或新数据重新检验结果。
+
+演化支按定义是单系群,即包含某一共同祖先及其全部后代。传统名称如果对应并系群或多系群,研究者可能重新定义范围,或在交流便利与严格系统关系之间作出明确选择。
+
+## 化石分类为何困难
+
+化石通常只保存生物的一部分,不同个体还可能因年龄、性别、病理或埋藏变形而差异显著。相反,不同物种也可能因趋同演化产生相似结构。
+
+常见困难包括:
+
+- 同一物种的幼体和成体被误分为不同物种;
+- 身体不同部位分别保存并被赋予不同名称;
+- 标本过少,无法判断种内变异;
+- 关键软组织和分子数据缺失;
+- 新化石兼具多个类群特征,使旧诊断失效。
+
+因此,“给化石起名字”不是寻找一个最像的图鉴对象,而是公开一套诊断、比较和可复核材料。分类结论会变化,命名规则的作用正是让这种变化仍然可以被追踪。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《古生物学》
+- International Commission on Zoological Nomenclature, *International Code of Zoological Nomenclature*
+- David A. Baum & Stacey D. Smith, *Tree Thinking*
+- Douglas J. Futuyma & Mark Kirkpatrick, *Evolution*
diff --git a/src/content/docs/planetary-evolution/formation.md b/src/content/docs/planetary-evolution/formation.md
deleted file mode 100644
index 2482235..0000000
--- a/src/content/docs/planetary-evolution/formation.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: 形成与分化
-publishedAt: 2026-02-20
-readTime: 7 分钟阅读
-tone: mid
-order: 1
----
-## 行星形成的基本图景
-
-现代行星形成模型通常从原行星盘内的尘埃颗粒开始:
-
-1. **尘埃聚集**:静电与碰撞导致颗粒粘连
-2. **星子形成**:千米级天体出现
-3. **胚胎生长**:通过吸积与碰撞进一步增大
-4. **轨道演化**:迁移、散射与共振塑造最终构型
-
-### 关键概念
-
-- **原行星盘**:年轻恒星周围的气体与尘埃盘
-- **雪线**:挥发性物质凝结的轨道距离
-- **Nice 模型**:解释外太阳系早期重构的经典框架之一
-
-## 分化与内部结构
-
-行星形成后的加热来源包括:
-
-- 吸积残余 heat
-- 短寿命放射性核素(如 ^26^Al)衰变
-- 潮汐加热(对某些卫星与近距行星尤为重要)
-
-### 分化的结果
-
-大质量岩石行星通常经历:
-
-- **金属核**:铁镍为主
-- **硅酸盐地幔**
-- **地壳**:部分熔融后的轻组分上浮
-
-这些结构决定了磁场、火山活动与长期热演化的可能路径。
diff --git a/src/content/docs/planetary-evolution/index.md b/src/content/docs/planetary-evolution/index.md
deleted file mode 100644
index fc1e64e..0000000
--- a/src/content/docs/planetary-evolution/index.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: 行星演化入门导读
-summary: 从行星形成到早期分化,梳理行星演化研究的核心问题、常用方法与入门阅读路径。
-publishedAt: 2026-02-20
-readTime: 5 分钟阅读
-tone: dark
-featured: true
-order: 1
----
-行星演化研究试图回答:行星如何形成?形成后如何演化?这些过程如何影响表面环境、内部结构,乃至生命起源的条件?
-
-本导读面向刚接触该领域的本科生与研究生,提供概念框架而非完整教材。请从左侧页面列表按顺序阅读,或按需跳转至感兴趣的主题。
diff --git a/src/content/docs/planetary-evolution/surface-and-life.md b/src/content/docs/planetary-evolution/surface-and-life.md
deleted file mode 100644
index 6c90405..0000000
--- a/src/content/docs/planetary-evolution/surface-and-life.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: 表面、生命与阅读建议
-publishedAt: 2026-02-20
-readTime: 6 分钟阅读
-tone: light
-order: 2
----
-## 表面过程与气候
-
-表面是观测最直接的窗口。常见研究主题包括:
-
-- 撞击坑统计与年代学
-- 风化与沉积记录
-- 大气逃逸与挥发分循环
-
-### 观测手段
-
-| 手段 | 优势 | 局限 |
-|------|------|------|
-| 遥感光谱 | 覆盖大范围、非破坏性 | 分辨率与云层干扰 |
-| 原位分析 | 精确成分与上下文 | 成本高、点位有限 |
-| 实验室模拟 | 可控条件、可重复 | 尺度与时间跨度受限 |
-
-## 与生命起源的交叉
-
-行星演化并非孤立学科。以下问题常与生命起源研究交汇:
-
-- 早期大气成分与有机分子供给
-- 海底热液系统与矿物催化
-- 大型撞击事件对 habitability 的影响
-
-GeoGenesis 将在文档库中持续整理相关课程笔记与访谈。
-
-## 入门阅读建议
-
-### 综述与教材
-
-- 查阅行星科学导论类教材的前两章(形成)与内结构章节
-- 关注近五年综述文章中的「开放问题」部分
-
-### 实践建议
-
-1. 先建立时间线:从盘到行星到表面
-2. 再选一条主线深入(如分化或大气演化)
-3. 结合一门定量课程(热传导、流体力学或同位素地球化学)
-
-## 下一步
-
-- 参加「行星演化主题读书讨论会」
-- 在文档库贡献你的课程笔记
-- 在社区频道提出具体研究方向的问题
diff --git a/src/content/docs/planetary-science/classification-and-naming.md b/src/content/docs/planetary-science/classification-and-naming.md
new file mode 100644
index 0000000..52a3aed
--- /dev/null
+++ b/src/content/docs/planetary-science/classification-and-naming.md
@@ -0,0 +1,76 @@
+---
+title: 行星如何命名与分类
+summary: 了解太阳系和系外行星的命名规则,并学习从组成、质量、半径、温度与轨道环境等不同维度比较行星。
+publishedAt: 2026-08-05
+readTime: 7 分钟阅读
+tone: light
+featured: false
+order: 2
+---
+
+命名帮助科研共同体明确“正在讨论哪个对象”,分类则帮助比较“哪些对象可能具有相似过程”。两者都是约定与模型,不能代替对天体本身的观测。
+
+## 太阳系天体如何命名
+
+国际天文学联合会(IAU)负责批准行星、卫星和地表特征的正式名称。历史上可见行星沿用了不同文化中的传统名称。新发现的小行星会先获得临时编号;轨道得到充分确定后,小行星中心(MPC)才分配永久编号,此后发现者可以提交专名。彗星等其他小天体采用不同规则。
+
+行星和卫星表面特征往往按主题命名。例如,不同天体上的撞击坑、山脉或平原可能分别采用科学家、艺术家、神话人物或不同语言中的相关词汇。主题规则让名称保持可管理,也反映人类文化的多样性。
+
+正式名称不等于所有俗称都会被接受。论文和数据库通常同时保留唯一编号、坐标或目录标识,以避免同名和翻译差异造成混淆。
+
+## 系外行星的编号
+
+系外行星通常沿用宿主恒星的目录名,并按发现顺序从 `b` 开始添加小写字母。例如,某恒星的第一颗已知行星通常标为“恒星名 b”,宿主恒星本身则通常保留不带该小写后缀的目录名。
+
+这个字母顺序一般不表示行星离恒星的远近。随着观测更新,一个系统可能后来发现更内侧的行星,却仍保留原来的字母。多星系统、脉冲星行星和直接成像对象还会使用更复杂的命名约定。
+
+IAU 也组织过公共命名活动,为部分恒星与系外行星增加正式专名;科学目录名仍然保留,便于数据库检索和跨语言交流。
+
+## 按组成分类
+
+太阳系提供了最直观的三类参照:
+
+- **岩质行星**:以硅酸盐和金属为主,具有固体表面,如水星、金星、地球和火星;
+- **气态巨行星**:质量以氢、氦包层为主,木星和土星是典型代表;
+- **冰巨行星**:天王星和海王星的氢氦比例较低,内部含有更多由水、氨、甲烷等形成的重元素组分。
+
+“冰”在这里主要是行星形成研究中的组分术语,并不意味着天王星和海王星拥有可供站立的冰冻表面。同样,“气态巨行星”也不意味着其内部从外到内都保持普通气体状态。
+
+熔岩世界、海洋世界、沙漠世界等名称描述的是可能的表面或环境状态,而不是统一的正式分类层级。一颗近恒星岩质行星可能拥有岩浆海,但仍可以同时被称为岩质行星、超短周期行星和高辐照行星。
+
+## 按质量与半径分类
+
+系外行星研究常使用“超级地球”“亚海王星”“热木星”等术语:
+
+- **超级地球**通常表示质量或半径大于地球、但小于海王星的行星,并不保证环境像地球;
+- **亚海王星**通常拥有显著挥发物或气体包层,其半径常介于地球与海王星之间;
+- **热木星**是紧邻恒星运行、温度较高的气态巨行星;
+- **迷你海王星**与亚海王星在不同研究中可能有重叠定义。
+
+这些边界并不完全统一。质量和半径都只是间接线索:相同质量可以对应不同的铁核比例、岩石组成、水含量和大气厚度。只有把质量、半径、恒星年龄、大气光谱和轨道环境结合起来,才能更可靠地推断内部结构。
+
+## 按环境与轨道分类
+
+研究者还会按以下维度比较行星:
+
+- 接收的恒星辐射与平衡温度;
+- 轨道周期、偏心率与自转状态;
+- 是否处于多行星系统或双星系统;
+- 大气是否保留、流失或持续更新;
+- 是否位于传统“宜居带”。
+
+“宜居带”只描述在特定大气假设下,行星表面可能维持液态水的轨道范围。它不是生命存在的保证:行星质量、大气组成、磁场、地质循环和恒星活动都会改变结果;宜居带外的冰卫星也可能凭内部热量维持地下液态水。
+
+## 分类的真正用途
+
+分类最有价值的地方,是提出可以检验的问题。例如:为什么半径约为地球 1.5 到 2 倍的系外行星数量出现明显变化?哪些形成路径产生富含气体的亚海王星?高辐照能否剥离大气,留下裸露岩核?
+
+当新观测不符合旧类别时,科学家应修改分类,而不是强迫自然界服从标签。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《宇宙中的行星》
+- IAU, “Naming Astronomical Objects”
+- IAU Working Group for Planetary System Nomenclature
+- NASA Exoplanet Archive
+- NASA Exoplanet Exploration, “Planet Types”
diff --git a/src/content/docs/planetary-science/finding-exoplanets.md b/src/content/docs/planetary-science/finding-exoplanets.md
new file mode 100644
index 0000000..d498b4c
--- /dev/null
+++ b/src/content/docs/planetary-science/finding-exoplanets.md
@@ -0,0 +1,79 @@
+---
+title: 如何发现系外行星
+summary: 比较凌日、视向速度、直接成像与微引力透镜等方法,理解每种信号能够测量什么,又会漏掉哪些行星。
+publishedAt: 2026-08-05
+readTime: 9 分钟阅读
+tone: dark
+featured: false
+order: 3
+---
+
+恒星比周围行星明亮得多,距离又极其遥远,大多数系外行星无法在普通图像中直接分辨。研究者常常不是“看见一颗行星”,而是测量行星对恒星光线或运动造成的微小影响。
+
+第一批系外行星发现彻底改变了我们对行星系统的想象。此后,不同探测方法共同揭示出热木星、超级地球、亚海王星、紧凑多行星系统和环双星行星等太阳系中没有直接对应的世界。
+
+## 凌日法:恒星短暂变暗
+
+当行星从观测者与恒星之间经过时,会遮挡一小部分星光,使恒星亮度周期性下降。这就是凌日。亮度下降的比例主要与行星和恒星的面积比有关,因此在知道恒星半径后,可以估算行星半径。
+
+连续多次凌日还能给出轨道周期。若观测足够精确,凌日时刻的微小变化可能暴露同一系统中的其他行星;行星经过恒星前方时,不同波长被大气吸收的程度还可用于研究大气成分。
+
+凌日法有明显选择效应:
+
+- 轨道平面必须近乎沿着我们的视线方向,即从地球看接近侧视,轨道倾角接近 90°;
+- 靠近恒星、周期较短且半径较大的行星更容易被发现;
+- 星斑、双星和仪器系统误差都可能模拟或干扰信号;
+- 单次亮度下降通常不足以确认行星,需要重复观测或其他方法验证。
+
+开普勒空间望远镜和 TESS 任务都大量使用凌日法,但它们看到的样本并不是所有行星系统的无偏缩影。
+
+## 视向速度法:恒星也在绕共同质心运动
+
+行星和恒星都绕系统共同质心运动。恒星沿视线方向靠近或远离我们时,光谱线会发生周期性的多普勒位移。精确测量这种位移,就能得到恒星的视向速度变化。
+
+信号的周期对应轨道周期,半振幅与行星质量、恒星质量、轨道周期、偏心率和倾角有关。由于通常不知道轨道倾角,单独使用视向速度法得到的是行星质量下限,常写作“最小质量”。
+
+该方法更容易发现质量较大、靠近恒星的行星。恒星表面活动也会产生类似速度信号,因此需要结合光度、谱线形状和长期重复观测判断。
+
+若一颗行星同时发生凌日,轨道倾角便受到强约束。把凌日半径与视向速度质量结合起来,可以计算平均密度,从而初步区分富铁岩质行星、含挥发物的行星和气态行星。
+
+## 直接成像:把行星光与恒星光分开
+
+现有直接成像主要使用日冕仪和数据处理技术抑制恒星强光,再分辨附近微弱的行星信号。地面大型望远镜还依赖自适应光学实时校正大气扰动;外置遮星板仍处于研发阶段,尚未执行系外行星成像飞行任务。
+
+这种方法最适合:
+
+- 年轻、仍在释放形成热量的巨行星;
+- 与恒星角距离较大的宽轨道行星;
+- 距离太阳系相对较近的恒星系统。
+
+直接成像不仅给出位置,还能获得行星自身的光谱,研究温度、云层和大气分子。不过,从亮度推断质量往往依赖年龄和行星冷却模型。
+
+## 微引力透镜:一次偶然对齐
+
+当前景恒星经过遥远背景恒星视线附近时,前景天体的引力会弯曲并放大背景星光。如果前景恒星带有行星,行星会在平滑的增亮曲线上叠加短暂异常。
+
+微引力透镜能够探测距离较远、质量较低的行星,也可以发现离宿主较远甚至不明显束缚于恒星的对象。它不要求看见宿主恒星本身。
+
+代价是事件依赖偶然的精确对齐,通常不会重复。观测团队必须持续监测大量恒星并迅速跟进异常;事件结束后,进一步研究同一行星往往很困难。
+
+## 其他方法
+
+- **天体测量**:测量恒星在天空平面上的周期性位置摆动,可获得轨道倾角和更接近真实的行星质量;
+- **脉冲星计时**:行星引起脉冲到达时间的规律变化,最早确认的一批系外行星就由此发现;
+- **凌日时序变化**:利用已知行星凌日周期中的偏差推断其他天体;
+- **盘结构与动力学线索**:原行星盘中的空隙、旋臂或气体运动异常可以提示正在形成的行星,但通常需要多类证据。
+
+## 方法决定我们看到的宇宙
+
+每种技术都有自己的“最容易发现区”。如果直接把已发现行星数量当作宇宙真实分布,就会高估短周期大行星,低估长周期小行星。行星人口统计必须建模探测效率:一项巡天对不同半径、质量和周期的行星,各有多大概率发现?
+
+科学结论来自信号,也来自对漏检和误检的理解。一个完整的系外行星档案,通常需要多台仪器、多种方法和多年观测共同建立。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《宇宙中的行星》
+- NASA Exoplanet Exploration, “Ways to Find a Planet”
+- NASA Exoplanet Archive
+- Michael Perryman, *The Exoplanet Handbook*
+- ESA, Gaia mission science
diff --git a/src/content/docs/planetary-science/formation-and-orbits.md b/src/content/docs/planetary-science/formation-and-orbits.md
new file mode 100644
index 0000000..e96aece
--- /dev/null
+++ b/src/content/docs/planetary-science/formation-and-orbits.md
@@ -0,0 +1,74 @@
+---
+title: 行星如何形成与运行
+summary: 从原行星盘中的尘埃吸积,到轨道、自转、季节与潮汐,认识塑造一个行星系统的基本过程。
+publishedAt: 2026-08-05
+readTime: 8 分钟阅读
+tone: mid
+featured: false
+order: 1
+---
+
+## 从分子云到原行星盘
+
+恒星形成于冷而致密的分子云区域。云核坍缩时,微小的初始角动量会因尺度缩小而变得重要,使落向中央原恒星的物质形成旋转的原行星盘。气体占据盘的大部分质量,固体尘埃虽然较少,却是岩质行星与巨行星核心的原料。
+
+年轻恒星周围的盘通常只存在数百万年。行星必须在盘消散前完成关键生长阶段,尤其是需要大量氢氦包层的巨行星。
+
+## 从尘埃到行星
+
+一个常用的形成框架包含以下阶段:
+
+1. **尘埃聚集**:微米级颗粒碰撞并黏结,逐渐形成更大的团块;
+2. **星子形成**:厘米到米级物体如何跨越碰撞破碎和向内漂移的障碍,仍是研究重点;局部尘埃聚集和流体不稳定性可能帮助形成千米级星子;
+3. **行星胚胎生长**:星子通过引力吸积,形成月球到火星质量的胚胎;
+4. **巨撞击阶段**:盘气体消散后,行星胚胎之间继续碰撞与重组,建立岩质行星的最终结构;
+5. **气体吸积**:足够早形成的大质量固体核心可以快速吸积氢和氦,成长为巨行星。
+
+对于部分大质量巨行星,原行星盘局部直接发生引力不稳定也可能是一条形成路径。真实系统未必只遵循一种机制。
+
+## 形成之后仍会迁移
+
+行星不会一直停留在诞生位置。它与盘中气体、其他行星和残余小天体交换角动量,轨道可能向内或向外迁移。太阳系小天体的分布、共振结构和撞击记录,都保留着早期轨道重排的痕迹。
+
+系外行星中的“热木星”尤其说明迁移的重要性:气态巨行星很难在紧邻恒星的高温区域原位形成,却可以在更远处形成后移入短周期轨道。
+
+## 描述轨道的基本参数
+
+在两个天体相互作用且其他扰动可以忽略的近似下,束缚轨道是椭圆,中心天体位于一个焦点。常见参数包括:
+
+- **半长轴**:描述轨道大小,也与公转周期直接相关;
+- **偏心率**:描述轨道偏离圆形的程度,0 表示圆,越接近 1 越狭长;
+- **轨道倾角**:轨道平面相对选定参考平面的夹角;
+- **近日点与远日点**:太阳系天体距离太阳最近和最远的位置;对其他恒星系统通常使用近星点和远星点;
+- **公转周期**:行星完成一次绕转所需的时间。
+
+开普勒第二定律说明,行星与恒星的连线在相等时间扫过相等面积,因此行星接近近星点时运动更快,远离恒星时更慢。第三定律则把周期与半长轴联系起来:对环绕同一恒星的天体,周期的平方与半长轴的立方成正比。
+
+真实系统中还存在行星之间的摄动、轨道共振、潮汐和相对论效应。轨道参数不是永远不变的标签,而是会随时间演化的状态量。
+
+## 自转、倾角与季节
+
+行星还会绕自身轴旋转。常见描述包括自转周期、旋转方向和自转轴倾角。地球的季节主要由约 23.4° 的轴倾角造成,而不是日地距离变化:当北半球倾向太阳时,接收太阳辐射的角度更高、白昼更长,南半球则相反。
+
+不同世界的情况可以非常不同。金星自转缓慢且方向与多数行星相反;天王星的自转轴几乎躺在轨道平面内,形成极端季节;水星的自转与公转处于 3:2 共振。
+
+潮汐会长期交换自转与轨道角动量。月球已经被地球潮汐锁定,因此总以近似同一面朝向地球;许多巨行星卫星也处于类似状态。潮汐还可以加热天体内部,对木卫一火山活动和冰卫星地下海洋具有重要影响。
+
+## 我们如何检验形成模型
+
+行星形成发生在遥远过去,但仍留下多种证据:
+
+- 望远镜直接观测年轻恒星周围的盘、空隙与旋臂结构;
+- 陨石的同位素定年提供太阳系早期事件的时间标尺;
+- 月球和小行星样品保存吸积、熔融与撞击记录;
+- 系外行星的质量、半径、轨道和年龄分布检验模型预测;
+- 数值模拟追踪吸积、迁移与动力学不稳定,但结果依赖初始条件和物理近似。
+
+任何单一系统都可能有多种历史解释。形成理论的任务,是同时解释太阳系细节、年轻盘观测和系外行星总体分布。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《宇宙中的行星》
+- Philip J. Armitage, *Astrophysics of Planet Formation*
+- Sean N. Raymond & Andre Izidoro, reviews on planetary system formation
+- NASA Exoplanet Exploration, “How Do Planets Form?”
diff --git a/src/content/docs/planetary-science/index.md b/src/content/docs/planetary-science/index.md
new file mode 100644
index 0000000..a8575d3
--- /dev/null
+++ b/src/content/docs/planetary-science/index.md
@@ -0,0 +1,36 @@
+---
+title: 行星科学入门
+summary: 从形成、轨道与分类,到系外行星探测和典型案例,学习如何比较不同世界并重新理解地球。
+publishedAt: 2026-08-05
+readTime: 4 分钟阅读
+tone: mid
+featured: true
+order: 2
+---
+
+行星科学研究行星、卫星、矮行星、小天体和行星系统的形成与演化。它连接天文学、地质学、地球物理学、地球化学、大气科学和生命科学,也依赖望远镜、空间探测器、实验室分析与数值模拟。
+
+## “行星”是怎样定义的
+
+国际天文学联合会(IAU)在 2006 年为太阳系天体给出的行星定义包含三个条件:围绕太阳运行;质量足以使自身接近流体静力平衡形状;已在动力学上主导其轨道邻域,IAU 将其表述为“清除轨道邻域”。未满足第三项但满足前两项、且不是卫星的天体可归为矮行星。
+
+这一定义针对太阳系,并不能直接覆盖所有系外行星。系外世界通常根据质量、形成方式和是否环绕恒星或恒星遗迹等工作标准讨论。分类是研究工具,不是自然界预先写好的标签;边界会随新观测和研究目的而调整。
+
+## 阅读路径
+
+1. [形成与轨道](./formation-and-orbits/):原行星盘、吸积、迁移,以及描述轨道和自转的基本参数。
+2. [命名与分类](./classification-and-naming/):理解正式命名规则,以及组成、质量和温度等多种分类维度。
+3. [如何发现系外行星](./finding-exoplanets/):比较凌日、视向速度、直接成像和微引力透镜等方法的证据与选择效应。
+4. [几个改变认识的行星案例](./planetary-cases/):从冥王星、55 Cancri e、宜居带与“暗淡蓝点”认识科学结论如何更新。
+
+## 比较,而不是寻找复制品
+
+比较行星学并不只是在宇宙中寻找“另一个地球”。不同天体可以作为自然实验:改变质量、轨道、大气、内部热量或恒星环境,观察行星系统会出现怎样的结果。金星和火星与地球的差异,冰卫星内部海洋的可能性,系外行星远超太阳系的多样性,都提醒我们不要把单一样本当作普遍规律。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《宇宙中的行星》
+- IAU, 2006 General Assembly, Resolution B5
+- NASA Exoplanet Exploration
+- Philip J. Armitage, *Astrophysics of Planet Formation*
+- Michael Perryman, *The Exoplanet Handbook*
diff --git a/src/content/docs/planetary-science/planetary-cases.md b/src/content/docs/planetary-science/planetary-cases.md
new file mode 100644
index 0000000..84db821
--- /dev/null
+++ b/src/content/docs/planetary-science/planetary-cases.md
@@ -0,0 +1,68 @@
+---
+title: 几个改变认识的行星案例
+summary: 从冥王星、55 Cancri e、宜居带和“暗淡蓝点”出发,理解分类、模型与观测如何随证据更新。
+publishedAt: 2026-08-05
+readTime: 7 分钟阅读
+tone: light
+featured: false
+order: 4
+---
+
+行星科学中的“趣闻”如果只留下惊人的标签,很容易掩盖真正有价值的部分:一个结论依赖哪些数据?后来为什么改变?下面四个案例展示了科学认识如何在新对象、新方法和新证据中调整。
+
+## 冥王星:名称改变,对象没有消失
+
+冥王星在 1930 年被发现后长期列为太阳系第九大行星。随着柯伊伯带中越来越多相似天体被发现,尤其是阋神星的质量与冥王星相近,研究者必须面对一个分类问题:继续增加行星数量,还是重新定义“行星”?
+
+2006 年,IAU 将冥王星归为矮行星,理由是它没有清除轨道邻域。这个决定至今仍有讨论,尤其是“轨道主导性”应如何表述、地球物理性质是否应占更大权重。
+
+分类变化并没有降低冥王星的科学价值。2015 年,新视野号飞掠进一步揭示了氮冰平原、水冰山脉、复杂的大气雾霾结构和可能仍在进行的地质活动。一个天体属于哪一类,与它是否值得研究,是两个不同问题。
+
+## 55 Cancri e:“钻石行星”的标签如何产生
+
+55 Cancri e 是一颗半径约为地球两倍、绕恒星运行不到一天的高温系外行星。早期研究根据宿主恒星可能较高的碳氧比,提出该行星内部也许富碳,媒体由此广泛使用“钻石行星”的称呼。
+
+后续对恒星成分的重新分析削弱了这一推断。即使行星富碳,也不能由平均密度直接证明表面覆盖钻石。今天对 55 Cancri e 的研究更关注其极端温度、热量重新分配、可能的大气和火山活动。
+
+这个案例提醒我们:行星组成通常是由恒星光谱、质量、半径和内部模型间接推断的。醒目的别名可以帮助传播,却不应被当作已经直接观测的事实。
+
+## 宜居带:必要线索,不是生命认证
+
+传统宜居带是恒星周围的一段距离范围:在给定大气模型下,岩质行星表面可能长期存在液态水。恒星温度和亮度不同,宜居带的位置也不同。
+
+但“位于宜居带”并不等于“宜居”,更不等于“存在生命”。至少还要考虑:
+
+- 行星是否保有合适的大气与水;
+- 温室效应、云和表面反照率;
+- 恒星耀斑与高能辐射;
+- 行星质量、内部活动和物质循环;
+- 自转、轨道偏心率与潮汐锁定。
+
+另一方面,木卫二和土卫二等冰卫星可能依靠潮汐加热维持地下海洋,即使它们不在太阳的传统宜居带内。宜居性是系统性质,不是一条轨道标签。
+
+## 暗淡蓝点:一幅图像的尺度
+
+1990 年 2 月 14 日,旅行者 1 号在完成主要行星任务后回望太阳系,拍摄了包括地球在内的一组影像。地球在散射的阳光中只占不到一个像素,后来被称为“暗淡蓝点”(Pale Blue Dot)。
+
+这张图没有提供新的地球化学数据,却提供了一种尺度参照:从数十亿千米之外看,海洋、大陆、国界和城市都无法分辨。Carl Sagan 借此强调,人类全部已知历史都发生在这个微小世界上。
+
+截至目前,地球仍是唯一被确认存在生命的行星。系外行星数量极其庞大,但“数量多”不能替代生命证据。寻找生命需要逐步建立证据链:行星环境、大气化学、可能的失衡信号,以及排除非生物解释。
+
+## 从案例回到方法
+
+四个案例分别对应四种科学习惯:
+
+1. 分类应随样本扩展而调整;
+2. 间接推断必须说明模型依赖;
+3. 一个指标不能代表复杂系统;
+4. 传播中的图像和隐喻需要与证据层级区分。
+
+真正令人惊讶的,不是某个世界拥有一个响亮标签,而是有限的光线、运动和样品如何被转化为可以检验的认识。
+
+## 资料来源与延伸阅读
+
+- GeoGenesis 工作组,《宇宙中的行星》
+- NASA, New Horizons 与 Voyager mission pages
+- IAU, 2006 Resolution B5
+- NASA Exoplanet Exploration, “The Habitable Zone”
+- Carl Sagan, *Pale Blue Dot*
diff --git a/src/content/docs/welcome/faq.md b/src/content/docs/welcome/faq.md
index 5498c9d..db26ea2 100644
--- a/src/content/docs/welcome/faq.md
+++ b/src/content/docs/welcome/faq.md
@@ -1,16 +1,29 @@
---
title: 常见问题
-publishedAt: 2026-03-01
-readTime: 3 分钟阅读
+summary: 关于阅读起点、栏目分工、资料来源与内容贡献的常见问题。
+publishedAt: 2026-08-05
+readTime: 4 分钟阅读
tone: dark
order: 2
---
### 我是新生,从哪里开始?
-建议先阅读[欢迎页](../),再浏览文档中的相关资料,最后查看动态板块。
+不需要先修完整的大学课程。建议先阅读[欢迎页](../),再从[地球科学的尺度与起点](../../geoscience-foundations/)建立时间和空间的基本尺度。之后可以根据兴趣选择行星、古生物或深空探测专题。
-### 文档与动态有什么区别?
+### 必须按章节顺序阅读吗?
-文档侧重**长期可用的知识沉淀**;动态侧重**时效性信息与公告**。
+不必。一个系列内部通常从基本概念逐步走向具体问题,顺序阅读会更连贯;如果已经具备相关基础,也可以借助左侧导航直接进入所需章节。
-本站框架与视觉仍在迭代,感谢你的耐心与支持。
+### 文档、访谈与动态有什么区别?
+
+- **文档**侧重可以长期使用的知识框架与研究导读
+- **访谈**记录具体研究者的经验、判断与建议
+- **动态**发布具有时效性的项目进展和编辑说明
+
+### 文档内容可靠吗?
+
+这些文档依据团队已有稿件整理,并补充教材、学术组织和科研机构的公开资料。我们会尽量保留参考来源,避免把推测写成定论;但科普资料仍可能存在疏漏,也会随科学认识的发展持续更新。它们适合作为入门地图,不能替代教材、原始论文或专业课程。
+
+### 发现错误或想参与撰写怎么办?
+
+欢迎通过 [GitHub](https://github.com/geogenesis-org) 提交具体问题、可靠来源或修改建议。清楚说明“哪里有问题、依据是什么、建议如何修改”,会让讨论和审校更高效。
diff --git a/src/content/docs/welcome/how-to-use.md b/src/content/docs/welcome/how-to-use.md
index 9cd835f..5c94a40 100644
--- a/src/content/docs/welcome/how-to-use.md
+++ b/src/content/docs/welcome/how-to-use.md
@@ -1,21 +1,28 @@
---
title: 如何使用本站
-summary: 了解文档阅读、动态活动与贡献方式。
-publishedAt: 2026-03-01
-readTime: 4 分钟阅读
+summary: 了解文档的组织方式、推荐阅读路径,以及如何反馈问题或参与修订。
+publishedAt: 2026-08-05
+readTime: 3 分钟阅读
tone: mid
order: 1
---
## 阅读文档
-每份文档由一个索引页和若干章节组成。进入文档后,**左侧顶部**是可返回索引页的文档标题,下方列出各章节;**右侧**显示当前页的章节目录。
+每组文档由一个索引页和若干章节组成。索引页说明主题、阅读目标和章节安排;进入具体章节后,左侧列出系列导航,右侧显示当前页面的目录,页面底部可以继续阅读前一章或后一章。
-从[文档](../../)选择一份独立文档开始阅读,无需在侧栏浏览全部资料。
+你可以从[全部文档](../../)选择感兴趣的系列,不必按照固定顺序阅读。文中的加粗术语、表格和参考资料用于帮助理解,也可以作为进一步检索的起点。
-## 关注动态与活动
+## 推荐路径
-动态板块发布阶段性公告;活动板块列出即将进行的社区活动。
+- **第一次接触地球科学**:从[地球科学的尺度与起点](../../geoscience-foundations/)开始
+- **想认识太阳系与系外世界**:阅读[行星科学入门](../../planetary-science/)
+- **对生命历史感兴趣**:阅读[古生物学入门](../../paleontology/)
+- **想了解空间任务如何工作**:阅读[深空探测入门](../../deep-space-exploration/)
+
+## 文档之外
+
+[访谈](../../../interviews/)记录教师与研究者的经历和建议;[动态](../../../news/)发布项目进展、编辑说明与社区消息;[关于](../../../about/)介绍 GeoGenesis 的使命与发起缘由。
## 参与贡献
-组织尚在早期建设阶段。欢迎通过 GitHub 仓库提交文档改进建议或内容贡献。
+我们会尽量标明资料来源,并区分已有证据、合理推断与仍有争议的问题。如果你发现事实错误、失效链接或不够清楚的表达,欢迎通过 [GitHub](https://github.com/geogenesis-org) 提出建议。内容修订不是一次性工作,每一处可验证的改进都会让这套资料更可靠。
diff --git a/src/content/docs/welcome/index.md b/src/content/docs/welcome/index.md
index 06c96dd..b22edf3 100644
--- a/src/content/docs/welcome/index.md
+++ b/src/content/docs/welcome/index.md
@@ -1,26 +1,30 @@
---
title: 欢迎来到 GeoGenesis
-summary: GeoGenesis 是一个面向地球科学学生的知识共享与科研共同体,聚焦行星演化、矿物信息学与生命起源的交叉探索。
-publishedAt: 2026-03-01
-readTime: 5 分钟阅读
+summary: 从地球科学的基本尺度出发,沿着行星、生命与深空探测的线索,建立一条清晰而可靠的入门路径。
+publishedAt: 2026-08-05
+readTime: 3 分钟阅读
tone: light
featured: true
order: 0
---
-GeoGenesis 的使命是构建一个面向地球科学学生的知识共享与经验流动平台,打破信息不对称。
+GeoGenesis 是一个由学生共同建设的地球与行星科学知识平台。我们希望帮助初学者从兴趣走向系统理解:建立彼此关联的知识框架,认识科学问题如何提出、证据如何获得,也看见真实的学习与研究路径。
## 我们做什么
-- **访谈**:记录前辈的研究路径与实践经验
-- **课程整理**:将零散笔记结构化为可复用的学习资料
-- **项目实践**:通过小型科研协作积累真实经验
-- **社区建设**:连接每一届成员,让知识可持续流转
+- **整理基础知识**:把分散的概念放回时间、空间与地球系统之中
+- **解释研究方法**:介绍观察、实验、遥感与建模如何形成证据
+- **记录真实经验**:通过访谈呈现不同的学习选择与科研路径
+- **持续共同修订**:保留来源、不确定性与可被纠正的空间
### 四大板块
| 板块 | 说明 |
|------|------|
-| 文档 | 长篇资料、课程笔记与研究导读 |
-| 动态 | 组织公告与社区进展 |
-| 活动 | 讲座、工作坊与讨论会 |
-| 关于 | 使命、愿景与参与方式 |
+| 文档 | 系统化的入门材料、专题导读与方法说明 |
+| 访谈 | 地球科学教师与研究者的经历、判断和建议 |
+| 动态 | 项目进展、编辑手记与社区消息 |
+| 关于 | GeoGenesis 的使命、原则与发起缘由 |
+
+## 从哪里开始
+
+第一次来到这里,可以先阅读[地球科学的尺度与起点](../geoscience-foundations/),建立时间和空间的数量级概念;随后走进[行星科学入门](../planetary-science/),比较地球与其他世界。对生命历史或空间任务感兴趣的读者,也可以直接选择[古生物学入门](../paleontology/)或[深空探测入门](../deep-space-exploration/)。
diff --git a/src/data/sections.ts b/src/data/sections.ts
index 4b02e5f..b8e9db6 100644
--- a/src/data/sections.ts
+++ b/src/data/sections.ts
@@ -17,10 +17,10 @@ export interface CollectionSectionConfig {
export const collectionSections: Record = {
docs: {
title: '文档',
- description: 'GeoGenesis 地球科学文档、课程笔记与研究导读。',
+ description: 'GeoGenesis 地球与行星科学入门文档、专题导读与方法说明。',
eyebrow: 'GeoGenesis 文档',
- heading: '一份写给地球学习者的开放式野外指南。',
- intro: '从基础概念、课程笔记到研究导读。每一组文档都提供一条可进入、可追踪、也可以继续贡献的学习路径。',
+ heading: '从尺度与证据出发,建立理解地球的路径。',
+ intro: '从时空数量级与板块构造,到行星、古生物和深空探测。每组文档提供清晰的概念框架、研究线索与可继续追踪的资料来源。',
marker: 'DOCUMENTS',
indexClass: 'docs-index',
carouselLabel: '精选文档',
diff --git a/src/pages/docs/index.astro b/src/pages/docs/index.astro
index 041e2c6..1de59e8 100644
--- a/src/pages/docs/index.astro
+++ b/src/pages/docs/index.astro
@@ -11,7 +11,10 @@ const selected = series.filter((item) => item.data.featured);
const fallback = [...series].sort(
(a, b) => b.data.publishedAt.valueOf() - a.data.publishedAt.valueOf(),
)[0];
-const featured = createDocsListing(selected.length > 0 ? selected : fallback ? [fallback] : []);
+const featured = createDocsListing(
+ selected.length > 0 ? selected : fallback ? [fallback] : [],
+ docs,
+);
const listing = createDocsListing(docs);
---
diff --git a/src/pages/index.astro b/src/pages/index.astro
index 908494f..633c53c 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -111,7 +111,7 @@ const latestNews = (await getCollection('news'))
以现在为线索,追溯地球的过去;以过去为参照,理解未来的变化。
45.4亿年的行星历史
-
1个相互连接的地球系统
+
1个完整的地球系统
∞仍待探索的问题
diff --git a/src/utils/contentListing.ts b/src/utils/contentListing.ts
index 6fb0b51..dd25a39 100644
--- a/src/utils/contentListing.ts
+++ b/src/utils/contentListing.ts
@@ -25,7 +25,35 @@ const withDate = (publishedAt: Date) => ({
publishedLabel: formatContentDate(publishedAt),
});
-export function createDocsListing(entries: CollectionEntry<'docs'>[]): ContentListItem[] {
+const readTimeMinutes = (readTime: string) => {
+ const match = readTime.match(/(\d+(?:\.\d+)?)/);
+ return match ? Number(match[1]) : undefined;
+};
+
+const getSeriesReadTime = (
+ entry: CollectionEntry<'docs'>,
+ allEntries: CollectionEntry<'docs'>[],
+) => {
+ const seriesId = entry.id.replace(/\/index$/, '');
+ const seriesEntries = allEntries.filter(
+ (item) => item.id === seriesId
+ || item.id === `${seriesId}/index`
+ || item.id.startsWith(`${seriesId}/`),
+ );
+ const minutes = seriesEntries.map((item) => readTimeMinutes(item.data.readTime));
+
+ if (minutes.length === 0 || minutes.some((value) => value === undefined)) {
+ return entry.data.readTime;
+ }
+
+ const total = minutes.reduce
((sum, value) => sum + (value ?? 0), 0);
+ return `${Number.isInteger(total) ? total : total.toFixed(1)} 分钟阅读`;
+};
+
+export function createDocsListing(
+ entries: CollectionEntry<'docs'>[],
+ allEntries: CollectionEntry<'docs'>[] = entries,
+): ContentListItem[] {
return entries
.filter((item) => item.id.endsWith('/index') || !item.id.includes('/'))
.sort((a, b) => a.data.order - b.data.order)
@@ -34,7 +62,7 @@ export function createDocsListing(entries: CollectionEntry<'docs'>[]): ContentLi
title: item.data.title,
summary: item.data.summary,
...withDate(item.data.publishedAt),
- readTime: item.data.readTime,
+ readTime: getSeriesReadTime(item, allEntries),
tone: item.data.tone,
visual: 'documents',
}));
From 979191015697424babb9eb12ee59f730b6337bcd Mon Sep 17 00:00:00 2001
From: Staaaaaaaaar <2300012435@stu.pku.edu.cn>
Date: Wed, 5 Aug 2026 15:51:07 +0800
Subject: [PATCH 4/6] feat: integrate KaTeX support for mathematical
expressions in Markdown
- Added support for KaTeX to render mathematical formulas in Markdown content.
- Updated the Astro configuration to include `@astrojs/markdown-remark` with `remark-math` and `rehype-katex` plugins.
- Enhanced documentation to reflect the new capability of using inline and block math syntax.
- Included necessary styles for KaTeX in the global stylesheet.
---
README.md | 1 +
astro.config.mjs | 9 +
package-lock.json | 1450 ++++++++++++++++-
package.json | 6 +-
.../deep-space-exploration/mission-methods.md | 2 +-
.../deep-space-exploration/orbital-basics.md | 16 +-
.../orders-of-magnitude.md | 20 +-
src/layouts/BaseLayout.astro | 1 +
src/styles/content/prose.css | 10 +
9 files changed, 1420 insertions(+), 95 deletions(-)
diff --git a/README.md b/README.md
index 26b7cf7..5c61c1f 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,7 @@ src/
- 三类内容统一公开日期和阅读时间,并通过 `tone: light | mid | dark` 配置单篇视觉色调;文档、访谈和动态均可将任意多篇内容设置为 `featured: true`,集合页会将它们组成精选展板,未指定时自动突出一篇内容。
- 精选展板是否自动翻页及翻页间隔统一在 `src/data/site.ts` 的 `featuredCarouselConfig` 中按栏目配置。
- 访谈使用 `affiliation` 记录系所;设置 `anonymous: true` 时隐藏姓名,未提供系所则显示“系所信息保密”。
+- 所有 Markdown 内容均支持 KaTeX 数学公式:使用 `$...$` 编写行内公式,使用独占一段的 `$$...$$` 编写块级公式。
- 内容字段由 `src/content.config.ts` 校验。
- 默认语言为简体中文;当前不配置多语言路由。
diff --git a/astro.config.mjs b/astro.config.mjs
index 4b14d17..bbfd23f 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,5 +1,8 @@
// @ts-check
+import { unified } from '@astrojs/markdown-remark';
import { defineConfig } from 'astro/config';
+import rehypeKatex from 'rehype-katex';
+import remarkMath from 'remark-math';
const githubPagesBuild = process.env.GITHUB_PAGES === 'true';
const githubPages = {
@@ -9,6 +12,12 @@ const githubPages = {
export default defineConfig({
...(githubPagesBuild ? githubPages : {}),
+ markdown: {
+ processor: unified({
+ remarkPlugins: [remarkMath],
+ rehypePlugins: [rehypeKatex],
+ }),
+ },
vite: {
build: {
// Keep Fontsource's CJK unicode-range files separate so browsers only
diff --git a/package-lock.json b/package-lock.json
index bb61247..24696e3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,10 +9,14 @@
"version": "0.1.0",
"license": "MIT",
"dependencies": {
+ "@astrojs/markdown-remark": "^7.2.2",
"@fontsource-variable/noto-sans-sc": "^5.3.0",
"@fontsource-variable/noto-serif-sc": "^5.3.0",
"@fontsource/ibm-plex-mono": "^5.3.0",
- "astro": "^7.1.6"
+ "astro": "^7.1.6",
+ "katex": "^0.18.1",
+ "rehype-katex": "^7.0.1",
+ "remark-math": "^6.0.0"
},
"devDependencies": {
"@astrojs/check": "^0.9.6",
@@ -283,6 +287,31 @@
}
}
},
+ "node_modules/@astrojs/markdown-remark": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.2.2.tgz",
+ "integrity": "sha512-FGfmK84zSNcrsBd0dl1gXE9JvZYElp8EXQa2jpHVAxG4deGKAp43wspxFupjADJX7MSsMRHwYCnfT6EyVmgeFQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.10.2",
+ "@astrojs/prism": "4.0.2",
+ "github-slugger": "^2.0.0",
+ "hast-util-from-html": "^2.0.3",
+ "hast-util-to-text": "^4.0.2",
+ "mdast-util-definitions": "^6.0.0",
+ "rehype-raw": "^7.0.0",
+ "rehype-stringify": "^10.0.1",
+ "remark-gfm": "^4.0.1",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.1.2",
+ "remark-smartypants": "^3.0.2",
+ "unified": "^11.0.5",
+ "unist-util-remove-position": "^5.0.0",
+ "unist-util-visit": "^5.1.0",
+ "unist-util-visit-parents": "^6.0.2",
+ "vfile": "^6.0.3"
+ }
+ },
"node_modules/@astrojs/markdown-satteri": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@astrojs/markdown-satteri/-/markdown-satteri-0.3.5.tgz",
@@ -2326,6 +2355,15 @@
"tslib": "^2.4.0"
}
},
+ "node_modules/@types/debug": {
+ "version": "4.1.13",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
+ "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
"node_modules/@types/estree": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
@@ -2350,6 +2388,12 @@
"@types/unist": "*"
}
},
+ "node_modules/@types/katex": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz",
+ "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==",
+ "license": "MIT"
+ },
"node_modules/@types/mdast": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
@@ -2359,6 +2403,12 @@
"@types/unist": "*"
}
},
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "license": "MIT"
+ },
"node_modules/@types/nlcst": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
@@ -2641,6 +2691,16 @@
"node": ">= 0.4"
}
},
+ "node_modules/array-iterate": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
+ "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/astro": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/astro/-/astro-7.1.6.tgz",
@@ -2791,6 +2851,16 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/character-entities": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/character-entities-html4": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
@@ -3019,6 +3089,36 @@
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
"license": "CC0-1.0"
},
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decode-named-character-reference": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz",
+ "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/defu": {
"version": "6.1.7",
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
@@ -3246,6 +3346,18 @@
"node": ">=6"
}
},
+ "node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -3312,9 +3424,9 @@
}
},
"node_modules/fast-uri": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz",
- "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz",
+ "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==",
"dev": true,
"funding": [
{
@@ -3460,6 +3572,21 @@
"uncrypto": "^0.1.3"
}
},
+ "node_modules/hast-util-from-dom": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz",
+ "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==",
+ "license": "ISC",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hastscript": "^9.0.0",
+ "web-namespaces": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-from-html": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz",
@@ -3478,6 +3605,22 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-from-html-isomorphic": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz",
+ "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-from-dom": "^5.0.0",
+ "hast-util-from-html": "^2.0.0",
+ "unist-util-remove-position": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-from-parse5": {
"version": "8.0.3",
"resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz",
@@ -3498,6 +3641,19 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-is-element": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
+ "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-parse-selector": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz",
@@ -3511,6 +3667,31 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-raw": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
+ "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "hast-util-from-parse5": "^8.0.0",
+ "hast-util-to-parse5": "^8.0.0",
+ "html-void-elements": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "parse5": "^7.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-to-html": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
@@ -3534,6 +3715,41 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/hast-util-to-parse5": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz",
+ "integrity": "sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "comma-separated-tokens": "^2.0.0",
+ "devlop": "^1.0.0",
+ "property-information": "^7.0.0",
+ "space-separated-tokens": "^2.0.0",
+ "web-namespaces": "^2.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hast-util-to-text": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
+ "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/unist": "^3.0.0",
+ "hast-util-is-element": "^3.0.0",
+ "unist-util-find-after": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/hast-util-whitespace": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
@@ -3715,6 +3931,31 @@
"integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
"license": "MIT"
},
+ "node_modules/katex": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.18.1.tgz",
+ "integrity": "sha512-Td8GCYSxDAoMhHOlKmCFMJ/hz5qlAAb71n66Dryw9nfCVfumLo7nhuotbvKom/XPADmrYC3O5QR71EPq4DarJQ==",
+ "funding": [
+ "https://opencollective.com/katex",
+ "https://github.com/sponsors/katex"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^8.3.0"
+ },
+ "bin": {
+ "katex": "cli.js"
+ }
+ },
+ "node_modules/katex/node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/kleur": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
@@ -3745,6 +3986,16 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/longest-streak": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/magicast": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.3.tgz",
@@ -3756,96 +4007,847 @@
"source-map-js": "^1.2.1"
}
},
- "node_modules/mdast-util-to-hast": {
- "version": "13.2.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
- "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "node_modules/markdown-table": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
+ "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/mdast-util-definitions": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
+ "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
"license": "MIT",
"dependencies": {
- "@types/hast": "^3.0.0",
"@types/mdast": "^4.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "trim-lines": "^3.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdn-data": {
- "version": "2.27.1",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
- "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
- "license": "CC0-1.0"
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "node_modules/mdast-util-find-and-replace": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
+ "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
"license": "MIT",
- "optional": true,
- "peer": true
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "escape-string-regexp": "^5.0.0",
+ "unist-util-is": "^6.0.0",
+ "unist-util-visit-parents": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
},
- "node_modules/micromark-util-character": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
- "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
+ "node_modules/mdast-util-from-markdown": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz",
+ "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==",
"license": "MIT",
"dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark": "^4.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
"micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
+ "micromark-util-types": "^2.0.0",
+ "unist-util-stringify-position": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
}
},
- "node_modules/micromark-util-encode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
- "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
- "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
+ "node_modules/mdast-util-gfm": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
+ "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
"license": "MIT",
"dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-gfm-autolink-literal": "^2.0.0",
+ "mdast-util-gfm-footnote": "^2.0.0",
+ "mdast-util-gfm-strikethrough": "^2.0.0",
+ "mdast-util-gfm-table": "^2.0.0",
+ "mdast-util-gfm-task-list-item": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-autolink-literal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
+ "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "ccount": "^2.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-find-and-replace": "^3.0.0",
+ "micromark-util-character": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.1.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-strikethrough": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
+ "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-table": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
+ "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "markdown-table": "^3.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-gfm-task-list-item": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
+ "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-math": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz",
+ "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "mdast-util-to-markdown": "^2.1.0",
+ "unist-util-remove-position": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-phrasing": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-hast": {
+ "version": "13.2.1",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "@ungap/structured-clone": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "trim-lines": "^3.0.0",
+ "unist-util-position": "^5.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-markdown": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "@types/unist": "^3.0.0",
+ "longest-streak": "^3.0.0",
+ "mdast-util-phrasing": "^4.0.0",
+ "mdast-util-to-string": "^4.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-decode-string": "^2.0.0",
+ "unist-util-visit": "^5.0.0",
+ "zwitch": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdast-util-to-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/mdn-data": {
+ "version": "2.27.1",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+ "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/micromark": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@types/debug": "^4.0.0",
+ "debug": "^4.0.0",
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-core-commonmark": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "devlop": "^1.0.0",
+ "micromark-factory-destination": "^2.0.0",
+ "micromark-factory-label": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-factory-title": "^2.0.0",
+ "micromark-factory-whitespace": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-html-tag-name": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-subtokenize": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-extension-gfm": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
+ "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-extension-gfm-autolink-literal": "^2.0.0",
+ "micromark-extension-gfm-footnote": "^2.0.0",
+ "micromark-extension-gfm-strikethrough": "^2.0.0",
+ "micromark-extension-gfm-table": "^2.0.0",
+ "micromark-extension-gfm-tagfilter": "^2.0.0",
+ "micromark-extension-gfm-task-list-item": "^2.0.0",
+ "micromark-util-combine-extensions": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-autolink-literal": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
+ "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-footnote": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
+ "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-core-commonmark": "^2.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-normalize-identifier": "^2.0.0",
+ "micromark-util-sanitize-uri": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-strikethrough": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
+ "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-classify-character": "^2.0.0",
+ "micromark-util-resolve-all": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-table": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
+ "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-tagfilter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
+ "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-gfm-task-list-item": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
+ "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-math": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz",
+ "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/katex": "^0.16.0",
+ "devlop": "^1.0.0",
+ "katex": "^0.16.0",
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/micromark-extension-math/node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/micromark-extension-math/node_modules/katex": {
+ "version": "0.16.47",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz",
+ "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==",
+ "funding": [
+ "https://opencollective.com/katex",
+ "https://github.com/sponsors/katex"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^8.3.0"
+ },
+ "bin": {
+ "katex": "cli.js"
+ }
+ },
+ "node_modules/micromark-factory-destination": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-label": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-space": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-title": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-factory-whitespace": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-factory-space": "^2.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-character": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-chunked": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-classify-character": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-combine-extensions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-numeric-character-reference": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-decode-string": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "decode-named-character-reference": "^1.0.0",
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-encode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-html-tag-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/micromark-util-normalize-identifier": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-resolve-all": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-types": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-sanitize-uri": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "micromark-util-character": "^2.0.0",
+ "micromark-util-encode": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0"
+ }
+ },
+ "node_modules/micromark-util-subtokenize": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
+ "funding": [
+ {
+ "type": "GitHub Sponsors",
+ "url": "https://github.com/sponsors/unifiedjs"
+ },
+ {
+ "type": "OpenCollective",
+ "url": "https://opencollective.com/unified"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "devlop": "^1.0.0",
+ "micromark-util-chunked": "^2.0.0",
+ "micromark-util-symbol": "^2.0.0",
+ "micromark-util-types": "^2.0.0"
}
},
"node_modules/micromark-util-symbol": {
@@ -3900,6 +4902,12 @@
"node": ">=10"
}
},
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
"node_modules/muggle-string": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz",
@@ -4118,6 +5126,24 @@
"integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
"license": "MIT"
},
+ "node_modules/parse-latin": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
+ "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "@types/unist": "^3.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unist-util-modify-children": "^4.0.0",
+ "unist-util-visit-children": "^3.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
"node_modules/parse5": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz",
@@ -4288,6 +5314,177 @@
"integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
"license": "MIT"
},
+ "node_modules/rehype-katex": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz",
+ "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/katex": "^0.16.0",
+ "hast-util-from-html-isomorphic": "^2.0.0",
+ "hast-util-to-text": "^4.0.0",
+ "katex": "^0.16.0",
+ "unist-util-visit-parents": "^6.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-katex/node_modules/commander": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
+ "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/rehype-katex/node_modules/katex": {
+ "version": "0.16.47",
+ "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz",
+ "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==",
+ "funding": [
+ "https://opencollective.com/katex",
+ "https://github.com/sponsors/katex"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^8.3.0"
+ },
+ "bin": {
+ "katex": "cli.js"
+ }
+ },
+ "node_modules/rehype-raw": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
+ "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-raw": "^9.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/rehype-stringify": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz",
+ "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "hast-util-to-html": "^9.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-gfm": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-gfm": "^3.0.0",
+ "micromark-extension-gfm": "^3.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-stringify": "^11.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-math": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz",
+ "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-math": "^3.0.0",
+ "micromark-extension-math": "^3.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-parse": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-from-markdown": "^2.0.0",
+ "micromark-util-types": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-rehype": {
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "unified": "^11.0.0",
+ "vfile": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/remark-smartypants": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.3.tgz",
+ "integrity": "sha512-gCaK+ndZ0hYezlqFegHFCVh2CQemsi0Npdh1qVM9bxlUFknjkbP6VmojWhddOCrbK0PbbacmYLWfTULRiT1eWA==",
+ "license": "MIT",
+ "dependencies": {
+ "retext": "^9.0.0",
+ "retext-smartypants": "^6.0.0",
+ "unified": "^11.0.4",
+ "unist-util-visit": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/remark-stringify": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
+ "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mdast": "^4.0.0",
+ "mdast-util-to-markdown": "^2.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/request-light": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/request-light/-/request-light-0.7.0.tgz",
@@ -4324,6 +5521,37 @@
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
+ "node_modules/retext": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
+ "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "retext-latin": "^4.0.0",
+ "retext-stringify": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/retext-latin": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
+ "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "parse-latin": "^7.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/retext-smartypants": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
@@ -4339,6 +5567,21 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/retext-stringify": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
+ "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/nlcst": "^2.0.0",
+ "nlcst-to-string": "^4.0.0",
+ "unified": "^11.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/rolldown": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.1.tgz",
@@ -4884,6 +6127,20 @@
"ohash": "^2.0.11"
}
},
+ "node_modules/unist-util-find-after": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
+ "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-is": "^6.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-is": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
@@ -4897,6 +6154,20 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-modify-children": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
+ "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "array-iterate": "^2.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-position": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
@@ -4910,6 +6181,20 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-remove-position": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
+ "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0",
+ "unist-util-visit": "^5.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-stringify-position": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
@@ -4938,6 +6223,19 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/unist-util-visit-children": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
+ "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^3.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
"node_modules/unist-util-visit-parents": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
diff --git a/package.json b/package.json
index 541d1e5..9e38838 100644
--- a/package.json
+++ b/package.json
@@ -16,10 +16,14 @@
"astro": "astro"
},
"dependencies": {
+ "@astrojs/markdown-remark": "^7.2.2",
"@fontsource-variable/noto-sans-sc": "^5.3.0",
"@fontsource-variable/noto-serif-sc": "^5.3.0",
"@fontsource/ibm-plex-mono": "^5.3.0",
- "astro": "^7.1.6"
+ "astro": "^7.1.6",
+ "katex": "^0.18.1",
+ "rehype-katex": "^7.0.1",
+ "remark-math": "^6.0.0"
},
"devDependencies": {
"@astrojs/check": "^0.9.6",
diff --git a/src/content/docs/deep-space-exploration/mission-methods.md b/src/content/docs/deep-space-exploration/mission-methods.md
index 5faa904..46813e1 100644
--- a/src/content/docs/deep-space-exploration/mission-methods.md
+++ b/src/content/docs/deep-space-exploration/mission-methods.md
@@ -64,7 +64,7 @@ order: 2
## 中继通信与协同任务
-目标背面、峡谷或着陆区可能无法直接看见地球。中继卫星可以在合适轨道转发数据,例如鹊桥号在地月 L2 点附近的晕轨道支持月球背面通信。
+目标背面、峡谷或着陆区可能无法直接看见地球。中继卫星可以在合适轨道转发数据,例如鹊桥号在地月 $L_2$ 点附近的晕轨道支持月球背面通信。
复杂任务往往由多个平台协同:环绕器先测绘着陆区并承担中继,着陆器部署巡视器,返回器接收上升器送来的样品。系统越复杂,接口和故障传播越需要提前验证。
diff --git a/src/content/docs/deep-space-exploration/orbital-basics.md b/src/content/docs/deep-space-exploration/orbital-basics.md
index b773b20..89f09e5 100644
--- a/src/content/docs/deep-space-exploration/orbital-basics.md
+++ b/src/content/docs/deep-space-exploration/orbital-basics.md
@@ -22,7 +22,7 @@ order: 3
1. **椭圆定律**:行星沿椭圆轨道运行,中心天体位于一个焦点;
2. **面积定律**:行星与中心天体的连线在相等时间扫过相等面积,因此近点速度更快、远点速度更慢;
-3. **周期定律**:对环绕同一中心天体的对象,轨道周期平方与半长轴立方成正比。
+3. **周期定律**:对环绕同一中心天体的对象,轨道周期 $T$ 的平方与半长轴 $a$ 的立方成正比,即 $T^2 \propto a^3$。
牛顿万有引力解释了这些规律,并把它们推广到卫星、双星和航天器。真实任务还要考虑其他天体摄动、非球形重力场、大气阻力、太阳辐射压和相对论修正。
@@ -30,9 +30,9 @@ order: 3
在忽略大气、地球自转和高度差的理想模型中:
-- 贴近地表的圆轨道速度约为 `7.9 km/s`,常称第一宇宙速度;
-- 从地表出发、仅靠初始速度无限远离地球且最终速度趋近于零,需要约 `11.2 km/s`,即地球逃逸速度;
-- 从地球出发并进一步摆脱太阳引力,理想最小发射速度常写作约 `16.7 km/s`,即第三宇宙速度。
+- 贴近地表的圆轨道速度约为 $7.9\ \mathrm{km}\cdot\mathrm{s}^{-1}$,常称第一宇宙速度;
+- 从地表出发、仅靠初始速度无限远离地球且最终速度趋近于零,需要约 $11.2\ \mathrm{km}\cdot\mathrm{s}^{-1}$,即地球逃逸速度;
+- 从地球出发并进一步摆脱太阳引力,理想最小发射速度常写作约 $16.7\ \mathrm{km}\cdot\mathrm{s}^{-1}$,即第三宇宙速度。
这些数值是理解能量尺度的参照,不是实际任务必须瞬间达到的固定门槛。运载火箭持续工作,地球自转可以贡献速度,航天器还会先进入停泊轨道,再通过多次变轨获得行星际速度。
@@ -52,11 +52,13 @@ order: 3
齐奥尔科夫斯基火箭方程把理想速度增量写作:
-`Δv = vₑ × ln(m₀ / m_f)`
+$$
+\Delta v = v_e \ln\left(\frac{m_0}{m_f}\right)
+$$
-其中 `vₑ` 是有效喷流速度,`m₀` 是点火前总质量,`m_f` 是推进剂消耗后的质量。公式揭示了一个困难:想获得线性增加的速度增量,质量比必须指数增长。
+其中 $v_e$ 是有效喷流速度,$m_0$ 是点火前总质量,$m_f$ 是推进剂消耗后的质量。公式揭示了一个困难:想获得线性增加的速度增量,质量比必须指数增长。
-任务规划中的 `Δv` 不是航天器最终速度,而是完成发射、变轨、捕获和着陆等操作所需速度变化的总预算。结构、发动机、隔热和载荷都不是推进剂,却必须一起加速。
+任务规划中的 $\Delta v$ 不是航天器最终速度,而是完成发射、变轨、捕获和着陆等操作所需速度变化的总预算。结构、发动机、隔热和载荷都不是推进剂,却必须一起加速。
## 为什么使用多级火箭
diff --git a/src/content/docs/geoscience-foundations/orders-of-magnitude.md b/src/content/docs/geoscience-foundations/orders-of-magnitude.md
index fd76940..322f27a 100644
--- a/src/content/docs/geoscience-foundations/orders-of-magnitude.md
+++ b/src/content/docs/geoscience-foundations/orders-of-magnitude.md
@@ -18,16 +18,16 @@ order: 1
| 代表尺度 | 地球科学中的例子 | 常见研究方式 |
|---|---|---|
-| `10⁻¹⁰ m` | 原子间距、化学键长、晶格常数 | X 射线衍射、光谱学、计算模拟 |
-| `10⁻⁶ m` | 细菌、微体化石、细小矿物包裹体 | 光学与电子显微镜 |
-| `10⁻³ m` | 砂粒、晶体、薄层结构 | 手标本、薄片、粒度分析 |
-| `10⁰ m` | 露头局部、断层擦痕、人的观察尺度 | 野外描述、测量与采样 |
-| `10³ m` | 山体、火山、沉积剖面 | 地形测量、地震成像、遥感 |
-| `10⁶ m` | 大型盆地、造山带、板块边界的一部分 | 卫星观测、区域地球物理 |
-| `10⁷ m` | 地球直径约 `1.27 × 10⁷ m` | 全球地震学、重力场与数值模型 |
-| `10⁸ m` | 地月平均距离约 `3.84 × 10⁸ m` | 测距、轨道动力学 |
-| `10¹¹ m` | 1 天文单位约 `1.50 × 10¹¹ m` | 行星轨道与空间探测 |
-| `10¹⁶ m` | 1 光年约 `9.46 × 10¹⁵ m` | 天文观测 |
+| $10^{-10}\,\mathrm{m}$ | 原子间距、化学键长、晶格常数 | X 射线衍射、光谱学、计算模拟 |
+| $10^{-6}\,\mathrm{m}$ | 细菌、微体化石、细小矿物包裹体 | 光学与电子显微镜 |
+| $10^{-3}\,\mathrm{m}$ | 砂粒、晶体、薄层结构 | 手标本、薄片、粒度分析 |
+| $10^{0}\,\mathrm{m}$ | 露头局部、断层擦痕、人的观察尺度 | 野外描述、测量与采样 |
+| $10^{3}\,\mathrm{m}$ | 山体、火山、沉积剖面 | 地形测量、地震成像、遥感 |
+| $10^{6}\,\mathrm{m}$ | 大型盆地、造山带、板块边界的一部分 | 卫星观测、区域地球物理 |
+| $10^{7}\,\mathrm{m}$ | 地球直径约 $1.27 \times 10^{7}\,\mathrm{m}$ | 全球地震学、重力场与数值模型 |
+| $10^{8}\,\mathrm{m}$ | 地月平均距离约 $3.84 \times 10^{8}\,\mathrm{m}$ | 测距、轨道动力学 |
+| $10^{11}\,\mathrm{m}$ | 1 天文单位约 $1.50 \times 10^{11}\,\mathrm{m}$ | 行星轨道与空间探测 |
+| $10^{16}\,\mathrm{m}$ | 1 光年约 $9.46 \times 10^{15}\,\mathrm{m}$ | 天文观测 |
表中的边界不是学科边界。显微分析可以解释一次全球事件留下的微小化学异常,卫星观测也需要由地面样品校准。真正重要的是把不同尺度的证据连接起来。
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index cca8fad..97becff 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -8,6 +8,7 @@ import '@fontsource-variable/noto-sans-sc/wght.css';
import '@fontsource-variable/noto-serif-sc/wght.css';
import '@fontsource/ibm-plex-mono/latin-400.css';
import '@fontsource/ibm-plex-mono/latin-500.css';
+import 'katex/dist/katex.min.css';
import '../styles/global.css';
interface Props {
diff --git a/src/styles/content/prose.css b/src/styles/content/prose.css
index 49a9235..5301c3d 100644
--- a/src/styles/content/prose.css
+++ b/src/styles/content/prose.css
@@ -46,3 +46,13 @@
.prose th,
.prose td { padding: 12px 11px; border-bottom: 1px solid var(--line); text-align: left; }
.prose th { color: var(--muted); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
+.prose .katex { color: var(--ink); font-size: 1em; }
+.prose .katex .sizing.reset-size6.size3,
+.prose .katex .fontsize-ensurer.reset-size6.size3 { font-size: .66em; }
+.prose .katex-display {
+ margin: 36px 0;
+ padding-block: 6px 10px;
+ overflow-x: auto;
+ overflow-y: hidden;
+}
+.prose .katex-display > .katex { min-width: max-content; }
From fcc576edaae545f42410764cb89da6190c5e16f1 Mon Sep 17 00:00:00 2001
From: Staaaaaaaaar <2300012435@stu.pku.edu.cn>
Date: Wed, 5 Aug 2026 16:02:45 +0800
Subject: [PATCH 5/6] content: launch GeoGenesis knowledge platform and update
interview series
- Introduced the GeoGenesis platform, a student-led initiative for Earth and planetary science, featuring sections on documents, interviews, and updates.
- Updated the interview series to highlight twelve new interviews with Earth science educators and researchers, providing insights into their experiences and career paths.
- Removed outdated content related to the open call and planetary reading notes to streamline the site.
---
src/content/news/geogenesis-launch.md | 35 ++++++++++++++++++++
src/content/news/interview-series-launch.md | 36 ++++++++++++---------
src/content/news/open-call-2026.md | 34 -------------------
src/content/news/planetary-reading-notes.md | 25 --------------
4 files changed, 56 insertions(+), 74 deletions(-)
create mode 100644 src/content/news/geogenesis-launch.md
delete mode 100644 src/content/news/open-call-2026.md
delete mode 100644 src/content/news/planetary-reading-notes.md
diff --git a/src/content/news/geogenesis-launch.md b/src/content/news/geogenesis-launch.md
new file mode 100644
index 0000000..6eab1ad
--- /dev/null
+++ b/src/content/news/geogenesis-launch.md
@@ -0,0 +1,35 @@
+---
+title: GeoGenesis 正式上线:从这里开始认识地球
+summary: 一个由学生发起的地球与行星科学知识平台,从文档、访谈和动态出发,为初学者建立清晰、可靠且可以继续探索的入口。
+publishedAt: 2026-08-01
+readTime: 4 分钟阅读
+tone: light
+featured: true
+order: 1
+---
+
+## 欢迎来到 GeoGenesis
+
+今天,GeoGenesis 正式上线。
+
+这是一个由学生发起并共同维护的地球与行星科学知识平台。我们希望把分散在课程、书籍和研究经历中的线索重新组织起来,帮助初学者从兴趣出发,逐渐建立相互关联的知识框架,并理解科学结论背后的观察、证据与方法。
+
+地球科学研究的不只是岩石。它跨越从原子到行星、从生命早期历史到当代环境变化的广阔尺度,也连接野外观察、实验分析、遥感探测与数值模拟。面对这样一门庞大而交叉的学科,找到合适的起点往往比记住更多名词更重要。
+
+## 网站现在有什么?
+
+GeoGenesis 目前由三个内容板块组成:
+
+- **文档**:提供地球与行星科学入门内容、专题导读与方法说明。首批内容覆盖时空尺度与板块构造、行星科学、古生物学和深空探测。
+- **访谈**:记录教师与研究者的学习经历、方向判断和科研经验,让读者看见知识之外的真实路径。
+- **动态**:发布网站进展、系列更新与编辑说明,留下内容如何被整理、核查和持续修订。
+
+我们尽量使用清晰的语言降低理解门槛,但不会因此省略证据、适用条件和科学认识中的不确定性。每篇内容都不是最终答案,而是一条能够继续追问和查证的路径。
+
+## 从哪里开始?
+
+第一次来到这里,可以先阅读[欢迎文档](../../docs/welcome/),了解网站结构和使用方式。想建立整体认识,可以从[地球科学基础](../../docs/geoscience-foundations/)开始;对其他方向感兴趣,也可以直接进入[行星科学](../../docs/planetary-science/)、[古生物学](../../docs/paleontology/)或[深空探测](../../docs/deep-space-exploration/)系列。
+
+如果你更关心人在学科中的经历,可以前往[微访谈](../../interviews/),从不同研究者的选择与建议中寻找参照。
+
+GeoGenesis 仍在起步阶段。我们会继续修订现有内容,也会逐步补充新的主题。希望这里能成为一张开放而可靠的地图,让更多人走近地球科学,也让对这颗行星的理解被更多人共享。
diff --git a/src/content/news/interview-series-launch.md b/src/content/news/interview-series-launch.md
index 9102faf..9cc017a 100644
--- a/src/content/news/interview-series-launch.md
+++ b/src/content/news/interview-series-launch.md
@@ -1,25 +1,31 @@
---
-title: 「阅读这颗行星的人」访谈系列正式上线
-summary: 三位研究者从山脉、火星与深海出发,谈论观测尺度、证据边界以及科学工作中那些不容易被看见的部分。
-publishedAt: 2026-06-28
-readTime: 5 分钟阅读
+title: GeoGenesis 微访谈系列正式上线
+summary: 十二位地球科学教师与研究者分享学习、择业和科研中的真实经历,为刚走近地学的学习者提供可以参考的路径。
+publishedAt: 2026-08-05
+readTime: 4 分钟阅读
tone: dark
-featured: false
-order: 3
+featured: true
+order: 2
---
-## 把人放回知识之中
+## 在知识之外,看见走进地学的人
-教科书通常从已经稳定的结论开始,但研究工作发生在结论之前:问题尚未清晰,数据并不完整,模型随时可能被新证据修改。
+专业介绍通常告诉我们地球科学研究什么,课程目录则告诉我们需要学习什么。但对刚进入大学的学生来说,许多更具体的问题仍然没有答案:怎样认识不同方向?什么时候适合进入课题组?成绩、兴趣与未来选择之间应该如何权衡?科研生活究竟是什么样子?
-「阅读这颗行星的人」希望记录的,正是这段常被省略的过程。
+GeoGenesis 微访谈从这些问题出发。首批上线的十二篇访谈,记录了地球科学教师与研究者对学习经历、方向选择和科研工作的回顾。受访者来自矿物岩石矿床、地球化学、古生物、地球物理、空间物理、能源与资源工程等不同领域,其中一篇访谈根据受访者意愿匿名发布。
-首期三篇访谈分别进入青藏高原东缘、火星遥感实验室与大西洋中脊。它们并不是人物履历的复述,而是围绕几个共同问题展开:
+## 十二段经历,不是一份标准答案
-- 一位研究者如何学会观察?
-- 面对有限证据时,如何描述不确定性?
-- 学科知识最终怎样与公众生活产生联系?
+这些访谈里没有一条适用于所有人的“成功路径”。
-## 接下来
+有人从调剂进入地质学,在野外实习和实验室轮转中逐渐找到兴趣;有人离开高薪工作投身科研;有人提醒学生不要过早把自己限制在一个细分方向,也有人强调主动联系教师、低成本试错和保持身心健康的重要性。
-后续访谈将继续覆盖矿物学、古气候和地球科学教育。我们也会公开访谈提纲与编辑方法,帮助更多学生记录自己所在的研究共同体。
+受访者的判断并不总是相同。我们保留这些差异,因为专业选择本就受到个人兴趣、成长阶段和现实条件的共同影响。访谈的价值不是替读者作出决定,而是让那些过去难以被看见的经验成为可供比较的参照。
+
+## 可以从哪里开始?
+
+如果你正在认识地球科学,可以先阅读关于学科全貌、大学学习和方向探索的访谈;如果你准备接触科研,可以关注课题组轮转、本科研究和师生沟通等话题;如果你正处在选择压力中,也可以从那些讨论不确定性、评价标准与长期生活的篇目开始。
+
+[查看全部微访谈](../../interviews/)
+
+微访谈还会继续记录不同领域、不同阶段的地学工作者。我们希望在知识之外,也留下人如何提出问题、作出选择,并在不断变化的道路上重新理解自己。
diff --git a/src/content/news/open-call-2026.md b/src/content/news/open-call-2026.md
deleted file mode 100644
index c922571..0000000
--- a/src/content/news/open-call-2026.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: GeoGenesis 2026 秋季内容共建计划启动
-summary: 我们正在寻找愿意一起整理课程、记录研究现场和讲述地球故事的新成员,让可靠的知识从这一届流向下一届。
-publishedAt: 2026-07-24
-readTime: 6 分钟阅读
-tone: light
-featured: true
-order: 1
----
-
-## 为什么发起这次共建?
-
-GeoGenesis 从一个很简单的问题开始:当一名学生第一次走进地球科学,他能否更快找到一张可靠的地图?
-
-这张地图不只是课程列表。它应该说明知识如何彼此连接,研究者如何提出问题,野外、实验室与计算工作又如何共同构成一门学科。过去一段时间,我们完成了第一批文档和访谈,也逐渐形成了一套可以持续协作的编辑流程。
-
-现在,我们希望让更多人加入这项工作。
-
-## 我们正在寻找谁?
-
-无论你来自地质、地球物理、地球化学、行星科学、海洋与大气,还是仍处在探索方向的阶段,都可以参与。
-
-- **课程整理者**:把课堂笔记转化为结构清晰、可持续修订的学习文档
-- **访谈协作者**:参与选题、资料准备、采访与文字编辑
-- **视觉与技术成员**:建设图示、交互内容和网站基础设施
-- **事实核查者**:帮助每一篇内容保留准确的来源与边界
-
-## 一次协作会如何发生?
-
-每个选题都从一页简短的提案开始。编辑组会协助确认读者、范围和证据标准,再进入资料整理、初稿、同行反馈与发布流程。
-
-> 我们不要求每个人一开始就是成熟的作者。比表达技巧更重要的,是愿意对证据负责,也愿意让内容在反馈中变得更好。
-
-首轮共建周期将在九月开始。具体报名方式与说明会时间将在站内继续更新。
diff --git a/src/content/news/planetary-reading-notes.md b/src/content/news/planetary-reading-notes.md
deleted file mode 100644
index 8ac702f..0000000
--- a/src/content/news/planetary-reading-notes.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: 行星演化导读完成首轮内容校订
-summary: 从原行星盘到表面环境,三篇入门文档现已完成结构调整、术语统一和延伸阅读路径梳理。
-publishedAt: 2026-07-12
-readTime: 4 分钟阅读
-tone: mid
-featured: true
-order: 2
----
-
-## 一条更清晰的阅读路径
-
-行星演化横跨天文学、地球化学、地球物理与气候科学。对初学者而言,真正困难的往往不是单个概念,而是不知道这些概念应该以怎样的顺序连接起来。
-
-本轮校订重新划分了三篇文档的任务:
-
-1. 先建立从尘埃、星子到行星的时间线
-2. 再理解加热、分异与内部结构
-3. 最后进入表面过程、宜居性和生命起源的交叉问题
-
-## 我们修改了什么?
-
-除了统一“吸积”“分异”“挥发分”等核心术语,我们也缩减了不必要的模型细节,并为遥感、原位分析和实验模拟补充了方法比较。
-
-这不是一次定稿。下一轮会重点补充关键示意图和可公开访问的阅读资料。
From 28b916e1d532589877d7f7d84c14770774c0b453 Mon Sep 17 00:00:00 2001
From: Staaaaaaaaar <2300012435@stu.pku.edu.cn>
Date: Wed, 5 Aug 2026 17:59:39 +0800
Subject: [PATCH 6/6] content: update site branding and improve visual elements
- Enhanced the `SiteMark` component with a new SVG design for better visual representation.
- Updated the `favicon.svg` and added a new `logo-mark.svg` for consistent branding across the site.
- Modified the `SiteHeader` and `SiteFooter` components to include a class for the site wordmark, improving styling and alignment.
- Adjusted CSS styles for the site identity to enhance typography and spacing.
---
docs/components.md | 2 +-
public/favicon.svg | 31 +++++++++++++++---
public/logo-mark.svg | 26 +++++++++++++++
src/components/site/SiteFooter.astro | 2 +-
src/components/site/SiteHeader.astro | 2 +-
src/components/site/SiteMark.astro | 47 +++++++++++++++-------------
src/styles/base.css | 11 ++++---
7 files changed, 87 insertions(+), 34 deletions(-)
create mode 100644 public/logo-mark.svg
diff --git a/docs/components.md b/docs/components.md
index f06ee11..00da4a7 100644
--- a/docs/components.md
+++ b/docs/components.md
@@ -6,7 +6,7 @@
### `SiteMark.astro`
-GeoGenesis 的几何站点标记。它没有 Props,颜色继承父元素,可同时用于浅色与深色背景。
+GeoGenesis 的最终几何标记,由三段粗圆角模块组成。主体颜色继承父元素以适配浅色、深色和叠加式页头,铜赭色与青绿色模块使用固定品牌色。可独立使用的矢量母版保存在 `public/logo-mark.svg`,浏览器图标保存在 `public/favicon.svg`。
### `SiteHeader.astro`
diff --git a/public/favicon.svg b/public/favicon.svg
index 26e21e7..787378e 100644
--- a/public/favicon.svg
+++ b/public/favicon.svg
@@ -1,6 +1,27 @@
-