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

1074 lines
40 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;
}
.nav-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
}
/* 右侧滚动按钮 */
.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-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0,0,0,0.5);
z-index: 2000;
display: none;
align-items: center;
justify-content: center;
}
.tts-overlay.show {
display: flex;
}
.tts-panel {
background: rgba(30,30,50,0.95);
backdrop-filter: blur(10px);
border-radius: 16px;
border: 1px solid var(--border-color);
padding: 24px;
width: 90%;
max-width: 400px;
box-shadow: 0 10px 40px rgba(0,0,0,0.3);
}
[data-theme="light"] .tts-panel {
background: rgba(255,255,255,0.95);
}
.tts-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
padding-bottom: 15px;
border-bottom: 1px solid var(--border-color);
}
.tts-title {
font-size: 18px;
font-weight: 600;
color: var(--text-primary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-close {
width: 32px;
height: 32px;
border-radius: 50%;
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: 18px;
transition: all 0.3s ease;
}
.tts-close:hover {
background: var(--btn-hover);
}
.tts-controls {
display: flex;
justify-content: center;
gap: 16px;
margin-bottom: 20px;
}
.tts-btn {
width: 56px;
height: 56px;
border-radius: 50%;
background: var(--btn-bg);
border: 2px solid var(--border-color);
color: var(--text-primary);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 20px;
transition: all 0.3s ease;
font-family: 'Noto Sans SC', sans-serif;
}
.tts-btn:hover {
background: var(--btn-hover);
transform: scale(1.1);
}
.tts-btn.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-color: #667eea;
transform: scale(1.1);
}
.tts-progress {
margin-bottom: 20px;
}
.tts-progress-bar {
height: 6px;
background: var(--btn-bg);
border-radius: 3px;
overflow: hidden;
margin-bottom: 8px;
}
.tts-progress-fill {
height: 100%;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
width: 0%;
transition: width 0.1s ease;
}
.tts-time {
font-size: 13px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
text-align: center;
}
.tts-speed {
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
}
.tts-speed-label {
font-size: 14px;
color: var(--text-secondary);
font-family: 'Noto Sans SC', sans-serif;
}
.tts-speed-select {
padding: 8px 16px;
background: var(--btn-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
color: var(--text-primary);
font-size: 14px;
cursor: pointer;
font-family: 'Noto Sans SC', sans-serif;
}
/* 侧边栏 - 标题固定,内容滚动 */
.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: 8px;
}
.nav-btn {
padding: 10px 12px;
font-size: 12px;
}
.scroll-buttons {
display: none;
}
.tts-panel {
padding: 20px;
width: 95%;
}
.tts-btn {
width: 48px;
height: 48px;
font-size: 18px;
}
.tts-title {
font-size: 16px;
}
}
/* 滚动条样式 */
.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 173</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>"我把你封印在黑色大地之前。"</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 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 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 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 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>"她是使徒之一,第二使徒。"</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 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 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 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 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 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 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-172.html" class="nav-btn ">上一章</a>
<a href="../chapters.html" class="nav-btn">目录</a>
<button class="nav-btn" id="ttsToggleBtn">朗读</button>
<a href="chapter-174.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-overlay" id="ttsOverlay">
<div class="tts-panel">
<div class="tts-header">
<div class="tts-title">🔊 语音朗读</div>
<button class="tts-close" id="ttsClose">×</button>
</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">慢速 (0.5x)</option>
<option value="0.75">较慢 (0.75x)</option>
<option value="1" selected>正常 (1x)</option>
<option value="1.25">较快 (1.25x)</option>
<option value="1.5">快速 (1.5x)</option>
<option value="2">极速 (2x)</option>
</select>
</div>
</div>
</div>
<!-- 侧边栏章节导航 -->
<aside class="sidebar">
<div class="sidebar-title">章节导航</div>
<div class="sidebar-content" id="sidebarContent">
<a href="chapter-143.html" class="sidebar-chapter ">第143章翡翠梦魇</a>
<a href="chapter-144.html" class="sidebar-chapter ">第144章诅咒的守护者</a>
<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 current">第173章米歇尔的羁绊</a>
<a href="chapter-174.html" class="sidebar-chapter ">第174章创世之光的净化</a>
<a href="chapter-175.html" class="sidebar-chapter ">第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(173)) {
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弹出面板 ==========
const ttsOverlay = document.getElementById('ttsOverlay');
const ttsToggleBtn = document.getElementById('ttsToggleBtn');
const ttsClose = document.getElementById('ttsClose');
// 打开TTS面板
ttsToggleBtn.addEventListener('click', () => {
ttsOverlay.classList.add('show');
initTTS();
});
// 关闭TTS面板
ttsClose.addEventListener('click', () => {
ttsOverlay.classList.remove('show');
});
// 点击遮罩关闭
ttsOverlay.addEventListener('click', (e) => {
if (e.target === ttsOverlay) {
ttsOverlay.classList.remove('show');
}
});
// ========== 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');
ttsToggleBtn.classList.add('active');
}
// 暂停
function pauseTTS() {
if (ttsIsPlaying) {
ttsSynth.pause();
ttsIsPaused = true;
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.add('active');
ttsToggleBtn.classList.remove('active');
}
}
// 停止
function stopTTS() {
ttsSynth.cancel();
ttsIsPlaying = false;
ttsIsPaused = false;
ttsCurrentIndex = 0;
updateTTSProgress();
document.getElementById('ttsPlay').classList.remove('active');
document.getElementById('ttsPause').classList.remove('active');
ttsToggleBtn.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('beforeunload', stopTTS);
</script>
</body>
</html>