~cytrogen/blog-public

blog-public/index.html -rw-r--r-- 22.8 KiB
b922ad66Cytrogen Deploy 2026-04-08 02:26:04 a day ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
<!DOCTYPE html><html lang="zh" data-theme="dark"><head><meta charset="utf-8"><meta name="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Cytrogen 的个人博客</title><meta name="description" content="Cytrogen 的个人博客,Cytrogen's Blog"><link rel="icon" href="favicon.png"><link rel="canonical"><link rel="webmention" href="https://webmention.io/blog.cytrogen.icu/webmention"><link rel="me" href="https://gts.cytrogen.icu/@Cytrogen"><link rel="me" href="mailto:blog@cytrogen.icu"><meta name="fediverse:creator" content="@Cytrogen@gts.cytrogen.icu"><link rel="preload" href="fonts/opensans-regular-latin.woff2" as="font" type="font/woff2" crossorigin="anonymous"><style>@font-face {
  font-family: 'Open Sans';
  src: url('fonts/opensans-regular-latin.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  size-adjust: 107%;
  ascent-override: 97%;
  descent-override: 25%;
  line-gap-override: 0%;
}
</style><script>(function() {
  try {
    // 优先级:用户选择 > 系统偏好 > 默认浅色
    const saved = localStorage.getItem('theme');
    const theme = saved || 
      (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
    
    document.documentElement.setAttribute('data-theme', theme);
    document.documentElement.style.colorScheme = theme;
  } catch (error) {
    // 失败时使用默认主题,不阻塞渲染
    document.documentElement.setAttribute('data-theme', 'light');
  }
})();
</script><link rel="stylesheet" href="css/ares.css"><script data-netlify-skip-bundle="true">(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const theme = document.documentElement.getAttribute('data-theme');
    const pageWrapper = document.getElementById('page-wrapper');
    if (pageWrapper && theme) {
      pageWrapper.setAttribute('data-theme', theme);
    }
  });
})();

