jianzhihuixiang/alacarte-novel-website/chapters/chapter-107.html

950 lines
43 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>格兰之火 - 阿拉德:剑之回响</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-primary: linear-gradient(135deg, #0f0c29 0%, #302b63 50%, #24243e 100%);
--text-primary: #e0e0e0;
--text-secondary: #888;
--accent-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
--border-color: rgba(255,255,255,0.1);
--btn-bg: rgba(255,255,255,0.1);
--btn-hover: rgba(255,255,255,0.2);
}
[data-theme="light"] {
--bg-primary: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
--text-primary: #333;
--text-secondary: #666;
--border-color: rgba(0,0,0,0.1);
--btn-bg: rgba(0,0,0,0.05);
--btn-hover: rgba(0,0,0,0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Noto Serif SC', serif;
background: var(--bg-primary);
color: var(--text-primary);
line-height: 1.8;
min-height: 100vh;
transition: all 0.3s ease;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
padding-bottom: 120px;
}
/* 顶部导航 */
.top-nav {
position: fixed;
top: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
z-index: 1000;
padding: 10px 20px;
}
.top-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-link {
color: var(--text-primary);
text-decoration: none;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
padding: 8px 16px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
transition: all 0.3s ease;
}
.nav-link:hover {
background: var(--btn-hover);
}
.chapter-header {
text-align: center;
padding: 80px 0 40px;
border-bottom: 1px solid var(--border-color);
margin-bottom: 40px;
}
.chapter-number {
font-size: 14px;
color: var(--text-secondary);
letter-spacing: 4px;
text-transform: uppercase;
margin-bottom: 10px;
}
.chapter-title {
font-size: 32px;
font-weight: 700;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 20px;
}
.chapter-meta {
font-size: 14px;
color: var(--text-secondary);
}
.chapter-content {
font-size: 18px;
line-height: 2;
text-align: justify;
}
.chapter-content p {
margin-bottom: 1.5em;
text-indent: 2em;
}
.chapter-content p:first-of-type::first-letter {
font-size: 3em;
float: left;
line-height: 1;
margin-right: 8px;
margin-top: -5px;
background: var(--accent-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-weight: 700;
}
/* 固定底部导航 */
.fixed-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,0,0,0.3);
backdrop-filter: blur(10px);
border-top: 1px solid var(--border-color);
z-index: 1000;
padding: 15px 20px;
}
.fixed-nav-content {
max-width: 800px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.nav-btn {
padding: 12px 24px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
color: var(--text-primary);
text-decoration: none;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
font-size: 14px;
cursor: pointer;
}
.nav-btn:hover {
background: var(--btn-hover);
transform: translateY(-2px);
}
.nav-btn.disabled {
opacity: 0.3;
cursor: not-allowed;
pointer-events: none;
}
/* 右侧滚动按钮 */
.scroll-buttons {
position: fixed;
right: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1001;
}
.scroll-btn {
width: 40px;
height: 40px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.scroll-btn:hover {
background: var(--btn-hover);
}
/* TTS控制面板 */
.tts-panel {
position: fixed;
left: 20px;
bottom: 90px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1002;
background: rgba(0,0,0,0.6);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
padding: 15px;
min-width: 180px;
}
.tts-title {
font-size: 12px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 5px;
}
.tts-controls {
display: flex;
gap: 8px;
margin-bottom: 10px;
}
.tts-btn {
width: 36px;
height: 36px;
border-radius: 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.tts-btn:hover {
background: var(--btn-hover);
}
.tts-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
}
.tts-progress {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
}
.tts-progress-bar {
flex: 1;
height: 4px;
background: var(--btn-bg);
border-radius: 2px;
overflow: hidden;
}
.tts-progress-fill {
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
width: 0%;
transition: width 0.1s ease;
}
.tts-time {
font-size: 12px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
min-width: 80px;
}
.tts-speed {
display: flex;
align-items: center;
gap: 8px;
}
.tts-speed-label {
font-size: 12px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-speed-select {
padding: 4px 8px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 4px;
color: var(--text-primary);
font-size: 12px;
cursor: pointer;
font-family: 'Noto Sans SC', sans-serif;
}
@media (max-width: 600px) {
.tts-panel {
left: 10px;
right: 10px;
bottom: auto;
top: 60px;
min-width: auto;
padding: 12px;
width: auto;
z-index: 1003;
}
.tts-btn {
width: 32px;
height: 32px;
font-size: 12px;
}
.tts-title {
font-size: 11px;
}
.tts-speed-label {
font-size: 11px;
}
.tts-speed-select {
padding: 3px 6px;
font-size: 11px;
}
.tts-time {
font-size: 11px;
min-width: 60px;
}
/* 手机端隐藏滚动按钮给TTS腾空间 */
.scroll-buttons {
display: none;
}
}
@media (max-width: 400px) {
.tts-panel {
top: 55px;
padding: 10px;
}
.tts-controls {
gap: 6px;
}
.tts-btn {
width: 28px;
height: 28px;
font-size: 11px;
}
}
/* 侧边栏 - 标题固定,内容滚动 */
.sidebar {
position: fixed;
right: 20px;
top: 50%;
transform: translateY(-50%);
background: rgba(0,0,0,0.5);
backdrop-filter: blur(10px);
border-radius: 12px;
border: 1px solid var(--border-color);
width: 200px;
max-height: 70vh;
z-index: 999;
display: flex;
flex-direction: column;
}
.sidebar-title {
font-size: 14px;
color: var(--text-secondary);
text-transform: uppercase;
letter-spacing: 2px;
padding: 15px 20px;
border-bottom: 1px solid var(--border-color);
flex-shrink: 0;
}
.sidebar-content {
overflow-y: auto;
padding: 10px 20px 20px;
flex: 1;
scrollbar-width: thin;
scrollbar-color: transparent transparent;
transition: scrollbar-color 0.3s ease;
}
.sidebar-content:hover {
scrollbar-color: rgba(255,255,255,0.3) transparent;
}
.sidebar-content::-webkit-scrollbar {
width: 6px;
}
.sidebar-content::-webkit-scrollbar-track {
background: transparent;
}
.sidebar-content::-webkit-scrollbar-thumb {
background: transparent;
border-radius: 3px;
transition: background 0.3s ease;
}
.sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.3);
}
.sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(255,255,255,0.5);
}
[data-theme="light"] .sidebar-content:hover {
scrollbar-color: rgba(0,0,0,0.3) transparent;
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb {
background: rgba(0,0,0,0.3);
}
[data-theme="light"] .sidebar-content:hover::-webkit-scrollbar-thumb:hover {
background: rgba(0,0,0,0.5);
}
.sidebar-chapter {
display: block;
padding: 8px 0;
color: #aaa;
text-decoration: none;
font-size: 13px;
border-bottom: 1px solid rgba(255,255,255,0.05);
transition: all 0.3s ease;
line-height: 1.5;
}
.sidebar-chapter:hover {
color: #667eea;
}
.sidebar-chapter.current {
color: #667eea;
font-weight: 600;
}
@media (max-width: 1200px) {
.sidebar {
display: none;
}
}
@media (max-width: 600px) {
.chapter-title {
font-size: 24px;
}
.chapter-content {
font-size: 16px;
}
.fixed-nav-content {
gap: 10px;
}
.nav-btn {
padding: 10px 15px;
font-size: 12px;
}
.scroll-buttons {
right: 10px;
bottom: 80px;
}
.scroll-btn {
width: 36px;
height: 36px;
}
}
/* 滚动条样式 */
.sidebar::-webkit-scrollbar {
width: 4px;
}
.sidebar::-webkit-scrollbar-track {
background: transparent;
}
.sidebar::-webkit-scrollbar-thumb {
background: rgba(255,255,255,0.2);
border-radius: 2px;
}
</style>
</head>
<body>
<!-- 顶部导航 -->
<nav class="top-nav">
<div class="top-nav-content">
<a href="../index.html" class="nav-link">返回首页</a>
<button class="nav-link" id="themeToggle">切换主题</button>
</div>
</nav>
<div class="container">
<header class="chapter-header">
<div class="chapter-number">Chapter 107</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<p>格兰之森500年前。</p>
<p>金色的光芒在森林深处闪烁,空间如同水波般扭曲。一道身影从光芒中走出,踏在了这片古老的大地上。</p>
<p>林克睁开眼睛,映入眼帘的是一片郁郁葱葱的森林。高大的树木遮天蔽日,阳光透过树叶的缝隙洒下斑驳的光影。空气中弥漫着草木的清香,还有一丝若有若无的烟火气息。</p>
<p>"这就是...500年前的格兰之森?"</p>
<p>林克环顾四周,这里的景色与他记忆中的格兰之森几乎一模一样,但又有些微妙的不同。树木更加茂盛,空气中没有那种被污染后的浑浊感,一切都显得那么原始、那么纯净。</p>
<p>他低头看了看自己的双手感受着体内流转的剑魂之力。时空之门的穿越似乎对他的力量产生了一些影响——他能感觉到部分高阶技能变得难以施展仿佛被某种规则压制在70级以内。</p>
<p>"70级以内的技能..."林克喃喃自语,握紧了腰间的光剑"细雪之舞""足够了。"</p>
<p>他深吸一口气,朝着森林深处走去。根据卡西利亚斯的说法,格兰之火即将发生,而那场大火将改变整个阿拉德大陆的命运。更重要的是,那场大火与赛丽亚的身世有关——那个他深爱的女人,那个在艾尔文防线等待他归来的女人。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>林克在森林中穿行,很快就发现了异常。</p>
<p>前方传来打斗声,还有魔法的光芒闪烁。林克加快脚步,躲在一棵大树后观察。</p>
<p>他看到了一个意想不到的场景——</p>
<p>一个银发的男子正在与一群怪物战斗。那男子手持太刀,剑法凌厉,每一击都带着强大的剑气。他的动作行云流水,仿佛与周围的环境融为一体,虽然还没有未来那种历经沧桑的沉稳,但已经展现出了非凡的剑术天赋。</p>
<p>"西岚?"</p>
<p>林克认出了那个男子。四剑圣之一的西岚,未来的时空之门守护者。但现在的西岚看起来年轻许多,眼神中充满了朝气和锐气。</p>
<p>更让林克惊讶的是,西岚身边还有一个人——一个金发的少女,正躲在树后瑟瑟发抖。</p>
<p>那是一张林克无比熟悉的面孔。</p>
<p>赛丽亚。</p>
<p>不,不是他认识的那个赛丽亚。这个赛丽亚看起来更加稚嫩,眼神中充满了恐惧和迷茫。她穿着朴素的衣裙,身上没有任何力量的波动,就像一个普通的乡村少女。</p>
<p>"这就是...最初的赛丽亚?"林克心中震撼。</p>
<p>"该死,这些怪物是从哪里来的?"西岚一边战斗一边咒骂,他的太刀划出一道优美的弧线,将一只猫妖斩成两半,"小姑娘,你没事吧?"</p>
<p>"我...我不知道..."赛丽亚颤抖着说,声音中带着哭腔,"我只是...只是在这里醒来...什么都不记得了...我不知道我是谁...也不知道为什么会在这里..."</p>
<p>林克心中一震。</p>
<p>这就是格兰之火的真相吗?赛丽亚的身世,她失去的记忆,一切都要从这里开始。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>突然,森林深处传来一声巨响。</p>
<p>林克转头看去,只见一道巨大的火柱冲天而起,瞬间点燃了周围的树木。那火焰呈现出诡异的紫色,仿佛蕴含着某种邪恶的力量。火势蔓延得极快,转眼间就已经形成了一片火海,朝着四面八方扩散。</p>
<p>"不好!"西岚脸色大变,"是魔法火焰!这种规模的魔法...难道是那个传说中的使徒?"</p>
<p>他话还没说完,更多的怪物从火海中涌出。这些怪物浑身燃烧着紫色的火焰,眼中闪烁着疯狂的光芒,形态扭曲而恐怖。它们发出刺耳的嘶吼,朝着西岚和赛丽亚扑来。</p>
<p>"该死!"西岚咬牙,额头上渗出汗水,"小姑娘,快跑!往森林外面跑!"</p>
<p>但赛丽亚已经吓得动弹不得,她的双腿发软,只能眼睁睁地看着那些燃烧的怪物逼近,眼中满是绝望。</p>
<p>林克知道,他不能再躲藏了。</p>
<p>"流心·跃!"</p>
<p>他的身体如同离弦之箭般射出,光剑"细雪之舞"在空中划出一道冰蓝色的弧线。冰属性的剑气与火焰怪物碰撞,发出刺耳的嘶鸣声,白色的蒸汽瞬间弥漫开来。</p>
<p>"什么人?!"西岚惊讶地看向林克,眼中充满警惕。</p>
<p>林克没有回答,他的光剑已经连续斩出数剑,每一剑都精准地命中怪物的要害。里鬼剑术在他的手中如同艺术般流畅,剑光闪烁间,数只火焰怪物已经倒地。</p>
<p>"路过的剑士。"林克简短地回答,同时挡在了赛丽亚身前,他的背影如同一座山,将所有的危险都隔绝在外,"这些怪物交给我,你带她先走。"</p>
<p>西岚深深地看了林克一眼,那眼神中有着探究、警惕,还有一丝感激。但此刻情况紧急,他没有时间多问。</p>
<p>"好!多谢了!"</p>
<p>西岚拉起赛丽亚的手,朝着森林外跑去。赛丽亚在离开前回头看了林克一眼,那眼神中充满了感激、困惑,还有一丝莫名的熟悉感,仿佛在哪里见过这个神秘的剑士。</p>
<p>那一眼,让赛丽亚的心脏漏跳了一拍。</p>
<p>那个银发的剑士,他的背影如此熟悉,仿佛在她的梦中出现过无数次。虽然她的记忆一片空白,但内心深处却有一个声音在告诉她——这个人,很重要。</p>
<p>"等等..."赛丽亚想要开口,但西岚已经拉着她跑出了很远。</p>
<p>她最后回头看了一眼,那个剑士已经被火焰怪物包围,但他的剑光依然在火海中闪烁,如同一颗不屈的星辰。</p>
<p>"我们...还会再见面吗?"赛丽亚在心中默默问道。</p>
<p>林克没有回头,他的注意力已经全部集中在眼前的敌人身上。但他感觉到了那道目光,那道让他心痛的目光。</p>
<p>"对不起,赛丽亚..."他在心中默默说道,"现在我不能告诉你真相。但请相信500年后我一定会找到你。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>火焰怪物越来越多,仿佛无穷无尽,从四面八方的火海中涌出。林克挥舞着光剑,剑魂的技能在手中绽放——里鬼剑术如同狂风暴雨,流心·刺精准致命,拔刀斩横扫千军。每一击都带走数只怪物的生命,但更多的怪物前仆后继地涌来。</p>
<p>"破军升龙击!"</p>
<p>林克的身形如同游龙般穿梭在怪物群中,光剑带起一道金色的龙形剑气,将周围的怪物全部击飞。但那些怪物落地后,竟然又摇摇晃晃地站了起来,身上的紫色火焰燃烧得更加旺盛。</p>
<p>"不死之身?"林克皱眉,"不对,是有人在控制它们!"</p>
<p>他闭上眼睛,感受着周围的能量波动。很快,他就发现了异常——在火海的深处,有一股强大而邪恶的力量正在操控着这一切。那股力量他并不陌生,在寂静城与赫尔德的使者战斗时,他就感受过类似的气息。</p>
<p>"赫尔德..."林克低声说道,眼中闪过一丝寒光,"果然是你。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>林克不再与那些小怪纠缠,他的身形如同闪电般朝着火海深处冲去。沿途的怪物试图阻挡他,但都被他的剑气斩成碎片。</p>
<p>火海深处,林克终于看到了那个身影。</p>
<p>那是一个身穿黑色长袍、戴着面具的神秘人,银色的长发从兜帽中垂落。她站在一座由紫色火焰构成的祭坛上,双手高举,口中念诵着古老的咒语。黑色的长袍在火焰中飘动,如同死神的披风。</p>
<p>"黑袍人..."林克握紧光剑,"你就是这一切的幕后黑手!"</p>
<p>黑袍人转过头,面具下的眼睛看向林克,发出阴冷的笑声:"哦?居然有人能穿越我的火焰屏障?有趣...你是什么人?"</p>
<p>"一个来阻止你的人。"林克冷声说道,"赫尔德的走狗,你的阴谋不会得逞。"</p>
<p>黑袍人的身体微微一震,然后轻笑出声:"居然知道赫尔德大人?看来,你不是这个时代的人。是西岚那个小鬼打开的时空之门吗?不...他的力量还不够..."</p>
<p>她的目光变得锐利起来:"你是从未来来的?"</p>
<p>林克没有回答,他的光剑已经指向了黑袍人:"我不会让你烧毁格兰之森,也不会让你伤害赛丽亚。"</p>
<p>"赛丽亚?"黑袍人愣了一下,然后恍然大悟,"哦...你说那个容器啊。她可是我计划的关键,我怎么可能伤害她呢?这场大火,只是为了唤醒她体内的力量而已。"</p>
<p>她举起双手,紫色的火焰变得更加狂暴:"不过,既然你来了,那就留下吧。一个来自未来的灵魂,应该能为我的计划提供不少能量。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>战斗瞬间爆发!</p>
<p>黑袍人的实力比林克想象的还要强大。她操控着紫色的火焰,每一击都带着毁灭性的力量。林克挥舞着光剑,剑魂的技能全力施展——里鬼剑术、流心、拔刀斩、破军升龙击、猛龙断空斩,所有的技能如同行云流水般连贯而出。</p>
<p>但黑袍人仿佛能够预知他的动作,每一次攻击都被她轻松化解。</p>
<p>"就这点实力吗?"黑袍人嗤笑,"我还以为来自未来的你会有多强呢。看来,时空之门不仅限制了你的力量,还限制了你的成长啊。"</p>
<p>林克咬牙他知道对方说得没错。在70级的限制下他无法使用极·神剑术等高级技能实力大打折扣。</p>
<p>但他没有放弃。</p>
<p>"幻影剑舞!"</p>
<p>无数剑气从林克身上爆发形成了一道巨大的剑气风暴朝着黑袍人席卷而去。这是他在70级以内能够使用的最强技能</p>
<p>"雕虫小技!"黑袍人冷笑,双手结印,一道紫色的火焰屏障出现在身前。</p>
<p>剑气风暴与火焰屏障碰撞,发出震耳欲聋的轰鸣声。整个格兰之森都在震动,无数树木被余波摧毁。</p>
<p>最终,剑气风暴消散,火焰屏障也出现了裂痕。</p>
<p>"不错..."黑袍人看着林克,眼中闪过一丝赞赏,"在70级的限制下居然能伤到我。你有资格知道我的名字——我是赫尔德大人的使者『引导者』。"</p>
<p>她缓缓抬起手,紫色的火焰在她掌心凝聚成一个巨大的火球:"但是,游戏到此为止了。"</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>就在这千钧一发之际,一道银色的剑光从天而降,将黑袍人逼退!</p>
<p>"什么人?!"引导者大惊。</p>
<p>一个身影落在林克身边,正是西岚。但此刻的西岚与之前不同,他的身上散发着一种古老而神秘的气息,双眼中仿佛蕴含着时空的奥秘。</p>
<p>"西岚?"林克惊讶地看着他。</p>
<p>"不...不是西岚..."引导者的声音中带着一丝恐惧,"你是...时空的守护者?!"</p>
<p>西岚——或者说,被某种力量附身的西岚——没有回答。他只是淡淡地看了林克一眼,然后举起太刀,朝着引导者斩去。</p>
<p>那一刀,仿佛斩断了时空。</p>
<p>引导者发出一声凄厉的惨叫,她的身体开始崩溃,紫色的火焰四处飞散。</p>
<p>"该死...这次算你们赢了..."她的声音越来越虚弱,"但是,计划不会停止。格兰之火已经点燃,赛丽亚的力量即将觉醒。这一切,都是命中注定的..."</p>
<p>她的身体彻底消散,只留下一片紫色的火焰在燃烧。</p>
<p>西岚——时空的守护者——看了林克一眼,那眼神中有着探究、惊讶,还有一丝莫名的熟悉感。然后,他的身体一软,倒在了地上,那种古老的气息也随之消散。</p>
<p>林克连忙扶住他,发现西岚只是昏迷了过去,并没有生命危险。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p>格兰之火在继续燃烧,但火势已经减弱了许多。</p>
<p>林克站在火海中,看着昏迷的西岚,心中充满了复杂的情绪。他改变了历史吗?还是这一切本来就是历史的一部分?</p>
<p>远处,赛丽亚的身影若隐若现。她站在森林的边缘,看着这片燃烧的大地,眼中流下了泪水。</p>
<p>林克知道,从这一刻起,赛丽亚的命运已经改变。她将失去记忆,在艾尔文防线醒来,等待着一个名叫林克的冒险家。</p>
<p>而他自己,也必须离开了。时空之门的时限将至,如果他继续留在这里,就会被永远困在过去。</p>
<p>"赛丽亚..."林克轻声说道,"等着我...500年后,我们一定会再次相遇..."</p>
<p>他转身走向森林深处,那里有一道金色的光芒正在等待着他。</p>
<p>时空之门,即将关闭。</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</p>
<p style="text-align: center; color: var(--text-secondary); text-indent: 0; margin-top: 2em;">(第一百零五章完)</p>
</article>
</div>
<!-- 固定底部导航 -->
<nav class="fixed-nav">
<div class="fixed-nav-content">
<a href="chapter-106.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<a href="chapter-108.html" class="nav-btn ">下一章</a>
</div>
</nav>
<!-- 右侧滚动按钮 -->
<div class="scroll-buttons">
<button class="scroll-btn" id="scrollTop" title="回到顶部"></button>
<button class="scroll-btn" id="scrollBottom" title="回到底部"></button>
</div>
<!-- TTS语音朗读面板 -->
<div class="tts-panel" id="ttsPanel">
<div class="tts-title">语音朗读</div>
<div class="tts-controls">
<button class="tts-btn" id="ttsPlay" title="播放"></button>
<button class="tts-btn" id="ttsPause" title="暂停"></button>
<button class="tts-btn" id="ttsStop" title="停止"></button>
</div>
<div class="tts-progress">
<div class="tts-progress-bar">
<div class="tts-progress-fill" id="ttsProgressFill"></div>
</div>
<div class="tts-time" id="ttsTime">0 / 0</div>
</div>
<div class="tts-speed">
<span class="tts-speed-label">速度:</span>
<select class="tts-speed-select" id="ttsSpeed">
<option value="0.5">慢速</option>
<option value="0.75">较慢</option>
<option value="1" selected>正常</option>
<option value="1.25">较快</option>
<option value="1.5">快速</option>
<option value="2">极速</option>
</select>
</div>
</div>
<!-- 侧边栏章节导航 -->
<aside class="sidebar">
<div class="sidebar-title">章节导航</div>
<div class="sidebar-content" id="sidebarContent">
<a href="chapter-77.html" class="sidebar-chapter ">第77章海上列车·鲁夫特悬空海港</a>
<a href="chapter-78.html" class="sidebar-chapter ">第78章列车上的海贼·铁鳞团的覆灭</a>
<a href="chapter-79.html" class="sidebar-chapter ">第79章夺回西部线·卡勒特的余孽</a>
<a href="chapter-80.html" class="sidebar-chapter ">第80章雾都赫伊斯·无法地带的阴影</a>
<a href="chapter-81.html" class="sidebar-chapter ">第81章阿登高地·GT-9600</a>
<a href="chapter-82.html" class="sidebar-chapter ">第82章卡勒特指挥部·兰蒂卢斯</a>
<a href="chapter-83.html" class="sidebar-chapter ">第83章皇女的告白·天界的新篇章</a>
<a href="chapter-84.html" class="sidebar-chapter ">第84章幽灵列车·亡者的低语</a>
<a href="chapter-85.html" class="sidebar-chapter ">第85章伊顿工业区·克雷发电站</a>
<a href="chapter-86.html" class="sidebar-chapter ">第86章普鲁兹发电站·闪电之帕特里斯</a>
<a href="chapter-87.html" class="sidebar-chapter ">第87章特伦斯发电站·熔岩之萨姆</a>
<a href="chapter-88.html" class="sidebar-chapter ">第88章格兰迪发电站·虚空之弗曼</a>
<a href="chapter-89.html" class="sidebar-chapter ">第89章安图恩攻坚战·黑雾之源</a>
<a href="chapter-90.html" class="sidebar-chapter ">第90章安图恩攻坚战·震颤的大地</a>
<a href="chapter-91.html" class="sidebar-chapter ">第91章安图恩攻坚战·擎天之柱</a>
<a href="chapter-92.html" class="sidebar-chapter ">第92章安图恩攻坚战·黑色火山</a>
<a href="chapter-93.html" class="sidebar-chapter ">第93章安图恩攻坚战·使徒陨落</a>
<a href="chapter-94.html" class="sidebar-chapter ">第94章克洛诺斯岛·寂静城的召唤</a>
<a href="chapter-95.html" class="sidebar-chapter ">第95章寂静城的秘密</a>
<a href="chapter-96.html" class="sidebar-chapter ">第96章番外·贝奇的献身</a>
<a href="chapter-97.html" class="sidebar-chapter ">第97章光之舞会</a>
<a href="chapter-98.html" class="sidebar-chapter ">第98章钢铁之臂</a>
<a href="chapter-99.html" class="sidebar-chapter ">第99章能源熔炉</a>
<a href="chapter-100.html" class="sidebar-chapter ">第100章王之书库</a>
<a href="chapter-101.html" class="sidebar-chapter ">第101章不灭回廊</a>
<a href="chapter-102.html" class="sidebar-chapter ">第102章机械王座</a>
<a href="chapter-103.html" class="sidebar-chapter ">第103章番外·寂静城的早晨</a>
<a href="chapter-104.html" class="sidebar-chapter ">第104章番外·贝奇与艾泽拉</a>
<a href="chapter-105.html" class="sidebar-chapter ">第105章番外·卢克的嘱托</a>
<a href="chapter-106.html" class="sidebar-chapter ">第106章时空之门的召唤</a>
<a href="chapter-107.html" class="sidebar-chapter current">第107章格兰之火</a>
<a href="chapter-108.html" class="sidebar-chapter ">第108章瘟疫之源</a>
<a href="chapter-109.html" class="sidebar-chapter ">第109章卡勒特之初</a>
<a href="chapter-110.html" class="sidebar-chapter ">第110章无法地带</a>
<a href="chapter-111.html" class="sidebar-chapter ">第111章暗黑圣战</a>
<a href="chapter-112.html" class="sidebar-chapter ">第112章昔日悲鸣</a>
<a href="chapter-113.html" class="sidebar-chapter ">第113章凛冬</a>
<a href="chapter-114.html" class="sidebar-chapter ">第114章迷之觉悟</a>
<a href="chapter-115.html" class="sidebar-chapter ">第115章番外·艾丽丝的抉择</a>
<a href="chapter-116.html" class="sidebar-chapter ">第116章番外·后宫的日常</a>
<a href="chapter-117.html" class="sidebar-chapter ">第117章番外·与赛丽亚的约会</a>
<a href="chapter-118.html" class="sidebar-chapter ">第118章番外·与奥菲利亚的重逢</a>
<a href="chapter-119.html" class="sidebar-chapter ">第119章番外·与敏泰的雪山之行</a>
<a href="chapter-120.html" class="sidebar-chapter ">第120章番外·与莎兰的魔法时光</a>
<a href="chapter-121.html" class="sidebar-chapter ">第121章番外·与帕丽丝的格斗训练</a>
<a href="chapter-122.html" class="sidebar-chapter ">第122章番外·与莫纳亨的念动力</a>
<a href="chapter-123.html" class="sidebar-chapter ">第123章番外·与泽丁的天界巡逻</a>
<a href="chapter-124.html" class="sidebar-chapter ">第124章番外·与马琳的骑士之道</a>
<a href="chapter-125.html" class="sidebar-chapter ">第125章番外·与皇女的皇家约会</a>
<a href="chapter-126.html" class="sidebar-chapter ">第126章番外·与米娅的工坊时光</a>
<a href="chapter-127.html" class="sidebar-chapter ">第127章番外·与贝奇的人造之心</a>
<a href="chapter-128.html" class="sidebar-chapter ">第128章番外·与艾泽拉的守护誓言</a>
<a href="chapter-129.html" class="sidebar-chapter ">第129章魔界的召唤</a>
<a href="chapter-130.html" class="sidebar-chapter ">第130章魔界营地</a>
<a href="chapter-131.html" class="sidebar-chapter ">第131章凯蒂的指引</a>
<a href="chapter-132.html" class="sidebar-chapter ">第132章营地危机</a>
<a href="chapter-133.html" class="sidebar-chapter ">第133章尼梅尔的心意</a>
<a href="chapter-134.html" class="sidebar-chapter ">第134章中央公园</a>
<a href="chapter-135.html" class="sidebar-chapter ">第135章剑圣的试炼</a>
<a href="chapter-136.html" class="sidebar-chapter ">第136章地轨中心</a>
<a href="chapter-137.html" class="sidebar-chapter ">第137章魔剑士阿斯兰</a>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(107)) {
readChapters.push({{CHAPTER_ID}});
localStorage.setItem('readChapters', JSON.stringify(readChapters));
}
// 主题切换
const themeToggle = document.getElementById('themeToggle');
const savedTheme = localStorage.getItem('theme') || 'dark';
document.documentElement.setAttribute('data-theme', savedTheme);
themeToggle.textContent = savedTheme === 'dark' ? '浅色' : '深色';
themeToggle.addEventListener('click', () => {
const currentTheme = document.documentElement.getAttribute('data-theme');
const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
themeToggle.textContent = newTheme === 'dark' ? '浅色' : '深色';
});
// 滚动到顶部
document.getElementById('scrollTop').addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
// 滚动到底部
document.getElementById('scrollBottom').addEventListener('click', () => {
window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
});
// 页面加载时,侧边栏自动滚动到当前章节
window.addEventListener('load', () => {
const sidebarContent = document.getElementById('sidebarContent');
const currentChapter = sidebarContent.querySelector('.current');
if (currentChapter) {
currentChapter.scrollIntoView({ behavior: 'smooth', block: 'center' });
}
});
// ========== TTS语音朗读功能 ==========
let ttsSynth = window.speechSynthesis;
let ttsUtterance = null;
let ttsText = '';
let ttsSentences = [];
let ttsCurrentIndex = 0;
let ttsIsPlaying = false;
let ttsIsPaused = false;
let ttsSpeed = 1;
// 初始化:提取章节内容
function initTTS() {
const contentEl = document.querySelector('.chapter-content');
if (!contentEl) return;
// 获取所有段落文本清理HTML标签
ttsText = contentEl.innerText || contentEl.textContent;
// 分割成句子(中文按句号、问号、感叹号分割)
ttsSentences = ttsText.match(/[^。!?\n]+[。!?\n]+|[^。!?\n]+$/g) || [ttsText];
ttsSentences = ttsSentences.filter(s => s.trim().length > 0);
updateTTSProgress();
}
// 更新进度显示
function updateTTSProgress() {
const total = ttsSentences.length;
const current = ttsCurrentIndex;
document.getElementById('ttsTime').textContent = `${current} / ${total}`;
const percent = total > 0 ? (current / total * 100) : 0;
document.getElementById('ttsProgressFill').style.width = `${percent}%`;
}
// 播放当前句子
function playCurrentSentence() {
if (ttsCurrentIndex >= ttsSentences.length) {
stopTTS();
return;
}
const text = ttsSentences[ttsCurrentIndex].trim();
ttsUtterance = new SpeechSynthesisUtterance(text);
ttsUtterance.lang = 'zh-CN';
ttsUtterance.rate = ttsSpeed;
// 尝试选择中文语音
const voices = ttsSynth.getVoices();
const zhVoice = voices.find(v => v.lang.includes('zh') || v.lang.includes('CN'));
if (zhVoice) {
ttsUtterance.voice = zhVoice;
}
ttsUtterance.onend = () => {
if (ttsIsPlaying && !ttsIsPaused) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsUtterance.onerror = (e) => {
console.error('TTS error:', e);
if (ttsIsPlaying) {
ttsCurrentIndex++;
updateTTSProgress();
playCurrentSentence();
}
};
ttsSynth.speak(ttsUtterance);
}
// 播放
function playTTS() {
if (ttsSentences.length === 0) {
initTTS();
}
if (ttsIsPaused) {
ttsSynth.resume();
ttsIsPaused = false;
} else {
ttsIsPlaying = true;
playCurrentSentence();
}
document.getElementById('ttsPlay').classList.add('active');
document.getElementById('ttsPause').classList.remove('active');
}
// 暂停
function pauseTTS() {
if (ttsIsPlaying) {
ttsSynth.pause();
ttsIsPaused = true;
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.add('active');
}
}
// 停止
function stopTTS() {
ttsSynth.cancel();
ttsIsPlaying = false;
ttsIsPaused = false;
ttsCurrentIndex = 0;
updateTTSProgress();
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.remove('active');
}
// 设置速度
function setTTSSpeed(speed) {
ttsSpeed = parseFloat(speed);
// 如果正在播放,需要重新开始当前句子
if (ttsIsPlaying && !ttsIsPaused) {
ttsSynth.cancel();
playCurrentSentence();
}
}
// 绑定事件
document.getElementById('ttsPlay').addEventListener('click', playTTS);
document.getElementById('ttsPause').addEventListener('click', pauseTTS);
document.getElementById('ttsStop').addEventListener('click', stopTTS);
document.getElementById('ttsSpeed').addEventListener('change', (e) => setTTSSpeed(e.target.value));
// 加载语音列表(某些浏览器需要异步加载)
if (speechSynthesis.onvoiceschanged !== undefined) {
speechSynthesis.onvoiceschanged = initTTS;
}
// 页面加载时初始化
window.addEventListener('load', () => {
initTTS();
});
// 页面离开时停止播放
window.addEventListener('beforeunload', stopTTS);
</script>
</body>
</html>