2025-05-20 02:59:55 -04:00
<!DOCTYPE html>
2025-07-25 02:15:37 +08:00
< html lang = "zh-CN" dir = "ltr" class = "scroll-smooth" data-default-appearance = "light"
2025-08-05 13:24:21 +08:00
data-auto-appearance="true">< head >
2025-05-20 02:59:55 -04:00
< meta charset = "utf-8" / >
2025-07-25 02:15:37 +08:00
< meta http-equiv = "content-language" content = "zh-CN" / >
2025-05-20 02:59:55 -04:00
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< meta http-equiv = "X-UA-Compatible" content = "ie=edge" / >
2025-07-25 02:15:37 +08:00
< title > Projects · SwangNice的空间< / title >
< meta name = "title" content = "Projects · SwangNice的空间" / >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< meta name = "description" content = "我的网站(中文)" / >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< link rel = "canonical" href = "http://localhost:1313/zh-cn/projects/" / >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< link rel = "alternate" type = "application/rss+xml" href = "/zh-cn/projects/index.xml" title = "SwangNice的空间" / >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< link type = "text/css" rel = "stylesheet" href = "/css/main.bundle.min.3d98b0e3c7886b2be13facfb539c8f79843dd3cff84d1c41763deb363c668c308c7c7ac9ecb3923f8602e257866ff553de4228ff50492074acc6d07b3d232fb1.css"
integrity="sha512-PZiw48eIayvhP6z7U5yPeYQ908/4TRxBdj3rNjxmjDCMfHrJ7LOSP4YC4leGb/VT3kIo/1BJIHSsxtB7PSMvsQ==" />
2025-05-20 02:59:55 -04:00
< script type = "text/javascript" src = "/js/appearance.min.516a16745bea5a9bd011138d254cc0fd3973cd55ce6e15f3dec763e7c7c2c7448f8fe7b54cca811cb821b0c7e12cd161caace1dd794ac3d34d40937cbcc9ee12.js"
integrity="sha512-UWoWdFvqWpvQERONJUzA/TlzzVXObhXz3sdj58fCx0SPj+ e1TMqBHLghsMfhLNFhyqzh3XlKw9NNQJN8vMnuEg==">< / script >
2025-07-25 02:15:37 +08:00
< script defer type = "text/javascript" id = "script-bundle" src = "/js/main.bundle.min.f8f2cec11308434554dfdbe3a0963bc19265192ebb9e2d644f3f9250731c879dfb09b44d2d58fcd06e8a1c9051b57f594719b37d21689d366ffd2db050df40a0.js"
integrity="sha512-+ PLOwRMIQ0VU39vjoJY7wZJlGS67ni1kTz+ SUHMch537CbRNLVj80G6KHJBRtX9ZRxmzfSFonTZv/S2wUN9AoA==" data-copy="复制" data-copied="已复制">< / script >
2025-05-20 02:59:55 -04:00
< script src = "/lib/zoom/zoom.min.f592a181a15d2a5b042daa7f746c3721acf9063f8b6acd175d989129865a37d400ae0e85b640f9ad42cd98d1f8ad30931718cf8811abdcc5fcb264400d1a2b0c.js" integrity = "sha512-9ZKhgaFdKlsELap/dGw3Iaz5Bj+Las0XXZiRKYZaN9QArg6FtkD5rULNmNH4rTCTFxjPiBGr3MX8smRADRorDA==" > < / script >
< link rel = "apple-touch-icon" sizes = "180x180" href = "/apple-touch-icon.png" / >
< link rel = "icon" type = "image/png" sizes = "32x32" href = "/favicon-32x32.png" / >
< link rel = "icon" type = "image/png" sizes = "16x16" href = "/favicon-16x16.png" / >
< link rel = "manifest" href = "/site.webmanifest" / >
2025-07-25 02:15:37 +08:00
< meta property = "og:url" content = "http://localhost:1313/zh-cn/projects/" >
< meta property = "og:site_name" content = "SwangNice的空间" >
< meta property = "og:title" content = "Projects" >
< meta property = "og:description" content = "This is projects page . I will list my projects here . Here are several tags here to describe the status of my projects:
private/ public: I won’ t show too many details of my private, but I will record the process, to-do list and part of results on this site.">
< meta property = "og:locale" content = "zh_CN" >
2025-05-20 02:59:55 -04:00
< meta property = "og:type" content = "website" >
< meta name = "twitter:card" content = "summary" >
2025-07-25 02:15:37 +08:00
< meta name = "twitter:title" content = "Projects" >
< meta name = "twitter:description" content = "This is projects page . I will list my projects here . Here are several tags here to describe the status of my projects:
private/ public: I won’ t show too many details of my private, but I will record the process, to-do list and part of results on this site.">
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< meta name = "author" content = "SWang" / >
< link href = "https://swangnice.com" rel = "me" / >
< link href = "https://github.com/swangnice" rel = "me" / >
2025-05-20 02:59:55 -04:00
< script src = "/lib/jquery/jquery.slim.min.b0dca576e87d7eaa5850ae4e61759c065786cdb6489d68fcc82240539eebd5da522bdb4fda085ffd245808c8fe2acb2516408eb774ef26b5f6015fc6737c0ea8.js" integrity = "sha512-sNylduh9fqpYUK5OYXWcBleGzbZInWj8yCJAU57r1dpSK9tP2ghf/SRYCMj+KsslFkCOt3TvJrX2AV/Gc3wOqA==" > < / script >
< meta name = "theme-color" / >
< / head >
< body
class="flex flex-col h-screen px-6 m-auto text-lg leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32 scrollbar-thin scrollbar-track-neutral-200 scrollbar-thumb-neutral-400 dark:scrollbar-track-neutral-800 dark:scrollbar-thumb-neutral-600">
< div id = "the-top" class = "absolute flex self-center" >
< a class = "px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600"
href="#main-content">< span
2025-07-25 02:15:37 +08:00
class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">↓ < / span > 跳过正文< / a >
2025-05-20 02:59:55 -04:00
< / div >
< div style = "padding-left:0;padding-right:0;padding-top:2px;padding-bottom:3px"
class="main-menu flex items-center justify-between px-4 py-6 sm:px-6 md:justify-start gap-x-3">
< div class = "flex flex-1 items-center justify-between" >
< nav class = "flex space-x-3" >
2025-07-25 02:15:37 +08:00
< a href = "/zh-cn/" class = "text-base font-medium text-gray-500 hover:text-gray-900" > SwangNice的空间< / a >
2025-05-20 02:59:55 -04:00
< / nav >
< nav class = "hidden md:flex items-center gap-x-5 md:ml-12 h-12" >
2025-08-05 13:24:21 +08:00
< a href = "" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-base font-medium" title = "" >
关于
< / p >
< / a >
2025-07-25 02:15:37 +08:00
< div >
< div class = "cursor-pointer flex items-center nested-menu" >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< a class = "text-base font-medium text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "" >
笔记
< / a >
< span >
< span class = "relative block icon" >
< svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
>
< path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/>
< / svg >
< / span >
< / span >
< / div >
< div class = "absolute menuhide" >
< div class = "pt-2 p-5 mt-2 rounded-xl backdrop-blur shadow-2xl" >
< div class = "flex flex-col space-y-3" >
< a href = "/zh-cn/notes/coding/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
编程笔记
< / p >
< / a >
2025-08-18 20:01:21 +08:00
< a href = "/zh-cn/notes/mcu/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
MCU 事故
< / p >
< / a >
2025-07-25 02:15:37 +08:00
< a href = "/zh-cn/notes/pdf/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
PDF归档
< / p >
< / a >
< / div >
< / div >
< / div >
< / div >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< div >
< div class = "cursor-pointer flex items-center nested-menu" >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< a class = "text-base font-medium text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "" >
项目
< / a >
< span >
2025-05-20 02:59:55 -04:00
< span class = "relative block icon" >
2025-07-25 02:15:37 +08:00
< svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
>
< path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/>
< / svg >
2025-05-20 02:59:55 -04:00
< / span >
< / span >
2025-07-25 02:15:37 +08:00
< / div >
< div class = "absolute menuhide" >
< div class = "pt-2 p-5 mt-2 rounded-xl backdrop-blur shadow-2xl" >
< div class = "flex flex-col space-y-3" >
< a href = "/zh-cn/projects/embedded/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
妙板生花
< / p >
< / a >
< a href = "/zh-cn/projects/self_host/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
自托管
< / p >
< / a >
< / div >
< / div >
< / div >
< / div >
< div >
< div class = "cursor-pointer flex items-center nested-menu" >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< a class = "text-base font-medium text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "" >
此处休息
< / a >
< span >
< span class = "relative block icon" >
< svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
>
< path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/>
< / svg >
< / span >
< / span >
< / div >
< div class = "absolute menuhide" >
< div class = "pt-2 p-5 mt-2 rounded-xl backdrop-blur shadow-2xl" >
< div class = "flex flex-col space-y-3" >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< a href = "/zh-cn/life/pet/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
宠物
< / p >
< / a >
< a href = "/zh-cn/life/travel/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-sm" title = "" >
游记
< / p >
< / a >
< / div >
< / div >
< / div >
< / div >
2025-05-20 02:59:55 -04:00
2025-08-18 20:01:21 +08:00
< a href = "https://code.swangnice.cn/swangnice" target = "_blank" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
2025-05-20 02:59:55 -04:00
< span >
< span class = "relative block icon" >
2025-08-18 20:01:21 +08:00
< svg xmlns = "http://www.w3.org/2000/svg" xml:space = "preserve" viewBox = "5.67 143.05 628.65 387.55" > < path fill = "currentColor" d = "M115.912 143.075c-6.462 0-13.762.525-22.012 2.325-8.7 1.8-33.5 7.4-53.8 26.9C-4.9 212.4 6.6 276.2 8 285.8c1.7 11.7 6.9 44.2 31.7 72.5 45.8 56.1 144.4 54.8 144.4 54.8s12.1 28.9 30.6 55.5c25 33.1 50.7 58.9 75.7 62 63 0 188.9-.1 188.9-.1s12 .1 28.3-10.3c14-8.5 26.5-23.4 26.5-23.4S547 483 565 451.5c5.5-9.7 10.1-19.1 14.1-28 0 0 55.2-117.1 55.2-231.1-1.1-34.5-9.6-40.6-11.6-42.6-4.1-4.1-9.6-4-9.6-4s-117.2 6.6-177.9 8c-13.267.3-26.433.597-39.5.697l.1 117.002s57.4 24.202 83.1 40.102c3.7 2.3 10.2 6.798 12.9 14.398 2.1 6.1 2 13.101-1 19.301l-61 126.9c-6.2 12.7-21.4 18.1-33.9 12l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5 21.2-17.9 33.8-11.8a5290.322 5290.322 0 0 0 27 12.954c0-36.449-.1-109.053-.1-109.053-29 .4-89.2-2.201-89.2-2.201s-141.4-7.1-156.8-8.5c-4.9-.3-10.525-.825-16.988-.825zm12.188 48.026s7.1 59.399 15.7 94.199c7.2 29.2 24.8 77.7 24.8 77.7s-26.1-3.1-43-9.1c-25.9-8.5-36.9-18.7-36.9-18.7S69.6 321.8 60 295.4c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5 38.5-30c13.8-3.7 31-3.1 31-3.1z" / > < path fill = "currentColor" d = "M326.8 380.1c-8.2.1-15.4 5.8-17.3 13.8-1.9 8 2 16.3 9.1 20 7.7 4 17.5 1.8 22.7-5.4 5.1-7.1 4.3-16.9-1.8-23.1l24-49.1c1.5.1 3.7.2 6.2-.5 4.1-.9 7.1-3.6 7.1-3.6 4.2 1.8 8.6 3.8 13.2 6.1 4.8 2.4 9.3 4.9 13.4 7.3.9.5 1.8 1.1 2.8 1.9 1.6 1.3 3.4 3.1 4.7 5.5 1.9 5.5-1.9 14.9-1.9 14.9-2.3 7.6-18.4 40.6-18.4 40.6-8.1-.2-15.3 5-17.7 12.5-2.6 8.1 1.1 17.3 8.9 21.3 7.8 4 17.4 1.7 22.5-5.3 5-6.8 4.6-16.3-1.1-22.6 1.9-3.7 3.7-7.4 5.6-11.3 5-10.4 13.5-30.4 13.5-30.4.9-1.7 5.7-10.3 2.7-21.3-2.5-11.4-12.6-16.7-12.6-16.7-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3 4.7-9.7 9.4-19.3 14.1-29-4.1-2-8.1-4-12.2-6.1-4.8 9.8-9.7 19.7-14.5 29.5-6.7-.1-12.9 3.5-16.1 9.4-3.4 6.3-2.7 14.1 1.9 19.8l-24.6 50.4z" / > < / svg >
2025-05-20 02:59:55 -04:00
< / span >
< / span >
< p class = "text-base font-medium" title = "" >
< / p >
< / a >
< div >
< div class = "cursor-pointer flex items-center nested-menu" >
< span class = "ltr:mr-1 rtl:ml-1" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 640 512" >
< path fill = "currentColor" d = "M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z" / > < / svg >
< / span >
< / span >
2025-07-25 02:15:37 +08:00
< div class = "text-sm font-medium text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "Projects" > 简体中文< / div >
2025-05-20 02:59:55 -04:00
< / div >
< div class = "absolute menuhide" >
< div class = "pt-2 p-5 mt-2 rounded-xl backdrop-blur shadow-2xl" >
< div class = "flex flex-col space-y-3" >
2025-07-25 02:15:37 +08:00
< a href = "/projects/" class = "flex items-center" >
< p class = "text-sm font-sm text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "Projects" >
2025-05-20 02:59:55 -04:00
EN
< / p >
< / a >
2025-07-25 02:15:37 +08:00
< a href = "/zh-cn/projects/" class = "flex items-center" >
< p class = "text-sm font-sm text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "Projects" >
中文
2025-05-20 02:59:55 -04:00
< / p >
< / a >
< / div >
< / div >
< / div >
< / div >
< button id = "search-button" aria-label = "Search" class = "text-base hover:text-primary-600 dark:hover:text-primary-400"
title="">
< span class = "relative block icon" >
< svg aria-hidden = "true" focusable = "false" data-prefix = "fas" data-icon = "search" class = "svg-inline--fa fa-search fa-w-16" role = "img" xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" / > < / svg >
< / span >
< / button >
< div
class=" flex items-center">
< button id = "appearance-switcher" aria-label = "Dark mode switcher" type = "button" class = "text-base hover:text-primary-600 dark:hover:text-primary-400" >
< div class = "flex items-center justify-center dark:hidden" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z" / > < / svg >
< / span >
< / div >
< div class = "items-center justify-center hidden dark:flex" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z" / > < / svg >
< / span >
< / div >
< / button >
< / div >
< / nav >
< div class = "flex md:hidden items-center gap-x-5 md:ml-12 h-12" >
< span > < / span >
< div >
< div class = "cursor-pointer flex items-center nested-menu" >
< span class = "ltr:mr-1 rtl:ml-1" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 640 512" >
< path fill = "currentColor" d = "M0 128C0 92.7 28.7 64 64 64H256h48 16H576c35.3 0 64 28.7 64 64V384c0 35.3-28.7 64-64 64H320 304 256 64c-35.3 0-64-28.7-64-64V128zm320 0V384H576V128H320zM178.3 175.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1 .1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4l-64-144zM160 233.2L179 276H141l19-42.8zM448 164c11 0 20 9 20 20v4h44 16c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4c.9 .6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9l-18.9-11.3c-4.5-2.7-8.8-5.5-13.1-8.5c-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8l-12.2-12.2c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6 .5 .5c12.4-13.1 22.5-28.3 29.8-45H448 376c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20z" / > < / svg >
< / span >
< / span >
2025-07-25 02:15:37 +08:00
< div class = "text-sm font-medium text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "Projects" > 简体中文< / div >
2025-05-20 02:59:55 -04:00
< / div >
< div class = "absolute menuhide" >
< div class = "pt-2 p-5 mt-2 rounded-xl backdrop-blur shadow-2xl" >
< div class = "flex flex-col space-y-3" >
2025-07-25 02:15:37 +08:00
< a href = "/projects/" class = "flex items-center" >
< p class = "text-sm font-sm text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "Projects" >
2025-05-20 02:59:55 -04:00
EN
< / p >
< / a >
2025-07-25 02:15:37 +08:00
< a href = "/zh-cn/projects/" class = "flex items-center" >
< p class = "text-sm font-sm text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" title = "Projects" >
中文
2025-05-20 02:59:55 -04:00
< / p >
< / a >
< / div >
< / div >
< / div >
< / div >
< button id = "search-button-mobile" aria-label = "Search" class = "text-base hover:text-primary-600 dark:hover:text-primary-400"
title="">
< span class = "relative block icon" >
< svg aria-hidden = "true" focusable = "false" data-prefix = "fas" data-icon = "search" class = "svg-inline--fa fa-search fa-w-16" role = "img" xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" / > < / svg >
< / span >
< / button >
< button id = "appearance-switcher-mobile" aria-label = "Dark mode switcher" type = "button" class = "text-base hover:text-primary-600 dark:hover:text-primary-400 ltr:mr-1 rtl:ml-1" >
< div class = "flex items-center justify-center dark:hidden" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M32 256c0-123.8 100.3-224 223.8-224c11.36 0 29.7 1.668 40.9 3.746c9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3c9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480C132.1 480 32 379.6 32 256z" / > < / svg >
< / span >
< / div >
< div class = "items-center justify-center hidden dark:flex" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M256 159.1c-53.02 0-95.1 42.98-95.1 95.1S202.1 351.1 256 351.1s95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347L446.1 255.1l63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7l-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89L164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6L12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256l-63.15 91.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7l19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109l109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69 0-127.1-57.31-127.1-127.1c0-70.69 57.31-127.1 127.1-127.1s127.1 57.3 127.1 127.1C383.1 326.7 326.7 383.1 256 383.1z" / > < / svg >
< / span >
< / div >
< / button >
< / div >
< / div >
< div class = "-my-2 md:hidden" >
< label id = "menu-button" class = "block" >
< div class = "cursor-pointer hover:text-primary-600 dark:hover:text-primary-400" >
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > < path fill = "currentColor" d = "M0 96C0 78.33 14.33 64 32 64H416C433.7 64 448 78.33 448 96C448 113.7 433.7 128 416 128H32C14.33 128 0 113.7 0 96zM0 256C0 238.3 14.33 224 32 224H416C433.7 224 448 238.3 448 256C448 273.7 433.7 288 416 288H32C14.33 288 0 273.7 0 256zM416 448H32C14.33 448 0 433.7 0 416C0 398.3 14.33 384 32 384H416C433.7 384 448 398.3 448 416C448 433.7 433.7 448 416 448z" / > < / svg >
< / span >
< / div >
< div id = "menu-wrapper" style = "padding-top:5px;"
class="fixed inset-0 z-30 invisible w-screen h-screen m-0 overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50">
< ul
class="flex space-y-2 mt-3 flex-col items-end w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl">
< li id = "menu-close-button" >
< span
class="cursor-pointer inline-block align-text-bottom hover:text-primary-600 dark:hover:text-primary-400">
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 320 512" > < path fill = "currentColor" d = "M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z" / > < / svg >
< / span >
< / span >
< / li >
2025-08-05 13:24:21 +08:00
< li class = "mt-1" >
< a href = "" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-bg font-bg" title = "" >
关于
< / p >
< / a >
< / li >
2025-07-25 02:15:37 +08:00
2025-05-20 02:59:55 -04:00
< li class = "mt-1" >
2025-07-25 02:15:37 +08:00
< a href = "" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
2025-05-20 02:59:55 -04:00
< p class = "text-bg font-bg" title = "" >
2025-07-25 02:15:37 +08:00
笔记
< / p >
< span >
< span class = "relative block icon" >
< svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
>
< path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/>
< / svg >
< / span >
< / span >
< / a >
< / li >
< li class = "mt-1" >
< a href = "/zh-cn/notes/coding/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
编程笔记
< / p >
< / a >
< / li >
2025-08-18 20:01:21 +08:00
< li class = "mt-1" >
< a href = "/zh-cn/notes/mcu/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
MCU 事故
< / p >
< / a >
< / li >
2025-07-25 02:15:37 +08:00
< li class = "mt-1" >
< a href = "/zh-cn/notes/pdf/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
PDF归档
2025-05-20 02:59:55 -04:00
< / p >
< / a >
< / li >
2025-07-25 02:15:37 +08:00
< li class = "mb-2" > < / li >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
2025-05-20 02:59:55 -04:00
< li class = "mt-1" >
2025-07-25 02:15:37 +08:00
< a href = "" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< p class = "text-bg font-bg" title = "" >
项目
< / p >
< span >
2025-05-20 02:59:55 -04:00
< span class = "relative block icon" >
2025-07-25 02:15:37 +08:00
< svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
>
< path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/>
< / svg >
2025-05-20 02:59:55 -04:00
< / span >
2025-07-25 02:15:37 +08:00
< / span >
< / a >
< / li >
< li class = "mt-1" >
< a href = "/zh-cn/projects/embedded/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
妙板生花
< / p >
< / a >
< / li >
< li class = "mt-1" >
< a href = "/zh-cn/projects/self_host/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
自托管
< / p >
< / a >
< / li >
< li class = "mb-2" > < / li >
< li class = "mt-1" >
< a href = "" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
2025-05-20 02:59:55 -04:00
< p class = "text-bg font-bg" title = "" >
2025-07-25 02:15:37 +08:00
此处休息
< / p >
< span >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< span class = "relative block icon" >
< svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 20 20"
fill="currentColor"
aria-hidden="true"
>
< path
fill-rule="evenodd"
d="M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z"
clip-rule="evenodd"
/>
< / svg >
< / span >
< / span >
< / a >
< / li >
< li class = "mt-1" >
< a href = "/zh-cn/life/pet/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
宠物
< / p >
< / a >
< / li >
< li class = "mt-1" >
< a href = "/zh-cn/life/travel/" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
< p class = "text-sm font-small" title = "" >
游记
2025-05-20 02:59:55 -04:00
< / p >
< / a >
< / li >
2025-07-25 02:15:37 +08:00
< li class = "mb-2" > < / li >
2025-05-20 02:59:55 -04:00
< li class = "mt-1" >
2025-08-18 20:01:21 +08:00
< a href = "https://code.swangnice.cn/swangnice" target = "_blank" class = "flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400" >
2025-05-20 02:59:55 -04:00
< div >
< span class = "relative block icon" >
2025-08-18 20:01:21 +08:00
< svg xmlns = "http://www.w3.org/2000/svg" xml:space = "preserve" viewBox = "5.67 143.05 628.65 387.55" > < path fill = "currentColor" d = "M115.912 143.075c-6.462 0-13.762.525-22.012 2.325-8.7 1.8-33.5 7.4-53.8 26.9C-4.9 212.4 6.6 276.2 8 285.8c1.7 11.7 6.9 44.2 31.7 72.5 45.8 56.1 144.4 54.8 144.4 54.8s12.1 28.9 30.6 55.5c25 33.1 50.7 58.9 75.7 62 63 0 188.9-.1 188.9-.1s12 .1 28.3-10.3c14-8.5 26.5-23.4 26.5-23.4S547 483 565 451.5c5.5-9.7 10.1-19.1 14.1-28 0 0 55.2-117.1 55.2-231.1-1.1-34.5-9.6-40.6-11.6-42.6-4.1-4.1-9.6-4-9.6-4s-117.2 6.6-177.9 8c-13.267.3-26.433.597-39.5.697l.1 117.002s57.4 24.202 83.1 40.102c3.7 2.3 10.2 6.798 12.9 14.398 2.1 6.1 2 13.101-1 19.301l-61 126.9c-6.2 12.7-21.4 18.1-33.9 12l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5 21.2-17.9 33.8-11.8a5290.322 5290.322 0 0 0 27 12.954c0-36.449-.1-109.053-.1-109.053-29 .4-89.2-2.201-89.2-2.201s-141.4-7.1-156.8-8.5c-4.9-.3-10.525-.825-16.988-.825zm12.188 48.026s7.1 59.399 15.7 94.199c7.2 29.2 24.8 77.7 24.8 77.7s-26.1-3.1-43-9.1c-25.9-8.5-36.9-18.7-36.9-18.7S69.6 321.8 60 295.4c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5 38.5-30c13.8-3.7 31-3.1 31-3.1z" / > < path fill = "currentColor" d = "M326.8 380.1c-8.2.1-15.4 5.8-17.3 13.8-1.9 8 2 16.3 9.1 20 7.7 4 17.5 1.8 22.7-5.4 5.1-7.1 4.3-16.9-1.8-23.1l24-49.1c1.5.1 3.7.2 6.2-.5 4.1-.9 7.1-3.6 7.1-3.6 4.2 1.8 8.6 3.8 13.2 6.1 4.8 2.4 9.3 4.9 13.4 7.3.9.5 1.8 1.1 2.8 1.9 1.6 1.3 3.4 3.1 4.7 5.5 1.9 5.5-1.9 14.9-1.9 14.9-2.3 7.6-18.4 40.6-18.4 40.6-8.1-.2-15.3 5-17.7 12.5-2.6 8.1 1.1 17.3 8.9 21.3 7.8 4 17.4 1.7 22.5-5.3 5-6.8 4.6-16.3-1.1-22.6 1.9-3.7 3.7-7.4 5.6-11.3 5-10.4 13.5-30.4 13.5-30.4.9-1.7 5.7-10.3 2.7-21.3-2.5-11.4-12.6-16.7-12.6-16.7-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3 4.7-9.7 9.4-19.3 14.1-29-4.1-2-8.1-4-12.2-6.1-4.8 9.8-9.7 19.7-14.5 29.5-6.7-.1-12.9 3.5-16.1 9.4-3.4 6.3-2.7 14.1 1.9 19.8l-24.6 50.4z" / > < / svg >
2025-05-20 02:59:55 -04:00
< / span >
< / div >
< p class = "text-bg font-bg" title = "" >
< / p >
< / a >
< / li >
< / ul >
< / div >
< / label >
< / div >
< / div >
< div class = "relative flex flex-col grow" >
< main id = "main-content" class = "grow" >
2025-07-25 02:15:37 +08:00
< header >
< h1 class = "mt-5 text-4xl font-extrabold text-neutral-900 dark:text-neutral" > Projects< / h1 >
< div class = "mt-1 mb-2 text-base text-neutral-500 dark:text-neutral-400 print:hidden" >
2025-05-20 02:59:55 -04:00
< div class = "flex flex-row flex-wrap items-center" >
< / div >
2025-07-25 02:15:37 +08:00
< / div >
< script >
var oid = "views_projects\/_index.md"
var oid_likes = "likes_projects\/_index.md"
< / script >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< script type = "text/javascript" src = "/js/page.min.0860cf4e04fa2d72cc33ddba263083464d48f67de06114529043cb4623319efed4f484fd7f1730df5abea0e2da6f3538855634081d02f2d6e920b956f063e823.js" integrity = "sha512-CGDPTgT6LXLMM926JjCDRk1I9n3gYRRSkEPLRiMxnv7U9IT9fxcw31q+oOLabzU4hVY0CB0C8tbpILlW8GPoIw==" > < / script >
< / header >
< section class = "mt-0 prose flex max-w-full flex-col dark:prose-invert lg:flex-row" >
< div class = "min-w-0 min-h-0 max-w-prose" >
< p > This is projects page. I will list my projects here. Here are several tags here to describe the status of my projects:< / p >
< ul >
< li > < code > private< / code > / < code > public< / code > : I won’ t show too many details of my private, but I will record the process, to-do list and part of results on this site.< / li >
< / ul >
< / div >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< / section >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< section class = "w-full grid gap-4 sm:grid-cols-2 md:grid-cols-3" >
2025-05-20 02:59:55 -04:00
2025-08-18 20:01:21 +08:00
< a href = "/zh-cn/projects/embedded/" class = "min-w-full" >
< div class = "min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative" >
< div class = "w-full thumbnail_card nozoom" style = "background-image:url(/zh-cn/projects/embedded/feature_hu_2a7b0cc8cf570380.png);" > < / div >
< div class = "px-6 py-4" >
< div class = "font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"
href="/zh-cn/projects/embedded/">Fancy Things on Boards< / div >
< div class = "text-sm text-neutral-500 dark:text-neutral-400" >
< div class = "flex flex-row flex-wrap items-center" >
< / div >
< div class = "flex flex-row flex-wrap items-center" >
< / div >
< / div >
< / div >
< div class = "px-6 pt-4 pb-2" >
< / div >
< / div >
< / a >
2025-07-25 02:15:37 +08:00
< a href = "/zh-cn/projects/self_host/" class = "min-w-full" >
< div class = "min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative" >
< div class = "w-full thumbnail_card nozoom" style = "background-image:url(/zh-cn/projects/self_host/feature_hu_b139a3f43f0b42e7.png);" > < / div >
2025-05-20 02:59:55 -04:00
2025-07-25 02:15:37 +08:00
< div class = "px-6 py-4" >
< div class = "font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral"
href="/zh-cn/projects/self_host/">Self-host Projects< / div >
< div class = "text-sm text-neutral-500 dark:text-neutral-400" >
< div class = "flex flex-row flex-wrap items-center" >
< / div >
< div class = "flex flex-row flex-wrap items-center" >
< / div >
< / div >
< / div >
< div class = "px-6 pt-4 pb-2" >
< / div >
< / div >
< / a >
< / section >
< div id = "top-scroller" class = "pointer-events-none absolute top-[110vh] bottom-0 w-12 ltr:right-0 rtl:left-0" >
< a href = "#the-top"
class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 mb-16 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400"
aria-label="返回顶部" title="返回顶部">
↑
< / a >
< / div >
2025-05-20 02:59:55 -04:00
< / main > < footer id = "site-footer" class = "py-10 print:hidden" >
< nav class = "flex flex-row pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400" >
< ul class = "flex flex-col list-none sm:flex-row" >
< li class = "flex mb-1 ltr:text-right rtl:text-left sm:mb-0 ltr:sm:mr-7 ltr:sm:last:mr-0 rtl:sm:ml-7 rtl:sm:last:ml-0" >
2025-07-25 02:15:37 +08:00
< a class = "decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2 flex items-center" href = "/zh-cn/tags/"
title="Tags">
2025-05-20 02:59:55 -04:00
Tags
< / a >
< / li >
< / ul >
< / nav >
< div class = "flex items-center justify-between" >
< p class = "text-sm text-neutral-500 dark:text-neutral-400" >
©
2025
2025-07-25 02:15:37 +08:00
SWang
< / p >
< p class = "text-sm text-neutral-500 dark:text-neutral-400" >
< a href = "https://beian.miit.gov.cn/" target = "_blank" rel = "noopener noreferrer" >
苏ICP备2024145451号
< / a >
2025-05-20 02:59:55 -04:00
< / p >
< p class = "text-xs text-neutral-500 dark:text-neutral-400" >
2025-07-25 02:15:37 +08:00
该静态网页由 < a class = "hover:underline hover:decoration-primary-400 hover:text-primary-500"
2025-05-20 02:59:55 -04:00
href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo< / a > & < a class = "hover:underline hover:decoration-primary-400 hover:text-primary-500"
2025-07-25 02:15:37 +08:00
href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish< / a > 生成
2025-05-20 02:59:55 -04:00
< / p >
< / div >
< script >
mediumZoom(document.querySelectorAll("img:not(.nozoom)"), {
margin: 24,
background: 'rgba(0,0,0,0.5)',
scrollOffset: 0,
})
< / script >
< script type = "text/javascript" src = "/js/process.min.ee03488f19c93c2efb199e2e3014ea5f3cb2ce7d45154adb3399a158cac27ca52831db249ede5bb602700ef87eb02434139de0858af1818ab0fb4182472204a4.js" integrity = "sha512-7gNIjxnJPC77GZ4uMBTqXzyyzn1FFUrbM5mhWMrCfKUoMdsknt5btgJwDvh+sCQ0E53ghYrxgYqw+0GCRyIEpA==" > < / script >
< / footer >
< div
id="search-wrapper"
class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]"
2025-07-25 02:15:37 +08:00
data-url="http://localhost:1313/zh-cn/"
2025-05-20 02:59:55 -04:00
style="z-index:500"
>
< div
id="search-modal"
class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800"
>
< header class = "relative z-10 flex items-center justify-between flex-none px-2" >
< form class = "flex items-center flex-auto min-w-0" >
< div class = "flex items-center justify-center w-8 h-8 text-neutral-400" >
< span class = "relative block icon" >
< svg aria-hidden = "true" focusable = "false" data-prefix = "fas" data-icon = "search" class = "svg-inline--fa fa-search fa-w-16" role = "img" xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 512 512" > < path fill = "currentColor" d = "M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z" / > < / svg >
< / span >
< / div >
< input
type="search"
id="search-query"
class="flex flex-auto h-12 mx-1 bg-transparent appearance-none focus:outline-dotted focus:outline-2 focus:outline-transparent"
2025-07-25 02:15:37 +08:00
placeholder="搜索"
2025-05-20 02:59:55 -04:00
tabindex="0"
/>
< / form >
< button
id="close-search-button"
class="flex items-center justify-center w-8 h-8 text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"
2025-07-25 02:15:37 +08:00
title="关闭 (Esc)"
2025-05-20 02:59:55 -04:00
>
< span class = "relative block icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 320 512" > < path fill = "currentColor" d = "M310.6 361.4c12.5 12.5 12.5 32.75 0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3L54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75 0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75 0-45.25s32.75-12.5 45.25 0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25 0s12.5 32.75 0 45.25l-105.4 105.4L310.6 361.4z" / > < / svg >
< / span >
< / button >
< / header >
< section class = "flex-auto px-2 overflow-auto" >
< ul id = "search-results" >
< / ul >
< / section >
< / div >
< / div >
< / div >
< / body >
< / html >