</script><!-- hexo injector head_end start -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.12.0/dist/katex.min.css">

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hexo-math@4.0.0/dist/style.css">
<!-- hexo injector head_end end --><meta name="generator" content="Hexo 8.1.1"><link rel="alternate" href="atom.xml" title="Cytrogen 的个人博客" type="application/atom+xml">
</head><body><div id="page-wrapper"><a class="skip-link" href="#main-content">跳到主要内容</a><div class="wrap"><header><a class="logo-link" href="index.html"><img src="favicon.png" alt="logo"></a><div class="h-card visually-hidden"><img class="u-photo" src="https://blog.cytrogen.icu/favicon.png" alt="Cytrogen"><a class="p-name u-url u-uid" href="https://blog.cytrogen.icu">Cytrogen</a><p class="p-note">Cytrogen 的个人博客,Cytrogen's Blog</p><a class="u-url" rel="me noopener" target="_blank" href="https://gts.cytrogen.icu/@Cytrogen">Mastodon</a></div><nav class="site-nav"><div class="nav-main"><div class="nav-primary"><ul class="nav-list hidden-mobile"><li class="nav-item"><a class="nav-link active" href="index.html">首页</a></li></ul><div class="nav-tools"><div class="language-menu"><button class="language-toggle" type="button"><svg class="icon icon-globe" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm7.5-6.923c-.67.204-1.335.82-1.887 1.855A7.97 7.97 0 0 0 5.145 4H7.5V1.077zM4.09 4a9.267 9.267 0 0 1 .64-1.539 6.7 6.7 0 0 1 .597-.933A7.025 7.025 0 0 0 2.255 4H4.09zm-.582 3.5c.03-.877.138-1.718.312-2.5H1.674a6.958 6.958 0 0 0-.656 2.5h2.49zM4.847 5a12.5 12.5 0 0 0-.338 2.5H7.5V5H4.847zM8.5 5v2.5h2.99a12.495 12.495 0 0 0-.337-2.5H8.5zM4.51 8.5a12.5 12.5 0 0 0 .337 2.5H7.5V8.5H4.51zm3.99 0V11h2.653c.187-.765.306-1.608.338-2.5H8.5zM5.145 12c.138.386.295.744.468 1.068.552 1.035 1.218 1.65 1.887 1.855V12H5.145zm.182 2.472a6.696 6.696 0 0 1-.597-.933A9.268 9.268 0 0 1 4.09 12H2.255a7.024 7.024 0 0 0 3.072 2.472zM3.82 11a13.652 13.652 0 0 1-.312-2.5h-2.49c.062.89.291 1.733.656 2.5H3.82zm6.853 3.472A7.024 7.024 0 0 0 13.745 12H11.91a9.27 9.27 0 0 1-.64 1.539 6.688 6.688 0 0 1-.597.933zM8.5 12v2.923c.67-.204 1.335-.82 1.887-1.855A7.97 7.97 0 0 0 10.855 12H8.5zm3.68-1h2.146c.365-.767.594-1.61.656-2.5h-2.49a13.65 13.65 0 0 1-.312 2.5zm2.802-3.5a6.959 6.959 0 0 0-.656-2.5H12.18c.174.782.282 1.623.312 2.5h2.49zM11.27 2.461c.247.464.462.98.64 1.539h1.835a7.024 7.024 0 0 0-3.072-2.472c.218.284.418.598.597.933zM10.855 4a7.966 7.966 0 0 0-.468-1.068C9.835 1.897 9.17 1.282 8.5 1.077V4h2.355z"></path></svg><span>中文</span></button><div class="language-dropdown"><a class="language-option" href="/en/index.html">English</a></div></div></div><div class="nav-controls"><div class="more-menu hidden-mobile"><button class="more-toggle" type="button"><span>更多</span><svg class="icon icon-chevron-down" width="12" height="12" viewBox="0 0 12 12" fill="currentColor" aria-hidden="true" focusable="false"><path d="M6 8.825c-.2 0-.4-.1-.5-.2l-3.3-3.3c-.3-.3-.3-.8 0-1.1s.8-.3 1.1 0l2.7 2.7 2.7-2.7c.3-.3.8-.3 1.1 0s.3.8 0 1.1l-3.3 3.3c-.1.1-.3.2-.5.2z"></path></svg></button><div class="more-dropdown"><ul class="dropdown-list"><li class="dropdown-item"><a class="nav-link" href="/archives/index.html">归档</a></li><li class="dropdown-item"><a class="nav-link" href="/categories/index.html">分类</a></li><li class="dropdown-item"><a class="nav-link" href="/tags/index.html">标签</a></li><li class="dropdown-item"><a class="nav-link" href="/about/index.html">关于</a></li><li class="dropdown-item"><a class="nav-link" href="/sitemap/index.html">领地地图</a></li></ul></div></div><div class="theme-switcher"><button class="theme-toggle" type="button" role="switch" aria-pressed="false" aria-label="切换主题"><div class="theme-icon moon-icon"><svg class="icon icon-moon" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"></path></svg></div><div class="theme-icon sun-icon"><svg class="icon icon-sun" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 11a3 3 0 1 1 0-6 3 3 0 0 1 0 6zm0 1a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"></path></svg></div></button></div><details class="mobile-menu-details hidden-desktop"><summary class="hamburger-menu" aria-label="nav.menu"><svg class="icon icon-bars" width="16" height="16" viewBox="0 0 16 16" fill="currentColor" aria-hidden="true" focusable="false"><path d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"></path></svg><span class="menu-text">nav.menu</span></summary><div class="mobile-menu-dropdown"><ul class="mobile-nav-list"><li class="mobile-nav-item"><a class="mobile-nav-link" href="index.html">首页</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="/archives/index.html">归档</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="/categories/index.html">分类</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="/tags/index.html">标签</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="/about/index.html">关于</a></li><li class="mobile-nav-item"><a class="mobile-nav-link" href="/sitemap/index.html">领地地图</a></li></ul></div></details></div></div></div></nav></header><main class="container" id="main-content" tabindex="-1"><div class="h-feed"><span class="p-name visually-hidden">Cytrogen 的个人博客</span><ul class="home post-list"><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/c2db.html">了解 Kagi 的历史</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-04-04T04:00:00.000Z">4/4/2026</time><time class="dt-updated visually-hidden" datetime="2026-04-05T17:56:44.227Z"></time></div><div class="post-content p-summary"><p>上个月我在 <a target="_blank" rel="noopener" href="https://store.kagi.com/">Kagi Store</a> 上下单了 Kagi 的 T 恤衫、袜子周边。不为别的,Kagi 的吉祥物设计很可爱,画风很独特。</p>
<p>不过在搜寻时我发现了这个 Hacker News <a target="_blank" rel="noopener" href="https://news.ycombinator.com/item?id=40011314">链接</a>,也迫使我不得不去探索 Kagi,这个大概被我神话过头的公司。</p></div><a class="read-more" href="posts/c2db.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/a4c0.html">想法在丙午蚕月迭代</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-04-01T04:00:00.000Z">4/1/2026</time><time class="dt-updated visually-hidden" datetime="2026-04-01T22:30:53.703Z"></time></div><div class="post-content p-summary"><p>本月的条目和内容依然不多。待税务季结束后我会重新花费精力在月刊上。</p></div><a class="read-more" href="posts/a4c0.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/eac7.html">那些不受欢迎的想法・贰</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-03-23T04:00:00.000Z">3/23/2026</time><time class="dt-updated visually-hidden" datetime="2026-04-01T22:29:07.742Z"></time></div><div class="post-content p-summary"><p>三月份的「那些不受欢迎的想法」活动结束了。说实话,这次的内容并没有二月份的那么印象深刻。简单来说,便是不够「不受欢迎」。</p></div><a class="read-more" href="posts/eac7.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/1572.html">没有情人的情人节</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-03-15T04:00:00.000Z">3/15/2026</time><time class="dt-updated visually-hidden" datetime="2026-03-24T00:30:06.148Z"></time></div><div class="post-content p-summary"><p>室友上个月主持的 <a href="/posts/fbd.html">活动</a> 里,我忘了说一个话题。不过正好也可以借此说一些我的观点。活动那天是情人节,而提出者说:「人们不需要恋爱关系。」</p></div><a class="read-more" href="posts/1572.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/7ae3.html">奶茶店毕业</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-03-14T04:00:00.000Z">3/14/2026</time><time class="dt-updated visually-hidden" datetime="2026-03-14T22:56:03.574Z"></time></div><div class="post-content p-summary"><p>早在 <a href="/posts/dc84.html">第一篇月刊</a> 里,我就说过去年八月份我找了份兼职,主要是得快速还笔钱。这一做就是半年,而在二月份我提了离职、逃跑了。</p></div><a class="read-more" href="posts/7ae3.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/a778.html">入门编写 SVG</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-03-11T04:00:00.000Z">3/11/2026</time><time class="dt-updated visually-hidden" datetime="2026-03-11T23:34:26.946Z"></time></div><div class="post-content p-summary"><p>这一切要从我决定重构 <a target="_blank" rel="noopener" href="https://cytrogen.icu">https://cytrogen.icu</a> 开始(当你看到这篇文章时,访问该链接就能看到雏形了)。原本它是我的博客网站的地址,后来我想要一个更像是个人网络的设计,即根域名为个人主页,博客网站放在<code>blog</code>子域名上。</p></div><a class="read-more" href="posts/a778.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/e3b9.html">想法在丙午阳中迭代</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-02-28T05:00:00.000Z">2/28/2026</time><time class="dt-updated visually-hidden" datetime="2026-03-11T05:44:51.604Z"></time></div><div class="post-content p-summary"><p>这个月我忙于一些现实中的事情,结果连月刊和自己一个月里都做了什么,全都忘了个干净……</p>
<p>我希望这会是你能看到的,最后一个条目如此之少的月刊。</p></div><a class="read-more" href="posts/e3b9.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/d823.html">我的胶囊旅馆开张了</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-02-25T05:00:00.000Z">2/25/2026</time><time class="dt-updated visually-hidden" datetime="2026-02-26T04:44:36.523Z"></time></div><div class="post-content p-summary"><p>此胶囊旅馆非彼胶囊旅馆。虽说我对现实中的胶囊旅馆很感兴趣,但至今都没有睡过一次,去开张一家真正的胶囊旅馆更是无稽之谈。标题中的「胶囊旅馆」指的是通过 Gemini 协议提供内容的独立信息集合。</p></div><a class="read-more" href="posts/d823.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/fbd.html">那些不受欢迎的想法</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-02-25T05:00:00.000Z">2/25/2026</time><time class="dt-updated visually-hidden" datetime="2026-03-09T19:44:52.242Z"></time></div><div class="post-content p-summary"><p>室友自上个月开始,和另一位有趣的人联合举办了一个活动,名为「那些不受欢迎的想法」。</p></div><a class="read-more" href="posts/fbd.html">...阅读全文</a></article></li><li class="post-list-item"><article class="post-block h-entry"><h2 class="post-title"><a class="post-title-link u-url p-name" href="posts/8e54.html">汇编语言学习・壹</a></h2><div class="post-info"><time class="post-date dt-published" datetime="2026-02-23T05:00:00.000Z">2/23/2026</time><time class="dt-updated visually-hidden" datetime="2026-02-24T05:58:57.367Z"></time></div><div class="post-content p-summary"><p>学习汇编语言的笔记。</p></div><a class="read-more" href="posts/8e54.html">...阅读全文</a></article></li></ul></div></main><footer><div class="paginator"><a class="next" href="page/2/">下一页</a></div><div class="copyright"><p class="footer-links"><a href="/friends/index.html">友链</a><span class="footer-separator"> ·</span><a href="/links/index.html">邻邦</a><span class="footer-separator"> ·</span><a href="/contact/index.html">联络</a><span class="footer-separator"> ·</span><a href="/colophon/index.html">营造记</a><span class="footer-separator"> ·</span><a href="/atom.xml">RSS订阅</a></p><p>© 2025 - 2026 <a href="https://blog.cytrogen.icu">Cytrogen</a>, powered by <a href="https://hexo.io/" target="_blank">Hexo</a> and <a href="https://github.com/cytrogen/hexo-theme-ares" target="_blank">hexo-theme-ares</a>.</p><p><a href="https://blogscn.fun" target="_blank" rel="noopener">BLOGS·CN</a></p></div></footer></div></div><a class="back-to-top" href="#top" aria-label="返回顶部"><svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true"><path d="M3.293 9.707a1 1 0 010-1.414L9.586 2a2 2 0 012.828 0l6.293 6.293a1 1 0 01-1.414 1.414L11 3.414V17a1 1 0 11-2 0V3.414L2.707 9.707a1 1 0 01-1.414 0z"></path></svg></a><script>document.addEventListener('DOMContentLoaded', function() {
  const codeBlocks = document.querySelectorAll('figure.highlight');
  
  codeBlocks.forEach(block => {
    let caption = block.querySelector('figcaption');
    if (!caption) {
      caption = document.createElement('figcaption');
      block.insertBefore(caption, block.firstChild);
    }

    const info = document.createElement('div');
    info.className = 'info';
    
    const filename = caption.querySelector('span');
    if (filename) {
      filename.className = 'filename';
      info.appendChild(filename);
    }
    
    const lang = block.className.split(' ')[1];
    if (lang) {
      const langSpan = document.createElement('span');
      langSpan.className = 'lang-name';
      langSpan.textContent = lang;
      info.appendChild(langSpan);
    }

    const sourceLink = caption.querySelector('a');
    if (sourceLink) {
      sourceLink.className = 'source-link';
      info.appendChild(sourceLink);
    }

    const actions = document.createElement('div');
    actions.className = 'actions';

    const codeHeight = block.scrollHeight;
    const threshold = 300;

    if (codeHeight > threshold) {
      block.classList.add('folded');
      
      const toggleBtn = document.createElement('button');
      toggleBtn.textContent = '展开';
      toggleBtn.addEventListener('click', () => {
        block.classList.toggle('folded');
        toggleBtn.textContent = block.classList.contains('folded') ? '展开' : '折叠';
      });
      actions.appendChild(toggleBtn);
    }

    const copyBtn = document.createElement('button');
    copyBtn.textContent = '复制';
    copyBtn.addEventListener('click', async () => {
      const codeLines = block.querySelectorAll('.code .line');
      const code = Array.from(codeLines)
        .map(line => line.textContent)
        .join('\n')
        .replace(/\n\n/g, '\n');
      
      try {
        await navigator.clipboard.writeText(code);
        copyBtn.textContent = '已复制';
        copyBtn.classList.add('copied');
        
        setTimeout(() => {
          copyBtn.textContent = '复制';
          copyBtn.classList.remove('copied');
        }, 3000);
      } catch (err) {
        console.error('复制失败:', err);
        copyBtn.textContent = '复制失败';
        
        setTimeout(() => {
          copyBtn.textContent = '复制';
        }, 3000);
      }
    });
    actions.appendChild(copyBtn);

    caption.innerHTML = '';
    caption.appendChild(info);
    caption.appendChild(actions);

    const markedLines = block.getAttribute('data-marked-lines');
    if (markedLines) {
      const lines = markedLines.split(',');
      lines.forEach(range => {
        if (range.includes('-')) {
          const [start, end] = range.split('-').map(Number);
          for (let i = start; i <= end; i++) {
            const line = block.querySelector(`.line-${i}`);
            if (line) line.classList.add('marked');
          }
        } else {
          const line = block.querySelector(`.line-${range}`);
          if (line) line.classList.add('marked');
        }
      });
    }
  });
});</script><script async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js" id="MathJax-script"></script><script>(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const themeToggle = document.querySelector('.theme-toggle');
    
    if (!themeToggle) return;
    
    const getCurrentTheme = () => {
      return document.documentElement.getAttribute('data-theme') || 'light';
    };
    
    const updateUI = (theme) => {
      const isDark = theme === 'dark';
      themeToggle.setAttribute('aria-pressed', isDark.toString());
    };
    
    const setTheme = (theme) => {
      document.documentElement.setAttribute('data-theme', theme);
      document.documentElement.style.colorScheme = theme;
      
      const pageWrapper = document.getElementById('page-wrapper');
      if (pageWrapper) {
        pageWrapper.setAttribute('data-theme', theme);
      }
      
      // Find and remove the temporary anti-flicker style tag if it exists.
      // This ensures the main stylesheet takes full control after the initial load.
      const antiFlickerStyle = document.getElementById('anti-flicker-style');
      if (antiFlickerStyle) {
        antiFlickerStyle.remove();
      }
      
      localStorage.setItem('theme', theme);
      updateUI(theme);
    };
    
    const toggleTheme = () => {
      const current = getCurrentTheme();
      const newTheme = current === 'light' ? 'dark' : 'light';
      setTheme(newTheme);
    };
    
    updateUI(getCurrentTheme());
    
    themeToggle.addEventListener('click', toggleTheme);
    
    if (window.matchMedia) {
      const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
      mediaQuery.addEventListener('change', function(e) {
        if (!localStorage.getItem('theme')) {
          const theme = e.matches ? 'dark' : 'light';
          setTheme(theme);
        }
      });
    }
  });
})();
</script><script src="js/details-toggle.js" defer></script><script>(function() {
  document.addEventListener('DOMContentLoaded', function() {
    const backToTopBtn = document.querySelector('.back-to-top');
    
    if (!backToTopBtn) return;
    
    const toggleButtonVisibility = () => {
      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
      const shouldShow = scrollTop > 200;
      
      if (shouldShow) {
        backToTopBtn.classList.add('is-visible');
      } else {
        backToTopBtn.classList.remove('is-visible');
      }
    };
    
    let ticking = false;
    const handleScroll = () => {
      if (!ticking) {
        requestAnimationFrame(() => {
          toggleButtonVisibility();
          ticking = false;
        });
        ticking = true;
      }
    };
    
    const scrollToTop = (event) => {
      event.preventDefault();
      window.scrollTo({
        top: 0,
        behavior: 'smooth'
      });
    };
    
    window.addEventListener('scroll', handleScroll);
    backToTopBtn.addEventListener('click', scrollToTop);
    
    toggleButtonVisibility();
  });
})();</script></body></html>