jianzhihuixiang/alacarte-novel-website/chapters/chapter-175.html
2026-03-29 14:08:36 +08:00

1027 lines
39 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: 1001;
background: rgba(0,0,0,0.5);
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: 75px;
min-width: auto;
padding: 12px;
width: auto;
}
.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;
}
}
@media (max-width: 400px) {
.tts-panel {
bottom: 70px;
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 175</div>
<h1 class="chapter-title">{{CHAPTER_TITLE}}</h1>
</header>
<article class="chapter-content">
<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 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 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 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 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 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 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 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 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 style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</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 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 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 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 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 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 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 style="text-align: center; color: var(--text-secondary); text-indent: 0;">···</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 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 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 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 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>
<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-174.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<a href="chapter-176.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-145.html" class="sidebar-chapter ">第145章精灵的誓言</a>
<a href="chapter-146.html" class="sidebar-chapter ">第146章深渊之眼</a>
<a href="chapter-147.html" class="sidebar-chapter ">第147章赫尔德的仪式</a>
<a href="chapter-148.html" class="sidebar-chapter ">第148章战后余晖</a>
<a href="chapter-149.html" class="sidebar-chapter ">第149章泰波尔斯的召唤</a>
<a href="chapter-150.html" class="sidebar-chapter ">第150章天空之城</a>
<a href="chapter-151.html" class="sidebar-chapter ">第151章风暴试炼</a>
<a href="chapter-152.html" class="sidebar-chapter ">第152章光芒与暗影</a>
<a href="chapter-153.html" class="sidebar-chapter ">第153章天空之战</a>
<a href="chapter-154.html" class="sidebar-chapter ">第154章天空之战</a>
<a href="chapter-155.html" class="sidebar-chapter ">第155章天空之战</a>
<a href="chapter-156.html" class="sidebar-chapter ">第156章格兰之森异象</a>
<a href="chapter-157.html" class="sidebar-chapter ">第157章魔界深处</a>
<a href="chapter-158.html" class="sidebar-chapter ">第158章幻象迷宫</a>
<a href="chapter-159.html" class="sidebar-chapter ">第159章无形之战</a>
<a href="chapter-160.html" class="sidebar-chapter ">第160章无形者的秘密</a>
<a href="chapter-161.html" class="sidebar-chapter ">第161章光之试炼</a>
<a href="chapter-162.html" class="sidebar-chapter ">第162章希洛克的陷阱</a>
<a href="chapter-163.html" class="sidebar-chapter ">第163章无形之战</a>
<a href="chapter-164.html" class="sidebar-chapter ">第164章日常的温馨</a>
<a href="chapter-165.html" class="sidebar-chapter ">第165章莎莎的信</a>
<a href="chapter-166.html" class="sidebar-chapter ">第166章圣者之鸣号</a>
<a href="chapter-167.html" class="sidebar-chapter ">第167章黑色大地入口</a>
<a href="chapter-168.html" class="sidebar-chapter ">第168章焦黑之地深入</a>
<a href="chapter-169.html" class="sidebar-chapter ">第169章暗黑骑士团</a>
<a href="chapter-170.html" class="sidebar-chapter ">第170章黑暗中的记忆</a>
<a href="chapter-171.html" class="sidebar-chapter ">第171章混沌王座</a>
<a href="chapter-172.html" class="sidebar-chapter ">第172章混沌之神的力量</a>
<a href="chapter-173.html" class="sidebar-chapter ">第173章米歇尔的羁绊</a>
<a href="chapter-174.html" class="sidebar-chapter ">第174章创世之光的净化</a>
<a href="chapter-175.html" class="sidebar-chapter current">第175章混沌的终结</a>
<a href="chapter-176.html" class="sidebar-chapter ">第176章篇章落幕</a>
<a href="chapter-177.html" class="sidebar-chapter ">第177章番外·米歇尔的最后祝福</a>
<a href="chapter-178.html" class="sidebar-chapter ">第178章番外·奥兹玛的遗言</a>
</div>
</aside>
<script>
// 记录阅读进度
let readChapters = JSON.parse(localStorage.getItem('readChapters') || '[]');
if (!readChapters.includes(175)) {
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>