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'
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="{"isPostPage":[0,false],"enableNumbering":[0,true],"logoElement":[0,"text"],"logoText":[0,"Pigeon's Home"],"logoSrc":[0,"/_astro/logo.OhVfzb_E.svg"]}" ssr client="only" opts="{"name":"MobilePostHeader","value":"react"}"></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="{"currentPath":[0,"/about/"],"locale":[0,"zh"]}" ssr client="load" opts="{"name":"Navigator","value":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-[""]" 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="{"className":[0,"tablet:flex fixed top-0 left-3 z-52 hidden h-14 transition-transform"],"id":[0,"mobile-menu-container"]}" ssr client="only" opts="{"name":"MenuIcon","value":"react"}"></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="{"className":[0,"mt-auto w-full rounded-full pt-4"],"data-astro-cid-lo6vnqzn":[0,true]}" ssr client="only" opts="{"name":"ScrollProgress","value":"react"}"></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="{"addBlankTarget":true,"smoothScroll":true,"addHeadingLevel":true,"enhanceCodeBlock":true,"enableCodeCopy":true,"enableCodeFullscreen":true,"enableLinkEmbed":true,"enableTweetEmbed":true,"enableOGPreview":true,"enableCodePenEmbed":true,"previewCacheTime":3600,"lazyLoadEmbeds":true,"postCardImagePosition":"alternating","enableShokaContainers":true,"enableShokaAttrs":true,"enableShokaEffects":true,"enableShokaSpoiler":true,"enableShokaRuby":true,"enableShokaHexoTags":true,"enableMath":true,"enableCodeMeta":true,"enableQuiz":true,"enableEncryptedBlock":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&label=GitHub&query=%24.data.totalSubs&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&theme=dark&date_format=%5BY%20%5DM%20&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="{"enableCopy":[0,true],"enableFullscreen":[0,true],"enableQuiz":[0,true],"enableEncryptedBlock":[0,true]}" ssr client="idle" opts="{"name":"ContentEnhancer","value":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="{"name":"EmbedHydrator","value":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="{"name":"Waline","value":"react"}"></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="{"allPosts":[1,[[0,{"slug":[0,"pcl-ce-and-its-development"],"link":[0,"pcl-ce-and-its-development"],"title":[0,"è°è° PCL CE ä¸å®çå¼å"],"categoryName":[0,"éç¬"]}],[0,{"slug":[0,"dn42-peering"],"link":[0,"dn42-peering"],"title":[0,"Pigeon's Network @ DN42"],"categoryName":[0,"ç¬è®°"]}],[0,{"slug":[0,"orange-soda"],"link":[0,"orange-soda"],"title":[0,"æ©å汽水"],"categoryName":[0,"éç¬"]}],[0,{"slug":[0,"hi-my-friend"],"link":[0,"hi-my-friend"],"title":[0,"ä½ å¥½ï¼æå"],"categoryName":[0,"éç¬"]}],[0,{"slug":[0,"hello-world"],"link":[0,"hello-world"],"title":[0,"Hello World"],"categoryName":[0,"éç¬"]}]]],"relatedPosts":[1,[]],"leftCount":[0,3],"rightCount":[0,2],"locale":[0,"zh"]}" ssr client="only" opts="{"name":"PostFooterLists","value":"react"}"></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="{"data-astro-cid-oenwriqq":[0,true]}" ssr client="load" opts="{"name":"FooterAnnouncementEntry","value":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'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="{"audioGroups":[1,[[0,{"title":[0,"å¥ä¹é½å¬"],"list":[1,[[0,"https://music.163.com/playlist?id=17971643099"]]]}],[0,{"title":[0,"æ¥ææ¶"],"list":[1,[[0,"https://music.163.com/album?id=372991165"]]]}],[0,{"title":[0,"ç´å°å¤§å°åæä¸é¢é ¸æ©"],"list":[1,[[0,"https://music.163.com/album?id=389627625"]]]}]]],"metingApi":[0]}" ssr client="only" opts="{"name":"GlobalBGMPlayer","value":"react"}"></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="{"name":"FloatingGroup","value":"react"}"></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="{"name":"SettingsPanel","value":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 [&::-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="{"className":[0,"mt-auto w-full rounded-full pt-4"],"data-astro-cid-lo6vnqzn":[0,true]}" ssr client="only" opts="{"name":"ScrollProgress","value":"react"}"></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="{"name":"SearchDialog","value":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="{"name":"CodeBlockFullscreen","value":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="{"name":"DiagramFullscreen","value":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="{"name":"ImageLightbox","value":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="{"name":"Toaster","value":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="{"name":"AnnouncementToaster","value":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="{"name":"AnnouncementListPopup","value":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.