1<!DOCTYPE html> 2<html lang="zh-CN"> 3<head> 4 <meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1.0"> 6<meta http-equiv="X-UA-Compatible" content="ie=edge"> 7<link rel="stylesheet" href="/styles/main.min.css"> 8 9 10<link rel="icon" href="/favicon.ico" type="image/x-icon"> 11 12
13<script> 14(function() { 15 // Check for saved theme preference 16 var savedTheme = localStorage.getItem('theme'); 17 18 if (savedTheme) { 19 // Use saved preference 20 document.documentElement.setAttribute('data-theme', savedTheme); 21 } else { 22 // Check system preference 23 var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; 24 var theme = prefersDark ? 'dark' : 'light'; 25 document.documentElement.setAttribute('data-theme', theme); 26 } 27})(); 28</script>
28 29 30 31<meta name="description" content="æ¯ä¸æ®µæ è¡ï¼é½æç»ç¹ã"> 32<meta property="og:site_name" content="嵿´é"> 33<meta property="og:title" content="嵿´é"> 34<meta property="og:description" content="æ¯ä¸æ®µæ è¡ï¼é½æç»ç¹ã"> 35 36<meta property="og:image" content="/images/avatar.png"> 37 38<meta property="og:url" content="https://kemeow0815.github.io"> 39<meta property="og:type" content="website"> 40<meta name="twitter:card" content="summary_large_image"> 41<meta name="twitter:title" content="嵿´é"> 42<meta name="twitter:description" content="æ¯ä¸æ®µæ è¡ï¼é½æç»ç¹ã"> 43 44<meta name="twitter:image" content="/images/avatar.png"> 45 46 47 <meta name="generator" content="Gridea Pro 1.1.1"> 48 <title>å ³äº | 嵿´é</title> 49 50<meta name="description" content="å ³äº"> 51<link rel="canonical" href="https://kemeow0815.github.io/post/about/">
52<script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","headline":"å
³äº","url":"https://kemeow0815.github.io/post/about/","description":"å
³äº","datePublished":"2026-04-14T16:29:02+08:00","dateModified":"2026-04-14T16:29:02+08:00","author":{"@type":"Person","name":"嵿´é"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"/images/avatar.png"},"name":"嵿´é"}}</script>
vendor: 1 bytes, line 52
52
53<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://kemeow0815.github.io","name":"嵿´é","position":1},{"@type":"ListItem","item":"https://kemeow0815.github.io/post/about/","name":"å
³äº","position":2}]}</script>
53 54<meta property="og:title" content="å ³äº"> 55<meta property="og:description" content="å ³äº"> 56<meta property="og:url" content="https://kemeow0815.github.io/post/about/"> 57<meta property="og:type" content="article"> 58<meta property="og:site_name" content="嵿´é"> 59<meta property="og:image" content="/images/avatar.png"> 60<meta name="twitter:card" content="summary_large_image"> 61<meta name="twitter:url" content="https://kemeow0815.github.io/post/about/"> 62<meta name="twitter:title" content="å ³äº"> 63<meta name="twitter:description" content="å ³äº"> 64<meta name="twitter:image" content="/images/avatar.png"> 65</head> 66<body class="flavor-theme"> 67 68 <!-- å è½½é¡µé¢ --> 69 70 <div id="loading-overlay" class="loading-overlay"> 71 <div class="loading-content"> 72 73 <div class="loading-spinner"></div> 74 75 <div class="loading-title">å è½½ä¸...</div> 76 </div> 77 </div> 78 79 80 <!-- æµæèæ¯ --> 81 <div class="bg-container"> 82 <div class="bg-stars" id="bg-stars"></div> 83 </div> 84 85 <header class="site-header" id="siteHeader"> 86 <div class="header-inner"> 87 <div class="top-bar"> 88 89 90 <div class="top-bar__left"> 91 92 <a href="https://kemeow0815.github.io" class="site-avatar-link" aria-label="è¿åé¦é¡µ"> 93 <img class="site-avatar" src="https://jsd.268682.xyz/gh/Kemeow0815/img@main/img/kemeow0815.webp" alt="嵿´é" /> 94 </a> 95 96 <a href="https://kemeow0815.github.io" class="site-name-link">嵿´é</a> 97 </div> 98 99 100 <nav class="top-bar__nav" id="sectionBar"> 101 102 103 104 105 <a class="nav-item" href="https://kemeow0815.github.io/">ð é¦é¡µ</a> 106 107 108 109 110 <div class="nav-item-wrapper"> 111 <div class="nav-item nav-item--has-children" data-menu-id="menu-2"> 112 <a class="nav-item__link" href="javascript:void(0);">ðæç« </a> 113 <svg class="nav-item__arrow" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 114 <polyline points="6 9 12 15 18 9"></polyline> 115 </svg> 116 </div> 117 <div class="nav-submenu" id="submenu-menu-2"> 118 119 <a class="nav-submenu__item" href="/post">ðå ¨é¨æç« </a> 120 121 <a class="nav-submenu__item" href="/archives">ð¦å½æ¡£</a> 122 123 <a class="nav-submenu__item" href="/tags">ðæ ç¾</a> 124 125 </div> 126 </div> 127 128 129 130 131 <a class="nav-item" href="/memos">ðéªå¿µ</a> 132 133 134 135 136 <div class="nav-item-wrapper"> 137 <div class="nav-item nav-item--has-children" data-menu-id="menu-4"> 138 <a class="nav-item__link" href="javascript:void(0);">ð龿¥</a> 139 <svg class="nav-item__arrow" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 140 <polyline points="6 9 12 15 18 9"></polyline> 141 </svg> 142 </div> 143 <div class="nav-submenu" id="submenu-menu-4"> 144 145 <a class="nav-submenu__item" href="/links">ð§âð¤âð§åé¾</a> 146 147 <a class="nav-submenu__item" href="/post/fcircle">ð¬æåå</a> 148 149 </div> 150 </div> 151 152 153 154 155 <div class="nav-item-wrapper"> 156 <div class="nav-item nav-item--has-children" data-menu-id="menu-5"> 157 <a class="nav-item__link" href="javascript:void(0);">ð页é¢</a> 158 <svg class="nav-item__arrow" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 159 <polyline points="6 9 12 15 18 9"></polyline> 160 </svg> 161 </div> 162 <div class="nav-submenu" id="submenu-menu-5"> 163 164 <a class="nav-submenu__item" href="/post/sponsor">ðèµå©</a> 165 166 <a class="nav-submenu__item" href="/post/timetable">ðï¸è¯¾ç¨è¡¨</a> 167 168 </div> 169 </div> 170 171 172 173 174 <a class="nav-item" href="/post/about">ð« å ³äº</a> 175 176 177 178 </nav> 179 180 181 <div class="top-bar__right">
182 <button class="btn-icon btn-theme" id="btnTheme" type="button" aria-label="忢䏻é¢"> 183 184 <svg class="theme-icon-moon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 185 <path d="M20.742 13.045a8 8 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.03 8.03 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10 10 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.94 9.94 0 0 0 7.072 2.93a9.93 9.93 0 0 0 7.07-2.929a10 10 0 0 0 2.583-4.491a1 1 0 0 0-1.224-1.224m-2.772 4.301a7.95 7.95 0 0 1-5.656 2.343a7.95 7.95 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a8 8 0 0 1 2.06-1.483a10.03 10.03 0 0 0 2.89 7.848a9.97 9.97 0 0 0 7.848 2.891a8 8 0 0 1-1.484 2.059"/> 186 </svg> 187 188 <svg class="theme-icon-sun" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 189 <circle cx="12" cy="12" r="4"/> 190 <path d="M12 2v2"/> 191 <path d="M12 20v2"/> 192 <path d="m4.93 4.93 1.41 1.41"/> 193 <path d="m17.66 17.66 1.41 1.41"/> 194 <path d="M2 12h2"/> 195 <path d="M20 12h2"/> 196 <path d="m6.34 17.66-1.41 1.41"/> 197 <path d="m19.07 4.93-1.41 1.41"/> 198 </svg> 199 </button> 200 <button class="btn-icon btn-search search-btn" id="btnSearch" type="button" aria-label="æç´¢"> 201 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 202 stroke-linecap="round" stroke-linejoin="round"> 203 <circle cx="11" cy="11" r="8"></circle> 204 <line x1="21" y1="21" x2="16.65" y2="16.65"></line> 205 </svg> 206 </button> 207 <button class="btn-icon btn-nav-toggle mobile-only" id="btnNavToggle" type="button" aria-label="忢坼èª"> 208 <div class="hamburger" id="hamburger"> 209 <span class="hamburger__line hamburger__line--top"></span> 210 <span class="hamburger__line hamburger__line--bottom"></span> 211 </div> 212 </button> 213 </div> 214 215 </div> 216 </div> 217</header> 218 219 220<div class="header-spacer"></div> 221
222<script> 223(function(){ 224 // Mobile nav toggle 225 var btn = document.getElementById('btnNavToggle'); 226 var nav = document.getElementById('sectionBar'); 227 var hamburger = document.getElementById('hamburger'); 228 if (!btn || !nav) return; 229 btn.addEventListener('click', function(){ 230 nav.classList.toggle('top-bar__nav--open'); 231 if (hamburger) hamburger.classList.toggle('is-active'); 232 }); 233 234 // Submenu toggle for mobile 235 var navItemsWithChildren = document.querySelectorAll('.nav-item--has-children'); 236 navItemsWithChildren.forEach(function(item) { 237 item.addEventListener('click', function(e) { 238 // Only handle click on mobile 239 if (window.innerWidth > 768) return; 240 241 e.preventDefault(); 242 e.stopPropagation(); 243 244 var menuId = this.getAttribute('data-menu-id'); 245 var submenu = document.getElementById('submenu-' + menuId); 246 247 // Close other open submenus 248 navItemsWithChildren.forEach(function(otherItem) { 249 if (otherItem !== item) { 250 var otherMenuId = otherItem.getAttribute('data-menu-id'); 251 var otherSubmenu = document.getElementById('submenu-' + otherMenuId); 252 if (otherSubmenu && otherSubmenu.classList.contains('nav-submenu--open')) { 253 otherSubmenu.classList.remove('nav-submenu--open'); 254 otherItem.classList.remove('nav-item--expanded'); 255 } 256 } 257 }); 258 259 // Toggle current submenu 260 if (submenu) { 261 submenu.classList.toggle('nav-submenu--open'); 262 this.classList.toggle('nav-item--expanded'); 263 } 264 }); 265 }); 266 267 // Close mobile nav when clicking on simple nav items 268 nav.querySelectorAll('.nav-item:not(.nav-item--has-children)').forEach(function(item){ 269 item.addEventListener('click', function(){ 270 nav.classList.remove('top-bar__nav--open'); 271 if (hamburger) hamburger.classList.remove('is-active'); 272 }); 273 }); 274 275 // Theme toggle with performance optimization 276 var themeBtn = document.getElementById('btnTheme'); 277 if (themeBtn) { 278 themeBtn.addEventListener('click', function() { 279 var currentTheme = document.documentElement.getAttribute('data-theme') || 'dark'; 280 var newTheme = currentTheme === 'dark' ? 'light' : 'dark'; 281 282 // Add class to disable transitions during theme change 283 document.body.classList.add('theme-changing'); 284 285 // Use requestAnimationFrame for smooth theme switch 286 requestAnimationFrame(function() { 287 document.documentElement.setAttribute('data-theme', newTheme); 288 localStorage.setItem('theme', newTheme); 289 290 // Remove the class after theme change is complete 291 requestAnimationFrame(function() { 292 document.body.classList.remove('theme-changing'); 293 }); 294 }); 295 }); 296 } 297})(); 298</script>
298 299 300 301 <main class="site-main" role="main"> 302 303<div id="about-container"> 304 <!-- é¡¶é¨åºå --> 305 <section class="top-section"> 306 <div class="top-content"> 307 <div class="float-texts float-texts--left"> 308 309 ð å客åä½è 310ð§± å客鿹è 311ð·ââï¸ åªä¼CTRL CV 312ð ä¹è§ä¸æ²è§ 313忬¢å¤§æ´å¤© ð±ââï¸ 314å°è¯´ç±å¥½è ð 315ai使ç¨è ð¤ 316æçå°ç¬¨çª ð 317 318 </div> 319 <div class="avatar-container"> 320 321 <img class="no-lightbox avatar" src="https://jsd.268682.xyz/gh/Kemeow0815/img@main/img/kemeow0815.webp" alt="avatar"> 322 323 </div> 324 <div class="float-texts float-texts--right"> 325 326 ð å客åä½è 327ð§± å客鿹è 328ð·ââï¸ åªä¼CTRL CV 329ð ä¹è§ä¸æ²è§ 330忬¢å¤§æ´å¤© ð±ââï¸ 331å°è¯´ç±å¥½è ð 332ai使ç¨è ð¤ 333æçå°ç¬¨çª ð 334 335 </div> 336 </div> 337 <div class="site-name">嵿´é</div> 338 <div class="motto">æ»æäºäºæ ï¼é«äºå ¶ä»ï¼</div> 339 340 <a href="https://github.com/Kemeow0815/Friend-Circle-Lite/issues/new?template=%E9%82%AE%E7%AE%B1%E8%AE%A2%E9%98%85.md" target="_blank" rel="noopener" class="about-github-btn"> 341 <svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20"><path d="M496 48a448 448 0 1 0 0 896 448 448 0 1 0 0-896z" fill="#8B8E98"></path><path d="M496 864a368 368 0 1 1 368-368 368 368 0 0 1-368 368z" fill="#7E8189"></path><path d="M577.28 693.6A176 176 0 0 1 624 800v84c0 8.8 3.68 34.08 14.4 36.96L496 946.88l-144-25.76c11.52-2.56 16-28.32 16-37.12V832c-124.64 27.04-150.4-68.8-150.4-68.8-20.48-51.68-49.76-65.6-49.76-65.6-40.64-27.68 3.04-27.2 3.04-27.2A94.24 94.24 0 0 1 240 716.64c40 68.32 103.04 62.72 128 51.36 4.16-28.96 33.6-62.88 46.4-74.08-99.52-11.36-204.16-49.76-204.16-221.44A173.28 173.28 0 0 1 256 352a161.44 161.44 0 0 1 4.48-118.56s37.6-12 123.2 45.92a425.76 425.76 0 0 1 224 0c85.44-57.92 123.04-45.92 123.04-45.92A161.44 161.44 0 0 1 736 352a173.28 173.28 0 0 1 45.92 120.16c-0.16 172.48-104.8 210.4-204.64 221.44z" fill="#FAEFDE"></path><path d="M496 32a464 464 0 0 0-152.64 902.08 16 16 0 0 0 8.8 3.04A464 464 0 1 0 496 32z m-116.8 880a99.52 99.52 0 0 0 4.8-27.84v-8.64V832a16 16 0 0 0-19.36-16c-107.52 23.36-130.72-54.08-131.68-57.28v-1.76a151.04 151.04 0 0 0-48-67.84 85.92 85.92 0 0 1 40.96 35.2c42.24 72.48 112 74.4 148.8 57.92a16 16 0 0 0 9.28-12.32 137.92 137.92 0 0 1 40.96-64 16 16 0 0 0-8.96-27.84c-93.92-10.72-189.92-43.52-189.92-205.44a157.12 157.12 0 0 1 41.92-109.44 16 16 0 0 0 4-16.96 141.44 141.44 0 0 1 0-97.44c13.6 0 46.72 6.24 102.72 44.16a16 16 0 0 0 13.28 2.24 408.96 408.96 0 0 1 215.68 0 16 16 0 0 0 13.28-2.24c56.16-38.08 89.44-43.84 102.56-44.32a141.92 141.92 0 0 1 1.12 97.6 16 16 0 0 0 3.04 16.8 157.12 157.12 0 0 1 41.76 109.44c0 162.08-96 194.72-190.24 205.12a16 16 0 0 0-8.64 28A163.2 163.2 0 0 1 608 800v84a100.48 100.48 0 0 0 4.64 28 429.76 429.76 0 0 1-233.44 0z m264-9.6a66.08 66.08 0 0 1-3.2-18.08V800a186.56 186.56 0 0 0-32-94.56c88.8-15.04 190.24-61.12 190.24-232.96a188.16 188.16 0 0 0-43.84-123.68 183.04 183.04 0 0 0-7.68-120.96 16 16 0 0 0-9.92-9.28c-4.48-1.44-45.6-12.16-130.88 43.84a441.76 441.76 0 0 0-218.56 0c-85.28-56-126.4-45.28-130.88-43.84a16 16 0 0 0-9.92 9.28 182.72 182.72 0 0 0-7.68 120.96 188 188 0 0 0-43.84 123.68c0 170.4 99.68 217.28 187.68 232.96a152.16 152.16 0 0 0-27.84 50.56c-22.72 6.4-69.44 6.56-100.64-47.04a110.4 110.4 0 0 0-82.4-54.4c-8.64 0-30.4 1.44-35.52 18.08s14.56 32 23.36 38.4l2.08 1.12c0.96 0 24.32 12.8 41.6 56.48 3.68 11.36 35.52 97.6 149.6 82.4v32.96a64 64 0 0 1-3.36 18.08 432 432 0 1 1 294.56 0z" fill="#8D6C9F"></path><path d="M496 592a16 16 0 0 0-16 16v32a16 16 0 0 0 32 0v-32a16 16 0 0 0-16-16z m73.6 40.48a16 16 0 0 0 30.88-8.48L592 593.28a16 16 0 0 0-30.88 8.32z m-221.6-80.16a16 16 0 0 0-21.92 5.92l-16 27.68a16 16 0 0 0 27.68 16l16-27.68a16 16 0 0 0-5.76-21.92z m306.08 49.6a16 16 0 1 0 27.68-16l-16-27.68a16 16 0 0 0-27.68 16z m-234.72-20a16 16 0 0 0-19.52 11.36L391.52 624a16 16 0 1 0 30.88 8.32l8.32-30.88a16 16 0 0 0-11.36-19.52zM661.6 151.36a363.36 363.36 0 0 0-36.8-16 16 16 0 0 0-11.2 29.92 337.6 337.6 0 0 1 33.6 14.72 16 16 0 0 0 7.2 1.76 16 16 0 0 0 7.2-30.24z m-107.2-34.72a369.28 369.28 0 0 0-240 43.52 16 16 0 0 0 8 29.92 16 16 0 0 0 7.84-2.08 337.6 337.6 0 0 1 219.2-39.68 16 16 0 1 0 5.12-32z" fill="#8D6C9F"></path></svg>
342 <span>Follow Me ð«</span> 343 </a> 344 345 </section> 346 347 <!-- ä¿¡æ¯åºå --> 348 <section class="info-section"> 349 <div class="left-column card"> 350 <div class="personal-info"> 351 <h2 class="section-title">个人信æ¯</h2> 352 <div class="info-grid"> 353 354 <p><strong>å§å:</strong> MCY</p> 355 356 357 <p><strong>æ§å«:</strong> ç·</p> 358 359 360 <p><strong>å°å:</strong> æ±èèå·</p> 361 362 363 <p><strong>妿 ¡:</strong> å京工ä¸è䏿æ¯å¤§å¦</p> 364 365 366 <p><strong>年级:</strong> äºãäºä¸çº§</p> 367 368 369 <p><strong>ä¸ä¸:</strong> èªå¨åææ¯ä¸åºç¨</p> 370 371 372 <p><strong>é®ç®±:</strong> <a href="mailto:[email protected]">[email protected]</a></p> 373 374 375 <p><strong>QQ:</strong> 3813596020</p> 376 377 378 <p><strong>çæ¥:</strong> 2005/08/15</p> 379 380 </div> 381 </div> 382 <div class="flex-1"></div> 383 384 <img class="left-column-bottom" src="https://cdn.jsdmirror.com/gh/zsxcoder/github-img@main/img/umami.avif" alt=""> 385 386 </div> 387 <div class="right-column"> 388 <div class="personality card"> 389 <div class="personality-info"> 390 391 <p class="type">INFJ-T</p> 392 393 394 <p class="type_name">æå¡è </p> 395 396 <div class="flex-1"></div> 397 398 <p class="learn_more"> 399 ç¹å»å¨ <a href="https://www.16personalities.com/ch/infj-%E4%BA%BA%E6%A0%BC" target="_blank" rel="noopener nofollower">16Personalities</a> ä¸äºè§£æ´å¤ 400 </p> 401 402 </div> 403 404 <div class="personality-svg"> 405 <img class="no-lightbox svg" src="https://cdn.jsdmirror.com/gh/zsxcoder/github-img@main/img/infj.avif" alt="Personality SVG"> 406 </div> 407 408 </div> 409 410 <div class="description-and-social card"> 411 412 <p class="description">大家好ï¼è¿éæ¯å åµçå°ç«ãä½ å¯ä»¥ç§°å¼æãå åµãæè ãéç¥ç§ããæä¸å¤§è天ï¼ä½ æ¾ææä¼åï¼ä½æ¯èä¸é¿ï¼å欢ä¸ä¸ªäººå¾ çãå忥æºäºå°è¯´ã诡ç§ä¹ä¸»ããæå¨è¿ä¸ªåå®¢è®°å½æççæ´»æ¥å¸¸ã踩åæç¨åèµæºå享ãå¸æä½ åæ¬¢æçå客ï¼</p> 413 414 415 <div class="social-links" data-social-links="[ 416 { 417 "platform": "GitHub", 418 "url": "https://github.com/yxksw", 419 "icon": "https://cdn.jsdmirror.com/gh/yxksw/icons@main/socials/github.svg" 420 }, 421 { 422 "platform": "Gitee", 423 "url": "https://gitee.com/kemiaoshiwo", 424 "icon": "https://cdn.jsdmirror.com/gh/yxksw/icons@main/socials/gitee.svg" 425 }, 426 { 427 "platform": "QQ", 428 "url": "https://qm.qq.com/q/kz5EuEimk0", 429 "icon": "https://cdn.jsdmirror.com/gh/yxksw/icons@main/socials/qq.svg" 430 }, 431 { 432 "platform": "BliBili", 433 "url": "https://space.bilibili.com/3546643173477234", 434 "icon": "https://cdn.jsdmirror.com/gh/yxksw/icons@main/socials/bilibili.svg" 435 }, 436 { 437 "platform": "Telegram", 438 "url": "https://t.me/yxksw", 439 "icon": "https://cdn.jsdmirror.com/gh/yxksw/icons@main/socials/telegram.svg" 440 }, 441 { 442 "platform": "å³å»", 443 "url": "https://web.okjike.com/u/07152f0c-0f65-4501-855b-031f3e20e4a5", 444 "icon": "https://cdn.jsdmirror.com/gh/yxksw/icons@main/socials/jike.svg" 445 } 446 ]"> 447 <!-- ç¤¾äº¤é¾æ¥å°ç± JS 渲æ --> 448 </div> 449 450 </div> 451 </div> 452 </section> 453 454 <!-- æè½åé¡¹ç® --> 455 <section class="skills-and-projects"> 456 <div class="skills card"> 457 <h2 class="section-title">æè½</h2> 458 <div class="skills-grid"> 459 460 <div class="skill-category skill-category--technical" data-skills="https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/astro.svg 461https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/node.svg 462https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/nuxt.svg 463https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/php.svg 464https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/ts.svg 465https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/vue.svg"> 466 <!-- ææ¯æè½å°ç± JS 渲æ --> 467 </div> 468 469 470 <div class="skill-category category-2 skill-category--general" data-skills="https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/css.svg 471https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/git.svg 472https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/html.svg 473https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/js.svg 474https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/markdown.svg 475https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/nextjs.svg 476https://cdn.jsdmirror.com/gh/yxksw/icons@main/skills/vite.svg"> 477 <!-- éç¨æè½å°ç± JS 渲æ --> 478 </div> 479 480 </div> 481 482 <p class="learning">æ£å¨æç»å¦ä¹ ä¸</p> 483 484 </div> 485 <div class="projects card"> 486 <h2 class="section-title">项ç®</h2> 487 <div class="projects-grid" data-projects=" [{ 488 "name": "yxk-blog", 489 "description": "å客æºç ", 490 "url": "https://github.com/yxksw/yxk-blog" 491 }]"> 492 <!-- 项ç®å°ç± JS 渲æ --> 493 </div> 494 </div> 495 </section> 496 497 <!-- ç±å¥½åè¯ä»· --> 498 <section class="hobbies-and-evaluation"> 499 <div class="hobbies card"> 500 <h2 class="section-title">ç±å¥½</h2> 501 <ul class="hobbies-list" data-hobbies="é 读 502å°è¯´ 503ç¼ç¨ 504éæ¹"> 505 <!-- ç±å¥½å°ç± JS 渲æ --> 506 </ul> 507 </div>
508 <div class="self-evaluation card"> 509 <h2 class="section-title">è¯ä»·</h2> 510 511 <p><strong>ææ³:</strong> ææ³ä¸ä¹è§å¼æï¼ä¹äºå©äººï¼å ·æå¢éåä½ç²¾ç¥ååæ°æè¯ã</p> 512 513 514 <p><strong>å·¥ä½:</strong> å·¥ä½ä¸æå¯è´£ä»»å¿ä¸ä¿¡å¿µæï¼å¯¹å¾ å·¥ä½è®¤çè´è´£ï¼æè¾å¼ºçç»ç»ç®¡çå卿è½åã</p> 515 516 517 <p class="summary"><strong>æ»ç»:</strong> 人åå好ï¼</p> 518 519 </div> 520 </section> 521</div> 522
523<script> 524(function() { 525 // è§£ææµ®å¨æ ç¾ 526 function renderFloatTexts() { 527 const leftContainer = document.querySelector('.float-texts--left'); 528 const rightContainer = document.querySelector('.float-texts--right'); 529 const floatTextData = leftContainer ? leftContainer.textContent.trim() : ''; 530 531 if (!floatTextData) return; 532 533 const texts = floatTextData.split('\n').filter(t => t.trim()); 534 535 leftContainer.innerHTML = ''; 536 rightContainer.innerHTML = ''; 537 538 texts.slice(0, 4).forEach((text, index) => { 539 const div = document.createElement('div'); 540 div.className = `float-text float-text-${index + 1}`; 541 div.textContent = text.trim(); 542 leftContainer.appendChild(div); 543 }); 544 545 texts.slice(4, 8).forEach((text, index) => { 546 const div = document.createElement('div'); 547 div.className = `float-text float-text-${index + 5}`; 548 div.textContent = text.trim(); 549 rightContainer.appendChild(div); 550 }); 551 } 552 553 // è§£æç¤¾äº¤é¾æ¥ 554 function renderSocialLinks() { 555 const container = document.querySelector('.social-links'); 556 if (!container) return; 557 558 const data = container.getAttribute('data-social-links'); 559 if (!data) return; 560 561 try { 562 const links = JSON.parse(data); 563 container.innerHTML = links.map(link => ` 564 <a href="${escapeHtml(link.url)}" target="_blank" rel="noopener"> 565 <img class="no-lightbox" src="${escapeHtml(link.icon)}" alt="${escapeHtml(link.platform)}"> 566 </a> 567 `).join(''); 568 } catch (e) { 569 console.error('ç¤¾äº¤é¾æ¥è§£æå¤±è´¥:', e); 570 } 571 } 572 573 // è§£ææè½
574 function renderSkills() { 575 document.querySelectorAll('.skill-category').forEach(container => { 576 const data = container.getAttribute('data-skills'); 577 if (!data) return; 578 579 const skills = data.split('\n').filter(s => s.trim()); 580 container.innerHTML = skills.map(skill => ` 581 <div class="skill-card"> 582 <img src="${escapeHtml(skill.trim())}" alt="æè½å¾æ "> 583 </div> 584 `).join(''); 585 }); 586 } 587 588 // è§£æé¡¹ç® 589 function renderProjects() { 590 const container = document.querySelector('.projects-grid'); 591 if (!container) return; 592 593 const data = container.getAttribute('data-projects'); 594 if (!data) return; 595 596 try { 597 const projects = JSON.parse(data); 598 container.innerHTML = projects.map(project => ` 599 <div class="project"> 600 <a href="${escapeHtml(project.url)}" target="_blank" rel="noopener"> 601 <h3>${escapeHtml(project.name)}</h3> 602 <p>${escapeHtml(project.description)}</p> 603 </a> 604 </div> 605 `).join(''); 606 } catch (e) { 607 console.error('项ç®è§£æå¤±è´¥:', e); 608 } 609 } 610 611 // è§£æç±å¥½ 612 function renderHobbies() { 613 const container = document.querySelector('.hobbies-list'); 614 if (!container) return; 615 616 const data = container.getAttribute('data-hobbies'); 617 if (!data) return; 618 619 const hobbies = data.split('\n').filter(h => h.trim()); 620 container.innerHTML = hobbies.map(hobby => ` 621 <li>${escapeHtml(hobby.trim())}</li> 622 `).join(''); 623 } 624 625 // HTMLè½¬ä¹ 626 function escapeHtml(text) { 627 const div = document.createElement('div'); 628 div.textContent = text; 629 return div.innerHTML; 630 } 631 632 // åå§å 633 if (document.readyState === 'loading') { 634 document.addEventListener('DOMContentLoaded', function() { 635 renderFloatTexts(); 636 renderSocialLinks(); 637 renderSkills(); 638 renderProjects(); 639 renderHobbies(); 640 }); 641 } else { 642 renderFloatTexts(); 643 renderSocialLinks(); 644 renderSkills(); 645 renderProjects(); 646 renderHobbies(); 647 } 648})(); 649</script>
649 650 651 </main> 652 653 <footer class="site-footer"> 654 <div class="footer-inner"> 655 656 657 658 659 <nav class="footer-nav" aria-label="页è导èª" id="footer-nav-custom"> 660 </nav> 661
661<script> 662 (function() { 663 var navData = [ 664 {"name": "主页", "link": "https://www.kemiaosw.top"}, 665 {"name": "BLog", "link": "https://kemeow0815.github.io/blog"}, 666 {"name": "åé¾å±", "link": "https://www.268682.xyz"}, {"name": "Gwitter", "link": "https://gwitter.268682.xyz"} 667]; 668 if (Array.isArray(navData)) { 669 var navHtml = ''; 670 navData.forEach(function(item) { 671 navHtml += '<a class="footer-nav__link" href="' + item.link + '">' + item.name + '</a>'; 672 }); 673 document.getElementById('footer-nav-custom').innerHTML = navHtml; 674 } 675 })(); 676 </script>
676 677 678 679 680 <div class="footer-social"> 681 682 <a class="footer-social__link" href="https://github.com/Kemeow0815" target="_blank" rel="noopener noreferrer" 683 aria-label="GitHub"> 684 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 685 <path 686 d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /> 687 </svg> 688 </a> 689 690 691 692 693 <a class="footer-social__link" href="https://t.me/Kemeow0815" target="_blank" rel="noopener noreferrer" 694 aria-label="Telegram"> 695 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 696 <path d="M12 0C5.37 0 0 5.37 0 12s5.37 12 12 12 12-5.37 12-12S18.63 0 12 0zm5.95 8.24l-2.17 10.24c-.16.73-.6.9-1.22.56l-3.37-2.48-1.63 1.56c-.18.18-.33.33-.68.33l.24-3.44 6.25-5.65c.27-.24-.06-.37-.42-.13l-7.72 4.86-3.33-1.04c-.72-.23-.74-.72.15-1.06l13.02-5.02c.6-.22 1.12.14.93 1.03z"/> 697 </svg> 698 </a> 699 700 701 <a class="footer-social__link" href="https://qm.qq.com/q/kz5EuEimk0" target="_blank" rel="noopener noreferrer" 702 aria-label="QQ"> 703 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 704 <path d="M12.003 2c-2.265 0-6.29 1.364-6.29 7.325v1.195S3.55 14.96 3.55 17.474c0 .665.17 1.025.281 1.025.114 0 .902-.484 1.748-2.072 0 0-.18 2.197 1.904 3.967 0 0-1.77.495-1.77 1.182 0 .686 4.078.43 6.29.43 2.21 0 6.288.256 6.288-.43 0-.687-1.768-1.182-1.768-1.182 2.085-1.77 1.905-3.967 1.905-3.967.845 1.588 1.634 2.072 1.746 2.072.111 0 .283-.36.283-1.025 0-2.514-2.166-6.954-2.166-6.954V9.325C18.29 3.364 14.268 2 12.003 2z"/> 705 </svg> 706 </a> 707 708 709 <a class="footer-social__link" href="https://space.bilibili.com/3546643173477234" target="_blank" rel="noopener noreferrer" 710 aria-label="Bilibili"> 711 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 712 <path d="M17.813 4.653h.854c1.51.054 2.769.578 3.773 1.574 1.004.995 1.524 2.249 1.56 3.76v7.36c-.036 1.51-.556 2.769-1.56 3.773s-2.262 1.524-3.773 1.56H5.333c-1.51-.036-2.769-.556-3.773-1.56S.036 18.858 0 17.347v-7.36c.036-1.511.556-2.765 1.56-3.76 1.004-.996 2.262-1.52 3.773-1.574h.774l-1.174-1.12a1.234 1.234 0 0 1-.373-.906c0-.356.124-.658.373-.907l.027-.027c.267-.249.573-.373.92-.373.347 0 .653.124.92.373L9.653 4.44c.071.071.134.142.187.213h4.267a.836.836 0 0 1 .16-.213l2.853-2.747c.267-.249.573-.373.92-.373.347 0 .662.151.929.4.267.249.391.551.391.907 0 .355-.124.657-.373.906zM5.333 7.24c-.746.018-1.373.276-1.88.773-.506.498-.769 1.13-.786 1.894v7.52c.017.764.28 1.395.786 1.893.507.498 1.134.756 1.88.773h13.334c.746-.017 1.373-.275 1.88-.773.506-.498.769-1.129.786-1.893v-7.52c-.017-.765-.28-1.396-.786-1.894-.507-.497-1.134-.755-1.88-.773zM8 11.107c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c0-.373.129-.689.386-.947.258-.257.574-.386.947-.386zm8 0c.373 0 .684.124.933.373.25.249.383.569.4.96v1.173c-.017.391-.15.711-.4.96-.249.25-.56.374-.933.374s-.684-.125-.933-.374c-.25-.249-.383-.569-.4-.96V12.44c.017-.391.15-.711.4-.96.249-.249.56-.373.933-.373z"/> 713 </svg> 714 </a> 715 716 717 <a class="footer-social__link" href="https://web.okjike.com/u/07152f0c-0f65-4501-855b-031f3e20e4a5" target="_blank" rel="noopener noreferrer" 718 aria-label="å³å»"> 719 <svg width="20" height="20" viewBox="0 0 1024 1024" fill="currentColor"> 720 <path d="M660.39 123.63v463.59S645.04 726.4 558.98 771.43c-53.12 31.21-128.85 67.54-228.63 70.61l58.33 58.33s175-15.35 254.82-87.5 82.89-159.9 82.89-194.31V172.75l-66-49.12z" fill="#62B2E4"/> 721 <path d="M660.39 123.63v463.58s-15.36 139.17-101.41 184.21c-53.12 31.22-128.85 67.54-228.62 70.62L297.6 702.85s70.62-13.31 117.71-28.64c47.07-15.36 72-95.19 72-95.19V123.63h173.08z" fill="#F3DB2B"/> 722 </svg> 723 </a> 724 725 726 <a class="footer-social__link" href="mailto:[email protected]" aria-label="é®ç®±"> 727 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 728 <path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/> 729 </svg> 730 </a> 731 732 <a class="footer-social__link" href="/feed.xml" aria-label="RSS"> 733 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> 734 <path d="M6.18 15.64a2.18 2.18 0 110 4.36 2.18 2.18 0 010-4.36zM4 4.44A15.56 15.56 0 0119.56 20h-2.83A12.73 12.73 0 004 7.27V4.44zm0 5.66a9.9 9.9 0 019.9 9.9h-2.83A7.07 7.07 0 004 12.93V10.1z"/> 735 </svg> 736 </a> 737 </div> 738 739 740 <div class="footer-copyright"> 741 <p>© 2026 嵿´é. All rights reserved.</p> 742 </div> 743 744 745 746 <div class="footer-custom">
747 <span id="runtime_span" style="text-align: center;"></span> 748<br>
749<script defer src="https://busuanzi.9420.ltd/js"></script>
749 750<div style="text-align: center;"> 751 æ¬ç«æ»è®¿é®é <span id="busuanzi_site_pv"></span> 次 752 æ¬ç«æ»è®¿å®¢æ° <span id="busuanzi_site_uv"></span> 人 753</div> 754<!-- å¼å ¥ CSS (HEADæ ç¾å ) --> 755<link rel="stylesheet" href="https://cdn.268682.xyz/music/netease-mini-player-v2.css"> 756 757<!-- å¼å ¥ JS (BODYæ ç¾åºé¨) -->
758<script src="https://cdn.268682.xyz/music/netease-mini-player-v2.js"></script>
758 759<div class="netease-mini-player" 760 data-playlist-id="13681647281" 761 data-embed="false" 762 data-position="bottom-left" 763 data-lyric="true" 764 data-theme="auto" 765 data-default-minimized="true" 766></div> 767 </div> 768 769 770 771 <div class="footer-powered"> 772 <span>Powered by <a href="https://gridea.pro" target="_blank" rel="noopener noreferrer">Gridea Pro</a></span> 773 </div> 774 775 </div> 776</footer> 777 778 779 <div class="search-overlay" id="searchOverlay" style="display:none;"> 780 <div class="search-modal"> 781 <div class="search-header"> 782 <svg class="search-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" 783 stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 784 <circle cx="11" cy="11" r="8"></circle> 785 <line x1="21" y1="21" x2="16.65" y2="16.65"></line> 786 </svg> 787 <input type="text" class="search-input" id="searchInput" placeholder="æç´¢æç« ..." autocomplete="off" /> 788 <span class="search-kbd">⌘K</span> 789 <button class="search-close" id="searchClose" type="button" aria-label="å ³éæç´¢"> 790 <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" 791 stroke-linecap="round" stroke-linejoin="round"> 792 <line x1="18" y1="6" x2="6" y2="18"></line> 793 <line x1="6" y1="6" x2="18" y2="18"></line> 794 </svg> 795 </button> 796 </div> 797 <div class="search-results" id="searchResults"></div> 798 </div> 799</div> 800
801<script src="/scripts/search.js"></script>
801 802 803 804 805 806 807 808 809
809<script>function show_runtime() { 810 var X = new Date("2024/11/1 12:00:00"); 811 var Y = new Date(); 812 var T = Y.getTime() - X.getTime(); 813 var M = 24 * 60 * 60 * 1000; 814 var a = T / M; 815 var A = Math.floor(a); 816 var b = (a - A) * 24; 817 var B = Math.floor(b); 818 var c = (b - B) * 60; 819 var C = Math.floor((b - B) * 60); 820 var D = Math.floor((c - C) * 60); 821 document.getElementById("runtime_span").innerHTML = "â±ï¸æ¬ç«å·²è¿è¡ " + A + "天" + B + "å°æ¶" + C + "å" + D + "ç§"; 822 setTimeout(show_runtime, 1000); 823} 824show_runtime();</script>
824 825 826 827 <!-- å 载页é¢èæ¬ --> 828 829
829<script> 830 (function() { 831 // 页é¢å è½½å®æåéèå è½½å¨ç» 832 function hideLoadingOverlay() { 833 const overlay = document.getElementById('loading-overlay'); 834 if (overlay) { 835 overlay.classList.add('fade-out'); 836 setTimeout(function() { 837 overlay.style.display = 'none'; 838 }, 600); 839 } 840 } 841 842 // çå¾ é¡µé¢å®å ¨å è½½ 843 if (document.readyState === 'complete') { 844 hideLoadingOverlay(); 845 } else { 846 window.addEventListener('load', hideLoadingOverlay); 847 } 848 })(); 849 </script>
849 850 851 852 <!-- æµæèæ¯èæ¬ - æ§è½ä¼å --> 853
853<script> 854 (function() { 855 const starsContainer = document.getElementById('bg-stars'); 856 if (!starsContainer) return; 857 858 // æ£æµç§»å¨ç«¯åæ§è½æ¨¡å¼ 859 const isMobile = window.matchMedia('(max-width: 750px)').matches; 860 const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 861 862 // æ ¹æ®è®¾å¤è°æ´æµææ°é 863 const starCount = isMobile ? 15 : (prefersReducedMotion ? 0 : 25); 864 865 // ä½¿ç¨ DocumentFragment æ¹éæ·»å 866 const fragment = document.createDocumentFragment(); 867 868 for (let i = 0; i < starCount; i++) { 869 const star = document.createElement('div'); 870 star.className = 'bg-star'; 871 872 // éæºåæ° - ä½¿ç¨æ´æ°é¿å è¿å¤éç» 873 const topOffset = Math.floor(Math.random() * 130) + 'vh'; 874 const fallDuration = (Math.floor(Math.random() * 8) + 6) + 's'; 875 const fallDelay = (Math.floor(Math.random() * 15)) + 's'; 876 877 star.style.setProperty('--top-offset', topOffset); 878 star.style.setProperty('--fall-duration', fallDuration); 879 star.style.setProperty('--fall-delay', fallDelay); 880 881 fragment.appendChild(star); 882 } 883 884 starsContainer.appendChild(fragment); 885 })(); 886 </script>
886 887
888<script>console.log("\n%c ⦠Gridea Pro v1.1.1 %c · Theme: flavor-theme v1.0.0 · https://gridea.pro %c\n","color:#fadfa3;background:#111111;padding:9px 14px;border-radius:4px 0 0 4px;font-weight:500;font-size:12px","color:#e05c00;background:#fff3ec;padding:9px 14px;border-radius:0 4px 4px 0;font-size:11px","")</script>
888 889</body> 890</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.