PageSourceSearch

https://itspigeon.xin/about/

html itspigeon.xin collected 2026-09-25 22:38:05 UTC 96,553 bytes, 452 lines download raw bytes

1<!DOCTYPE html><html data-astro-transition-scope="astro-yztbsuuz-2" lang="zh-CN" class="vertical-scrollbar"> <head><meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover"> <link rel="icon" type="image/svg+xml" href="/favicon.ico"> <meta name="generator" content="Astro v7.1.3">   <link rel="stylesheet" href="/fonts/ChillRoundFRegular/result.css" media="print" onload="this.setAttribute('media','all')"> <link rel="stylesheet" href="/fonts/ChillRoundFBold/result.css" media="print" onload="this.setAttribute('media','all')">  <!-- SEO 元数据由 astro-seo 管理 --> <title>About | Pigeon's Home = 流年如鸽 = 喵喵喵</title>  <link rel="canonical" href="https://itspigeon.xin/about/"> <meta name="description" content="鸽秋的 blog 与碎碎念"> <meta name="robots" content="index, follow"> <meta property="og:title" content="About | Pigeon's Home = 流年如鸽 = 喵喵喵"> <meta property="og:type" content="website"> <meta property="og:image" content="https://itspigeon.xin/img/avatar.webp"> <meta property="og:url" content="https://itspigeon.xin/about/">  <meta property="og:description" content="鸽秋的 blog 与碎碎念">    <meta property="og:site_name" content="鸽秋">    <meta name="twitter:card" content="summary_large_image">  <meta name="twitter:title" content="About | Pigeon's Home = 流年如鸽 = 喵喵喵"> <meta name="twitter:image" content="https://itspigeon.xin/img/avatar.webp">  <meta name="twitter:description" content="鸽秋的 blog 与碎碎念">   <meta name="author" content="鸽秋">   <meta name="keywords" content="博客, Astro, 技术, 前端">  <link rel="alternate" type="application/rss+xml" title="流年如鸽" href="https://itspigeon.xin/rss.xml">  <link rel="alternate" hreflang="zh-CN" href="https://itspigeon.xin/about/"><link rel="alternate" hreflang="en" href="https://itspigeon.xin/en/about/"> <link rel="alternate" hreflang="x-default" href="https://itspigeon.xin/about/"><meta name="astro-view-transitions-enabled" content="true"> <meta name="astro-view-transitions-fallback" content="animate"> 
1<script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.CR91mYQj.js"></script>
1 <style>.astro-loading-indicator {
2  pointer-events: none;
3  background-color: #e9536a;
4  position: fixed;
5  z-index: 1031;
6  top: 0;
7  left: 0;
8  width: 100%;
9  height: 2px;
10  transition: transform 300ms ease-out, opacity 150ms 150ms ease-in;
11	transform: translate3d(0, 0, 0) scaleX(var(--progress, 0));
12  transform-origin: 0;
13}
14
15[dir="rtl"] .astro-loading-indicator {
16  transform-origin: 100% 0;
17}
18</style> 
18<script>(function(){const className = "astro-loading-indicator";
19const animationDuration = 300;
20const threshold = 200;
21
22(() => {
23  let progress = 0.25
24  let opacity = 0
25  /** @type {number | undefined} */
26  let trickleInterval = undefined
27  /** @type {number | undefined} */
28  let thresholdTimeout = undefined;
29
30  const element = document.createElement("div")
31  element.classList.add(className)
32  element.ariaHidden = "true"
33
34  /** @param {typeof progress} _progress */
35  const setProgress = (_progress) => {
36    progress = _progress
37    element.style.setProperty('--progress', String(progress))
38  }
39
40  /** @param {typeof opacity} _opacity */
41  const setOpacity = (_opacity) => {
42    opacity = _opacity
43    element.style.setProperty('opacity', String(opacity))
44  }
45
46  setOpacity(opacity)
47
48  document.addEventListener("DOMContentLoaded", () => {
49    document.body.prepend(element)
50  })
51
52  document.addEventListener("astro:before-preparation", () => {
53    thresholdTimeout = setTimeout(() => {
54      setOpacity(1)
55      trickleInterval = window.setInterval(() => {
56        setProgress(progress + Math.random() * 0.03)
57      }, animationDuration)
58    }, threshold)
59  })
60
61  document.addEventListener("astro:before-swap", (ev) => {
62    if (!thresholdTimeout) {
63      return
64    }
65    window.clearTimeout(thresholdTimeout)
66
67    ev.newDocument.body.prepend(element)
68    window.clearInterval(trickleInterval)
69    trickleInterval = undefined
70
71    setProgress(1)
72    window.setTimeout(() => {
73      setOpacity(0)
74    }, animationDuration / 2)
75
76    window.setTimeout(() => {
77      setProgress(0.25)
78    }, animationDuration * 2)
79  })
80})()
81})();</script>
81 
81<script type="module" src="/_astro/Tooltips.astro_astro_type_script_index_0_lang.C5vMEGmV.js"></script>
81<link rel="stylesheet" href="/_astro/CustomContent.D8TtqFoS.css"><link rel="stylesheet" href="/_astro/TwoColumnLayout.DOuYNkxa.css"><link rel="stylesheet" href="/_astro/Twikoo.DEZpZowh.css"><link rel="stylesheet" href="/_astro/Waline.Bgxfx4RQ.css">
81<script type="module" src="/_astro/page.BZYYEBxk.js"></script>
81<style>[data-astro-transition-scope="astro-bddlvhab-1"] { view-transition-name: page-home-sider; }@layer astro { ::view-transition-old(page-home-sider) { 
82	animation-duration: 180ms;
83	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
84	animation-fill-mode: both;
85	animation-name: astroFadeOut; }::view-transition-new(page-home-sider) { 
86	animation-duration: 180ms;
87	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
88	animation-fill-mode: both;
89	animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(page-home-sider) { 
90	animation-duration: 180ms;
91	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
92	animation-fill-mode: both;
93	animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(page-home-sider) { 
94	animation-duration: 180ms;
95	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
96	animation-fill-mode: both;
97	animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-bddlvhab-1"],
98			[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-bddlvhab-1"] { 
99	animation-duration: 180ms;
100	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
101	animation-fill-mode: both;
102	animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-bddlvhab-1"],
103			[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-bddlvhab-1"] { 
104	animation-duration: 180ms;
105	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
106	animation-fill-mode: both;
107	animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-bddlvhab-1"],
108			[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-bddlvhab-1"] { 
109	animation-duration: 180ms;
110	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
111	animation-fill-mode: both;
112	animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-bddlvhab-1"],
113			[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-bddlvhab-1"] { 
114	animation-duration: 180ms;
115	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
116	animation-fill-mode: both;
117	animation-name: astroFadeIn; }</style><style>[data-astro-transition-scope="astro-yztbsuuz-2"] { view-transition-name: root; }@layer astro { ::view-transition-old(root) { 
118	animation-duration: 180ms;
119	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
120	animation-fill-mode: both;
121	animation-name: astroFadeOut; }::view-transition-new(root) { 
122	animation-duration: 180ms;
123	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
124	animation-fill-mode: both;
125	animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(root) { 
126	animation-duration: 180ms;
127	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
128	animation-fill-mode: both;
129	animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(root) { 
130	animation-duration: 180ms;
131	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
132	animation-fill-mode: both;
133	animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-yztbsuuz-2"],
134			[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-yztbsuuz-2"] { 
135	animation-duration: 180ms;
136	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
137	animation-fill-mode: both;
138	animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-yztbsuuz-2"],
139			[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-yztbsuuz-2"] { 
140	animation-duration: 180ms;
141	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
142	animation-fill-mode: both;
143	animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-yztbsuuz-2"],
144			[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-yztbsuuz-2"] { 
145	animation-duration: 180ms;
146	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
147	animation-fill-mode: both;
148	animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-yztbsuuz-2"],
149			[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-yztbsuuz-2"] { 
150	animation-duration: 180ms;
151	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
152	animation-fill-mode: both;
153	animation-name: astroFadeIn; }</style><style>[data-astro-transition-scope="astro-cykaeyu2-3"] { view-transition-name: site-header; }@layer astro { ::view-transition-old(site-header) { 
154	animation-duration: 180ms;
155	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
156	animation-fill-mode: both;
157	animation-name: astroFadeOut; }::view-transition-new(site-header) { 
158	animation-duration: 180ms;
159	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
160	animation-fill-mode: both;
161	animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(site-header) { 
162	animation-duration: 180ms;
163	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
164	animation-fill-mode: both;
165	animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(site-header) { 
166	animation-duration: 180ms;
167	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
168	animation-fill-mode: both;
169	animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-cykaeyu2-3"],
170			[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-cykaeyu2-3"] { 
171	animation-duration: 180ms;
172	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
173	animation-fill-mode: both;
174	animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-cykaeyu2-3"],
175			[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-cykaeyu2-3"] { 
176	animation-duration: 180ms;
177	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
178	animation-fill-mode: both;
179	animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-cykaeyu2-3"],
180			[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-cykaeyu2-3"] { 
181	animation-duration: 180ms;
182	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
183	animation-fill-mode: both;
184	animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-cykaeyu2-3"],
185			[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-cykaeyu2-3"] { 
186	animation-duration: 180ms;
187	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
188	animation-fill-mode: both;
189	animation-name: astroFadeIn; }</style><style>[data-astro-transition-scope="astro-bddlvhab-4"] { view-transition-name: page-home-sider-drawer; }@layer astro { ::view-transition-old(page-home-sider-drawer) { 
190	animation-duration: 180ms;
191	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
192	animation-fill-mode: both;
193	animation-name: astroFadeOut; }::view-transition-new(page-home-sider-drawer) { 
194	animation-duration: 180ms;
195	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
196	animation-fill-mode: both;
197	animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(page-home-sider-drawer) { 
198	animation-duration: 180ms;
199	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
200	animation-fill-mode: both;
201	animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(page-home-sider-drawer) { 
202	animation-duration: 180ms;
203	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
204	animation-fill-mode: both;
205	animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-bddlvhab-4"],
206			[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-bddlvhab-4"] { 
207	animation-duration: 180ms;
208	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
209	animation-fill-mode: both;
210	animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-bddlvhab-4"],
211			[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-bddlvhab-4"] { 
212	animation-duration: 180ms;
213	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
214	animation-fill-mode: both;
215	animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-bddlvhab-4"],
216			[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-bddlvhab-4"] { 
217	animation-duration: 180ms;
218	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
219	animation-fill-mode: both;
220	animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-bddlvhab-4"],
221			[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-bddlvhab-4"] { 
222	animation-duration: 180ms;
223	animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
224	animation-fill-mode: both;
225	animation-name: astroFadeIn; }</style>
225<script>
226  // 主题系统 - 立即执行以防止 FOUC(无样式内容闪烁)
227  // 优先级:1. 用户手动选择 > 2. 系统偏好
228  (function() {
229    function getTheme() {
230      // 用户明确选择了主题
231      if (localStorage.theme === 'dark') return 'dark';
232      if (localStorage.theme === 'light') return 'light';
233      // 未设置,跟随系统偏好
234      return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
235    }
236
237    function applyTheme(theme) {
238      var root = document.documentElement;
239      root.classList.toggle('dark', theme === 'dark');
240      root.dataset.theme = theme; // For astro-mermaid autoTheme
241    }
242
243    // 立即应用主题
244    applyTheme(getTheme());
245
246    // 监听系统主题偏好变化
247    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function() {
248      // 仅当用户未明确选择主题时自动切换
249      if (!('theme' in localStorage)) {
250        applyTheme(getTheme());
251      }
252    });
253
254    // View Transition 切换页面后重新应用主题(在 DOM 渲染前)
255    document.addEventListener('astro:after-swap', function() {
256      applyTheme(getTheme());
257    });
258  })();
259</script>
259 
259<script>(function(){const christmasFeatureEnabled = false;
260
261  // 立即执行圣诞状态检查 否则彩灯等会闪烁
262  (function () {
263    // 如果构建时配置关闭,则始终不启用
264    if (!christmasFeatureEnabled) {
265      document.documentElement.classList.remove('christmas');
266      return;
267    }
268    // 否则使用用户偏好
269    var stored = localStorage.getItem('christmas-enabled');
270    var enabled = stored !== 'false'; // 默认启用
271    document.documentElement.classList.toggle('christmas', enabled);
272  })();
273})();</script>
273 
273<script>(function(){const STORAGE_KEYS = {"fontPreset":"reader-font-preset","fontFamily":"reader-font-family","fontSize":"reader-font-size","lineHeight":"reader-line-height","measure":"reader-measure","justify":"reader-justify","scrollProgress":"site-scroll-progress","bgmWidget":"site-bgm-widget","masterMotion":"site-master-motion","wave":"site-wave"};
274const READER_DEFAULTS = {"fontPreset":"round","fontSize":16,"lineHeight":1.8,"measure":null,"justify":false};
275const READER_FONT_FAMILY_MAX_LENGTH = 128;
276const GENERAL_DEFAULTS = {"scrollProgress":true,"bgmWidget":true,"masterMotion":false,"wave":true};
277const FONT_PRESETS = ["round","system","serif","wenkai"];
278const WENKAI_STYLESHEET_ID = "lxgw-wenkai-webfont";
279const WENKAI_STYLESHEET_HREF = "https://cdn.jsdelivr.net/npm/[email protected]/style.css";
280
281  // Apply settings immediately to prevent a flash of default reader styles.
282  // Defaults and keys are injected from src/store/settings-constants.ts (single source of truth).
283  (function () {
284    function readPositiveNumber(key, fallback) {
285      var stored = parseFloat(localStorage.getItem(key));
286      return isFinite(stored) && stored > 0 ? stored : fallback;
287    }
288    function readOptionalPositiveNumber(key) {
289      var stored = parseFloat(localStorage.getItem(key));
290      return isFinite(stored) && stored > 0 ? stored : null;
291    }
292    function readBoolean(key, fallback) {
293      var stored = localStorage.getItem(key);
294      return stored === null ? fallback : stored === 'true';
295    }
296    function quoteFontFamily(family) {
297      var serialized = '"';
298      for (var character of family) {
299        var codePoint = character.codePointAt(0);
300        if (codePoint === 0) {
301          serialized += '\uFFFD';
302        } else if ((codePoint >= 0x01 && codePoint <= 0x1f) || codePoint === 0x7f) {
303          serialized += '\\' + codePoint.toString(16) + ' ';
304        } else if (character === '"' || character === '\\') {
305          serialized += '\\' + character;
306        } else {
307          serialized += character;
308        }
309      }
310      return serialized + '"';
311    }
312    function applySettings() {
313      var root = document.documentElement;
314      var stored = localStorage.getItem(STORAGE_KEYS.fontPreset);
315      var preset = FONT_PRESETS.indexOf(stored) !== -1 ? stored : READER_DEFAULTS.fontPreset;
316      root.setAttribute('data-font-preset', preset);
317      var fontFamily = (localStorage.getItem(STORAGE_KEYS.fontFamily) || '')
318        .trim()
319        .slice(0, READER_FONT_FAMILY_MAX_LENGTH);
320      if (fontFamily) {
321        root.setAttribute('data-reader-font', 'local');
322        root.style.setProperty('--reader-font-family', quoteFontFamily(fontFamily));
323      } else {
324        root.removeAttribute('data-reader-font');
325        root.style.removeProperty('--reader-font-family');
326      }
327      var fontSize = readPositiveNumber(STORAGE_KEYS.fontSize, READER_DEFAULTS.fontSize);
328      root.style.setProperty('--reader-font-size', fontSize + 'px');
329      root.style.setProperty('--reader-line-height', String(readPositiveNumber(STORAGE_KEYS.lineHeight, READER_DEFAULTS.lineHeight)));
330      var measure = readOptionalPositiveNumber(STORAGE_KEYS.measure);
331      if (measure === null) {
332        root.style.removeProperty('--reader-measure');
333      } else {
334        // Convert ch to px so headings and body text share one absolute content width.
335        root.style.setProperty('--reader-measure', measure * 0.5 * fontSize + 'px');
336      }
337      root.classList.toggle('reader-justify', readBoolean(STORAGE_KEYS.justify, READER_DEFAULTS.justify));
338      root.classList.toggle('motion-off', readBoolean(STORAGE_KEYS.masterMotion, GENERAL_DEFAULTS.masterMotion));
339      root.classList.toggle('wave-off', !readBoolean(STORAGE_KEYS.wave, GENERAL_DEFAULTS.wave));
340      // Load WenKai only when the matching preset is selected.
341      if (preset === 'wenkai' && !fontFamily && !document.getElementById(WENKAI_STYLESHEET_ID)) {
342        var link = document.createElement('link');
343        link.id = WENKAI_STYLESHEET_ID;
344        link.rel = 'stylesheet';
345        link.href = WENKAI_STYLESHEET_HREF;
346        document.head.appendChild(link);
347      }
348    }
349
350    // Apply before the first frame.
351    applySettings();
352
353    // Reapply before Astro renders the swapped page.
354    document.addEventListener('astro:after-swap', applySettings);
355  })();
356})();</script>
356 <noscript> <style>
357    /* Long code blocks ship pre-collapsed; without JS the toolbar never hydrates, so force them open. */
358    html .prose .code-block-wrapper.code-collapsed > pre {
359      grid-template-rows: 1fr;
360      border-width: 1px;
361      border-radius: 0.75rem;
362      box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
363    }
364    html .prose .code-block-wrapper.code-collapsed > pre > code {
365      max-height: none;
366      overflow-x: auto;
367      overflow-y: visible;
368      padding-block: 1rem;
369    }
370    html .prose .code-block-wrapper.code-collapsed > .code-block-wrapper-toolbar-mount {
371      display: none;
372    }
373  </style> </noscript><!-- 子页面可通过 slot="head" 注入额外的 head 内容(如 JSON-LD) --></head> <body><a href="https://itspigeon.xin/cdn-cgi/content?id=pIOKQ6YQbWNOlWjbfPhVJA37LtJSYc68EhAg1mSy7gg-1790375884.936085-1.2.1.1-vFW_E9A.cyUluxOTlnUpe3IQovPaI11ZgNuv6P4QB.JGvs6ABdjtmMrfz5nysXcJ" aria-hidden="true" rel="nofollow noopener" style="display: none !important; visibility: hidden !important"></a>  <div class="flex min-h-screen flex-col text-black dark:text-white"> <div data-astro-transition-scope="astro-cykaeyu2-3" id="site-header" class="shadow-text fixed tablet:backdrop-blur inset-x-0 top-0 z-30 gap-4 py-2.5 text-white select-none tablet:py-2 tablet:pl-3 tablet:pr-0 overflow-visible"> <div class="mx-auto flex items-center justify-between tablet:w-full px-6 tablet:pl-10 tablet:pr-3 max-w-7xl"> <!-- Desktop: Always show logo --> <a data-astro-transition-persist="page-header-avatar" class="tablet:hidden -my-4 mr-4 flex cursor-pointer items-center justify-center gap-1 whitespace-nowrap" href="/" target="_self" title="Pigeon's Home" aria-label="Pigeon's Home"> <p class="logo-text">Pigeon&#39;
373s Home</p> </a> <!-- Mobile: MobilePostHeader (shows heading on post pages, logo otherwise) --> <div class="tablet:flex tablet:grow hidden items-center justify-center"> <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
373<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).only=e;window.dispatchEvent(new Event("astro:only"));})();</script>
373<script>(()=>{var g=Object.defineProperty;var w=(a,s,c)=>s in a?g(a,s,{enumerable:!0,configurable:!0,writable:!0,value:c}):a[s]=c;var l=(a,s,c)=>w(a,typeof s!="symbol"?s+"":s,c);var E=new Set(["__proto__","constructor","prototype"]);{let a={0:t=>y(t),1:t=>c(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(c(t)),5:t=>new Set(c(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>Number.POSITIVE_INFINITY*t},s=t=>{let[p,e]=t;return p in a?a[p](e):void 0},c=t=>t.map(s),y=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([p,e])=>[p,s(e)]));class f extends HTMLElement{constructor(){super(...arguments);l(this,"Component");l(this,"hydrator");l(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let r=this.querySelectorAll("astro-slot"),n={},d=this.querySelectorAll("template[data-astro-template]");for(let o of d){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n[o.getAttribute("data-astro-template")||"default"]=o.innerHTML,o.remove())}for(let o of r){let i=o.closest(this.tagName);i!=null&&i.isSameNode(this)&&(n[o.getAttribute("name")||"default"]=o.innerHTML)}let u;try{u=this.hasAttribute("props")?y(JSON.parse(this.getAttribute("props"))):{}}catch(o){let i=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(i+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${i}`,this.getAttribute("props"),o),o}let h;await this.hydrator(this)(this.Component,u,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});l(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),r.disconnect(),this.childrenConnectedCallback()},r=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});r.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}getRetryImportUrl(e){let r=new URL(e,document.baseURI);return r.searchParams.set("astro-retry",Date.now().toString()),r.toString()}async importWithRetry(e){try{return await import(e)}catch(r){return await new Promise(n=>setTimeout(n,1e3)),import(this.getRetryImportUrl(e))}}handleHydrationError(e){let r=this.getAttribute("component-url"),n=new CustomEvent("astro:hydration-error",{cancelable:!0,bubbles:!0,composed:!0,detail:{error:e,componentUrl:r}});this.dispatchEvent(n)&&console.error(`[astro-island] Error hydrating ${r}`,e)}async start(){let e=JSON.parse(this.getAttribute("opts")),r=this.getAttribute("client");if(Astro[r]===void 0){window.addEventListener(`astro:${r}`,()=>this.start(),{once:!0});return}try{await Astro[r](async()=>{let n=this.getAttribute("renderer-url");try{let[d,{default:u}]=await Promise.all([this.importWithRetry(this.getAttribute("component-url")),n?this.importWithRetry(n):Promise.resolve({default:()=>()=>{}})]),h=this.getAttribute("component-export")||"default";if(h.includes(".")){this.Component=d;for(let m of h.split(".")){if(E.has(m)||!this.Component||typeof this.Component!="object"&&typeof this.Component!="function"||!Object.hasOwn(this.Component,m))throw new Error(`Invalid component export path: ${h}`);this.Component=this.Component[m]}}else{if(E.has(h))throw new Error(`Invalid component export path: ${h}`);this.Component=d[h]}return this.hydrator=u,this.hydrate}catch(d){return this.handleHydrationError(d),()=>{}}},e,this)}catch(n){this.handleHydrationError(n)}}attributeChangedCallback(){this.hydrate()}}l(f,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",f)}})();</script>
373<astro-island uid="282cd6" component-url="/_astro/index.5bLsUjGw.js" component-export="MobilePostHeader" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;isPostPage&quot;:[0,false],&quot;enableNumbering&quot;:[0,true],&quot;logoElement&quot;:[0,&quot;text&quot;],&quot;logoText&quot;:[0,&quot;Pigeon&#39;s Home&quot;],&quot;logoSrc&quot;:[0,&quot;/_astro/logo.OhVfzb_E.svg&quot;]}" ssr client="only" opts="{&quot;name&quot;:&quot;MobilePostHeader&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> </div> 
373<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script>
373<astro-island uid="1UbU9k" prefix="r8" component-url="/_astro/Navigator.1Gp1A-3v.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;currentPath&quot;:[0,&quot;/about/&quot;],&quot;locale&quot;:[0,&quot;zh&quot;]}" ssr client="load" opts="{&quot;name&quot;:&quot;Navigator&quot;,&quot;value&quot;:true}" await-children><div class="flex grow tablet:grow-0 items-center"><div class="flex tablet:hidden grow items-center"><a href="/" aria-label="首页" class="relative flex items-center px-3 py-2 text-base tracking-wider after:absolute after:bottom-1 after:left-1/2 after:block after:h-0.5 after:w-0 after:-translate-x-1/2 after:transition-all after:duration-300 hover:after:w-9/12"><span></span>首页</a><button type="button" class="inline-flex h-10 items-center px-4 py-2 text-base tracking-wider relative after:absolute after:bottom-1 after:left-1/2 after:h-0.5 after:w-0 after:-translate-x-1/2 after:bg-white after:transition-all after:duration-300 after:content-[&quot;&quot;]" aria-expanded="false" aria-haspopup="true" aria-label="文章菜单"><span></span>文章<span></span></button><a href="/friends" aria-label="友链" class="relative flex items-center px-3 py-2 text-base tracking-wider after:absolute after:bottom-1 after:left-1/2 after:block after:h-0.5 after:w-0 after:-translate-x-1/2 after:transition-all after:duration-300 hover:after:w-9/12"><span></span>友链</a><a href="https://www.travellings.cn/go.html" aria-label="开往" class="relative flex items-center px-3 py-2 text-base tracking-wider after:absolute after:bottom-1 after:left-1/2 after:block after:h-0.5 after:w-0 after:-translate-x-1/2 after:transition-all after:duration-300 hover:after:w-9/12"><span></span>开往</a><a href="/about" aria-label="关于" class="relative flex items-center px-3 py-2 text-base tracking-wider after:absolute after:bottom-1 after:left-1/2 after:block after:h-0.5 after:w-0 after:-translate-x-1/2 after:transition-all after:duration-300 hover:after:w-9/12"><span></span>关于</a><a href="/music" aria-label="歌单" class="relative flex items-center px-3 py-2 text-base tracking-wider after:absolute after:bottom-1 after:left-1/2 after:block after:h-0.5 after:w-0 after:-translate-x-1/2 after:transition-all after:duration-300 hover:after:w-9/12"><span></span>歌单</a></div><div class="ml-auto flex items-center gap-2"><button type="button" class="cursor-pointer transition duration-300 hover:scale-125" aria-label="搜索"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-8"><title>Search</title><path d="M18.03 16.62 22.31 20.9 20.9 22.31 16.62 18.03A8.96 8.96 0 0 1 11 20a9 9 0 1 1 9-9 8.96 8.96 0 0 1-1.97 5.62Zm-2.01-.75A7 7 0 1 0 11 18a6.98 6.98 0 0 0 4.87-1.98l.15-.15Z"></path></svg></button><div class="tablet:hidden flex-center"><button type="button" class="cursor-pointer transition duration-300 hover:scale-110" aria-label="Language: 中文" aria-haspopup="true" aria-expanded="false"><span></span></button></div><button class="theme-toggle scale-80 cursor-pointer transition duration-300 hover:scale-90 " aria-label="toggle theme" type="button"><label class="toggle block cursor-pointer" aria-label="toggle theme"><input type="checkbox" class="hidden"/><div class="toggle-indicator"></div></label></button></div></div><!--astro:end--></astro-island> </div>   </div> <!-- 移动端菜单按钮 --> <astro-island uid="1jT8Vb" component-url="/_astro/MenuIcon.DKQ-OIVx.js" component-export="MenuIcon" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;className&quot;:[0,&quot;tablet:flex fixed top-0 left-3 z-52 hidden h-14 transition-transform&quot;],&quot;id&quot;:[0,&quot;mobile-menu-container&quot;]}" ssr client="only" opts="{&quot;name&quot;:&quot;MenuIcon&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> <main class="relative flex grow flex-col gap-4">   <div class="flex flex-col"> <div class="relative z-0 flex overflow-hidden h-[60dvh] max-h-200"> <div class="absolute inset-0 h-full bg-black/40"></div> <div class="absolute inset-0 flex flex-col items-center justify-center px-5 text-white bottom-[8dvh]"> <h1 class="shadow-text word-break flex items-center gap-2 text-center font-bold text-balance max-w-7xl text-5xl/[1.2] tracking-widest"> 关于我 <button type="button" class="cover-copy-link hover:text-primary inline-flex cursor-pointer items-center rounded-full p-1 transition-colors duration-300 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-white" aria-label="复制链接" title="复制链接" data-copy-label="复制链接" data-copied-label="已复制" data-copy-failed-label="自动复制失败,请手动复制"> <svg width="1em" height="1em" aria-hidden="true" data-icon="ri:link">
373   <symbol id="ai:ri:link" viewBox="0 0 24 24"><path fill="currentColor" d="M18.364 15.536L16.95 14.12l1.414-1.414a5 5 0 0 0-7.071-7.071L9.878 7.05L8.464 5.636l1.414-1.414a7 7 0 0 1 9.9 9.9zm-2.829 2.828l-1.414 1.414a7 7 0 0 1-9.9-9.9l1.415-1.414L7.05 9.88l-1.414 1.414a5 5 0 0 0 7.07 7.071l1.415-1.414zm-.707-10.607l1.415 1.415l-7.072 7.07l-1.414-1.414z"/></symbol><use href="#ai:ri:link"></use>  </svg> <span class="sr-only" aria-live="polite"></span> </button> </h1> </div> <div data-astro-transition-persist="page-cover-banner" class="relative -z-10 h-full min-h-60 w-full" id="banner-box" style="background-image:linear-gradient(135deg, #c9b0b2 0%, #c8afba 50%, #d9c5b8 100%)"> <img src="/img/site_header_1920.webp" alt="cover" class="h-full w-full object-cover" sizes="50vw" srcset="/img/site_header_800.webp 800w,/img/site_header_1920.webp 1200w" loading="eager" fetchpriority="high" decoding="async"> </div> <div class="wave-wrap"><svg class="wave" xmlns="http://www.w3.org/2000/svg" viewBox="0 24 150 28" preserveAspectRatio="none" aria-hidden="true"><defs><path id="gentle-wave" d="m -160,44.4 c 30,0 58,-18 87.7,-18 30.3,0 58.3,18 87.3,18 30,0 58,-18 88,-18 30,0 58,18 88,18 l 0,34.5 -351,0 z"></path></defs><g class="parallax"><use xlink:href="#gentle-wave" x="50" y="0" fill="rgba(255, 255, 255, 0.48)"></use><use xlink:href="#gentle-wave" x="50" y="3" fill="rgba(255, 255, 255, 0.78)"></use><use xlink:href="#gentle-wave" x="50" y="6" fill="rgba(255, 255, 255, 0.8)"></use></g></svg></div> </div> 
373<script type="module">function e(){document.querySelectorAll(`.cover-copy-link:not([data-copy-ready])`).forEach(e=>{e.dataset.copyReady=`true`,e.addEventListener(`click`,async()=>{let t=window.location.href;try{await navigator.clipboard.writeText(t)}catch{window.prompt(e.dataset.copyFailedLabel??e.dataset.copyLabel??``,t);return}let n=e.querySelector(`[aria-live]`);n&&(n.textContent=e.dataset.copiedLabel??``),e.title=e.dataset.copiedLabel??e.title,window.setTimeout(()=>{n&&(n.textContent=``),e.title=e.dataset.copyLabel??e.title},1800)})})}e(),document.addEventListener(`astro:page-load`,e);</script>
373 <div class="mx-auto md:mx-0 flex w-full items-start justify-center md:w-full max-w-7xl"> <div data-astro-transition-scope="astro-bddlvhab-1" class="page-home-sider shadow-home-sider sticky top-0 tablet:overscroll-none self-start flex min-w-64 max-w-64 flex-col items-stretch tablet:hidden overflow-auto h-screen px-2 scroll-gutter-stable" data-astro-cid-lo6vnqzn>  
373<script type="module">var e=null;function t(){document.querySelectorAll(`[data-home-info-container]`).forEach(e=>{e.querySelectorAll(`[data-collapse-trigger]`).forEach(t=>{let n=t.getAttribute(`data-collapse-trigger`);if(!n||t.hasAttribute(`data-initialized`))return;t.setAttribute(`data-initialized`,`true`);let r=e.querySelector(`[data-collapse-content="${n}"]`),i=t.querySelector(`[data-collapse-icon="${n}"]`);!r||!i||t.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),t.getAttribute(`aria-expanded`)===`true`?(r.classList.add(`collapse-hidden`),i.style.transform=`rotate(0deg)`,t.setAttribute(`aria-expanded`,`false`)):(r.classList.remove(`collapse-hidden`),i.style.transform=`rotate(180deg)`,t.setAttribute(`aria-expanded`,`true`))})})})}function n(){e&&=(e.disconnect(),null)}function r(){n(),e=new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.length&&setTimeout(t,100)})}),e.observe(document.body,{childList:!0,subtree:!0})}document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{t(),r()}):(t(),r()),document.addEventListener(`astro:page-load`,()=>{t(),r()}),document.addEventListener(`astro:before-swap`,n);</script>
373<sider-content class="vertical-scrollbar flex-1 overflow-x-hidden overflow-y-auto" data-type="home" data-default-type="info" data-astro-cid-lo6vnqzn="true"> <div slot="info" class="sider-slot" data-slot-type="info" data-astro-cid-lo6vnqzn> <div class="flex flex-col items-center md:py-2 pt-18 md:pt-0" data-home-info-container="home-info-htlmuqhuk" data-astro-cid-7br6y6lf> <div class="relative h-40 w-40 rounded-full" style="background-image:linear-gradient(135deg, #d8bcc1 0%, #d8a8b8 50%, #a08998 100%)" data-astro-cid-7br6y6lf> <img class="shadow-card-darker hover:animate-shake h-full w-full rounded-full transition" src="/img/avatar.webp" alt="鸽秋 avatar" loading="eager" fetchpriority="high" data-astro-cid-7br6y6lf>  </div> <p class="mt-2" data-astro-cid-7br6y6lf>鸽秋</p> <p class="text-muted-foreground mt-3 text-center" data-astro-cid-7br6y6lf>鸽秋的 blog 与碎碎念</p> <!-- TODO: use CSS squircle corner-shape replace the rounded-xl border-radius with a squircle corner-shape (https://www.squircle.style/) --> <div class="mt-2 grid grid-cols-3 gap-2" data-astro-cid-qizw26vg> <div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #191717" data-platform="github" href="https://github.com/Pigeon0v0" title="Github" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Github" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:github-fill">   <symbol id="ai:ri:github-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M12.001 2c-5.525 0-10 4.475-10 10a9.99 9.99 0 0 0 6.837 9.488c.5.087.688-.213.688-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.337 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.687c-.1-.25-.45-1.275.1-2.65c0 0 .837-.263 2.75 1.024a9.3 9.3 0 0 1 2.5-.337c.85 0 1.7.112 2.5.337c1.913-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.02 10.02 0 0 0 22 12c0-5.525-4.475-10-10-10"/></symbol><use href="#ai:ri:github-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #55acd5" data-platform="email" href="/cdn-cgi/l/email-protection#37675e5052585977544144524541524519435847" title="Email" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Email" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:mail-line">   <symbol id="ai:ri:mail-line" viewBox="0 0 24 24"><path fill="currentColor" d="M3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1m17 4.238l-7.928 7.1L4 7.216V19h16zM4.511 5l7.55 6.662L19.502 5z"/></symbol><use href="#ai:ri:mail-line"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #ff6600" data-platform="rss" href="/rss.xml" title="Rss" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Rss" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:rss-line">   <symbol id="ai:ri:rss-line" viewBox="0 0 24 24">
373<path fill="currentColor" d="M3 17a4 4 0 0 1 4 4H3zm0-7c6.075 0 11 4.925 11 11h-2a9 9 0 0 0-9-9zm0-7c9.941 0 18 8.059 18 18h-2c0-8.837-7.163-16-16-16z"/></symbol><use href="#ai:ri:rss-line"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #4b9ae4" data-platform="twitter" href="https://x.com/PigeonA0v0" title="Twitter" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Twitter" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:twitter-fill">   <symbol id="ai:ri:twitter-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M22.213 5.656a8.4 8.4 0 0 1-2.402.658A4.2 4.2 0 0 0 21.649 4c-.82.488-1.719.83-2.655 1.015a4.182 4.182 0 0 0-7.126 3.814a11.87 11.87 0 0 1-8.621-4.37a4.17 4.17 0 0 0-.566 2.103c0 1.45.739 2.731 1.86 3.481a4.2 4.2 0 0 1-1.894-.523v.051a4.185 4.185 0 0 0 3.355 4.102a4.2 4.2 0 0 1-1.89.072A4.185 4.185 0 0 0 8.02 16.65a8.4 8.4 
3730 0 1-6.192 1.732a11.83 11.83 0 0 0 6.41 1.88c7.694 0 11.9-6.373 11.9-11.9q0-.271-.012-.541a8.5 8.5 0 0 0 2.086-2.164"/></symbol><use href="#ai:ri:twitter-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #da708a" data-platform="bilibili" href="https://space.bilibili.com/354878609" title="Bilibili" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Bilibili" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:bilibili-fill">   <symbol id="ai:ri:bilibili-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M18.223 3.086a1.25 1.25 0 0 1 0 1.768L17.08 5.996h1.17A3.75 3.75 0 0 1 22 9.747v7.5a3.75 3.75 0 0 1-3.75 3.75H5.75A3.75 3.75 0 0 1 2 17.247v-7.5a3.75 3.75 0 0 1 3.75-3.75h1.166L5.775 4.855a1.25 1.25 0 0 1 1.767-1.768l2.652 2.652q.119.119.198.257h3.213q.08-.14.199-.258l2.651-2.652a1.25 1.25 0 0 1 1.768 0m.027 5.42H5.75a1.25 1.25 0 0 0-1.247 1.157l-.003.094v7.5c0 .659.51 1.198 1.157 1.246l.093.004h12.5a1.25 1.25 0 0 0 1.247-1.157l.003-.093v-7.5c0-.69-.56-1.25-1.25-1.25m-10 2.5c.69 0 1.25.56 1.25 1.25v1.25a1.25 1.25 0 1 1-2.5 0v-1.25c0-.69.56-1.25 1.25-1.25m7.5 0c.69 0 1.25.56 1.25 1.25v1.25a1.25 1.25 0 1 1-2.5 0v-1.25c0-.69.56-1.25 1.25-1.25"/></symbol><use href="#ai:ri:bilibili-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #1e88e5" data-platform="zhihu" href="https://www.zhihu.com/people/Pigeon0v0" title="Zhihu" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Zhihu" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:zhihu-fill">   <symbol id="ai:ri:zhihu-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M13.374 18.897h1.452l.478 1.637l2.605-1.637h3.07V5.395h-7.605zM14.919 6.86h4.515v10.57h-1.732l-1.73 1.087l-.315-1.084l-.738-.003zm-2.83 4.712H8.846a70 70 0 0 0 .136-4.56h3.172s.122-1.4-.532-1.384H6.135q.325-1.22.814-2.524s-1.493 0-2.001 1.339c-.21.552-.82 2.677-1.903 4.848c.365-.04 1.573-.073 2.284-1.378c.13-.366.156-.414.318-.902h1.79c0 .651-.074 4.151-.105 4.558h-3.24c-.728 0-.964 1.466-.964 1.466h4.065c-.272 3.095-1.737 5.703-4.392 7.764c1.27.363 2.536-.057 3.162-.614c0 0 1.425-1.297 2.206-4.298l3.345 4.03s.491-1.668-.076-2.482c-.47-.553-1.74-2.051-2.281-2.594l-.907.72q.405-1.302.488-2.524h3.822s-.005-1.466-.47-1.466"/></symbol><use href="#ai:ri:zhihu-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div> </div> <div class="text-muted-foreground mt-3 flex justify-center text-center text-sm/4 whitespace-nowrap select-none dark:text-white/80" data-astro-cid-7br6y6lf> <a href="/" class="hover:text-blue flex cursor-pointer flex-col gap-2 p-1 transition" data-astro-cid-7br6y6lf> <span class="text-lg/5 font-bold" data-astro-cid-7br6y6lf>5</span> 文章 </a> <div class="bg-muted-foreground mx-3 w-px" data-astro-cid-7br6y6lf></div> <a href="/categories" aria-label="分类" class="hover:text-blue" data-astro-cid-7br6y6lf> <p class="flex cursor-pointer flex-col gap-2 p-1 transition" data-astro-cid-7br6y6lf> <span class="text-lg/5 font-bold" data-astro-cid-7br6y6lf>2</span> 分类 </p> </a> <div class="bg-muted-foreground mx-3 w-px" data-astro-cid-7br6y6lf></div> <a href="/tags" class="hover:text-blue flex cursor-pointer flex-col gap-2 p-1 transition" data-astro-cid-7br6y6lf> <span class="text-lg/5 font-bold" data-astro-cid-7br6y6lf>6</span> 标签 </a> </div> <div class="mt-6 flex w-full flex-col items-center gap-2.5" data-astro-cid-7br6y6lf> <a href="/" aria-label="首页" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focu
373s-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:home-heart-fill">   <symbol id="ai:ri:home-heart-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M20 20a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-9H1l10.327-9.388a1 1 0 0 1 1.346 0L23 11h-3zm-8-3l3.359-3.359a2.25 2.25 0 0 0-3.182-3.182l-.177.177l-.177-.177a2.25 2.25 0 0 0-3.182 3.182z"/></symbol><use href="#ai:ri:home-heart-fill"></use>  </svg>首页 </a><div class="bg-foreground/10 flex w-40 flex-col rounded-xl opacity-75 transition-all duration-300 hover:opacity-100" data-collapsible data-astro-cid-7br6y6lf> <button class="flex-center hover:bg-foreground/5 h-12 w-full cursor-pointer rounded-xl transition-colors" data-collapse-trigger="home-info-htlmuqhuk-collapse-1" aria-expanded="false" aria-label="文章菜单" type="button" data-astro-cid-7br6y6lf> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:quill-pen-ai-fill">   <symbol id="ai:ri:quill-pen-ai-fill" viewBox="0 0 24 24"><path fill="currentColor" d="m4.713 7.128l-.246.566a.506.506 0 0 1-.934 0l-.246-.566a4.36 4.36 0 0 0-2.22-2.25l-.759-.339a.53.53 0 0 1 0-.963l.717-.319A4.37 4.37 0 0 0 3.276.931L3.53.32a.506.506 0 0 1 .942 0l.253.61a4.37 4.37 0 0 0 2.25 2.327l.718.32a.53.53 0 0 1 0 .962l-.76.338a4.36 4.36 0 0 0-2.219 2.251m-1.65 14.485C4.09 15.422 6.312 1.997 21 1.997c-1.496 3-2.5 4.5-3.5 5.5l-1 1l1.5 1c-1 3-4 6.5-8 7q-4.003.5-5.002 5.5H3z"/></symbol><use href="#ai:ri:quill-pen-ai-fill"></use>  </svg> 文章 <svg width="1em" height="1em" class="ml-2 size-5 transition-transform duration-300" data-collapse-icon="home-info-htlmuqhuk-collapse-1" data-astro-cid-7br6y6lf="true" data-icon="ri:arrow-down-s-line">   <symbol id="ai:ri:arrow-down-s-line" viewBox="0 0 24 24"><path fill="currentColor" d="m12 13.171l4.95-4.95l1.414 1.415L12 16L5.636 9.636L7.05 8.222z"/></symbol><use href="#ai:ri:arrow-down-s-line"></use>  </svg> </button> <div class="collapse-hidden" data-collapse-content="home-info-htlmuqhuk-collapse-1" data-astro-cid-7br6y6lf> <div class="flex flex-col items-center" data-astro-cid-7br6y6lf> <a href="/categories" aria-label="分类" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:grid-fill">   <symbol id="ai:ri:grid-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M14 10v4h-4v-4zm2 0h5v4h-5zm-2 11h-4v-5h4zm2 0v-5h5v4a1 1 0 0 1-1 1zM14 3v5h-4V3zm2 0h4a1 1 0 0 1 1 1v4h-5zm-8 7v4H3v-4zm0 11H4a1 1 0 0 1-1-1v-4h5zM8 3v5
373H3V4a1 1 0 0 1 1-1z"/></symbol><use href="#ai:ri:grid-fill"></use>  </svg>分类 </a><a href="/tags" aria-label="标签" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="fa6-solid:tags">   <symbol id="ai:fa6-solid:tags" viewBox="0 0 512 512"><path fill="currentColor" d="m345 39.1l127.8 129.3c52.4 53 52.4 138.2 0 191.2l-112 113.3c-9.3 9.4-24.5 9.5-33.9.2s-9.5-24.5-.2-33.9l111.9-113.3c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6.2-33.9s24.6-9.2 33.9.2zM0 229.5V80c0-26.5 21.5-48 48-48h149.5c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5M144 144a32 32 0 1 0-64 0a32 32 0 1 0 64 0"/></symbol><use href="#ai:fa6-solid:tags"></use>  </svg>标签 </a><a href="/archives" aria-label="归档" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:archive-2-fill">   <symbol id="ai:ri:archive-2-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M22 20V7l-2-4H4L2 7.004V20a1 1 0 0 0 1 1h18a1 1 0 0 0 1-1M5.236 5h13.528l1 2H4.237zM9 11h6v2H9z"/></symbol><use href="#ai:ri:archive-2-fill"></use>  </svg>归档 </a> </div> </div> </div><a href="/friends" aria-label="友链" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:links-line">   <symbol id="ai:ri:links-line" viewBox="0 0 24 24"><path fill="currentColor" d="m13.06 8.111l1.415 1.414a7 7 0 0 1 0 9.9l-.354.353a7 7 0 1 1-9.9-9.9l1.415 1.415a5 5 0 1 0 7.071 7.071l.354-.354a5 5 0 0 0 0-7.07l-1.415-1.415zm6.718 6.01l-1.414-1.414a5 5 0 0 0-7.071-7.07l-.354.353a5 5 0 0 0 0 7.07l1.415 1.415l-1.415 1.414l-1.414-1.414a7 7 0 0 1 0-9.9l.354-.353a7 7 0 1 1 9.9 9.9"/></symbol><use href="#ai:ri:links-line"></use>  </svg>友链 </a><a href="https://www.travellings.cn/go.html" aria-label="开往" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:train-line">   <symbol id="ai:ri:train-line" viewBox="0 0 24 24"><path fill="currentColor" d="m17.2 20l1.8 1.5v.5H5v-.5L6.8 20H5a2 2 0 0 1-2-2V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4v11a2 2 0 0 1-2 2zM7 5a2 2 0 0 0-2 2v11h14V7a2 2 0 0 0-2-2zm5 12a2 2 0 1 1 0-4a2 2 0 0 1 0 4M6 7h12v4H6z"/></symbol><use href="#ai:ri:train-line"></use>  </svg>开往 </a><a href="/about" aria-label="关于" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focu
373s-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="fa6-regular:circle-user">   <symbol id="ai:fa6-regular:circle-user" viewBox="0 0 512 512"><path fill="currentColor" d="M406.5 399.6c-19.1-46.7-65-79.6-118.5-79.6h-64c-53.5 0-99.4 32.9-118.5 79.6C69.9 362.2 48 311.7 48 256c0-114.9 93.1-208 208-208s208 93.1 208 208c0 55.7-21.9 106.2-57.5 143.6m-40.1 32.7c-32 20.1-69.8 31.7-110.4 31.7s-78.4-11.6-110.5-31.7c7.3-36.7 39.7-64.3 78.5-64.3h64c38.8 0 71.2 27.6 78.5 64.3zM256 512a256 256 0 1 0 0-512a256 256 0 1 0 0 512m0-272a40 40 0 1 1 0-80a40 40 0 1 1 0 80m-88-40a88 88 0 1 0 176 0a88 88 0 1 0-176 0"/></symbol><use href="#ai:fa6-regular:circle-user"></use>  </svg>关于 </a><a href="/music" aria-label="歌单" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:music-2-fill">   <symbol id="ai:ri:music-2-fill" viewBox="0 0 24 24"><path fill="currentColor" d="M20 3v14a4 4 0 1 1-2-3.465V6H9v11a4 4 0 1 1-2-3.465V3z"/></symbol><use href="#ai:ri:music-2-fill"></use>  </svg>歌单 </a> </div> </div>  </div> <div slot="directory" class="sider-slot overflow-hidden h-full" data-slot-type="directory" data-astro-cid-lo6vnqzn>  </div> <div slot="series" class="sider-slot" data-slot-type="series" data-astro-cid-lo6vnqzn>  </div> </sider-content> <!-- 内联脚本:在 DOM 解析后立即隐藏不需要的内容,避免闪烁 -->
vendor: 109 bytes, line 373
373 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
373<script data-astro-rerun>
374    (function () {
375      const container = document.querySelector('sider-content');
376      if (!container) return;
377
378      const defaultType = container.getAttribute('data-default-type') || 'info';
379      const slots = container.querySelectorAll('.sider-slot');
380
381      slots.forEach((slot) => {
382        const slotType = slot.getAttribute('data-slot-type');
383        if (slotType !== defaultType) {
384          slot.classList.add('hidden');
385        }
386      });
387    })();
388  </script>
388 <astro-island uid="Zwcsae" component-url="/_astro/ScrollProgress.wMuMsWmL.js" component-export="ScrollProgress" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;className&quot;:[0,&quot;mt-auto w-full rounded-full pt-4&quot;],&quot;data-astro-cid-lo6vnqzn&quot;:[0,true]}" ssr client="only" opts="{&quot;name&quot;:&quot;ScrollProgress&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> </div> 
388<script type="module" src="/_astro/HomeSider.astro_astro_type_script_index_0_lang.BXk_FqDU.js"></script>
388 <div class="flex min-w-0 grow flex-col gap-8 md:w-full">    <div class="shadow-box bg-gradient-start mx-0 flex min-w-0 w-full max-w-full flex-col gap-8 overflow-x-clip px-10 py-8 tablet:px-6 tablet:pt-6 tablet:pb-2"> <div class="prose dark:prose-invert" data-pagefind-body> <div class="custom-content" data-config="{&quot;addBlankTarget&quot;:true,&quot;smoothScroll&quot;:true,&quot;addHeadingLevel&quot;:true,&quot;enhanceCodeBlock&quot;:true,&quot;enableCodeCopy&quot;:true,&quot;enableCodeFullscreen&quot;:true,&quot;enableLinkEmbed&quot;:true,&quot;enableTweetEmbed&quot;:true,&quot;enableOGPreview&quot;:true,&quot;enableCodePenEmbed&quot;:true,&quot;previewCacheTime&quot;:3600,&quot;lazyLoadEmbeds&quot;:true,&quot;postCardImagePosition&quot;:&quot;alternating&quot;,&quot;enableShokaContainers&quot;:true,&quot;enableShokaAttrs&quot;:true,&quot;enableShokaEffects&quot;:true,&quot;enableShokaSpoiler&quot;:true,&quot;enableShokaRuby&quot;:true,&quot;enableShokaHexoTags&quot;:true,&quot;enableMath&quot;:true,&quot;enableCodeMeta&quot;:true,&quot;enableQuiz&quot;:true,&quot;enableEncryptedBlock&quot;:true}" data-spoiler-reveal-label="点击显示隐藏内容">  <h2 id="害我是鸽秋">害,我是鸽秋<a class="anchor-link" aria-label="Link to this section" href="#害我是鸽秋"><span class="icon icon-link"></span></a></h2>
389<p><a href="https://github.com/Pigeon0v0"><img src="https://img.shields.io/badge/dynamic/json?color=blue&#x26;label=GitHub&#x26;query=%24.data.totalSubs&#x26;url=https%3A%2F%2Fapi.spencerwoo.com%2Fsubstats%2F%3Fsource%3Dgithub%26queryKey%3DPigeon0v0" alt="github badge" loading="lazy" decoding="async"></a></p>
390<p>活出自己想要的人生<br>
391Live a life you will remember.</p>
392<blockquote>
393<p>至少在这一刻 <br>
394热爱不问为何</p>
395</blockquote>
396<h3 id="找到我">找到我<a class="anchor-link" aria-label="Link to this section" href="#找到我"><span class="icon icon-link"></span></a></h3>
397<div class="link-preview-block not-prose" data-state="success">
398  <a href="https://github.com/Pigeon0v0" target="_blank" class="group block overflow-hidden rounded-lg border border-border transition-all hover:border-primary/50 hover:shadow-md" aria-label="Pigeon0v0 - Overview - github.com">
399    <div class="bg-card flex md:flex-col flex-row">
400      <div class="flex-1 p-4">
401        <div class="mb-2 flex items-center gap-2">
402          <img src="https://github.com/fluidicon.png" alt="" class="h-4 w-4 shrink-0" loading="lazy" aria-hidden="true" referrerpolicy="no-referrer">
403          <span class="text-muted-foreground truncate text-xs font-medium">github.com</span>
404        </div>
405        <h3 class="text-foreground mb-2 line-clamp-2 font-semibold leading-tight">Pigeon0v0 - Overview</h3>
406        <p class="text-muted-foreground mb-3 line-clamp-2 text-sm">码你所爱,活你所愿. Pigeon0v0 has 24 repositories available. Follow their code on GitHub.</p>
407        <div class="text-primary flex items-center gap-1 text-xs">
408          <span class="truncate">https://github.com/Pigeon0v0</span>
409          <svg class="h-3 w-3 shrink-0 transition-transform group-hover:translate-x-0.5" aria-hidden="true" viewBox="0 0 12 12"><path fill="currentColor" d="M4 3.5a.5.5 0 0 0-.5.5v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-.25a.75.75 0 0 1 1.5 0V8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h.25a.75.75 0 0 1 0 1.5zm2.75 0a.75.75 0 0 1 0-1.5h2.5a.75.75 0 0 1 .75.75v2.5a.75.75 0 0 1-1.5 0v-.69L7.28 5.78a.75.75 0 0 1-1.06-1.06L7.44 3.5z"></path></svg> 
410        </div>
411      </div>
412      <div class="bg-muted relative md:w-full shrink-0 aspect-1200/630 md:aspect-auto md:max-h-48 w-80"><img src="https://avatars.githubusercontent.com/u/60414767?v=4?s=400" alt="Pigeon0v0 - Overview" class="link-preview-image h-full md:h-full w-full object-cover" loading="lazy" referrerpolicy="no-referrer" data-fallback-title="Pigeon0v0 - Overview"></div>
413    </div>
414  </a>
415</div>
416<p><a href="https://git.io/streak-stats"><img src="https://github-readme-streak-stats-rust-tau.vercel.app?user=Pigeon0v0&#x26;theme=dark&#x26;date_format=%5BY%20%5DM%20&#x26;hide_border=true" alt="GitHub Streak" loading="lazy" decoding="async"></a></p>  </div>  
416<script>(()=>{var l=(n,t)=>{let i=async()=>{await(await n())()},e=typeof t.value=="object"?t.value:void 0,s={timeout:e==null?void 0:e.timeout};"requestIdleCallback"in window?window.requestIdleCallback(i,s):setTimeout(i,s.timeout||200)};(self.Astro||(self.Astro={})).idle=l;window.dispatchEvent(new Event("astro:idle"));})();</script>
416<astro-island uid="28HCJ8" prefix="r21" component-url="/_astro/ContentEnhancer.BNSQ_z8g.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;enableCopy&quot;:[0,true],&quot;enableFullscreen&quot;:[0,true],&quot;enableQuiz&quot;:[0,true],&quot;enableEncryptedBlock&quot;:[0,true]}" ssr client="idle" opts="{&quot;name&quot;:&quot;ContentEnhancer&quot;,&quot;value&quot;:true}"></astro-island>  <astro-island uid="qCYMK" prefix="r22" component-url="/_astro/EmbedHydrator.DzhwdG3U.js" component-export="EmbedHydrator" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;EmbedHydrator&quot;,&quot;value&quot;:true}"></astro-island> 
416<script type="module" src="/_astro/CustomContent.astro_astro_type_script_index_0_lang.DW7swoS7.js"></script>
416 </div> <div class="comments w-full z-5"> <p class="text-muted-foreground mb-4 text-center text-sm">喜欢的话,留下你的评论吧~</p> <astro-island uid="OJ3i2" component-url="/_astro/Waline.PJquDXZq.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="only" opts="{&quot;name&quot;:&quot;Waline&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> </div> </div>  <div class="tablet:grid-cols-1 grid grid-cols-2 gap-4 px-10 md:px-6"> <astro-island uid="ZVs2jK" component-url="/_astro/PostFooterLists.DYxLT9AF.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;allPosts&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;pcl-ce-and-its-development&quot;],&quot;link&quot;:[0,&quot;pcl-ce-and-its-development&quot;],&quot;title&quot;:[0,&quot;谈谈 PCL CE 与它的开发&quot;],&quot;categoryName&quot;:[0,&quot;随笔&quot;]}],[0,{&quot;slug&quot;:[0,&quot;dn42-peering&quot;],&quot;link&quot;:[0,&quot;dn42-peering&quot;],&quot;title&quot;:[0,&quot;Pigeon&#39;s Network @ DN42&quot;],&quot;categoryName&quot;:[0,&quot;笔记&quot;]}],[0,{&quot;slug&quot;:[0,&quot;orange-soda&quot;],&quot;link&quot;:[0,&quot;orange-soda&quot;],&quot;title&quot;:[0,&quot;橙子汽水&quot;],&quot;categoryName&quot;:[0,&quot;随笔&quot;]}],[0,{&quot;slug&quot;:[0,&quot;hi-my-friend&quot;],&quot;link&quot;:[0,&quot;hi-my-friend&quot;],&quot;title&quot;:[0,&quot;你好,朋友&quot;],&quot;categoryName&quot;:[0,&quot;随笔&quot;]}],[0,{&quot;slug&quot;:[0,&quot;hello-world&quot;],&quot;link&quot;:[0,&quot;hello-world&quot;],&quot;title&quot;:[0,&quot;Hello World&quot;],&quot;categoryName&quot;:[0,&quot;随笔&quot;]}]]],&quot;relatedPosts&quot;:[1,[]],&quot;leftCount&quot;:[0,3],&quot;rightCount&quot;:[0,2],&quot;locale&quot;:[0,&quot;zh&quot;]}" ssr client="only" opts="{&quot;name&quot;:&quot;PostFooterLists&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> </div> <footer class="mt-auto pb-6" data-astro-cid-oenwriqq> <div class="mx-auto flex flex-col items-center gap-3 px-6 md:pb-10 md:px-3 max-w-7xl" data-astro-cid-oenwriqq> <!-- Announcements Entry --> <astro-island uid="Z1MrLAA" prefix="r25" component-url="/_astro/FooterAnnouncementEntry.DpvAYBW4.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;data-astro-cid-oenwriqq&quot;:[0,true]}" ssr client="load" opts="{&quot;name&quot;:&quot;FooterAnnouncementEntry&quot;,&quot;value&quot;:true}"></astro-island> <!-- Site Stats --> <div class="text-muted-foreground flex flex-wrap items-center justify-center gap-6 text-sm md:gap-4" data-astro-cid-oenwriqq> <button class="flex items-center gap-2 opacity-75 transition-opacity duration-300 hover:opacity-100" title="站点总字数" data-astro-cid-oenwriqq> <svg width="1em" height="1em" class="h-4 w-4" data-astro-cid-oenwriqq="true" data-icon="ri:file-text-line">   <symbol id="ai:ri:file-text-line" viewBox="0 0 24 24"><path fill="currentColor" d="M21 8v12.993A1 1 0 0 1 20.007 22H3.993A.993.993 0 0 1 3 21.008V2.992C3 2.455 3.449 2 4.002 2h10.995zm-2 1h-5V4H5v16h14zM8 7h3v2H8zm0 4h8v2H8zm0 4h8v2H8z"/></symbol><use href="#ai:ri:file-text-line"></use>  </svg> <span class="font-medium" data-astro-cid-oenwriqq>2k</span> <span class="text-xs" data-astro-cid-oenwriqq>字</span> </button> <div class="bg-muted-foreground/30 h-4 w-px" data-astro-cid-oenwriqq></div> <button class="flex items-center gap-2 opacity-75 transition-opacity duration-300 hover:opacity-100" title="站点阅读时长" data-astro-cid-oenwriqq> <svg width="1em" height="1em" class="h-4 w-4" data-astro-cid-oenwriqq="true" data-icon="ri:time-line">   <symbol id="ai:ri:time-line" viewBox="0 0 24 24"><path fill="currentColor" d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10m0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16m1-8h4v2h-6V7h2z"/></symbol><use href="#ai:ri:time-line"></use>  </svg> <span class="font-medium" data-astro-cid-oenwriqq>0:14</span> </button> <div class="bg-muted-foreground/30 h-4 w-px" data-astro-cid-oenwriqq></div> <button class="flex items-center gap-2 opacity-75 transition-opacity duration-300 hover:opacity-100" title="文章总数" data-astro-cid-oenwriqq> <svg width="1em" height="1em" class="h-4 w-4" data-astro-cid-oenwriqq="true" data-icon="ri:article-line">   <symbol id="ai:ri:article-line" viewBox="0 0 24 24">
416<path fill="currentColor" d="M20 22H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1m-1-2V4H5v16zM7 6h4v4H7zm0 6h10v2H7zm0 4h10v2H7zm6-9h4v2h-4z"/></symbol><use href="#ai:ri:article-line"></use>  </svg> <span class="font-medium" data-astro-cid-oenwriqq>5</span> <span class="text-xs" data-astro-cid-oenwriqq>篇</span> </button>  </div> <!-- Copyright --> <div class="text-muted-foreground flex items-center gap-0.5 text-sm" data-astro-cid-oenwriqq> <span class="opacity-75" data-astro-cid-oenwriqq>©</span> <span class="font-medium opacity-75" data-astro-cid-oenwriqq>2025</span>  <span class="opacity-50" data-astro-cid-oenwriqq>-</span> <span class="font-medium opacity-75" itemprop="copyrightYear" data-astro-cid-oenwriqq> 2026 </span>  <svg class="mx-1 size-5 animate-spin text-[#FFC0CB] duration-10000" viewBox="0 0 512 512" fill="currentColor" aria-hidden="true"><g><path fill="currentColor" d="M330.555,101.873c0-34.164-13.767-65.108-36.047-87.622c-2.432-2.465-9.63-4.349-14.212,3.466
417		c-4.589,7.808-17.205,27.431-17.205,27.431c-1.534,2.438-4.219,3.918-7.089,3.918c-2.883,0-5.555-1.48-7.089-3.918
418		c0,0-12.623-19.623-17.205-27.431c-4.582-7.815-11.781-5.931-14.219-3.466c-22.274,22.514-36.04,53.458-36.04,87.622
419		c0,51.02,30.663,94.847,74.553,114.142C299.892,196.72,330.555,152.892,330.555,101.873z"></path><path fill="currentColor" d="M204.51,253.425c-4.78-47.705-36.998-90.409-85.518-106.176c-32.492-10.554-66.177-7.027-94.47,7.205
420		c-3.096,1.555-7.117,7.822-1.096,14.589c6.007,6.774,20.766,24.842,20.766,24.842c1.849,2.212,2.432,5.22,1.542,7.952
421		c-0.891,2.74-3.13,4.829-5.918,5.528c0,0-22.562,5.945-31.404,7.89c-8.849,1.945-9.281,9.37-7.692,12.445
422		c14.527,28.144,39.698,50.801,72.197,61.362C121.436,304.828,172.6,289.212,204.51,253.425z"></path><path fill="currentColor" d="M96.772,362.484c-20.082,27.643-27.136,60.766-22.342,92.074c0.527,3.424,5.233,9.178,13.527,5.554
423		c8.308-3.63,30.054-12.088,30.054-12.088c2.672-1.062,5.698-0.692,8.041,1c2.329,1.692,3.623,4.466,3.418,7.335
424		c0,0-1.308,23.294-2.199,32.315c-0.883,9.006,6.048,11.712,9.466,11.15c31.252-5.116,60.581-22.054,80.662-49.704
425		c29.993-41.266,30.944-94.758,6.781-136.155C177.332,303.773,126.758,321.204,96.772,362.484z"></path><path fill="currentColor" d="M287.824,313.964c-24.165,41.397-23.212,94.888,6.78,136.155c20.082,27.65,49.41,44.588,80.663,49.704
426		c3.418,0.562,10.349-2.144,9.466-11.15c-0.89-9.021-2.205-32.315-2.205-32.315c-0.198-2.869,1.102-5.643,3.431-7.335
427		c2.322-1.692,5.363-2.062,8.034-1c0,0,21.746,8.458,30.047,12.088c8.294,3.623,13.007-2.13,13.534-5.554
428		c4.787-31.308-2.254-64.43-22.342-92.074C385.246,321.204,334.672,303.766,287.824,313.964z"></path><path fill="currentColor" d="M503.6,215.254c-8.849-1.945-31.41-7.89-31.41-7.89c-2.795-0.706-5.027-2.788-5.918-5.528
429		c-0.89-2.732-0.308-5.74,1.534-7.952c0,0,14.76-18.068,20.78-24.842c6.014-6.766,1.993-13.034-1.096-14.589
430		c-28.301-14.232-61.978-17.76-94.485-7.205c-48.519,15.767-80.731,58.472-85.512,106.176
431		c31.91,35.787,83.067,51.403,131.593,35.636c32.492-10.561,57.67-33.218,72.191-61.362
432		C512.867,224.624,512.449,217.199,503.6,215.254z"></path></g></svg> <span class="author font-medium opacity-75" itemprop="copyrightHolder" data-astro-cid-oenwriqq> 鸽秋 @Pigeon&#39;s Home </span> </div> <!-- ICP Filing --> <div class="text-muted-foreground/80 text-xs" data-astro-cid-oenwriqq> <a href="https://icp.gov.moe/?keyword=20252510" target="_blank" rel="noopener noreferrer" class="footer-link font-medium" data-astro-cid-oenwriqq> 萌 ICP 备 20252510 号 </a> </div> <!-- Powered By --> <div class="text-muted-foreground/80 flex items-center gap-2 text-xs" data-astro-cid-oenwriqq> <span class="opacity-75" data-astro-cid-oenwriqq>Powered by theme</span> <a href="https://github.com/cosZone/astro-koharu" target="_blank" class="footer-link font-medium transition-all duration-300" data-astro-cid-oenwriqq>
433astro-koharu
434</a> <span class="opacity-50" data-astro-cid-oenwriqq>·</span> <span class="opacity-75" data-astro-cid-oenwriqq>Inspired by</span> <a href="https://github.com/amehime/hexo-theme-shoka" target="_blank" class="footer-link font-medium transition-all duration-300" data-astro-cid-oenwriqq>
435Shoka
436</a> </div> </div> </footer> </div> </div> </div>   </main> <div data-astro-transition-persist="global-bgm"> <astro-island uid="16IXny" component-url="/_astro/GlobalBGMPlayer.BE7vuxFX.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;audioGroups&quot;:[1,[[0,{&quot;title&quot;:[0,&quot;啥么都听&quot;],&quot;list&quot;:[1,[[0,&quot;https://music.163.com/playlist?id=17971643099&quot;]]]}],[0,{&quot;title&quot;:[0,&quot;春晓时&quot;],&quot;list&quot;:[1,[[0,&quot;https://music.163.com/album?id=372991165&quot;]]]}],[0,{&quot;title&quot;:[0,&quot;直到大地变成一颗酸橙&quot;],&quot;list&quot;:[1,[[0,&quot;https://music.163.com/album?id=389627625&quot;]]]}]]],&quot;metingApi&quot;:[0]}" ssr client="only" opts="{&quot;name&quot;:&quot;GlobalBGMPlayer&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> </div> <astro-island uid="TWS5R" component-url="/_astro/FloatingGroup.wCk2LPTr.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="only" opts="{&quot;name&quot;:&quot;FloatingGroup&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> <astro-island uid="Z17sJHE" prefix="r9" component-url="/_astro/SettingsPanel.D7nV2v75.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;SettingsPanel&quot;,&quot;value&quot;:true}"></astro-island> <!-- 遮罩层 -->
436 <div id="drawer-overlay" class="fixed inset-0 z-40 hidden bg-black/50" role="presentation" aria-hidden="true"></div> <!-- 移动端抽屉导航 --> <div id="mobile-drawer" class="bg-gradient-start tablet:flex fixed inset-y-0 left-0 z-50 hidden h-screen w-[70vw] min-w-64 -translate-x-full transform px-4 pt-3 shadow-lg backdrop-blur-sm transition-transform duration-300 md:px-0" role="dialog" aria-label="导航菜单" aria-modal="true"> <div class="flex h-full w-full flex-col overflow-auto"> <div class="flex items-center"> <button id="close-drawer" aria-label="关闭菜单" class="invisible"> <svg width="1em" height="1em" class="h-6 w-6" data-icon="ri:close-line">   <symbol id="ai:ri:close-line" viewBox="0 0 24 24"><path fill="currentColor" d="m12 10.587l4.95-4.95l1.414 1.414l-4.95 4.95l4.95 4.95l-1.415 1.414l-4.95-4.95l-4.949 4.95l-1.414-1.415l4.95-4.95l-4.95-4.95L7.05 5.638z"/></symbol><use href="#ai:ri:close-line"></use>  </svg> </button> <details class="language-switcher group relative ml-auto mr-4"> <summary class="flex cursor-pointer list-none items-center gap-1.5 rounded-lg px-2.5 py-1 text-sm text-muted-foreground transition-colors hover:bg-foreground
436/10 hover:text-foreground [&amp;::-webkit-details-marker]:hidden" aria-label="语言"> <svg width="1em" height="1em" class="size-4" data-icon="ri:translate">   <symbol id="ai:ri:translate" viewBox="0 0 24 24"><path fill="currentColor" d="M5 15v2a2 2 0 0 0 1.85 1.994L7 19h3v2H7a4 4 0 0 1-4-4v-2zm13-5l4.4 11h-2.155l-1.201-3h-4.09l-1.199 3h-2.154L16 10zm-1 2.885L15.753 16h2.492zM8 2v2h4v7H8v3H6v-3H2V4h4V2zm9 1a4 4 0 0 1 4 4v2h-2V7a2 2 0 0 0-2-2h-3V3zM6 6H4v3h2zm4 0H8v3h2z"/></symbol><use href="#ai:ri:translate"></use>  </svg> <span>中文</span> <svg width="1em" height="1em" viewBox="0 0 24 24" class="size-4 transition-transform duration-200 group-open:rotate-180" data-icon="ri:arrow-down-s-line">   <use href="#ai:ri:arrow-down-s-line"></use>  </svg> </summary> <div class="absolute right-0 top-full z-10 mt-1 flex min-w-28 flex-col overflow-hidden rounded-lg bg-background/80 shadow-lg backdrop-blur-sm dark:bg-black/40"> <a href="/about/" class="px-4 py-2 text-sm transition-colors bg-gradient-shoka-button font-medium text-white" aria-current="true"> 中文 </a><a href="/en/about/" class="px-4 py-2 text-sm transition-colors text-muted-foreground hover:bg-foreground
436/10 hover:text-foreground"> English </a> </div> </details> </div> <div data-astro-transition-scope="astro-bddlvhab-4" class="page-home-sider shadow-home-sider sticky top-0 tablet:overscroll-none self-start max-w-64 flex-col items-stretch overflow-auto h-screen scroll-gutter-stable tablet:flex tablet:mt-0 mt-4 hidden w-full min-w-full p-0" data-astro-cid-lo6vnqzn>  <sider-content class="vertical-scrollbar flex-1 overflow-x-hidden overflow-y-auto" data-type="home" data-default-type="info" data-astro-cid-lo6vnqzn="true"> <div slot="info" class="sider-slot" data-slot-type="info" data-astro-cid-lo6vnqzn> <div class="flex flex-col items-center md:py-2 pt-18 md:pt-0" data-home-info-container="home-info-bvej0mibm" data-astro-cid-7br6y6lf> <div class="relative h-40 w-40 rounded-full" style="background-image:linear-gradient(135deg, #d8bcc1 0%, #d8a8b8 50%, #a08998 100%)" data-astro-cid-7br6y6lf> <img class="shadow-card-darker hover:animate-shake h-full w-full rounded-full transition" src="/img/avatar.webp" alt="鸽秋 avatar" loading="eager" fetchpriority="high" data-astro-cid-7br6y6lf>  </div> <p class="mt-2" data-astro-cid-7br6y6lf>鸽秋</p> <p class="text-muted-foreground mt-3 text-center" data-astro-cid-7br6y6lf>鸽秋的 blog 与碎碎念</p> <!-- TODO: use CSS squircle corner-shape replace the rounded-xl border-radius with a squircle corner-shape (https://www.squircle.style/) --> <div class="mt-2 grid grid-cols-3 gap-2" data-astro-cid-qizw26vg> <div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #191717" data-platform="github" href="https://github.com/Pigeon0v0" title="Github" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Github" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:github-fill">   <use href="#ai:ri:github-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #55acd5" data-platform="email" href="/cdn-cgi/l/email-protection#c292aba5a7adac82a1b4b1a7b0b4a7b0ecb6adb2" title="Email" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Email" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:mail-line">   <use href="#ai:ri:mail-line"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #ff6600" data-platform="rss" href="/rss.xml" title="Rss" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Rss" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:rss-line">   <use href="#ai:ri:rss-line"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #4b9ae4" data-platform="twitter" href="https://x.com/PigeonA0v0" title="Twitter" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Twitter" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:twitter-fill">   <use href="#ai:ri:twitter-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #da708a" data-platform="bilibili" href="https://space.bilibili.com/354878609" title="Bilibili" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Bilibili" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:bilibili-fill">   <use href="#ai:ri:bilibili-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div><div data-astro-cid-qizw26vg> <a class="social-link flex-center group relative overflow-hidden rounded-xl px-1.5 py-1 transition-all duration-300 group-hover:scale-105" style="--link-color: #1e88e5" data-platform="zhihu" href="https://www.zhihu.com/people/Pigeon0v0" title="Zhihu" data-tooltip-interactive="false" data-tooltip-placement="top" aria-label="Zhihu" target="_blank" data-astro-cid-qizw26vg> <svg width="1em" height="1em" viewBox="0 0 24 24" class="inline-block size-6" data-astro-cid-qizw26vg="true" data-icon="ri:zhihu-fill">   <use href="#ai:ri:zhihu-fill"></use>  </svg> <span class="absolute inset-0 -z-10 -translate-x-full translate-y-full rounded-xl transition-transform duration-300 group-hover:translate-x-0 group-hover:translate-y-0" data-astro-cid-qizw26vg></span> </a> </div> </div> <div class="text-muted-foreground mt-3 flex justify-center text-center text-sm/4 whitespace-nowrap select-none dark:text-white/80" data-astro-cid-7br6y6lf> <a href="/" class="hover:text-blue flex cursor-pointer flex-col gap-2 p-1 transition" data-astro-cid-7br6y6lf> <span class="text-lg/5 font-bold" data-astro-cid-7br6y6lf>5</span> 文章 </a> <div class="bg-muted-foreground mx-3 w-px" data-astro-cid-7br6y6lf></div> <a href="/categories" aria-label="分类" class="hover:text-blue" data-astro-cid-7br6y6lf> <p class="flex cursor-pointer flex-col gap-2 p-1 transition" data-astro-cid-7br6y6lf> <span class="text-lg/5 font-bold" data-astro-cid-7br6y6lf>2</span> 分类 </p> </a> <div class="bg-muted-foreground mx-3 w-px" data-astro-cid-7br6y6lf></div> <a href="/tags" class="hover:text-blue flex cursor-pointer flex-col gap-2 p-1 transition" data-astro-cid-7br6y6lf> <span class="text-lg/5 font-bold" data-astro-cid-7br6y6lf>6</span> 标签 </a> </div> <div class="mt-6 flex w-full flex-col items-center gap-2.5" data-astro-cid-7br6y6lf> <a href="/" aria-label="首页" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focu
436s-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:home-heart-fill">   <use href="#ai:ri:home-heart-fill"></use>  </svg>首页 </a><div class="bg-foreground/10 flex w-40 flex-col rounded-xl opacity-75 transition-all duration-300 hover:opacity-100" data-collapsible data-astro-cid-7br6y6lf> <button class="flex-center hover:bg-foreground/5 h-12 w-full cursor-pointer rounded-xl transition-colors" data-collapse-trigger="home-info-bvej0mibm-collapse-1" aria-expanded="false" aria-label="文章菜单" type="button" data-astro-cid-7br6y6lf> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:quill-pen-ai-fill">   <use href="#ai:ri:quill-pen-ai-fill"></use>  </svg> 文章 <svg width="1em" height="1em" viewBox="0 0 24 24" class="ml-2 size-5 transition-transform duration-300" data-collapse-icon="home-info-bvej0mibm-collapse-1" data-astro-cid-7br6y6lf="true" data-icon="ri:arrow-down-s-line">   <use href="#ai:ri:arrow-down-s-line"></use>  </svg> </button> <div class="collapse-hidden" data-collapse-content="home-info-bvej0mibm-collapse-1" data-astro-cid-7br6y6lf> <div class="flex flex-col items-center" data-astro-cid-7br6y6lf> <a href="/categories" aria-label="分类" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:grid-fill">   <use href="#ai:ri:grid-fill"></use>  </svg>分类 </a><a href="/tags" aria-label="标签" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 512 512" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="fa6-solid:tags">   <use href="#ai:fa6-solid:tags"></use>  </svg>标签 </a><a href="/archives" aria-label="归档" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:archive-2-fill">   <use href="#ai:ri:archive-2-fill"></use>  </svg>归档 </a> </div> </div> </div><a href="/friends" aria-label="友链" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground
436/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:links-line">   <use href="#ai:ri:links-line"></use>  </svg>友链 </a><a href="https://www.travellings.cn/go.html" aria-label="开往" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:train-line">   <use href="#ai:ri:train-line"></use>  </svg>开往 </a><a href="/about" aria-label="关于" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 512 512" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="fa6-regular:circle-user">   <use href="#ai:fa6-regular:circle-user"></use>  </svg>关于 </a><a href="/music" aria-label="歌单" data-astro-cid-7br6y6lf="true" class="inline-flex items-center justify-center whitespace-nowrap ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 bg-gradient-shoka-button px-4 py-2 shoka-button-shadow h-12 w-40 rounded-xl text-base tracking-wider opacity-75 transition-all duration-300 hover:opacity-100 text-muted-foreground/80 hover:bg-muted-foreground/10 bg-none shadow-none hover:shadow-none"> <svg width="1em" height="1em" viewBox="0 0 24 24" class="mr-1.5" data-astro-cid-7br6y6lf="true" data-icon="ri:music-2-fill">   <use href="#ai:ri:music-2-fill"></use>  </svg>歌单 </a> </div> </div>  </div> <div slot="directory" class="sider-slot overflow-hidden h-full" data-slot-type="directory" data-astro-cid-lo6vnqzn>  </div> <div slot="series" class="sider-slot" data-slot-type="series" data-astro-cid-lo6vnqzn>  </div> </sider-content> <!-- 内联脚本:在 DOM 解析后立即隐藏不需要的内容,避免闪烁 -->
vendor: 109 bytes, line 436
436 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
436<script data-astro-rerun>
437    (function () {
438      const container = document.querySelector('sider-content');
439      if (!container) return;
440
441      const defaultType = container.getAttribute('data-default-type') || 'info';
442      const slots = container.querySelectorAll('.sider-slot');
443
444      slots.forEach((slot) => {
445        const slotType = slot.getAttribute('data-slot-type');
446        if (slotType !== defaultType) {
447          slot.classList.add('hidden');
448        }
449      });
450    })();
451  </script>
451 <astro-island uid="Zwcsae" component-url="/_astro/ScrollProgress.wMuMsWmL.js" component-export="ScrollProgress" renderer-url="/_astro/client.CcKcE1OL.js" props="{&quot;className&quot;:[0,&quot;mt-auto w-full rounded-full pt-4&quot;],&quot;data-astro-cid-lo6vnqzn&quot;:[0,true]}" ssr client="only" opts="{&quot;name&quot;:&quot;ScrollProgress&quot;,&quot;value&quot;:&quot;react&quot;}"></astro-island> </div>  </div> </div> 
451<script type="module" src="/_astro/MobileDrawer.astro_astro_type_script_index_0_lang.DR0HF3ca.js"></script>
451 <astro-island uid="1y4qW3" prefix="r10" component-url="/_astro/SearchDialog.DgIEjtxX.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;SearchDialog&quot;,&quot;value&quot;:true}"></astro-island> <!-- Search Component - will be portal'd into dialog --> <div id="search-component-portal" data-astro-cid-sh5tgklq> <div id="search-for-dialog" data-astro-cid-sh5tgklq> <pagefind-config lang="zh-CN" bundle-path="/pagefind/"></pagefind-config> 
451<script type="module" src="/_astro/PagefindConfig.astro_astro_type_script_index_0_lang.hMEz0n5-.js"></script>
451 <pagefind-searchbox placeholder="请输入关键词搜索" hide-shortcut="true" show-keyboard-hints="false" class="pagefind-search"></pagefind-searchbox> </div> </div> 
451<script type="module">function e(){let e=document.getElementById(`search-dialog-container`),t=document.getElementById(`search-component-portal`),n=document.getElementById(`search-for-dialog`);!e||!t||!n||e.contains(n)||e.appendChild(n)}function t(){let e=document.getElementById(`search-for-dialog`),t=document.getElementById(`search-component-portal`);!e||!t||t.contains(e)||t.appendChild(e)}function n(){requestAnimationFrame(()=>{e()})}function r(){t()}var i=!1;function a(){i||(i=!0,window.addEventListener(`search-dialog-open`,n),window.addEventListener(`search-dialog-close`,r))}function o(){i&&=(window.removeEventListener(`search-dialog-open`,n),window.removeEventListener(`search-dialog-close`,r),!1)}document.readyState!==`loading`&&a(),document.addEventListener(`astro:page-load`,a),document.addEventListener(`astro:before-swap`,o);</script>
451 <astro-island uid="ZEbEla" prefix="r11" component-url="/_astro/CodeBlockFullscreen.DBPCrL8n.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;CodeBlockFullscreen&quot;,&quot;value&quot;:true}"></astro-island> <astro-island uid="1q62AM" prefix="r12" component-url="/_astro/DiagramFullscreen.CTMkVCT1.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;DiagramFullscreen&quot;,&quot;value&quot;:true}"></astro-island> <astro-island uid="Z1gOVFG" prefix="r13" component-url="/_astro/ImageLightbox.BEhskzgc.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;ImageLightbox&quot;,&quot;value&quot;:true}"></astro-island> <astro-island uid="ZlnknW" prefix="r14" component-url="/_astro/sonner.COwsjDuJ.js" component-export="Toaster" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="idle" opts="{&quot;name&quot;:&quot;Toaster&quot;,&quot;value&quot;:true}" await-children><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section><!--astro:end--></astro-island> <!-- React components for Toast and Popup --> <astro-island uid="HYcDO" prefix="r23" component-url="/_astro/AnnouncementToaster.i2QyaRtG.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;AnnouncementToaster&quot;,&quot;value&quot;:true}"></astro-island> <astro-island uid="Oc79A" prefix="r24" component-url="/_astro/AnnouncementListPopup.DbwjX0I5.js" component-export="default" renderer-url="/_astro/client.CcKcE1OL.js" props="{}" ssr client="load" opts="{&quot;name&quot;:&quot;AnnouncementListPopup&quot;,&quot;value&quot;:true}"></astro-island> 
451<script type="module" src="/_astro/AnnouncementProvider.astro_astro_type_script_index_0_lang.BVdvidxq.js"></script>
451 
451<script type="module">var e=!1;function t(){return new Promise((t,n)=>{if(e||window.__CPEmbed){t();return}let r=document.createElement(`script`);r.src=`https://cpwebassets.codepen.io/assets/embed/ei.js`,r.async=!0,r.onload=()=>{e=!0,t()},r.onerror=n,document.head.appendChild(r)})}async function n(){if(document.querySelectorAll(`.codepen`).length!==0)try{await t(),window.__CPEmbed&&window.__CPEmbed()}catch(e){console.error(`[CodePen Embed] Failed to load CodePen embed script:`,e)}}document.readyState!==`loading`&&n(),document.addEventListener(`astro:page-load`,n);</script>
451 </div> <!-- Cloudflare Pages Analytics -->
vendor: 99 bytes, line 451
451<script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "
451c90bad8f5d3041a0a75522e2783c1512
vendor: 13 bytes, line 451
451"}'></script>
451<!-- Cloudflare Pages Analytics -->
451<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a40d8460da1db165',t:'MTc5MDM3NTg4NA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
451<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"119d523bba91434b854e9da8a7823989","r":1,"spa":2}' crossorigin="anonymous"></script>
451
452</body> </html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.