From 3e4cca360820fd50c9d83a8a3961bd537cef8662 Mon Sep 17 00:00:00 2001 From: shenxianovo Date: Mon, 5 Oct 2026 20:00:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=81=E7=A7=BB=E8=87=B3=20Fumadocs?= =?UTF-8?q?=EF=BC=8C=E7=BB=9F=E4=B8=80=E5=AF=BC=E8=88=AA=E4=B8=8E=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 以 Fumadocs、Next.js 和 React 替换 VitePress,统一分区导航、学年与人员卡片,简化内容和资源维护。 修复搜索结果定位,保留完整页面历史和独立 HTML 存档;更新 GitHub Pages 工作流,PR 仅运行检查,main 更新后部署。 --- .github/workflows/deploy.yml | 80 +- .gitignore | 16 +- AGENTS.md | 69 +- README.md | 36 +- app/[[...slug]]/page.tsx | 68 + app/content.css | 49 + app/globals.css | 63 + app/layout.tsx | 35 + app/markdown/[...slug]/route.ts | 20 + app/not-found.tsx | 5 + app/search-index.json/route.ts | 26 + app/sitemap.ts | 16 + components/archive-cards.css | 51 + components/canonical-url.tsx | 15 + components/content.css | 238 + components/content.tsx | 262 + components/git-changelog.css | 87 + components/git-changelog.tsx | 8 + components/git-history-view.tsx | 150 + components/home.tsx | 25 + components/hq-years.css | 23 + components/hq-years.tsx | 25 + components/mdx.tsx | 9 + components/page-view-options.tsx | 66 + components/provider.tsx | 34 + components/search.tsx | 51 + components/site-footer.tsx | 6 + docs/.vitepress/config.js | 396 -- .../theme/components/ChatMessage.vue | 71 - .../theme/components/MemberCard.vue | 134 - docs/.vitepress/theme/index.js | 19 - .../{annual-group.md => annual-group.mdx} | 30 +- docs/about/hq/2009.md | 33 - docs/about/hq/2009.mdx | 21 + docs/about/hq/2010.md | 33 - docs/about/hq/2010.mdx | 21 + docs/about/hq/2011.md | 35 - docs/about/hq/2011.mdx | 23 + docs/about/hq/2012.md | 118 - docs/about/hq/2012.mdx | 88 + docs/about/hq/2013.md | 106 - docs/about/hq/2013.mdx | 79 + docs/about/hq/2014.md | 93 - docs/about/hq/2014.mdx | 69 + docs/about/hq/2015.md | 95 - docs/about/hq/2015.mdx | 71 + docs/about/hq/2016.md | 102 - docs/about/hq/2016.mdx | 75 + docs/about/hq/2017.md | 101 - docs/about/hq/2017.mdx | 74 + docs/about/hq/2018.md | 96 - docs/about/hq/2018.mdx | 73 + docs/about/hq/{2019.md => 2019.mdx} | 78 +- docs/about/hq/2020.md | 94 - docs/about/hq/2020.mdx | 71 + docs/about/hq/2021.md | 103 - docs/about/hq/2021.mdx | 76 + docs/about/hq/2022.md | 118 - docs/about/hq/2022.mdx | 88 + docs/about/hq/2023.md | 123 - docs/about/hq/2023.mdx | 90 + docs/about/hq/2024.md | 147 - docs/about/hq/2024.mdx | 118 + docs/about/hq/{2025.md => 2025.mdx} | 95 +- docs/about/hq/2026.md | 102 - docs/about/hq/2026.mdx | 75 + docs/about/hq/index.md | 451 -- docs/about/hq/index.mdx | 58 + docs/about/{index.md => index.mdx} | 29 +- docs/about/introduction.md | 44 - docs/about/introduction.mdx | 48 + .../2024/{01-faq.md => 01-faq.mdx} | 4 + .../2024/{02-rules.md => 02-rules.mdx} | 6 +- ...l-accounts.md => 03-official-accounts.mdx} | 4 + .../2024/{04-raw.md => 04-raw.mdx} | 8 +- .../newbie-guide/2024/{index.md => index.mdx} | 6 +- .../newbie-guide/2025/{faq.md => faq.mdx} | 4 + .../newbie-guide/2025/{index.md => index.mdx} | 6 +- ...cial-accounts.md => official-accounts.mdx} | 6 +- .../newbie-guide/2025/{raw.md => raw.mdx} | 8 +- .../newbie-guide/2025/{rules.md => rules.mdx} | 29 +- .../newbie-guide/2026/{faq.md => faq.mdx} | 4 + .../newbie-guide/2026/{index.md => index.mdx} | 6 +- ...cial-accounts.md => official-accounts.mdx} | 6 +- .../newbie-guide/2026/{raw.md => raw.mdx} | 8 +- .../newbie-guide/2026/{rules.md => rules.mdx} | 29 +- .../{comic-contest.md => comic-contest.mdx} | 10 +- .../{qunguang-expo.md => qunguang-expo.mdx} | 10 +- .../{comic-festival.md => comic-festival.mdx} | 10 +- .../2005/{anime-expo.md => anime-expo.mdx} | 10 +- .../2005/{anime-quiz.md => anime-quiz.mdx} | 10 +- ...mas-carnival.md => christmas-carnival.mdx} | 10 +- .../{seiyuu-group.md => seiyuu-group.mdx} | 10 +- .../2007/{furuya-toru.md => furuya-toru.mdx} | 10 +- .../{kfc-cosplay-pk.md => kfc-cosplay-pk.mdx} | 10 +- .../2008/{anime-expo.md => anime-expo.mdx} | 6 +- ...winter-festival.md => winter-festival.mdx} | 4 + .../2013/{magazine.md => magazine.mdx} | 4 + ...winter-festival.md => winter-festival.mdx} | 34 +- .../2014/{magazine.md => magazine.mdx} | 4 + ...winter-festival.md => winter-festival.mdx} | 30 +- .../2015/{magazine.md => magazine.mdx} | 4 + docs/activity/2015/winter-festival.md | 40 - docs/activity/2015/winter-festival.mdx | 44 + .../anime-screening/the-boy-and-the-beast.md | 7 - .../anime-screening/the-boy-and-the-beast.mdx | 11 + .../\316\274's-final-lovelive-day2.md" | 7 - .../\316\274's-final-lovelive-day2.mdx" | 11 + .../2016/{club-fair.md => club-fair.mdx} | 6 +- ...een-graffiti.md => halloween-graffiti.mdx} | 6 +- .../2016/{magazine.md => magazine.mdx} | 4 + .../{welcome-party.md => welcome-party.mdx} | 4 + docs/activity/2016/welcome-video.md | 10 - docs/activity/2016/welcome-video.mdx | 14 + ...winter-festival.md => winter-festival.mdx} | 16 +- ...2load-region-of-d\303\251j\303\240-vu.mdx" | 6 +- .../anime-screening/the-dragon-dentist.md | 7 - .../anime-screening/the-dragon-dentist.mdx | 11 + .../2017/{magazine.md => magazine.mdx} | 4 + .../{welcome-party.md => welcome-party.mdx} | 4 + ...winter-festival.md => winter-festival.mdx} | 6 +- .../2018/{magazine.md => magazine.mdx} | 4 + ...winter-festival.md => winter-festival.mdx} | 8 +- .../2019/{magazine.md => magazine.mdx} | 4 + docs/activity/2019/welcome-video.md | 10 - docs/activity/2019/welcome-video.mdx | 14 + ...winter-festival.md => winter-festival.mdx} | 4 + .../2020/{magazine.md => magazine.mdx} | 4 + .../{spring-meeting.md => spring-meeting.mdx} | 10 +- ...winter-festival.md => winter-festival.mdx} | 4 + .../2021/{magazine.md => magazine.mdx} | 4 + ...summer-festival.md => summer-festival.mdx} | 6 +- .../2021/{summer-live.md => summer-live.mdx} | 6 +- docs/activity/2021/welcome-video.md | 10 - docs/activity/2021/welcome-video.mdx | 14 + .../2022/{magazine.md => magazine.mdx} | 4 + ...spring-festival.md => spring-festival.mdx} | 6 +- docs/activity/2022/welcome-video.md | 10 - docs/activity/2022/welcome-video.mdx | 14 + .../2023/{magazine.md => magazine.mdx} | 4 + .../2023/{spring-live.md => spring-live.mdx} | 4 + .../2023/{summer-live.md => summer-live.mdx} | 4 + .../{welcome-party.md => welcome-party.mdx} | 4 + docs/activity/2023/welcome-video.md | 10 - docs/activity/2023/welcome-video.mdx | 14 + ...winter-festival.md => winter-festival.mdx} | 9 +- .../2024/{club-fair.md => club-fair.mdx} | 6 +- docs/activity/2024/{fes.md => fes.mdx} | 9 +- docs/activity/2024/live.md | 47 - docs/activity/2024/live.mdx | 51 + .../2024/{magazine.md => magazine.mdx} | 4 + .../2024/{project-hq.md => project-hq.mdx} | 6 +- .../2024/{summer-live.md => summer-live.mdx} | 10 +- .../{welcome-party.md => welcome-party.mdx} | 22 +- docs/activity/2024/welcome-video.md | 10 - docs/activity/2024/welcome-video.mdx | 14 + ...winter-festival.md => winter-festival.mdx} | 45 +- docs/activity/2025/come-leave.md | 84 - docs/activity/2025/come-leave.mdx | 64 + .../2025/game-dev/{index.md => index.mdx} | 8 +- .../2025/{magazine.md => magazine.mdx} | 23 +- .../2025/{name-vote.md => name-vote.mdx} | 20 +- ...spring-festival.md => spring-festival.mdx} | 4 + .../2025/{summer-live.md => summer-live.mdx} | 12 +- .../welcome-party/{credits.md => credits.mdx} | 65 +- .../welcome-party/{index.md => index.mdx} | 28 +- .../2026/{name-vote.md => name-vote.mdx} | 6 +- .../2026/{summer-live.md => summer-live.mdx} | 40 +- docs/activity/{index.md => index.mdx} | 13 +- .../band/azuretide/{index.md => index.mdx} | 6 +- .../band/daybreak/{index.md => index.mdx} | 6 +- .../department/band/fireflyalgorithm/index.md | 24 - .../band/fireflyalgorithm/index.mdx | 31 + docs/department/band/{index.md => index.mdx} | 19 +- docs/department/band/natsunagi/index.md | 20 - docs/department/band/natsunagi/index.mdx | 24 + .../band/orchestra/{index.md => index.mdx} | 8 +- .../band/void/{index.md => index.mdx} | 12 +- .../band/yozakura/{index.md => index.mdx} | 6 +- docs/department/cos/{index.md => index.mdx} | 11 +- docs/department/dark/{index.md => index.mdx} | 13 +- docs/department/dark/liluo_died.md | 38 - docs/department/dark/liluo_died.mdx | 41 + docs/department/edit/{index.md => index.mdx} | 13 +- docs/department/{index.md => index.mdx} | 15 +- docs/department/va/{index.md => index.mdx} | 23 +- .../va/restart/{index.md => index.mdx} | 16 +- .../vtb/ax001/{apparence.md => apparence.mdx} | 40 +- .../vtb/ax001/{history.md => history.mdx} | 14 +- .../vtb/ax001/{index.md => index.mdx} | 8 +- .../vtb/ax002/{index.md => index.mdx} | 4 + docs/department/vtb/index.md | 8 - docs/department/vtb/index.mdx | 15 + docs/department/wota/{index.md => index.mdx} | 24 +- .../activity/{apr-2026.md => apr-2026.mdx} | 450 +- .../ani-key/activity/{index.md => index.mdx} | 4 + .../activity/{jan-2026.md => jan-2026.mdx} | 234 +- .../{participants.md => participants.mdx} | 93 +- ...rm-winter-2025.md => warm-winter-2025.mdx} | 484 +- docs/group/ani-key/{index.md => index.mdx} | 25 +- docs/group/dry-humor/{index.md => index.mdx} | 6 +- .../galgame/activity/{index.md => index.mdx} | 42 +- docs/group/galgame/group-owner.md | 29 - docs/group/galgame/group-owner.mdx | 22 + docs/group/galgame/{index.md => index.mdx} | 10 +- docs/group/{index.md => index.mdx} | 6 +- .../infinity-nikki/{index.md => index.mdx} | 14 +- docs/group/touhou-club/bird-ship-ruins.md | 110 - docs/group/touhou-club/bird-ship-ruins.mdx | 81 + docs/group/touhou-club/hyly.md | 17 - docs/group/touhou-club/hyly.mdx | 21 + .../group/touhou-club/{index.md => index.mdx} | 12 +- docs/group/touhou-club/old-bar.md | 5 - docs/group/touhou-club/old-bar.mdx | 9 + .../{swallow-stone.md => swallow-stone.mdx} | 6 +- .../{activity-1.md => activity-1.mdx} | 24 +- .../{activity-2.md => activity-2.mdx} | 44 +- .../touhou-club/swallow-stone/activity-3.md | 3 - .../touhou-club/swallow-stone/activity-3.mdx | 7 + .../events/{karaoke.md => karaoke.mdx} | 12 +- .../{live-watching.md => live-watching.mdx} | 16 +- .../events/{miku16th.md => miku16th.mdx} | 12 +- .../events/{whudays.md => whudays.mdx} | 28 +- .../{index.md => index.mdx} | 107 +- .../members/{remeamiku.md => remeamiku.mdx} | 26 +- docs/{index.md => index.mdx} | 23 +- .../{contributing.md => contributing.mdx} | 95 +- docs/maintainer/{index.md => index.mdx} | 32 +- .../Nepchico/{index.md => index.mdx} | 21 +- .../Yun_me/{words.md => words.mdx} | 6 +- docs/message-box/{index.md => index.mdx} | 6 +- .../quq/{hq-docs.md => hq-docs.mdx} | 11 +- docs/message-box/quq/{index.md => index.mdx} | 19 +- .../quq/{memories.md => memories.mdx} | 6 +- docs/message-box/quq/{words.md => words.mdx} | 6 +- .../\345\214\227\346\264\233/shadow.mdx" | 17 +- .../\345\272\227\351\225\277/index.mdx" | 6 +- .../band-history.mdx" | 55 +- lib/changelog.ts | 28 + lib/git-history.d.mts | 9 + lib/git-history.mjs | 84 + lib/icons.d.ts | 9 + {docs/.vitepress/theme => lib}/icons.js | 4 +- lib/layout.shared.tsx | 12 + lib/navigation.json | 588 ++ lib/navigation.ts | 57 + lib/people.d.ts | 20 + {docs/.vitepress/data => lib}/people.js | 10 +- lib/remark-legacy-headings.mjs | 36 + lib/remark-search-anchors.mjs | 79 + lib/search-component-text.mjs | 28 + lib/search-tokenizer.d.ts | 3 + lib/search-tokenizer.js | 31 + lib/site.ts | 13 + lib/source.ts | 15 + next.config.mjs | 15 + package.json | 55 +- ...itepress-plugin-git-changelog@2.17.1.patch | 47 - pnpm-lock.yaml | 5440 ++++++++++++----- pnpm-workspace.yaml | 7 +- postcss.config.mjs | 1 + {docs/public => public}/.nojekyll | 0 CNAME => public/CNAME | 0 {docs/public => public}/WHUDAYS.png | Bin .../annual-group/welcome-message/quq_1.jpg | Bin .../annual-group/welcome-message/quq_2.jpg | Bin .../\344\271\235\345\260\276\346\231\250.jpg" | Bin .../\345\220\215\345\255\227.jpg" | Bin .../\345\275\261\344\270\264\345\205\211.jpg" | Bin .../welcome-message/\347\223\234.jpg" | Bin .../\350\214\202\346\241\221.jpg" | Bin ...\344\270\226\347\225\214\347\272\277.jpeg" | Bin ...\347\224\237\345\221\275\346\240\221.jpeg" | Bin ...\350\265\233\345\234\243\346\256\277.jpeg" | Bin ...\351\233\206\347\273\223\345\244\204.jpeg" | Bin .../\345\271\273\346\203\263\344\271\241.png" | Bin .../\345\274\202\344\270\226\347\225\214.jpg" | Bin .../\346\204\233\350\250\200\350\221\211.png" | Bin .../\346\224\276\350\257\276\345\220\216.jpg" | Bin .../\346\230\245\346\227\245\345\275\261.png" | Bin ...\346\250\261\345\205\254\351\246\206.jpeg" | Bin .../\347\247\200\347\237\245\351\231\242.jpg" | Bin .../\347\273\257\346\203\263\345\244\251.jpg" | Bin ...\346\226\260\344\270\226\347\225\214.jpeg" | Bin .../\350\231\271\344\271\213\345\222\262.jpg" | Bin .../\350\277\246\345\213\222\345\272\225.jpg" | Bin .../about/hq/2014/avatar.png | Bin .../about/hq/2017/avatar.png | Bin .../about/hq/2018/avatar.jpg | Bin .../about/hq/2019/avatar.png | Bin .../about/hq/2023/avatar.png | Bin .../about/hq/2024/avatar.png | Bin .../about/hq/2025/avatar.jpg | Bin .../about/hq/2026/avatar.jpg | Bin {docs/public => public}/about/image-2.png | Bin {docs/public => public}/about/image-3.jpg | Bin {docs/public => public}/about/image-4.jpg | Bin {docs/public => public}/about/image.png | Bin ...4\346\226\260\346\214\207\345\215\227.pdf" | Bin ...4\346\226\260\346\214\207\345\215\227.pdf" | Bin ...4\346\226\260\346\214\207\345\215\227.pdf" | Bin .../60d38c0b7844200a4cd9b0abd07ad463.png | Bin .../activity/2012/senbon-floor/image.png | Bin .../activity/2012/senbon-floor/image2.png | Bin .../activity/2012/senbon-floor/index.html | 0 .../activity/2012/winter-festival/cover.jpg | Bin .../activity/2013/magazine/cover.jpg | Bin .../activity/2013/winter-festival/cover.jpg | Bin .../activity/2014/magazine/cover.jpg | Bin .../activity/2014/winter-festival/cover.jpg | Bin .../activity/2015/magazine/cover.jpg | Bin .../activity/2015/winter-festival/cover.jpg | Bin .../activity/2016/anime-screening/image.jpg | Bin .../activity/2016/anime-screening/image.png | Bin .../activity/2016/club-fair/announcement.png | Bin .../activity/2016/club-fair/image-1.jpeg | Bin .../activity/2016/club-fair/image.jpeg | Bin .../2016/halloween-graffiti/image.png | Bin .../activity/2016/magazine/cover.jpg | Bin .../activity/2016/welcome-party/image-1.jpeg | Bin .../activity/2016/welcome-party/image-2.jpeg | Bin .../activity/2016/welcome-party/image-3.jpeg | Bin .../activity/2016/welcome-party/image-4.jpeg | Bin .../activity/2016/welcome-party/image.png | Bin ...5\345\222\226\345\225\241\345\216\205.jpg" | Bin ...5\347\245\255\346\265\267\346\212\245.jpg" | Bin ...5\350\212\202\347\233\256\345\215\225.jpg" | Bin .../2017/anime-screening/image-1.jpeg | Bin .../activity/2017/anime-screening/image.jpeg | Bin .../activity/2017/magazine/cover.jpg | Bin .../activity/2017/winter-festival/cover.jpg | Bin .../activity/2018/magazine/cover.jpg | Bin .../activity/2018/winter-festival/cover.jpg | Bin .../activity/2019/magazine/cover.jpg | Bin .../activity/2019/winter-festival/cover.jpg | Bin .../activity/2020/magazine/cover.png | Bin .../2020/spring-meeting/mzpt-in-meeting.jpg | Bin .../activity/2020/winter-festival/cover.jpg | Bin .../activity/2020/winter-festival/menu.jpg | Bin .../activity/2021/magazine/cover.png | Bin .../activity/2021/summer-festival/cover.png | Bin .../activity/2021/summer-live/programme1.png | Bin .../activity/2021/summer-live/programme2.png | Bin .../activity/2022/magazine/cover.jpeg | Bin .../activity/2022/spring-festival/cover.png | Bin .../activity/2023/magazine/cover.png | Bin .../activity/2023/spring-live/cover.jpeg | Bin .../activity/2023/summer-live/schedule.jpg | Bin .../activity/2023/winter-festival/cover.jpg | Bin .../2023/winter-festival/programme.jpg | Bin .../2023/winter-festival/publicity.jpg | Bin .../activity/2024/club-fair/announcement.jpg | Bin .../activity/2024/club-fair/image-1.jpg | Bin .../activity/2024/club-fair/image-2.jpg | Bin .../activity/2024/club-fair/image-3.jpg | Bin .../activity/2024/club-fair/image-4.jpg | Bin .../activity/2024/club-fair/image-5.jpg | Bin .../activity/2024/club-fair/image-6.jpg | Bin .../activity/2024/club-fair/image.jpg | Bin .../activity/2024/club-fair/list.png | Bin .../activity/2024/live/cover.png | Bin .../activity/2024/live/image.png | Bin .../activity/2024/magazine/cover.png | Bin .../activity/2024/winter-festival/image.png | Bin .../activity/2024/winter-festival/menu.png | Bin .../2025/game-dev/love-remains/image-2.png | Bin .../2025/game-dev/love-remains/image-3.png | Bin .../2025/game-dev/love-remains/image-4.png | Bin .../2025/game-dev/love-remains/image-5.png | Bin .../2025/game-dev/love-remains/image-6.png | Bin .../2025/game-dev/love-remains/image.png | Bin ...1\346\211\213\346\211\213\345\206\214.pdf" | Bin .../activity/2025/magazine/cover.png | Bin .../activity/2025/name-vote/1.1.jpg | Bin .../activity/2025/name-vote/1.2.jpg | Bin .../activity/2025/name-vote/2.jpg | Bin ...6\345\205\270\346\265\267\346\212\245.png" | Bin ...0\350\212\202\347\233\256\345\215\225.png" | Bin .../activity/2025/summer-live/poster.png | Bin .../activity/2026/summer-live/poster.png | Bin {docs/public => public}/avatars/-QuQ-.jpeg | Bin {docs/public => public}/avatars/72.jpg | Bin {docs/public => public}/avatars/86.jpg | Bin {docs/public => public}/avatars/ATP.jpg | Bin .../avatars/Atelier Recittal.png | Bin .../avatars/C\351\205\261.jpg" | Bin {docs/public => public}/avatars/Darkream.png | Bin {docs/public => public}/avatars/DiVE.png | Bin {docs/public => public}/avatars/Evy.jpg | Bin ... \345\242\250\345\242\250\347\276\275.jpg" | Bin {docs/public => public}/avatars/KUMA.jpg | Bin {docs/public => public}/avatars/Layla.jpg | Bin {docs/public => public}/avatars/Lion.jpg | Bin {docs/public => public}/avatars/Rosie.jpg | Bin {docs/public => public}/avatars/SRin.jpg | Bin .../public => public}/avatars/TheEscapist.jpg | Bin {docs/public => public}/avatars/WJ.jpg | Bin {docs/public => public}/avatars/YY.png | Bin {docs/public => public}/avatars/Yun_me.jpg | Bin .../avatars/_placeholder.png | Bin {docs/public => public}/avatars/ange.jpg | Bin {docs/public => public}/avatars/elegy.jpg | Bin .../public => public}/avatars/narcissus.jpeg | Bin {docs/public => public}/avatars/scapino.jpeg | Bin {docs/public => public}/avatars/storm.jpeg | Bin {docs/public => public}/avatars/towa.jpeg | Bin {docs/public => public}/avatars/well.jpg | Bin {docs/public => public}/avatars/wweiyi.jpeg | Bin {docs/public => public}/avatars/yihu.jpg | Bin {docs/public => public}/avatars/zeit.jpeg | Bin .../avatars/\344\270\211\344\270\211.jpg" | Bin .../avatars/\344\270\211\346\227\245.jpg" | Bin .../avatars/\344\270\211\351\227\256.jpg" | Bin .../\344\270\215\347\247\221\345\255\246.jpg" | Bin .../avatars/\344\270\226\351\227\262.jpg" | Bin ...\347\223\234\347\202\226\346\261\244.jpeg" | Bin .../\344\270\255\344\270\211\347\227\205.jpg" | Bin .../avatars/\344\270\255\345\207\272.jpg" | Bin .../avatars/\344\271\235\346\227\245.jpg" | Bin ...4\346\260\247\345\214\226\347\242\263.jpg" | Bin .../avatars/\344\273\231\346\264\233.jpg" | Bin .../avatars/\344\274\230\346\240\274.jpg" | Bin .../avatars/\344\274\264\345\244\217.jpeg" | Bin .../avatars/\345\206\254\351\230\263.jpg" | Bin .../avatars/\345\206\260\350\215\267.jpg" | Bin .../avatars/\345\206\267\345\207\235.jpg" | Bin .../avatars/\345\207\233.jpg" | Bin .../avatars/\345\210\235\346\230\245.png" | Bin .../avatars/\345\212\253\347\201\260.jpg" | Bin .../avatars/\345\214\205\345\255\220.jpg" | Bin ...0\347\232\204\345\244\251\347\201\276.jpg" | Bin .../avatars/\345\214\227\346\264\233.jpeg" | Bin .../avatars/\345\215\203\351\201\207.jpg" | Bin .../avatars/\345\220\215\345\255\227.jpeg" | Bin .../avatars/\345\220\254\346\265\267.jpg" | Bin .../avatars/\345\226\265\345\260\221.jpg" | Bin .../avatars/\345\234\206\351\205\222.jpg" | Bin .../avatars/\345\234\237\345\267\235.jpeg" | Bin ...5\260\344\274\212\344\272\232-Elenia.jpeg" | Bin .../avatars/\345\243\260\347\201\265.jpg" | Bin .../avatars/\345\243\271\345\200\213.jpg" | Bin ...3\350\257\272\351\252\250\347\211\214.png" | Bin .../avatars/\345\244\247\347\227\264.jpg" | Bin .../avatars/\345\244\247\347\262\275.jpg" | Bin ...1\345\245\275\344\270\252\347\247\213.png" | Bin .../avatars/\345\244\251\347\213\227.jpg" | Bin .../avatars/\345\244\267\350\276\260.jpg" | Bin .../avatars/\345\247\213\345\215\216.jpeg" | Bin .../\345\255\220\351\235\236\347\276\275.jpg" | Bin .../avatars/\345\255\246\345\276\222.jpg" | Bin .../avatars/\345\256\211\346\200\241.jpg" | Bin .../avatars/\345\256\211\350\275\251.jpeg" | Bin .../avatars/\345\260\217\345\244\251.jpg" | Bin .../avatars/\345\262\232\346\233\246.jpeg" | Bin .../avatars/\345\271\262\345\220\233.jpeg" | Bin .../avatars/\345\271\263\346\235\277.jpeg" | Bin .../avatars/\345\272\227\351\225\277.jpeg" | Bin .../avatars/\345\274\200\350\267\214.png" | Bin .../\345\275\261\344\270\264\345\205\211.jpg" | Bin .../avatars/\345\275\261\351\273\216.jpg" | Bin .../avatars/\346\202\240\346\242\246.jpeg" | Bin .../avatars/\346\216\211\347\272\277.jpg" | Bin .../avatars/\346\226\271\345\235\227.jpg" | Bin .../\346\230\245\351\230\201\344\270\213.jpg" | Bin .../avatars/\346\230\255\346\230\255.jpg" | Bin .../avatars/\346\231\227\351\205\261.jpg" | Bin .../avatars/\346\235\202\351\237\263.jpg" | Bin .../avatars/\346\235\216\345\255\220.jpg" | Bin .../avatars/\346\240\221\346\236\235.jpeg" | Bin .../avatars/\346\240\221\347\232\256.jpg" | Bin .../avatars/\346\242\250\347\264\253.png" | Bin .../avatars/\346\244\205\345\255\220.jpeg" | Bin .../avatars/\346\244\277\351\233\252.jpeg" | Bin .../avatars/\346\247\221\350\217\214.jpg" | Bin .../avatars/\346\251\230\344\270\203.jpg" | Bin .../avatars/\346\255\243\351\235\242.jpeg" | Bin .../avatars/\346\256\213\345\277\265.jpg" | Bin .../avatars/\346\261\220\345\256\253.jpeg" | Bin .../avatars/\346\264\233\346\243\240.jpg" | Bin .../avatars/\346\265\201\346\276\234.jpg" | Bin .../avatars/\346\265\201\346\276\234_2.jpg" | Bin .../avatars/\346\265\267\350\261\271.jpg" | Bin .../avatars/\347\201\260\347\201\260.jpeg" | Bin .../avatars/\347\203\247\347\203\244.jpeg" | Bin .../avatars/\347\210\261\345\247\254.jpg" | Bin .../avatars/\347\216\253\351\237\263.jpg" | Bin .../avatars/\347\223\234.png" | Bin .../avatars/\347\224\265\351\224\257.jpg" | Bin .../avatars/\347\226\257\345\205\224.jpeg" | Bin .../avatars/\347\234\240\345\255\220.jpg" | Bin .../avatars/\347\240\214\346\247\220.jpg" | Bin .../avatars/\347\247\213\345\225\276.jpg" | Bin .../avatars/\347\247\246\346\267\256.jpg" | Bin .../avatars/\347\251\271\345\246\271.jpg" | Bin .../\347\261\263\346\226\257\347\211\271.jpg" | Bin .../avatars/\347\272\242\351\262\244.jpg" | Bin .../\347\272\261\346\234\210Satsuki.jpeg" | Bin ...\347\272\261\346\251\231\351\235\210.jpeg" | Bin .../avatars/\347\275\252\346\201\266.jpg" | Bin .../avatars/\347\276\216\345\246\210.jpg" | Bin .../avatars/\350\214\202\346\241\221.jpeg" | Bin .../avatars/\350\214\266\345\255\220.jpg" | Bin .../avatars/\350\221\221\350\217\262.jpeg" | Bin ...\350\245\277\345\212\240\345\260\224.jpeg" | Bin .../avatars/\351\223\234\351\274\223.jpg" | Bin .../avatars/\351\230\277\345\274\204.jpg" | Bin ...\345\217\210\345\215\203\345\244\234.jpeg" | Bin ...\351\243\216\346\262\211\347\231\275.jpeg" | Bin .../avatars/\351\252\221\345\243\253.jpg" | Bin .../avatars/\351\254\274\347\233\256.jpg" | Bin .../avatars/\351\255\224\347\216\213.jpg" | Bin .../avatars/\351\270\255\346\242\250.jpg" | Bin .../avatars/\351\273\221\347\276\275.jpg" | Bin ...1\347\276\275\344\273\231\346\264\233.png" | Bin .../avatars/\351\276\231\344\272\225.jpeg" | Bin .../avatars/\351\276\231\350\231\276.jpg" | Bin ...0\351\227\250\344\273\213\347\273\215.pdf" | Bin ...0\351\227\250\344\273\213\347\273\215.pdf" | Bin ...0\351\227\250\344\273\213\347\273\215.pdf" | Bin .../department/band/azuretide/logo.jpg | Bin .../department/band/daybreak/logo.jpg | Bin .../department/band/fireflyalgorithm/logo.jpg | Bin .../department/band/logo.jpeg | Bin .../department/band/natsunagi/logo.png | Bin .../department/band/orchestra/logo.jpg | Bin .../department/band/void/logo1.jpeg | Bin .../department/band/void/logo2.jpeg | Bin .../department/band/yozakura/logo.jpg | Bin .../public => public}/department/va/image.png | Bin {docs/public => public}/department/va/isu.png | Bin {docs/public => public}/department/va/k.png | Bin .../department/va/restart/logo.png | Bin .../\344\272\224\345\215\201\346\250\261.jpg" | Bin ...5\267\245\344\275\234\345\256\244logo.jpg" | Bin .../vtb/ax001/apparence/image-2.png | Bin .../vtb/ax001/apparence/image-3.png | Bin .../vtb/ax001/apparence/image-4.png | Bin .../vtb/ax001/apparence/image-5.png | Bin .../vtb/ax001/apparence/image-6.jpg | Bin .../department/vtb/ax001/apparence/image.png | Bin .../department/vtb/ax001/history/image.jpeg | Bin .../department/vtb/ax001/image-2.jpg | Bin .../department/vtb/ax001/image.png | Bin .../department/vtb/ax002/image.png | Bin {docs/public => public}/favicon.ico | Bin .../group/ani-key/activity/apr-2026/group.jpg | Bin .../activity/apr-2026/posters/poster01.jpg | Bin .../activity/apr-2026/posters/poster02.jpg | Bin .../activity/apr-2026/posters/poster03.jpg | Bin .../activity/apr-2026/posters/poster04.jpg | Bin .../activity/apr-2026/posters/poster05.jpg | Bin .../activity/apr-2026/posters/poster06.jpg | Bin .../activity/apr-2026/posters/poster07.jpg | Bin .../activity/apr-2026/posters/poster08.jpg | Bin .../activity/apr-2026/posters/poster09.jpg | Bin .../activity/apr-2026/posters/poster10.jpg | Bin .../activity/apr-2026/posters/poster11.jpg | Bin .../activity/apr-2026/posters/poster12.jpg | Bin .../activity/apr-2026/posters/poster13.jpg | Bin .../activity/apr-2026/posters/poster14.jpg | Bin .../activity/apr-2026/posters/poster15.jpg | Bin .../activity/apr-2026/posters/poster16.jpg | Bin .../activity/apr-2026/posters/poster17.jpg | Bin .../activity/apr-2026/posters/poster18.jpg | Bin .../activity/apr-2026/posters/poster19.jpg | Bin .../activity/apr-2026/posters/poster20.jpg | Bin .../activity/apr-2026/posters/poster21.jpg | Bin .../activity/apr-2026/posters/poster22.jpg | Bin .../activity/apr-2026/posters/poster23.jpg | Bin .../activity/apr-2026/posters/poster24.jpg | Bin .../activity/apr-2026/posters/poster25.jpg | Bin .../activity/apr-2026/posters/poster26.jpg | Bin .../activity/apr-2026/posters/poster27.jpg | Bin .../activity/apr-2026/posters/poster28.jpg | Bin .../activity/apr-2026/posters/poster29.jpg | Bin .../activity/apr-2026/posters/poster30.jpg | Bin .../activity/apr-2026/posters/poster31.jpg | Bin .../activity/apr-2026/posters/poster32.jpg | Bin .../activity/apr-2026/posters/poster33.jpg | Bin .../activity/apr-2026/posters/poster34.jpg | Bin .../activity/apr-2026/posters/poster35.jpg | Bin .../activity/apr-2026/posters/poster36.jpg | Bin .../activity/apr-2026/posters/poster37.jpg | Bin .../activity/apr-2026/posters/poster38.jpg | Bin .../activity/apr-2026/posters/poster39.jpg | Bin .../activity/apr-2026/posters/poster40.jpg | Bin .../activity/apr-2026/posters/poster41.jpg | Bin .../activity/apr-2026/posters/poster42.jpg | Bin .../activity/apr-2026/posters/poster43.jpg | Bin .../activity/apr-2026/posters/poster44.jpg | Bin .../activity/apr-2026/posters/poster45.jpg | Bin .../activity/apr-2026/posters/poster46.jpg | Bin .../activity/apr-2026/posters/poster47.jpg | Bin .../activity/apr-2026/posters/poster48.jpg | Bin .../activity/apr-2026/posters/poster49.jpg | Bin .../activity/apr-2026/posters/poster50.jpg | Bin .../activity/apr-2026/posters/poster51.jpg | Bin .../activity/apr-2026/posters/poster52.jpg | Bin .../activity/apr-2026/posters/poster53.jpg | Bin .../activity/apr-2026/posters/poster54.jpg | Bin .../activity/apr-2026/posters/poster55.jpg | Bin .../activity/apr-2026/posters/poster56.jpg | Bin .../activity/apr-2026/posters/poster57.jpg | Bin .../activity/apr-2026/posters/poster58.jpg | Bin .../activity/apr-2026/posters/poster59.jpg | Bin .../activity/apr-2026/posters/poster60.jpg | Bin .../activity/apr-2026/posters/poster61.jpg | Bin .../activity/apr-2026/posters/poster62.jpg | Bin .../activity/apr-2026/posters/poster63.jpg | Bin .../activity/apr-2026/posters/poster64.jpg | Bin .../activity/apr-2026/posters/poster65.jpg | Bin .../activity/apr-2026/posters/poster66.jpg | Bin .../activity/apr-2026/posters/poster67.jpg | Bin .../activity/apr-2026/posters/poster68.jpg | Bin .../activity/apr-2026/posters/poster69.jpg | Bin .../activity/apr-2026/posters/poster70.jpg | Bin .../activity/apr-2026/posters/poster71.jpg | Bin .../activity/apr-2026/posters/poster72.jpg | Bin .../activity/apr-2026/posters/poster73.jpg | Bin .../activity/apr-2026/posters/poster74.jpg | Bin .../group/ani-key/activity/jan-2026/group.jpg | Bin .../activity/jan-2026/posters/poster01.jpg | Bin .../activity/jan-2026/posters/poster02.jpg | Bin .../activity/jan-2026/posters/poster03.jpg | Bin .../activity/jan-2026/posters/poster04.jpg | Bin .../activity/jan-2026/posters/poster05.jpg | Bin .../activity/jan-2026/posters/poster06.jpg | Bin .../activity/jan-2026/posters/poster07.jpg | Bin .../activity/jan-2026/posters/poster08.jpg | Bin .../activity/jan-2026/posters/poster09.jpg | Bin .../activity/jan-2026/posters/poster10.jpg | Bin .../activity/jan-2026/posters/poster11.jpg | Bin .../activity/jan-2026/posters/poster12.jpg | Bin .../activity/jan-2026/posters/poster13.jpg | Bin .../activity/jan-2026/posters/poster14.jpg | Bin .../activity/jan-2026/posters/poster15.jpg | Bin .../activity/jan-2026/posters/poster16.jpg | Bin .../activity/jan-2026/posters/poster17.jpg | Bin .../activity/jan-2026/posters/poster18.jpg | Bin .../activity/jan-2026/posters/poster19.jpg | Bin .../activity/jan-2026/posters/poster20.jpg | Bin .../activity/jan-2026/posters/poster21.jpg | Bin .../activity/jan-2026/posters/poster22.jpg | Bin .../activity/jan-2026/posters/poster23.jpg | Bin .../activity/jan-2026/posters/poster24.jpg | Bin .../activity/jan-2026/posters/poster25.jpg | Bin .../activity/jan-2026/posters/poster26.jpg | Bin .../activity/jan-2026/posters/poster27.jpg | Bin .../activity/jan-2026/posters/poster28.jpg | Bin .../activity/jan-2026/posters/poster29.jpg | Bin .../activity/jan-2026/posters/poster30.jpg | Bin .../activity/jan-2026/posters/poster31.jpg | Bin .../activity/jan-2026/posters/poster32.jpg | Bin .../activity/jan-2026/posters/poster33.jpg | Bin .../activity/jan-2026/posters/poster34.jpg | Bin .../activity/jan-2026/posters/poster35.jpg | Bin .../activity/jan-2026/posters/poster36.jpg | Bin .../activity/jan-2026/posters/poster37.jpg | Bin .../activity/jan-2026/posters/poster38.jpg | Bin .../activity/warm-winter-2025/banner.jpeg | Bin .../warm-winter-2025/posters/row02.jpg | Bin .../warm-winter-2025/posters/row03.jpg | Bin .../warm-winter-2025/posters/row04.jpg | Bin .../warm-winter-2025/posters/row05.jpg | Bin .../warm-winter-2025/posters/row06.jpg | Bin .../warm-winter-2025/posters/row07.jpg | Bin .../warm-winter-2025/posters/row08.jpg | Bin .../warm-winter-2025/posters/row09.jpg | Bin .../warm-winter-2025/posters/row10.jpg | Bin .../warm-winter-2025/posters/row11.jpg | Bin .../warm-winter-2025/posters/row12.jpg | Bin .../warm-winter-2025/posters/row13.jpg | Bin .../warm-winter-2025/posters/row14.jpg | Bin .../warm-winter-2025/posters/row15.jpg | Bin .../warm-winter-2025/posters/row16.jpg | Bin .../warm-winter-2025/posters/row17.jpg | Bin .../warm-winter-2025/posters/row18.jpg | Bin .../warm-winter-2025/posters/row19.jpg | Bin .../warm-winter-2025/posters/row20.jpg | Bin .../warm-winter-2025/posters/row21.jpg | Bin .../warm-winter-2025/posters/row22.png | Bin .../warm-winter-2025/posters/row23.jpg | Bin .../warm-winter-2025/posters/row24.jpg | Bin .../warm-winter-2025/posters/row25.jpg | Bin .../warm-winter-2025/posters/row26.jpg | Bin .../warm-winter-2025/posters/row27.jpg | Bin .../warm-winter-2025/posters/row28.jpg | Bin .../warm-winter-2025/posters/row29.jpg | Bin .../warm-winter-2025/posters/row30.jpg | Bin .../warm-winter-2025/posters/row31.jpg | Bin .../warm-winter-2025/posters/row32.jpg | Bin .../warm-winter-2025/posters/row33.jpg | Bin .../warm-winter-2025/posters/row34.jpg | Bin .../warm-winter-2025/posters/row35.jpg | Bin .../warm-winter-2025/posters/row36.jpg | Bin .../warm-winter-2025/posters/row37.jpg | Bin .../warm-winter-2025/posters/row38.jpg | Bin .../warm-winter-2025/posters/row39.jpg | Bin .../warm-winter-2025/posters/row40.jpg | Bin .../warm-winter-2025/posters/row41.jpg | Bin .../warm-winter-2025/posters/row42.jpg | Bin .../warm-winter-2025/posters/row43.png | Bin .../warm-winter-2025/posters/row44.jpg | Bin .../warm-winter-2025/posters/row45.jpg | Bin .../warm-winter-2025/posters/row46.jpg | Bin .../warm-winter-2025/posters/row47.jpg | Bin .../warm-winter-2025/posters/row48.jpg | Bin .../warm-winter-2025/posters/row49.jpg | Bin .../warm-winter-2025/posters/row50.jpg | Bin .../warm-winter-2025/posters/row51.jpg | Bin .../warm-winter-2025/posters/row52.jpg | Bin .../warm-winter-2025/posters/row53.jpg | Bin .../warm-winter-2025/posters/row54.jpg | Bin .../warm-winter-2025/posters/row55.jpg | Bin .../warm-winter-2025/posters/row56.jpg | Bin .../warm-winter-2025/posters/row57.jpg | Bin .../warm-winter-2025/posters/row58.jpg | Bin .../warm-winter-2025/posters/row58_2.jpg | Bin .../warm-winter-2025/posters/row59.jpg | Bin ...0\347\225\252\351\211\264\350\265\217.jpg" | Bin ...5\203\217\347\211\210full\357\274\211.jpg" | Bin .../group/ani-key/banner.png | Bin .../public => public}/group/ani-key/logo.jpeg | Bin .../group/ani-key/logo2.jpeg | Bin .../group/ani-key/logo3.jpeg | Bin .../ani-key/participants/_placeholder.svg | 0 .../group/dry-humor/logo.jpeg | Bin .../galgame/activity/12wp-2023-result.jpeg | Bin .../group/galgame/activity/12wp.png | Bin .../group/galgame/activity/2024wf.png | Bin .../group/galgame/activity/2025fes.png | Bin .../group/galgame/activity/cos.png | Bin .../group/galgame/activity/impart.png | Bin .../group/galgame/activity/karaoke.png | Bin .../public => public}/group/galgame/logo.png | Bin .../group/galgame/sakuranouta.png | Bin .../group/infinity-nikki/infinity-nikki.png | Bin .../group/infinity-nikki/logo.jpg | Bin .../group/infinity-nikki/styles.css | 0 .../group/touhou-club/dinner.jpeg | Bin .../group/touhou-club/fumo.jpeg | Bin .../group/touhou-club/hyly-logo.jpeg | Bin .../group/touhou-club/logo.jpeg | Bin .../swallow-stone/activity-1/activity-1.jpg | Bin .../swallow-stone/activity-1/activity-2.jpg | Bin .../swallow-stone/activity-1/booth.jpg | Bin .../swallow-stone/activity-1/poster.jpg | Bin .../swallow-stone/activity-1/product.jpg | Bin .../swallow-stone/activity-2/arch.png | Bin .../swallow-stone/activity-2/group-intro.jpg | Bin .../swallow-stone/activity-2/island.jpg | Bin .../swallow-stone/activity-2/poster.png | Bin .../swallow-stone/activity-2/preview.png | Bin .../swallow-stone/activity-2/product.png | Bin .../activity-2/puzzle-terminal.jpg | Bin .../swallow-stone/activity-2/recording.mp4 | Bin .../vocaloid-utau-fans/events/karaoke/1.jpg | Bin .../vocaloid-utau-fans/events/karaoke/2.jpg | Bin .../vocaloid-utau-fans/events/karaoke/3.jpg | Bin .../events/live-watching/mm2021-1.jpg | Bin .../events/live-watching/mm2021-2.jpg | Bin .../events/live-watching/mm2021.jpg | Bin .../events/live-watching/mm2024.jpeg | Bin .../events/live-watching/mwy2021.jpg | Bin .../vocaloid-utau-fans/events/miku16th/1.jpeg | Bin .../vocaloid-utau-fans/events/miku16th/2.jpg | Bin .../vocaloid-utau-fans/events/miku16th/3.jpg | Bin .../events/whudays/spring2023/0.jpg | Bin .../events/whudays/spring2023/1.jpg | Bin .../events/whudays/spring2023/2.jpg | Bin .../events/whudays/spring2023/3.jpg | Bin .../events/whudays/spring2023/4.jpg | Bin .../events/whudays/spring2023/5.jpg | Bin .../events/whudays/winter2023/1.jpeg | Bin .../events/whudays/winter2023/2.jpeg | Bin .../events/whudays/winter2023/3.png | Bin .../events/whudays/winter2023/4.png | Bin .../events/whudays/winter2024/1.jpeg | Bin .../group/vocaloid-utau-fans/logo.jpg | Bin .../members/remeamiku/2023leaflet-b.jpg | Bin .../members/remeamiku/2023leaflet-f.jpg | Bin .../members/remeamiku/happi.png | Bin .../members/remeamiku/jptour.jpg | Bin .../members/remeamiku/miku14th.jpg | Bin .../members/remeamiku/mm2022.jpg | Bin .../members/remeamiku/mm2024-piapro.jpg | Bin .../members/remeamiku/mm2024.jpg | Bin .../members/remeamiku/orangeblossom.jpg | Bin .../members/sns/bilibili.svg | 0 .../vocaloid-utau-fans/members/sns/github.svg | 0 .../vocaloid-utau-fans/members/sns/pixiv.svg | 0 .../group/vocaloid-utau-fans/styles.css | 0 {docs/public => public}/llms.txt | 0 {docs/public => public}/message-box/quq/1.jpg | Bin ...1\347\247\273\350\257\264\346\230\216.pdf" | Bin .../\345\233\276\347\211\2071.png" | Bin .../\345\233\276\347\211\20710.png" | Bin .../\345\233\276\347\211\20711.png" | Bin .../\345\233\276\347\211\20712.png" | Bin .../\345\233\276\347\211\20713.png" | Bin .../\345\233\276\347\211\2072.png" | Bin .../\345\233\276\347\211\2073.png" | Bin .../\345\233\276\347\211\2074.png" | Bin .../\345\233\276\347\211\2075.png" | Bin .../\345\233\276\347\211\2076.png" | Bin .../\345\233\276\347\211\2077.png" | Bin .../\345\233\276\347\211\2078.png" | Bin .../\345\233\276\347\211\2079.png" | Bin {docs/public => public}/pdfjs/LICENSE | 0 {docs/public => public}/pdfjs/build/pdf.mjs | 0 .../public => public}/pdfjs/build/pdf.mjs.map | 0 .../pdfjs/build/pdf.sandbox.mjs | 0 .../pdfjs/build/pdf.sandbox.mjs.map | 0 .../pdfjs/build/pdf.worker.mjs | 0 .../pdfjs/build/pdf.worker.mjs.map | 0 .../pdfjs/web/cmaps/78-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/78-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/78-H.bcmap | Bin .../pdfjs/web/cmaps/78-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/78-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/78-V.bcmap | Bin .../pdfjs/web/cmaps/78ms-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/78ms-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/83pv-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/90ms-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/90ms-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/90msp-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/90msp-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/90pv-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/90pv-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/Add-H.bcmap | Bin .../pdfjs/web/cmaps/Add-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/Add-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/Add-V.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-0.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-1.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-3.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-4.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-5.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-6.bcmap | Bin .../pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-0.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-1.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-3.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-4.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-5.bcmap | Bin .../pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-0.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-1.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-3.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-4.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-5.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-6.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Korea1-0.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Korea1-1.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Korea1-2.bcmap | Bin .../pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap | Bin .../pdfjs/web/cmaps/B5-H.bcmap | Bin .../pdfjs/web/cmaps/B5-V.bcmap | Bin .../pdfjs/web/cmaps/B5pc-H.bcmap | Bin .../pdfjs/web/cmaps/B5pc-V.bcmap | Bin .../pdfjs/web/cmaps/CNS-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/CNS-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/CNS1-H.bcmap | Bin .../pdfjs/web/cmaps/CNS1-V.bcmap | Bin .../pdfjs/web/cmaps/CNS2-H.bcmap | Bin .../pdfjs/web/cmaps/CNS2-V.bcmap | 0 .../pdfjs/web/cmaps/ETHK-B5-H.bcmap | Bin .../pdfjs/web/cmaps/ETHK-B5-V.bcmap | Bin .../pdfjs/web/cmaps/ETen-B5-H.bcmap | Bin .../pdfjs/web/cmaps/ETen-B5-V.bcmap | Bin .../pdfjs/web/cmaps/ETenms-B5-H.bcmap | 0 .../pdfjs/web/cmaps/ETenms-B5-V.bcmap | Bin .../pdfjs/web/cmaps/EUC-H.bcmap | Bin .../pdfjs/web/cmaps/EUC-V.bcmap | Bin .../pdfjs/web/cmaps/Ext-H.bcmap | Bin .../pdfjs/web/cmaps/Ext-RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/Ext-RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/Ext-V.bcmap | Bin .../pdfjs/web/cmaps/GB-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/GB-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/GB-H.bcmap | 0 .../pdfjs/web/cmaps/GB-V.bcmap | Bin .../pdfjs/web/cmaps/GBK-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/GBK-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/GBK2K-H.bcmap | Bin .../pdfjs/web/cmaps/GBK2K-V.bcmap | Bin .../pdfjs/web/cmaps/GBKp-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/GBKp-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/GBT-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/GBT-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/GBT-H.bcmap | Bin .../pdfjs/web/cmaps/GBT-V.bcmap | Bin .../pdfjs/web/cmaps/GBTpc-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/GBTpc-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/GBpc-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/GBpc-EUC-V.bcmap | Bin .../public => public}/pdfjs/web/cmaps/H.bcmap | Bin .../pdfjs/web/cmaps/HKdla-B5-H.bcmap | Bin .../pdfjs/web/cmaps/HKdla-B5-V.bcmap | Bin .../pdfjs/web/cmaps/HKdlb-B5-H.bcmap | Bin .../pdfjs/web/cmaps/HKdlb-B5-V.bcmap | Bin .../pdfjs/web/cmaps/HKgccs-B5-H.bcmap | Bin .../pdfjs/web/cmaps/HKgccs-B5-V.bcmap | Bin .../pdfjs/web/cmaps/HKm314-B5-H.bcmap | Bin .../pdfjs/web/cmaps/HKm314-B5-V.bcmap | Bin .../pdfjs/web/cmaps/HKm471-B5-H.bcmap | Bin .../pdfjs/web/cmaps/HKm471-B5-V.bcmap | Bin .../pdfjs/web/cmaps/HKscs-B5-H.bcmap | Bin .../pdfjs/web/cmaps/HKscs-B5-V.bcmap | Bin .../pdfjs/web/cmaps/Hankaku.bcmap | Bin .../pdfjs/web/cmaps/Hiragana.bcmap | Bin .../pdfjs/web/cmaps/KSC-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/KSC-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/KSC-H.bcmap | Bin .../pdfjs/web/cmaps/KSC-Johab-H.bcmap | Bin .../pdfjs/web/cmaps/KSC-Johab-V.bcmap | Bin .../pdfjs/web/cmaps/KSC-V.bcmap | Bin .../pdfjs/web/cmaps/KSCms-UHC-H.bcmap | Bin .../pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap | Bin .../pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap | Bin .../pdfjs/web/cmaps/KSCms-UHC-V.bcmap | Bin .../pdfjs/web/cmaps/KSCpc-EUC-H.bcmap | Bin .../pdfjs/web/cmaps/KSCpc-EUC-V.bcmap | Bin .../pdfjs/web/cmaps/Katakana.bcmap | Bin .../public => public}/pdfjs/web/cmaps/LICENSE | 0 .../pdfjs/web/cmaps/NWP-H.bcmap | Bin .../pdfjs/web/cmaps/NWP-V.bcmap | Bin .../pdfjs/web/cmaps/RKSJ-H.bcmap | Bin .../pdfjs/web/cmaps/RKSJ-V.bcmap | Bin .../pdfjs/web/cmaps/Roman.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap | Bin .../pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UCS2-H.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UCS2-V.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UTF16-H.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UTF16-V.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UTF32-H.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UTF32-V.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UTF8-H.bcmap | Bin .../pdfjs/web/cmaps/UniGB-UTF8-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap | Bin .../pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap | Bin .../pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap | Bin .../pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap | Bin .../pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap | Bin .../pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap | Bin .../pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap | Bin .../pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap | Bin .../web/cmaps/UniJISX02132004-UTF32-H.bcmap | Bin .../web/cmaps/UniJISX02132004-UTF32-V.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UCS2-H.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UCS2-V.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UTF16-H.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UTF16-V.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UTF32-H.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UTF32-V.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UTF8-H.bcmap | Bin .../pdfjs/web/cmaps/UniKS-UTF8-V.bcmap | Bin .../public => public}/pdfjs/web/cmaps/V.bcmap | Bin .../pdfjs/web/cmaps/WP-Symbol.bcmap | Bin .../web/compressed.tracemonkey-pldi-09.pdf | Bin .../public => public}/pdfjs/web/debugger.css | 0 .../public => public}/pdfjs/web/debugger.mjs | 0 .../pdfjs/web/images/altText_add.svg | 0 .../pdfjs/web/images/altText_disclaimer.svg | 0 .../pdfjs/web/images/altText_done.svg | 0 .../pdfjs/web/images/altText_spinner.svg | 0 .../pdfjs/web/images/altText_warning.svg | 0 .../pdfjs/web/images/annotation-check.svg | 0 .../pdfjs/web/images/annotation-comment.svg | 0 .../pdfjs/web/images/annotation-help.svg | 0 .../pdfjs/web/images/annotation-insert.svg | 0 .../pdfjs/web/images/annotation-key.svg | 0 .../web/images/annotation-newparagraph.svg | 0 .../pdfjs/web/images/annotation-noicon.svg | 0 .../pdfjs/web/images/annotation-note.svg | 0 .../pdfjs/web/images/annotation-paperclip.svg | 0 .../pdfjs/web/images/annotation-paragraph.svg | 0 .../pdfjs/web/images/annotation-pushpin.svg | 0 .../web/images/cursor-editorFreeHighlight.svg | 0 .../web/images/cursor-editorFreeText.svg | 0 .../pdfjs/web/images/cursor-editorInk.svg | 0 .../web/images/cursor-editorTextHighlight.svg | 0 .../web/images/editor-toolbar-delete.svg | 0 .../pdfjs/web/images/findbarButton-next.svg | 0 .../web/images/findbarButton-previous.svg | 0 .../web/images/gv-toolbarButton-download.svg | 0 .../pdfjs/web/images/loading-icon.gif | Bin .../pdfjs/web/images/loading.svg | 0 .../web/images/messageBar_closingButton.svg | 0 .../pdfjs/web/images/messageBar_warning.svg | 0 ...ondaryToolbarButton-documentProperties.svg | 0 .../secondaryToolbarButton-firstPage.svg | 0 .../secondaryToolbarButton-handTool.svg | 0 .../secondaryToolbarButton-lastPage.svg | 0 .../secondaryToolbarButton-rotateCcw.svg | 0 .../secondaryToolbarButton-rotateCw.svg | 0 ...econdaryToolbarButton-scrollHorizontal.svg | 0 .../secondaryToolbarButton-scrollPage.svg | 0 .../secondaryToolbarButton-scrollVertical.svg | 0 .../secondaryToolbarButton-scrollWrapped.svg | 0 .../secondaryToolbarButton-selectTool.svg | 0 .../secondaryToolbarButton-spreadEven.svg | 0 .../secondaryToolbarButton-spreadNone.svg | 0 .../secondaryToolbarButton-spreadOdd.svg | 0 .../web/images/toolbarButton-bookmark.svg | 0 .../toolbarButton-currentOutlineItem.svg | 0 .../web/images/toolbarButton-download.svg | 0 .../images/toolbarButton-editorFreeText.svg | 0 .../images/toolbarButton-editorHighlight.svg | 0 .../web/images/toolbarButton-editorInk.svg | 0 .../web/images/toolbarButton-editorStamp.svg | 0 .../web/images/toolbarButton-menuArrow.svg | 0 .../web/images/toolbarButton-openFile.svg | 0 .../web/images/toolbarButton-pageDown.svg | 0 .../pdfjs/web/images/toolbarButton-pageUp.svg | 0 .../images/toolbarButton-presentationMode.svg | 0 .../pdfjs/web/images/toolbarButton-print.svg | 0 .../pdfjs/web/images/toolbarButton-search.svg | 0 .../toolbarButton-secondaryToolbarToggle.svg | 0 .../images/toolbarButton-sidebarToggle.svg | 0 .../images/toolbarButton-viewAttachments.svg | 0 .../web/images/toolbarButton-viewLayers.svg | 0 .../web/images/toolbarButton-viewOutline.svg | 0 .../images/toolbarButton-viewThumbnail.svg | 0 .../pdfjs/web/images/toolbarButton-zoomIn.svg | 0 .../web/images/toolbarButton-zoomOut.svg | 0 .../pdfjs/web/images/treeitem-collapsed.svg | 0 .../pdfjs/web/images/treeitem-expanded.svg | 0 .../pdfjs/web/locale/ach/viewer.ftl | 0 .../pdfjs/web/locale/af/viewer.ftl | 0 .../pdfjs/web/locale/an/viewer.ftl | 0 .../pdfjs/web/locale/ar/viewer.ftl | 0 .../pdfjs/web/locale/ast/viewer.ftl | 0 .../pdfjs/web/locale/az/viewer.ftl | 0 .../pdfjs/web/locale/be/viewer.ftl | 0 .../pdfjs/web/locale/bg/viewer.ftl | 0 .../pdfjs/web/locale/bn/viewer.ftl | 0 .../pdfjs/web/locale/bo/viewer.ftl | 0 .../pdfjs/web/locale/br/viewer.ftl | 0 .../pdfjs/web/locale/brx/viewer.ftl | 0 .../pdfjs/web/locale/bs/viewer.ftl | 0 .../pdfjs/web/locale/ca/viewer.ftl | 0 .../pdfjs/web/locale/cak/viewer.ftl | 0 .../pdfjs/web/locale/ckb/viewer.ftl | 0 .../pdfjs/web/locale/cs/viewer.ftl | 0 .../pdfjs/web/locale/cy/viewer.ftl | 0 .../pdfjs/web/locale/da/viewer.ftl | 0 .../pdfjs/web/locale/de/viewer.ftl | 0 .../pdfjs/web/locale/dsb/viewer.ftl | 0 .../pdfjs/web/locale/el/viewer.ftl | 0 .../pdfjs/web/locale/en-CA/viewer.ftl | 0 .../pdfjs/web/locale/en-GB/viewer.ftl | 0 .../pdfjs/web/locale/en-US/viewer.ftl | 0 .../pdfjs/web/locale/eo/viewer.ftl | 0 .../pdfjs/web/locale/es-AR/viewer.ftl | 0 .../pdfjs/web/locale/es-CL/viewer.ftl | 0 .../pdfjs/web/locale/es-ES/viewer.ftl | 0 .../pdfjs/web/locale/es-MX/viewer.ftl | 0 .../pdfjs/web/locale/et/viewer.ftl | 0 .../pdfjs/web/locale/eu/viewer.ftl | 0 .../pdfjs/web/locale/fa/viewer.ftl | 0 .../pdfjs/web/locale/ff/viewer.ftl | 0 .../pdfjs/web/locale/fi/viewer.ftl | 0 .../pdfjs/web/locale/fr/viewer.ftl | 0 .../pdfjs/web/locale/fur/viewer.ftl | 0 .../pdfjs/web/locale/fy-NL/viewer.ftl | 0 .../pdfjs/web/locale/ga-IE/viewer.ftl | 0 .../pdfjs/web/locale/gd/viewer.ftl | 0 .../pdfjs/web/locale/gl/viewer.ftl | 0 .../pdfjs/web/locale/gn/viewer.ftl | 0 .../pdfjs/web/locale/gu-IN/viewer.ftl | 0 .../pdfjs/web/locale/he/viewer.ftl | 0 .../pdfjs/web/locale/hi-IN/viewer.ftl | 0 .../pdfjs/web/locale/hr/viewer.ftl | 0 .../pdfjs/web/locale/hsb/viewer.ftl | 0 .../pdfjs/web/locale/hu/viewer.ftl | 0 .../pdfjs/web/locale/hy-AM/viewer.ftl | 0 .../pdfjs/web/locale/hye/viewer.ftl | 0 .../pdfjs/web/locale/ia/viewer.ftl | 0 .../pdfjs/web/locale/id/viewer.ftl | 0 .../pdfjs/web/locale/is/viewer.ftl | 0 .../pdfjs/web/locale/it/viewer.ftl | 0 .../pdfjs/web/locale/ja/viewer.ftl | 0 .../pdfjs/web/locale/ka/viewer.ftl | 0 .../pdfjs/web/locale/kab/viewer.ftl | 0 .../pdfjs/web/locale/kk/viewer.ftl | 0 .../pdfjs/web/locale/km/viewer.ftl | 0 .../pdfjs/web/locale/kn/viewer.ftl | 0 .../pdfjs/web/locale/ko/viewer.ftl | 0 .../pdfjs/web/locale/lij/viewer.ftl | 0 .../pdfjs/web/locale/lo/viewer.ftl | 0 .../pdfjs/web/locale/locale.json | 0 .../pdfjs/web/locale/lt/viewer.ftl | 0 .../pdfjs/web/locale/ltg/viewer.ftl | 0 .../pdfjs/web/locale/lv/viewer.ftl | 0 .../pdfjs/web/locale/meh/viewer.ftl | 0 .../pdfjs/web/locale/mk/viewer.ftl | 0 .../pdfjs/web/locale/mr/viewer.ftl | 0 .../pdfjs/web/locale/ms/viewer.ftl | 0 .../pdfjs/web/locale/my/viewer.ftl | 0 .../pdfjs/web/locale/nb-NO/viewer.ftl | 0 .../pdfjs/web/locale/ne-NP/viewer.ftl | 0 .../pdfjs/web/locale/nl/viewer.ftl | 0 .../pdfjs/web/locale/nn-NO/viewer.ftl | 0 .../pdfjs/web/locale/oc/viewer.ftl | 0 .../pdfjs/web/locale/pa-IN/viewer.ftl | 0 .../pdfjs/web/locale/pl/viewer.ftl | 0 .../pdfjs/web/locale/pt-BR/viewer.ftl | 0 .../pdfjs/web/locale/pt-PT/viewer.ftl | 0 .../pdfjs/web/locale/rm/viewer.ftl | 0 .../pdfjs/web/locale/ro/viewer.ftl | 0 .../pdfjs/web/locale/ru/viewer.ftl | 0 .../pdfjs/web/locale/sat/viewer.ftl | 0 .../pdfjs/web/locale/sc/viewer.ftl | 0 .../pdfjs/web/locale/scn/viewer.ftl | 0 .../pdfjs/web/locale/sco/viewer.ftl | 0 .../pdfjs/web/locale/si/viewer.ftl | 0 .../pdfjs/web/locale/sk/viewer.ftl | 0 .../pdfjs/web/locale/skr/viewer.ftl | 0 .../pdfjs/web/locale/sl/viewer.ftl | 0 .../pdfjs/web/locale/son/viewer.ftl | 0 .../pdfjs/web/locale/sq/viewer.ftl | 0 .../pdfjs/web/locale/sr/viewer.ftl | 0 .../pdfjs/web/locale/sv-SE/viewer.ftl | 0 .../pdfjs/web/locale/szl/viewer.ftl | 0 .../pdfjs/web/locale/ta/viewer.ftl | 0 .../pdfjs/web/locale/te/viewer.ftl | 0 .../pdfjs/web/locale/tg/viewer.ftl | 0 .../pdfjs/web/locale/th/viewer.ftl | 0 .../pdfjs/web/locale/tl/viewer.ftl | 0 .../pdfjs/web/locale/tr/viewer.ftl | 0 .../pdfjs/web/locale/trs/viewer.ftl | 0 .../pdfjs/web/locale/uk/viewer.ftl | 0 .../pdfjs/web/locale/ur/viewer.ftl | 0 .../pdfjs/web/locale/uz/viewer.ftl | 0 .../pdfjs/web/locale/vi/viewer.ftl | 0 .../pdfjs/web/locale/wo/viewer.ftl | 0 .../pdfjs/web/locale/xh/viewer.ftl | 0 .../pdfjs/web/locale/zh-CN/viewer.ftl | 0 .../pdfjs/web/locale/zh-TW/viewer.ftl | 0 .../web/standard_fonts/FoxitDingbats.pfb | Bin .../pdfjs/web/standard_fonts/FoxitFixed.pfb | Bin .../web/standard_fonts/FoxitFixedBold.pfb | Bin .../standard_fonts/FoxitFixedBoldItalic.pfb | Bin .../web/standard_fonts/FoxitFixedItalic.pfb | Bin .../pdfjs/web/standard_fonts/FoxitSerif.pfb | Bin .../web/standard_fonts/FoxitSerifBold.pfb | Bin .../standard_fonts/FoxitSerifBoldItalic.pfb | Bin .../web/standard_fonts/FoxitSerifItalic.pfb | Bin .../pdfjs/web/standard_fonts/FoxitSymbol.pfb | Bin .../pdfjs/web/standard_fonts/LICENSE_FOXIT | 0 .../web/standard_fonts/LICENSE_LIBERATION | 0 .../standard_fonts/LiberationSans-Bold.ttf | Bin .../LiberationSans-BoldItalic.ttf | Bin .../standard_fonts/LiberationSans-Italic.ttf | Bin .../standard_fonts/LiberationSans-Regular.ttf | Bin {docs/public => public}/pdfjs/web/viewer.css | 0 {docs/public => public}/pdfjs/web/viewer.html | 0 {docs/public => public}/pdfjs/web/viewer.mjs | 0 .../pdfjs/web/viewer.mjs.map | 0 {docs/public => public}/robots.txt | 0 scripts/verify-export.mjs | 149 + source.config.ts | 41 + tsconfig.json | 21 + 1189 files changed, 10266 insertions(+), 6138 deletions(-) create mode 100644 app/[[...slug]]/page.tsx create mode 100644 app/content.css create mode 100644 app/globals.css create mode 100644 app/layout.tsx create mode 100644 app/markdown/[...slug]/route.ts create mode 100644 app/not-found.tsx create mode 100644 app/search-index.json/route.ts create mode 100644 app/sitemap.ts create mode 100644 components/archive-cards.css create mode 100644 components/canonical-url.tsx create mode 100644 components/content.css create mode 100644 components/content.tsx create mode 100644 components/git-changelog.css create mode 100644 components/git-changelog.tsx create mode 100644 components/git-history-view.tsx create mode 100644 components/home.tsx create mode 100644 components/hq-years.css create mode 100644 components/hq-years.tsx create mode 100644 components/mdx.tsx create mode 100644 components/page-view-options.tsx create mode 100644 components/provider.tsx create mode 100644 components/search.tsx create mode 100644 components/site-footer.tsx delete mode 100644 docs/.vitepress/config.js delete mode 100644 docs/.vitepress/theme/components/ChatMessage.vue delete mode 100644 docs/.vitepress/theme/components/MemberCard.vue delete mode 100644 docs/.vitepress/theme/index.js rename docs/about/{annual-group.md => annual-group.mdx} (83%) delete mode 100644 docs/about/hq/2009.md create mode 100644 docs/about/hq/2009.mdx delete mode 100644 docs/about/hq/2010.md create mode 100644 docs/about/hq/2010.mdx delete mode 100644 docs/about/hq/2011.md create mode 100644 docs/about/hq/2011.mdx delete mode 100644 docs/about/hq/2012.md create mode 100644 docs/about/hq/2012.mdx delete mode 100644 docs/about/hq/2013.md create mode 100644 docs/about/hq/2013.mdx delete mode 100644 docs/about/hq/2014.md create mode 100644 docs/about/hq/2014.mdx delete mode 100644 docs/about/hq/2015.md create mode 100644 docs/about/hq/2015.mdx delete mode 100644 docs/about/hq/2016.md create mode 100644 docs/about/hq/2016.mdx delete mode 100644 docs/about/hq/2017.md create mode 100644 docs/about/hq/2017.mdx delete mode 100644 docs/about/hq/2018.md create mode 100644 docs/about/hq/2018.mdx rename docs/about/hq/{2019.md => 2019.mdx} (51%) delete mode 100644 docs/about/hq/2020.md create mode 100644 docs/about/hq/2020.mdx delete mode 100644 docs/about/hq/2021.md create mode 100644 docs/about/hq/2021.mdx delete mode 100644 docs/about/hq/2022.md create mode 100644 docs/about/hq/2022.mdx delete mode 100644 docs/about/hq/2023.md create mode 100644 docs/about/hq/2023.mdx delete mode 100644 docs/about/hq/2024.md create mode 100644 docs/about/hq/2024.mdx rename docs/about/hq/{2025.md => 2025.mdx} (61%) delete mode 100644 docs/about/hq/2026.md create mode 100644 docs/about/hq/2026.mdx delete mode 100644 docs/about/hq/index.md create mode 100644 docs/about/hq/index.mdx rename docs/about/{index.md => index.mdx} (58%) delete mode 100644 docs/about/introduction.md create mode 100644 docs/about/introduction.mdx rename docs/about/newbie-guide/2024/{01-faq.md => 01-faq.mdx} (95%) rename docs/about/newbie-guide/2024/{02-rules.md => 02-rules.mdx} (97%) rename docs/about/newbie-guide/2024/{03-official-accounts.md => 03-official-accounts.mdx} (90%) rename docs/about/newbie-guide/2024/{04-raw.md => 04-raw.mdx} (63%) rename docs/about/newbie-guide/2024/{index.md => index.mdx} (96%) rename docs/about/newbie-guide/2025/{faq.md => faq.mdx} (97%) rename docs/about/newbie-guide/2025/{index.md => index.mdx} (96%) rename docs/about/newbie-guide/2025/{official-accounts.md => official-accounts.mdx} (81%) rename docs/about/newbie-guide/2025/{raw.md => raw.mdx} (61%) rename docs/about/newbie-guide/2025/{rules.md => rules.mdx} (89%) rename docs/about/newbie-guide/2026/{faq.md => faq.mdx} (97%) rename docs/about/newbie-guide/2026/{index.md => index.mdx} (95%) rename docs/about/newbie-guide/2026/{official-accounts.md => official-accounts.mdx} (81%) rename docs/about/newbie-guide/2026/{raw.md => raw.mdx} (62%) rename docs/about/newbie-guide/2026/{rules.md => rules.mdx} (88%) rename docs/activity/2003/{comic-contest.md => comic-contest.mdx} (89%) rename docs/activity/2003/{qunguang-expo.md => qunguang-expo.mdx} (94%) rename docs/activity/2004/{comic-festival.md => comic-festival.mdx} (90%) rename docs/activity/2005/{anime-expo.md => anime-expo.mdx} (92%) rename docs/activity/2005/{anime-quiz.md => anime-quiz.mdx} (98%) rename docs/activity/2005/{christmas-carnival.md => christmas-carnival.mdx} (97%) rename docs/activity/2005/{seiyuu-group.md => seiyuu-group.mdx} (94%) rename docs/activity/2007/{furuya-toru.md => furuya-toru.mdx} (94%) rename docs/activity/2007/{kfc-cosplay-pk.md => kfc-cosplay-pk.mdx} (86%) rename docs/activity/2008/{anime-expo.md => anime-expo.mdx} (80%) rename docs/activity/2012/{winter-festival.md => winter-festival.mdx} (98%) rename docs/activity/2013/{magazine.md => magazine.mdx} (63%) rename docs/activity/2013/{winter-festival.md => winter-festival.mdx} (63%) rename docs/activity/2014/{magazine.md => magazine.mdx} (63%) rename docs/activity/2014/{winter-festival.md => winter-festival.mdx} (60%) rename docs/activity/2015/{magazine.md => magazine.mdx} (63%) delete mode 100644 docs/activity/2015/winter-festival.md create mode 100644 docs/activity/2015/winter-festival.mdx delete mode 100644 docs/activity/2016/anime-screening/the-boy-and-the-beast.md create mode 100644 docs/activity/2016/anime-screening/the-boy-and-the-beast.mdx delete mode 100644 "docs/activity/2016/anime-screening/\316\274's-final-lovelive-day2.md" create mode 100644 "docs/activity/2016/anime-screening/\316\274's-final-lovelive-day2.mdx" rename docs/activity/2016/{club-fair.md => club-fair.mdx} (91%) rename docs/activity/2016/{halloween-graffiti.md => halloween-graffiti.mdx} (50%) rename docs/activity/2016/{magazine.md => magazine.mdx} (63%) rename docs/activity/2016/{welcome-party.md => welcome-party.mdx} (95%) delete mode 100644 docs/activity/2016/welcome-video.md create mode 100644 docs/activity/2016/welcome-video.mdx rename docs/activity/2016/{winter-festival.md => winter-festival.mdx} (84%) rename "docs/activity/2017/anime-screening/steins-gate-the-movie\342\210\222load-region-of-d\303\251j\303\240-vu.md" => "docs/activity/2017/anime-screening/steins-gate-the-movie\342\210\222load-region-of-d\303\251j\303\240-vu.mdx" (53%) delete mode 100644 docs/activity/2017/anime-screening/the-dragon-dentist.md create mode 100644 docs/activity/2017/anime-screening/the-dragon-dentist.mdx rename docs/activity/2017/{magazine.md => magazine.mdx} (63%) rename docs/activity/2017/{welcome-party.md => welcome-party.mdx} (93%) rename docs/activity/2017/{winter-festival.md => winter-festival.mdx} (96%) rename docs/activity/2018/{magazine.md => magazine.mdx} (63%) rename docs/activity/2018/{winter-festival.md => winter-festival.mdx} (92%) rename docs/activity/2019/{magazine.md => magazine.mdx} (63%) delete mode 100644 docs/activity/2019/welcome-video.md create mode 100644 docs/activity/2019/welcome-video.mdx rename docs/activity/2019/{winter-festival.md => winter-festival.mdx} (97%) rename docs/activity/2020/{magazine.md => magazine.mdx} (63%) rename docs/activity/2020/{spring-meeting.md => spring-meeting.mdx} (52%) rename docs/activity/2020/{winter-festival.md => winter-festival.mdx} (98%) rename docs/activity/2021/{magazine.md => magazine.mdx} (63%) rename docs/activity/2021/{summer-festival.md => summer-festival.mdx} (92%) rename docs/activity/2021/{summer-live.md => summer-live.mdx} (80%) delete mode 100644 docs/activity/2021/welcome-video.md create mode 100644 docs/activity/2021/welcome-video.mdx rename docs/activity/2022/{magazine.md => magazine.mdx} (63%) rename docs/activity/2022/{spring-festival.md => spring-festival.mdx} (93%) delete mode 100644 docs/activity/2022/welcome-video.md create mode 100644 docs/activity/2022/welcome-video.mdx rename docs/activity/2023/{magazine.md => magazine.mdx} (63%) rename docs/activity/2023/{spring-live.md => spring-live.mdx} (89%) rename docs/activity/2023/{summer-live.md => summer-live.mdx} (90%) rename docs/activity/2023/{welcome-party.md => welcome-party.mdx} (97%) delete mode 100644 docs/activity/2023/welcome-video.md create mode 100644 docs/activity/2023/welcome-video.mdx rename docs/activity/2023/{winter-festival.md => winter-festival.mdx} (89%) rename docs/activity/2024/{club-fair.md => club-fair.mdx} (84%) rename docs/activity/2024/{fes.md => fes.mdx} (77%) delete mode 100644 docs/activity/2024/live.md create mode 100644 docs/activity/2024/live.mdx rename docs/activity/2024/{magazine.md => magazine.mdx} (63%) rename docs/activity/2024/{project-hq.md => project-hq.mdx} (95%) rename docs/activity/2024/{summer-live.md => summer-live.mdx} (88%) rename docs/activity/2024/{welcome-party.md => welcome-party.mdx} (70%) delete mode 100644 docs/activity/2024/welcome-video.md create mode 100644 docs/activity/2024/welcome-video.mdx rename docs/activity/2024/{winter-festival.md => winter-festival.mdx} (63%) delete mode 100644 docs/activity/2025/come-leave.md create mode 100644 docs/activity/2025/come-leave.mdx rename docs/activity/2025/game-dev/{index.md => index.mdx} (76%) rename docs/activity/2025/{magazine.md => magazine.mdx} (77%) rename docs/activity/2025/{name-vote.md => name-vote.mdx} (84%) rename docs/activity/2025/{spring-festival.md => spring-festival.mdx} (99%) rename docs/activity/2025/{summer-live.md => summer-live.mdx} (86%) rename docs/activity/2025/welcome-party/{credits.md => credits.mdx} (83%) rename docs/activity/2025/welcome-party/{index.md => index.mdx} (72%) rename docs/activity/2026/{name-vote.md => name-vote.mdx} (94%) rename docs/activity/2026/{summer-live.md => summer-live.mdx} (70%) rename docs/activity/{index.md => index.mdx} (98%) rename docs/department/band/azuretide/{index.md => index.mdx} (59%) rename docs/department/band/daybreak/{index.md => index.mdx} (53%) delete mode 100644 docs/department/band/fireflyalgorithm/index.md create mode 100644 docs/department/band/fireflyalgorithm/index.mdx rename docs/department/band/{index.md => index.mdx} (50%) delete mode 100644 docs/department/band/natsunagi/index.md create mode 100644 docs/department/band/natsunagi/index.mdx rename docs/department/band/orchestra/{index.md => index.mdx} (82%) rename docs/department/band/void/{index.md => index.mdx} (51%) rename docs/department/band/yozakura/{index.md => index.mdx} (60%) rename docs/department/cos/{index.md => index.mdx} (83%) rename docs/department/dark/{index.md => index.mdx} (88%) delete mode 100644 docs/department/dark/liluo_died.md create mode 100644 docs/department/dark/liluo_died.mdx rename docs/department/edit/{index.md => index.mdx} (89%) rename docs/department/{index.md => index.mdx} (70%) rename docs/department/va/{index.md => index.mdx} (74%) rename docs/department/va/restart/{index.md => index.mdx} (92%) rename docs/department/vtb/ax001/{apparence.md => apparence.mdx} (58%) rename docs/department/vtb/ax001/{history.md => history.mdx} (97%) rename docs/department/vtb/ax001/{index.md => index.mdx} (77%) rename docs/department/vtb/ax002/{index.md => index.mdx} (96%) delete mode 100644 docs/department/vtb/index.md create mode 100644 docs/department/vtb/index.mdx rename docs/department/wota/{index.md => index.mdx} (71%) rename docs/group/ani-key/activity/{apr-2026.md => apr-2026.mdx} (71%) rename docs/group/ani-key/activity/{index.md => index.mdx} (96%) rename docs/group/ani-key/activity/{jan-2026.md => jan-2026.mdx} (65%) rename docs/group/ani-key/activity/{participants.md => participants.mdx} (63%) rename docs/group/ani-key/activity/{warm-winter-2025.md => warm-winter-2025.mdx} (69%) rename docs/group/ani-key/{index.md => index.mdx} (83%) rename docs/group/dry-humor/{index.md => index.mdx} (92%) rename docs/group/galgame/activity/{index.md => index.mdx} (80%) delete mode 100644 docs/group/galgame/group-owner.md create mode 100644 docs/group/galgame/group-owner.mdx rename docs/group/galgame/{index.md => index.mdx} (56%) rename docs/group/{index.md => index.mdx} (99%) rename docs/group/infinity-nikki/{index.md => index.mdx} (88%) delete mode 100644 docs/group/touhou-club/bird-ship-ruins.md create mode 100644 docs/group/touhou-club/bird-ship-ruins.mdx delete mode 100644 docs/group/touhou-club/hyly.md create mode 100644 docs/group/touhou-club/hyly.mdx rename docs/group/touhou-club/{index.md => index.mdx} (69%) delete mode 100644 docs/group/touhou-club/old-bar.md create mode 100644 docs/group/touhou-club/old-bar.mdx rename docs/group/touhou-club/{swallow-stone.md => swallow-stone.mdx} (79%) rename docs/group/touhou-club/swallow-stone/{activity-1.md => activity-1.mdx} (63%) rename docs/group/touhou-club/swallow-stone/{activity-2.md => activity-2.mdx} (52%) delete mode 100644 docs/group/touhou-club/swallow-stone/activity-3.md create mode 100644 docs/group/touhou-club/swallow-stone/activity-3.mdx rename docs/group/vocaloid-utau-fans/events/{karaoke.md => karaoke.mdx} (67%) rename docs/group/vocaloid-utau-fans/events/{live-watching.md => live-watching.mdx} (73%) rename docs/group/vocaloid-utau-fans/events/{miku16th.md => miku16th.mdx} (72%) rename docs/group/vocaloid-utau-fans/events/{whudays.md => whudays.mdx} (71%) rename docs/group/vocaloid-utau-fans/{index.md => index.mdx} (54%) rename docs/group/vocaloid-utau-fans/members/{remeamiku.md => remeamiku.mdx} (83%) rename docs/{index.md => index.mdx} (68%) rename docs/maintainer/{contributing.md => contributing.mdx} (50%) rename docs/maintainer/{index.md => index.mdx} (90%) rename docs/message-box/Nepchico/{index.md => index.mdx} (90%) rename docs/message-box/Yun_me/{words.md => words.mdx} (97%) rename docs/message-box/{index.md => index.mdx} (86%) rename docs/message-box/quq/{hq-docs.md => hq-docs.mdx} (92%) rename docs/message-box/quq/{index.md => index.mdx} (63%) rename docs/message-box/quq/{memories.md => memories.mdx} (99%) rename docs/message-box/quq/{words.md => words.mdx} (95%) rename "docs/message-box/\345\214\227\346\264\233/shadow.md" => "docs/message-box/\345\214\227\346\264\233/shadow.mdx" (96%) rename "docs/message-box/\345\272\227\351\225\277/index.md" => "docs/message-box/\345\272\227\351\225\277/index.mdx" (91%) rename "docs/message-box/\347\272\261\346\251\231\351\235\210/band-history.md" => "docs/message-box/\347\272\261\346\251\231\351\235\210/band-history.mdx" (89%) create mode 100644 lib/changelog.ts create mode 100644 lib/git-history.d.mts create mode 100644 lib/git-history.mjs create mode 100644 lib/icons.d.ts rename {docs/.vitepress/theme => lib}/icons.js (96%) create mode 100644 lib/layout.shared.tsx create mode 100644 lib/navigation.json create mode 100644 lib/navigation.ts create mode 100644 lib/people.d.ts rename {docs/.vitepress/data => lib}/people.js (97%) create mode 100644 lib/remark-legacy-headings.mjs create mode 100644 lib/remark-search-anchors.mjs create mode 100644 lib/search-component-text.mjs create mode 100644 lib/search-tokenizer.d.ts create mode 100644 lib/search-tokenizer.js create mode 100644 lib/site.ts create mode 100644 lib/source.ts create mode 100644 next.config.mjs delete mode 100644 patches/@nolebase__vitepress-plugin-git-changelog@2.17.1.patch create mode 100644 postcss.config.mjs rename {docs/public => public}/.nojekyll (100%) rename CNAME => public/CNAME (100%) rename {docs/public => public}/WHUDAYS.png (100%) rename {docs/public => public}/about/annual-group/welcome-message/quq_1.jpg (100%) rename {docs/public => public}/about/annual-group/welcome-message/quq_2.jpg (100%) rename "docs/public/about/annual-group/welcome-message/\344\271\235\345\260\276\346\231\250.jpg" => "public/about/annual-group/welcome-message/\344\271\235\345\260\276\346\231\250.jpg" (100%) rename "docs/public/about/annual-group/welcome-message/\345\220\215\345\255\227.jpg" => "public/about/annual-group/welcome-message/\345\220\215\345\255\227.jpg" (100%) rename "docs/public/about/annual-group/welcome-message/\345\275\261\344\270\264\345\205\211.jpg" => "public/about/annual-group/welcome-message/\345\275\261\344\270\264\345\205\211.jpg" (100%) rename "docs/public/about/annual-group/welcome-message/\347\223\234.jpg" => "public/about/annual-group/welcome-message/\347\223\234.jpg" (100%) rename "docs/public/about/annual-group/welcome-message/\350\214\202\346\241\221.jpg" => "public/about/annual-group/welcome-message/\350\214\202\346\241\221.jpg" (100%) rename "docs/public/about/annual-group/\344\270\226\347\225\214\347\272\277.jpeg" => "public/about/annual-group/\344\270\226\347\225\214\347\272\277.jpeg" (100%) rename "docs/public/about/annual-group/\345\215\241\345\267\264\346\213\211\347\224\237\345\221\275\346\240\221.jpeg" => "public/about/annual-group/\345\215\241\345\267\264\346\213\211\347\224\237\345\221\275\346\240\221.jpeg" (100%) rename "docs/public/about/annual-group/\345\245\245\345\276\267\350\265\233\345\234\243\346\256\277.jpeg" => "public/about/annual-group/\345\245\245\345\276\267\350\265\233\345\234\243\346\256\277.jpeg" (100%) rename "docs/public/about/annual-group/\345\256\205\345\261\205\345\212\250\347\211\251\351\233\206\347\273\223\345\244\204.jpeg" => "public/about/annual-group/\345\256\205\345\261\205\345\212\250\347\211\251\351\233\206\347\273\223\345\244\204.jpeg" (100%) rename "docs/public/about/annual-group/\345\271\273\346\203\263\344\271\241.png" => "public/about/annual-group/\345\271\273\346\203\263\344\271\241.png" (100%) rename "docs/public/about/annual-group/\345\274\202\344\270\226\347\225\214.jpg" => "public/about/annual-group/\345\274\202\344\270\226\347\225\214.jpg" (100%) rename "docs/public/about/annual-group/\346\204\233\350\250\200\350\221\211.png" => "public/about/annual-group/\346\204\233\350\250\200\350\221\211.png" (100%) rename "docs/public/about/annual-group/\346\224\276\350\257\276\345\220\216.jpg" => "public/about/annual-group/\346\224\276\350\257\276\345\220\216.jpg" (100%) rename "docs/public/about/annual-group/\346\230\245\346\227\245\345\275\261.png" => "public/about/annual-group/\346\230\245\346\227\245\345\275\261.png" (100%) rename "docs/public/about/annual-group/\346\250\261\345\205\254\351\246\206.jpeg" => "public/about/annual-group/\346\250\261\345\205\254\351\246\206.jpeg" (100%) rename "docs/public/about/annual-group/\347\247\200\347\237\245\351\231\242.jpg" => "public/about/annual-group/\347\247\200\347\237\245\351\231\242.jpg" (100%) rename "docs/public/about/annual-group/\347\273\257\346\203\263\345\244\251.jpg" => "public/about/annual-group/\347\273\257\346\203\263\345\244\251.jpg" (100%) rename "docs/public/about/annual-group/\350\207\252\346\274\253\345\215\217\346\226\260\344\270\226\347\225\214.jpeg" => "public/about/annual-group/\350\207\252\346\274\253\345\215\217\346\226\260\344\270\226\347\225\214.jpeg" (100%) rename "docs/public/about/annual-group/\350\231\271\344\271\213\345\222\262.jpg" => "public/about/annual-group/\350\231\271\344\271\213\345\222\262.jpg" (100%) rename "docs/public/about/annual-group/\350\277\246\345\213\222\345\272\225.jpg" => "public/about/annual-group/\350\277\246\345\213\222\345\272\225.jpg" (100%) rename {docs/public => public}/about/hq/2014/avatar.png (100%) rename {docs/public => public}/about/hq/2017/avatar.png (100%) rename {docs/public => public}/about/hq/2018/avatar.jpg (100%) rename {docs/public => public}/about/hq/2019/avatar.png (100%) rename {docs/public => public}/about/hq/2023/avatar.png (100%) rename {docs/public => public}/about/hq/2024/avatar.png (100%) rename {docs/public => public}/about/hq/2025/avatar.jpg (100%) rename {docs/public => public}/about/hq/2026/avatar.jpg (100%) rename {docs/public => public}/about/image-2.png (100%) rename {docs/public => public}/about/image-3.jpg (100%) rename {docs/public => public}/about/image-4.jpg (100%) rename {docs/public => public}/about/image.png (100%) rename "docs/public/about/newbie-guide/2024/2024\346\274\253\345\215\217\350\220\214\346\226\260\346\214\207\345\215\227.pdf" => "public/about/newbie-guide/2024/2024\346\274\253\345\215\217\350\220\214\346\226\260\346\214\207\345\215\227.pdf" (100%) rename "docs/public/about/newbie-guide/2025/\350\220\214\346\226\260\346\214\207\345\215\227.pdf" => "public/about/newbie-guide/2025/\350\220\214\346\226\260\346\214\207\345\215\227.pdf" (100%) rename "docs/public/about/newbie-guide/2026/2026\350\220\214\346\226\260\346\214\207\345\215\227.pdf" => "public/about/newbie-guide/2026/2026\350\220\214\346\226\260\346\214\207\345\215\227.pdf" (100%) rename {docs/public => public}/activity/2012/senbon-floor/60d38c0b7844200a4cd9b0abd07ad463.png (100%) rename {docs/public => public}/activity/2012/senbon-floor/image.png (100%) rename {docs/public => public}/activity/2012/senbon-floor/image2.png (100%) rename {docs/public => public}/activity/2012/senbon-floor/index.html (100%) rename {docs/public => public}/activity/2012/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2013/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2013/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2014/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2014/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2015/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2015/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2016/anime-screening/image.jpg (100%) rename {docs/public => public}/activity/2016/anime-screening/image.png (100%) rename {docs/public => public}/activity/2016/club-fair/announcement.png (100%) rename {docs/public => public}/activity/2016/club-fair/image-1.jpeg (100%) rename {docs/public => public}/activity/2016/club-fair/image.jpeg (100%) rename {docs/public => public}/activity/2016/halloween-graffiti/image.png (100%) rename {docs/public => public}/activity/2016/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2016/welcome-party/image-1.jpeg (100%) rename {docs/public => public}/activity/2016/welcome-party/image-2.jpeg (100%) rename {docs/public => public}/activity/2016/welcome-party/image-3.jpeg (100%) rename {docs/public => public}/activity/2016/welcome-party/image-4.jpeg (100%) rename {docs/public => public}/activity/2016/welcome-party/image.png (100%) rename "docs/public/activity/2016/winter-festival/2016\345\206\254\346\227\245\347\245\255\345\222\226\345\225\241\345\216\205.jpg" => "public/activity/2016/winter-festival/2016\345\206\254\346\227\245\347\245\255\345\222\226\345\225\241\345\216\205.jpg" (100%) rename "docs/public/activity/2016/winter-festival/2016\345\206\254\346\227\245\347\245\255\346\265\267\346\212\245.jpg" => "public/activity/2016/winter-festival/2016\345\206\254\346\227\245\347\245\255\346\265\267\346\212\245.jpg" (100%) rename "docs/public/activity/2016/winter-festival/2016\345\206\254\346\227\245\347\245\255\350\212\202\347\233\256\345\215\225.jpg" => "public/activity/2016/winter-festival/2016\345\206\254\346\227\245\347\245\255\350\212\202\347\233\256\345\215\225.jpg" (100%) rename {docs/public => public}/activity/2017/anime-screening/image-1.jpeg (100%) rename {docs/public => public}/activity/2017/anime-screening/image.jpeg (100%) rename {docs/public => public}/activity/2017/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2017/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2018/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2018/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2019/magazine/cover.jpg (100%) rename {docs/public => public}/activity/2019/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2020/magazine/cover.png (100%) rename {docs/public => public}/activity/2020/spring-meeting/mzpt-in-meeting.jpg (100%) rename {docs/public => public}/activity/2020/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2020/winter-festival/menu.jpg (100%) rename {docs/public => public}/activity/2021/magazine/cover.png (100%) rename {docs/public => public}/activity/2021/summer-festival/cover.png (100%) rename {docs/public => public}/activity/2021/summer-live/programme1.png (100%) rename {docs/public => public}/activity/2021/summer-live/programme2.png (100%) rename {docs/public => public}/activity/2022/magazine/cover.jpeg (100%) rename {docs/public => public}/activity/2022/spring-festival/cover.png (100%) rename {docs/public => public}/activity/2023/magazine/cover.png (100%) rename {docs/public => public}/activity/2023/spring-live/cover.jpeg (100%) rename {docs/public => public}/activity/2023/summer-live/schedule.jpg (100%) rename {docs/public => public}/activity/2023/winter-festival/cover.jpg (100%) rename {docs/public => public}/activity/2023/winter-festival/programme.jpg (100%) rename {docs/public => public}/activity/2023/winter-festival/publicity.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/announcement.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image-1.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image-2.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image-3.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image-4.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image-5.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image-6.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/image.jpg (100%) rename {docs/public => public}/activity/2024/club-fair/list.png (100%) rename {docs/public => public}/activity/2024/live/cover.png (100%) rename {docs/public => public}/activity/2024/live/image.png (100%) rename {docs/public => public}/activity/2024/magazine/cover.png (100%) rename {docs/public => public}/activity/2024/winter-festival/image.png (100%) rename {docs/public => public}/activity/2024/winter-festival/menu.png (100%) rename {docs/public => public}/activity/2025/game-dev/love-remains/image-2.png (100%) rename {docs/public => public}/activity/2025/game-dev/love-remains/image-3.png (100%) rename {docs/public => public}/activity/2025/game-dev/love-remains/image-4.png (100%) rename {docs/public => public}/activity/2025/game-dev/love-remains/image-5.png (100%) rename {docs/public => public}/activity/2025/game-dev/love-remains/image-6.png (100%) rename {docs/public => public}/activity/2025/game-dev/love-remains/image.png (100%) rename "docs/public/activity/2025/game-dev/\351\200\211\346\211\213\346\211\213\345\206\214.pdf" => "public/activity/2025/game-dev/\351\200\211\346\211\213\346\211\213\345\206\214.pdf" (100%) rename {docs/public => public}/activity/2025/magazine/cover.png (100%) rename {docs/public => public}/activity/2025/name-vote/1.1.jpg (100%) rename {docs/public => public}/activity/2025/name-vote/1.2.jpg (100%) rename {docs/public => public}/activity/2025/name-vote/2.jpg (100%) rename "docs/public/activity/2025/spring-festival/\346\230\245\346\227\245\345\272\206\345\205\270\346\265\267\346\212\245.png" => "public/activity/2025/spring-festival/\346\230\245\346\227\245\345\272\206\345\205\270\346\265\267\346\212\245.png" (100%) rename "docs/public/activity/2025/spring-festival/\346\230\245\346\227\245\345\272\206\345\205\270\350\212\202\347\233\256\345\215\225.png" => "public/activity/2025/spring-festival/\346\230\245\346\227\245\345\272\206\345\205\270\350\212\202\347\233\256\345\215\225.png" (100%) rename {docs/public => public}/activity/2025/summer-live/poster.png (100%) rename {docs/public => public}/activity/2026/summer-live/poster.png (100%) rename {docs/public => public}/avatars/-QuQ-.jpeg (100%) rename {docs/public => public}/avatars/72.jpg (100%) rename {docs/public => public}/avatars/86.jpg (100%) rename {docs/public => public}/avatars/ATP.jpg (100%) rename {docs/public => public}/avatars/Atelier Recittal.png (100%) rename "docs/public/avatars/C\351\205\261.jpg" => "public/avatars/C\351\205\261.jpg" (100%) rename {docs/public => public}/avatars/Darkream.png (100%) rename {docs/public => public}/avatars/DiVE.png (100%) rename {docs/public => public}/avatars/Evy.jpg (100%) rename "docs/public/avatars/InkFea \345\242\250\345\242\250\347\276\275.jpg" => "public/avatars/InkFea \345\242\250\345\242\250\347\276\275.jpg" (100%) rename {docs/public => public}/avatars/KUMA.jpg (100%) rename {docs/public => public}/avatars/Layla.jpg (100%) rename {docs/public => public}/avatars/Lion.jpg (100%) rename {docs/public => public}/avatars/Rosie.jpg (100%) rename {docs/public => public}/avatars/SRin.jpg (100%) rename {docs/public => public}/avatars/TheEscapist.jpg (100%) rename {docs/public => public}/avatars/WJ.jpg (100%) rename {docs/public => public}/avatars/YY.png (100%) rename {docs/public => public}/avatars/Yun_me.jpg (100%) rename {docs/public => public}/avatars/_placeholder.png (100%) rename {docs/public => public}/avatars/ange.jpg (100%) rename {docs/public => public}/avatars/elegy.jpg (100%) rename {docs/public => public}/avatars/narcissus.jpeg (100%) rename {docs/public => public}/avatars/scapino.jpeg (100%) rename {docs/public => public}/avatars/storm.jpeg (100%) rename {docs/public => public}/avatars/towa.jpeg (100%) rename {docs/public => public}/avatars/well.jpg (100%) rename {docs/public => public}/avatars/wweiyi.jpeg (100%) rename {docs/public => public}/avatars/yihu.jpg (100%) rename {docs/public => public}/avatars/zeit.jpeg (100%) rename "docs/public/avatars/\344\270\211\344\270\211.jpg" => "public/avatars/\344\270\211\344\270\211.jpg" (100%) rename "docs/public/avatars/\344\270\211\346\227\245.jpg" => "public/avatars/\344\270\211\346\227\245.jpg" (100%) rename "docs/public/avatars/\344\270\211\351\227\256.jpg" => "public/avatars/\344\270\211\351\227\256.jpg" (100%) rename "docs/public/avatars/\344\270\215\347\247\221\345\255\246.jpg" => "public/avatars/\344\270\215\347\247\221\345\255\246.jpg" (100%) rename "docs/public/avatars/\344\270\226\351\227\262.jpg" => "public/avatars/\344\270\226\351\227\262.jpg" (100%) rename "docs/public/avatars/\344\270\235\347\223\234\347\202\226\346\261\244.jpeg" => "public/avatars/\344\270\235\347\223\234\347\202\226\346\261\244.jpeg" (100%) rename "docs/public/avatars/\344\270\255\344\270\211\347\227\205.jpg" => "public/avatars/\344\270\255\344\270\211\347\227\205.jpg" (100%) rename "docs/public/avatars/\344\270\255\345\207\272.jpg" => "public/avatars/\344\270\255\345\207\272.jpg" (100%) rename "docs/public/avatars/\344\271\235\346\227\245.jpg" => "public/avatars/\344\271\235\346\227\245.jpg" (100%) rename "docs/public/avatars/\344\272\214\346\260\247\345\214\226\347\242\263.jpg" => "public/avatars/\344\272\214\346\260\247\345\214\226\347\242\263.jpg" (100%) rename "docs/public/avatars/\344\273\231\346\264\233.jpg" => "public/avatars/\344\273\231\346\264\233.jpg" (100%) rename "docs/public/avatars/\344\274\230\346\240\274.jpg" => "public/avatars/\344\274\230\346\240\274.jpg" (100%) rename "docs/public/avatars/\344\274\264\345\244\217.jpeg" => "public/avatars/\344\274\264\345\244\217.jpeg" (100%) rename "docs/public/avatars/\345\206\254\351\230\263.jpg" => "public/avatars/\345\206\254\351\230\263.jpg" (100%) rename "docs/public/avatars/\345\206\260\350\215\267.jpg" => "public/avatars/\345\206\260\350\215\267.jpg" (100%) rename "docs/public/avatars/\345\206\267\345\207\235.jpg" => "public/avatars/\345\206\267\345\207\235.jpg" (100%) rename "docs/public/avatars/\345\207\233.jpg" => "public/avatars/\345\207\233.jpg" (100%) rename "docs/public/avatars/\345\210\235\346\230\245.png" => "public/avatars/\345\210\235\346\230\245.png" (100%) rename "docs/public/avatars/\345\212\253\347\201\260.jpg" => "public/avatars/\345\212\253\347\201\260.jpg" (100%) rename "docs/public/avatars/\345\214\205\345\255\220.jpg" => "public/avatars/\345\214\205\345\255\220.jpg" (100%) rename "docs/public/avatars/\345\214\227\345\244\247\351\227\250\347\232\204\345\244\251\347\201\276.jpg" => "public/avatars/\345\214\227\345\244\247\351\227\250\347\232\204\345\244\251\347\201\276.jpg" (100%) rename "docs/public/avatars/\345\214\227\346\264\233.jpeg" => "public/avatars/\345\214\227\346\264\233.jpeg" (100%) rename "docs/public/avatars/\345\215\203\351\201\207.jpg" => "public/avatars/\345\215\203\351\201\207.jpg" (100%) rename "docs/public/avatars/\345\220\215\345\255\227.jpeg" => "public/avatars/\345\220\215\345\255\227.jpeg" (100%) rename "docs/public/avatars/\345\220\254\346\265\267.jpg" => "public/avatars/\345\220\254\346\265\267.jpg" (100%) rename "docs/public/avatars/\345\226\265\345\260\221.jpg" => "public/avatars/\345\226\265\345\260\221.jpg" (100%) rename "docs/public/avatars/\345\234\206\351\205\222.jpg" => "public/avatars/\345\234\206\351\205\222.jpg" (100%) rename "docs/public/avatars/\345\234\237\345\267\235.jpeg" => "public/avatars/\345\234\237\345\267\235.jpeg" (100%) rename "docs/public/avatars/\345\237\203\345\205\260\344\274\212\344\272\232-Elenia.jpeg" => "public/avatars/\345\237\203\345\205\260\344\274\212\344\272\232-Elenia.jpeg" (100%) rename "docs/public/avatars/\345\243\260\347\201\265.jpg" => "public/avatars/\345\243\260\347\201\265.jpg" (100%) rename "docs/public/avatars/\345\243\271\345\200\213.jpg" => "public/avatars/\345\243\271\345\200\213.jpg" (100%) rename "docs/public/avatars/\345\244\232\347\261\263\350\257\272\351\252\250\347\211\214.png" => "public/avatars/\345\244\232\347\261\263\350\257\272\351\252\250\347\211\214.png" (100%) rename "docs/public/avatars/\345\244\247\347\227\264.jpg" => "public/avatars/\345\244\247\347\227\264.jpg" (100%) rename "docs/public/avatars/\345\244\247\347\262\275.jpg" => "public/avatars/\345\244\247\347\262\275.jpg" (100%) rename "docs/public/avatars/\345\244\251\345\207\211\345\245\275\344\270\252\347\247\213.png" => "public/avatars/\345\244\251\345\207\211\345\245\275\344\270\252\347\247\213.png" (100%) rename "docs/public/avatars/\345\244\251\347\213\227.jpg" => "public/avatars/\345\244\251\347\213\227.jpg" (100%) rename "docs/public/avatars/\345\244\267\350\276\260.jpg" => "public/avatars/\345\244\267\350\276\260.jpg" (100%) rename "docs/public/avatars/\345\247\213\345\215\216.jpeg" => "public/avatars/\345\247\213\345\215\216.jpeg" (100%) rename "docs/public/avatars/\345\255\220\351\235\236\347\276\275.jpg" => "public/avatars/\345\255\220\351\235\236\347\276\275.jpg" (100%) rename "docs/public/avatars/\345\255\246\345\276\222.jpg" => "public/avatars/\345\255\246\345\276\222.jpg" (100%) rename "docs/public/avatars/\345\256\211\346\200\241.jpg" => "public/avatars/\345\256\211\346\200\241.jpg" (100%) rename "docs/public/avatars/\345\256\211\350\275\251.jpeg" => "public/avatars/\345\256\211\350\275\251.jpeg" (100%) rename "docs/public/avatars/\345\260\217\345\244\251.jpg" => "public/avatars/\345\260\217\345\244\251.jpg" (100%) rename "docs/public/avatars/\345\262\232\346\233\246.jpeg" => "public/avatars/\345\262\232\346\233\246.jpeg" (100%) rename "docs/public/avatars/\345\271\262\345\220\233.jpeg" => "public/avatars/\345\271\262\345\220\233.jpeg" (100%) rename "docs/public/avatars/\345\271\263\346\235\277.jpeg" => "public/avatars/\345\271\263\346\235\277.jpeg" (100%) rename "docs/public/avatars/\345\272\227\351\225\277.jpeg" => "public/avatars/\345\272\227\351\225\277.jpeg" (100%) rename "docs/public/avatars/\345\274\200\350\267\214.png" => "public/avatars/\345\274\200\350\267\214.png" (100%) rename "docs/public/avatars/\345\275\261\344\270\264\345\205\211.jpg" => "public/avatars/\345\275\261\344\270\264\345\205\211.jpg" (100%) rename "docs/public/avatars/\345\275\261\351\273\216.jpg" => "public/avatars/\345\275\261\351\273\216.jpg" (100%) rename "docs/public/avatars/\346\202\240\346\242\246.jpeg" => "public/avatars/\346\202\240\346\242\246.jpeg" (100%) rename "docs/public/avatars/\346\216\211\347\272\277.jpg" => "public/avatars/\346\216\211\347\272\277.jpg" (100%) rename "docs/public/avatars/\346\226\271\345\235\227.jpg" => "public/avatars/\346\226\271\345\235\227.jpg" (100%) rename "docs/public/avatars/\346\230\245\351\230\201\344\270\213.jpg" => "public/avatars/\346\230\245\351\230\201\344\270\213.jpg" (100%) rename "docs/public/avatars/\346\230\255\346\230\255.jpg" => "public/avatars/\346\230\255\346\230\255.jpg" (100%) rename "docs/public/avatars/\346\231\227\351\205\261.jpg" => "public/avatars/\346\231\227\351\205\261.jpg" (100%) rename "docs/public/avatars/\346\235\202\351\237\263.jpg" => "public/avatars/\346\235\202\351\237\263.jpg" (100%) rename "docs/public/avatars/\346\235\216\345\255\220.jpg" => "public/avatars/\346\235\216\345\255\220.jpg" (100%) rename "docs/public/avatars/\346\240\221\346\236\235.jpeg" => "public/avatars/\346\240\221\346\236\235.jpeg" (100%) rename "docs/public/avatars/\346\240\221\347\232\256.jpg" => "public/avatars/\346\240\221\347\232\256.jpg" (100%) rename "docs/public/avatars/\346\242\250\347\264\253.png" => "public/avatars/\346\242\250\347\264\253.png" (100%) rename "docs/public/avatars/\346\244\205\345\255\220.jpeg" => "public/avatars/\346\244\205\345\255\220.jpeg" (100%) rename "docs/public/avatars/\346\244\277\351\233\252.jpeg" => "public/avatars/\346\244\277\351\233\252.jpeg" (100%) rename "docs/public/avatars/\346\247\221\350\217\214.jpg" => "public/avatars/\346\247\221\350\217\214.jpg" (100%) rename "docs/public/avatars/\346\251\230\344\270\203.jpg" => "public/avatars/\346\251\230\344\270\203.jpg" (100%) rename "docs/public/avatars/\346\255\243\351\235\242.jpeg" => "public/avatars/\346\255\243\351\235\242.jpeg" (100%) rename "docs/public/avatars/\346\256\213\345\277\265.jpg" => "public/avatars/\346\256\213\345\277\265.jpg" (100%) rename "docs/public/avatars/\346\261\220\345\256\253.jpeg" => "public/avatars/\346\261\220\345\256\253.jpeg" (100%) rename "docs/public/avatars/\346\264\233\346\243\240.jpg" => "public/avatars/\346\264\233\346\243\240.jpg" (100%) rename "docs/public/avatars/\346\265\201\346\276\234.jpg" => "public/avatars/\346\265\201\346\276\234.jpg" (100%) rename "docs/public/avatars/\346\265\201\346\276\234_2.jpg" => "public/avatars/\346\265\201\346\276\234_2.jpg" (100%) rename "docs/public/avatars/\346\265\267\350\261\271.jpg" => "public/avatars/\346\265\267\350\261\271.jpg" (100%) rename "docs/public/avatars/\347\201\260\347\201\260.jpeg" => "public/avatars/\347\201\260\347\201\260.jpeg" (100%) rename "docs/public/avatars/\347\203\247\347\203\244.jpeg" => "public/avatars/\347\203\247\347\203\244.jpeg" (100%) rename "docs/public/avatars/\347\210\261\345\247\254.jpg" => "public/avatars/\347\210\261\345\247\254.jpg" (100%) rename "docs/public/avatars/\347\216\253\351\237\263.jpg" => "public/avatars/\347\216\253\351\237\263.jpg" (100%) rename "docs/public/avatars/\347\223\234.png" => "public/avatars/\347\223\234.png" (100%) rename "docs/public/avatars/\347\224\265\351\224\257.jpg" => "public/avatars/\347\224\265\351\224\257.jpg" (100%) rename "docs/public/avatars/\347\226\257\345\205\224.jpeg" => "public/avatars/\347\226\257\345\205\224.jpeg" (100%) rename "docs/public/avatars/\347\234\240\345\255\220.jpg" => "public/avatars/\347\234\240\345\255\220.jpg" (100%) rename "docs/public/avatars/\347\240\214\346\247\220.jpg" => "public/avatars/\347\240\214\346\247\220.jpg" (100%) rename "docs/public/avatars/\347\247\213\345\225\276.jpg" => "public/avatars/\347\247\213\345\225\276.jpg" (100%) rename "docs/public/avatars/\347\247\246\346\267\256.jpg" => "public/avatars/\347\247\246\346\267\256.jpg" (100%) rename "docs/public/avatars/\347\251\271\345\246\271.jpg" => "public/avatars/\347\251\271\345\246\271.jpg" (100%) rename "docs/public/avatars/\347\261\263\346\226\257\347\211\271.jpg" => "public/avatars/\347\261\263\346\226\257\347\211\271.jpg" (100%) rename "docs/public/avatars/\347\272\242\351\262\244.jpg" => "public/avatars/\347\272\242\351\262\244.jpg" (100%) rename "docs/public/avatars/\347\272\261\346\234\210Satsuki.jpeg" => "public/avatars/\347\272\261\346\234\210Satsuki.jpeg" (100%) rename "docs/public/avatars/\347\272\261\346\251\231\351\235\210.jpeg" => "public/avatars/\347\272\261\346\251\231\351\235\210.jpeg" (100%) rename "docs/public/avatars/\347\275\252\346\201\266.jpg" => "public/avatars/\347\275\252\346\201\266.jpg" (100%) rename "docs/public/avatars/\347\276\216\345\246\210.jpg" => "public/avatars/\347\276\216\345\246\210.jpg" (100%) rename "docs/public/avatars/\350\214\202\346\241\221.jpeg" => "public/avatars/\350\214\202\346\241\221.jpeg" (100%) rename "docs/public/avatars/\350\214\266\345\255\220.jpg" => "public/avatars/\350\214\266\345\255\220.jpg" (100%) rename "docs/public/avatars/\350\221\221\350\217\262.jpeg" => "public/avatars/\350\221\221\350\217\262.jpeg" (100%) rename "docs/public/avatars/\350\245\277\345\212\240\345\260\224.jpeg" => "public/avatars/\350\245\277\345\212\240\345\260\224.jpeg" (100%) rename "docs/public/avatars/\351\223\234\351\274\223.jpg" => "public/avatars/\351\223\234\351\274\223.jpg" (100%) rename "docs/public/avatars/\351\230\277\345\274\204.jpg" => "public/avatars/\351\230\277\345\274\204.jpg" (100%) rename "docs/public/avatars/\351\243\216\345\217\210\345\215\203\345\244\234.jpeg" => "public/avatars/\351\243\216\345\217\210\345\215\203\345\244\234.jpeg" (100%) rename "docs/public/avatars/\351\243\216\346\262\211\347\231\275.jpeg" => "public/avatars/\351\243\216\346\262\211\347\231\275.jpeg" (100%) rename "docs/public/avatars/\351\252\221\345\243\253.jpg" => "public/avatars/\351\252\221\345\243\253.jpg" (100%) rename "docs/public/avatars/\351\254\274\347\233\256.jpg" => "public/avatars/\351\254\274\347\233\256.jpg" (100%) rename "docs/public/avatars/\351\255\224\347\216\213.jpg" => "public/avatars/\351\255\224\347\216\213.jpg" (100%) rename "docs/public/avatars/\351\270\255\346\242\250.jpg" => "public/avatars/\351\270\255\346\242\250.jpg" (100%) rename "docs/public/avatars/\351\273\221\347\276\275.jpg" => "public/avatars/\351\273\221\347\276\275.jpg" (100%) rename "docs/public/avatars/\351\273\221\347\276\275\344\273\231\346\264\233.png" => "public/avatars/\351\273\221\347\276\275\344\273\231\346\264\233.png" (100%) rename "docs/public/avatars/\351\276\231\344\272\225.jpeg" => "public/avatars/\351\276\231\344\272\225.jpeg" (100%) rename "docs/public/avatars/\351\276\231\350\231\276.jpg" => "public/avatars/\351\276\231\350\231\276.jpg" (100%) rename "docs/public/department/2024\346\274\253\345\215\217\351\203\250\351\227\250\344\273\213\347\273\215.pdf" => "public/department/2024\346\274\253\345\215\217\351\203\250\351\227\250\344\273\213\347\273\215.pdf" (100%) rename "docs/public/department/2025\351\203\250\351\227\250\344\273\213\347\273\215.pdf" => "public/department/2025\351\203\250\351\227\250\344\273\213\347\273\215.pdf" (100%) rename "docs/public/department/2026\346\274\253\345\215\217\351\203\250\351\227\250\344\273\213\347\273\215.pdf" => "public/department/2026\346\274\253\345\215\217\351\203\250\351\227\250\344\273\213\347\273\215.pdf" (100%) rename {docs/public => public}/department/band/azuretide/logo.jpg (100%) rename {docs/public => public}/department/band/daybreak/logo.jpg (100%) rename {docs/public => public}/department/band/fireflyalgorithm/logo.jpg (100%) rename {docs/public => public}/department/band/logo.jpeg (100%) rename {docs/public => public}/department/band/natsunagi/logo.png (100%) rename {docs/public => public}/department/band/orchestra/logo.jpg (100%) rename {docs/public => public}/department/band/void/logo1.jpeg (100%) rename {docs/public => public}/department/band/void/logo2.jpeg (100%) rename {docs/public => public}/department/band/yozakura/logo.jpg (100%) rename {docs/public => public}/department/va/image.png (100%) rename {docs/public => public}/department/va/isu.png (100%) rename {docs/public => public}/department/va/k.png (100%) rename {docs/public => public}/department/va/restart/logo.png (100%) rename "docs/public/department/va/restart/\344\272\224\345\215\201\346\250\261.jpg" => "public/department/va/restart/\344\272\224\345\215\201\346\250\261.jpg" (100%) rename "docs/public/department/va/restart/\344\272\224\345\215\201\346\250\261\345\267\245\344\275\234\345\256\244logo.jpg" => "public/department/va/restart/\344\272\224\345\215\201\346\250\261\345\267\245\344\275\234\345\256\244logo.jpg" (100%) rename {docs/public => public}/department/vtb/ax001/apparence/image-2.png (100%) rename {docs/public => public}/department/vtb/ax001/apparence/image-3.png (100%) rename {docs/public => public}/department/vtb/ax001/apparence/image-4.png (100%) rename {docs/public => public}/department/vtb/ax001/apparence/image-5.png (100%) rename {docs/public => public}/department/vtb/ax001/apparence/image-6.jpg (100%) rename {docs/public => public}/department/vtb/ax001/apparence/image.png (100%) rename {docs/public => public}/department/vtb/ax001/history/image.jpeg (100%) rename {docs/public => public}/department/vtb/ax001/image-2.jpg (100%) rename {docs/public => public}/department/vtb/ax001/image.png (100%) rename {docs/public => public}/department/vtb/ax002/image.png (100%) rename {docs/public => public}/favicon.ico (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/group.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster01.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster02.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster03.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster04.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster05.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster06.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster07.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster08.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster09.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster10.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster11.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster12.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster13.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster14.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster15.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster16.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster17.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster18.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster19.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster20.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster21.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster22.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster23.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster24.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster25.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster26.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster27.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster28.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster29.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster30.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster31.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster32.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster33.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster34.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster35.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster36.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster37.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster38.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster39.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster40.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster41.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster42.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster43.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster44.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster45.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster46.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster47.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster48.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster49.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster50.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster51.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster52.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster53.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster54.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster55.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster56.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster57.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster58.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster59.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster60.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster61.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster62.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster63.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster64.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster65.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster66.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster67.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster68.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster69.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster70.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster71.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster72.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster73.jpg (100%) rename {docs/public => public}/group/ani-key/activity/apr-2026/posters/poster74.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/group.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster01.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster02.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster03.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster04.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster05.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster06.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster07.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster08.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster09.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster10.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster11.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster12.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster13.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster14.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster15.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster16.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster17.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster18.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster19.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster20.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster21.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster22.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster23.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster24.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster25.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster26.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster27.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster28.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster29.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster30.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster31.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster32.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster33.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster34.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster35.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster36.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster37.jpg (100%) rename {docs/public => public}/group/ani-key/activity/jan-2026/posters/poster38.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/banner.jpeg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row02.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row03.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row04.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row05.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row06.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row07.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row08.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row09.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row10.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row11.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row12.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row13.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row14.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row15.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row16.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row17.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row18.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row19.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row20.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row21.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row22.png (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row23.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row24.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row25.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row26.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row27.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row28.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row29.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row30.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row31.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row32.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row33.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row34.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row35.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row36.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row37.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row38.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row39.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row40.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row41.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row42.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row43.png (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row44.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row45.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row46.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row47.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row48.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row49.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row50.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row51.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row52.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row53.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row54.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row55.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row56.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row57.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row58.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row58_2.jpg (100%) rename {docs/public => public}/group/ani-key/activity/warm-winter-2025/posters/row59.jpg (100%) rename "docs/public/group/ani-key/activity/\345\215\201\346\234\210\346\226\260\347\225\252\351\211\264\350\265\217.jpg" => "public/group/ani-key/activity/\345\215\201\346\234\210\346\226\260\347\225\252\351\211\264\350\265\217.jpg" (100%) rename "docs/public/group/ani-key/activity/\346\232\226\345\206\254\350\214\266\344\274\232\357\274\210\345\244\264\345\203\217\347\211\210full\357\274\211.jpg" => "public/group/ani-key/activity/\346\232\226\345\206\254\350\214\266\344\274\232\357\274\210\345\244\264\345\203\217\347\211\210full\357\274\211.jpg" (100%) rename {docs/public => public}/group/ani-key/banner.png (100%) rename {docs/public => public}/group/ani-key/logo.jpeg (100%) rename {docs/public => public}/group/ani-key/logo2.jpeg (100%) rename {docs/public => public}/group/ani-key/logo3.jpeg (100%) rename {docs/public => public}/group/ani-key/participants/_placeholder.svg (100%) rename {docs/public => public}/group/dry-humor/logo.jpeg (100%) rename {docs/public => public}/group/galgame/activity/12wp-2023-result.jpeg (100%) rename {docs/public => public}/group/galgame/activity/12wp.png (100%) rename {docs/public => public}/group/galgame/activity/2024wf.png (100%) rename {docs/public => public}/group/galgame/activity/2025fes.png (100%) rename {docs/public => public}/group/galgame/activity/cos.png (100%) rename {docs/public => public}/group/galgame/activity/impart.png (100%) rename {docs/public => public}/group/galgame/activity/karaoke.png (100%) rename {docs/public => public}/group/galgame/logo.png (100%) rename {docs/public => public}/group/galgame/sakuranouta.png (100%) rename {docs/public => public}/group/infinity-nikki/infinity-nikki.png (100%) rename {docs/public => public}/group/infinity-nikki/logo.jpg (100%) rename {docs/public => public}/group/infinity-nikki/styles.css (100%) rename {docs/public => public}/group/touhou-club/dinner.jpeg (100%) rename {docs/public => public}/group/touhou-club/fumo.jpeg (100%) rename {docs/public => public}/group/touhou-club/hyly-logo.jpeg (100%) rename {docs/public => public}/group/touhou-club/logo.jpeg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-1/activity-1.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-1/activity-2.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-1/booth.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-1/poster.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-1/product.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/arch.png (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/group-intro.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/island.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/poster.png (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/preview.png (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/product.png (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/puzzle-terminal.jpg (100%) rename {docs/public => public}/group/touhou-club/swallow-stone/activity-2/recording.mp4 (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/karaoke/1.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/karaoke/2.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/karaoke/3.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/live-watching/mm2021-1.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/live-watching/mm2021-2.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/live-watching/mm2021.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/live-watching/mm2024.jpeg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/live-watching/mwy2021.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/miku16th/1.jpeg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/miku16th/2.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/miku16th/3.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/spring2023/0.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/spring2023/1.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/spring2023/2.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/spring2023/3.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/spring2023/4.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/spring2023/5.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/winter2023/1.jpeg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/winter2023/2.jpeg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/winter2023/3.png (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/winter2023/4.png (100%) rename {docs/public => public}/group/vocaloid-utau-fans/events/whudays/winter2024/1.jpeg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/logo.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/2023leaflet-b.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/2023leaflet-f.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/happi.png (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/jptour.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/miku14th.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/mm2022.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/mm2024-piapro.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/mm2024.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/remeamiku/orangeblossom.jpg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/sns/bilibili.svg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/sns/github.svg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/members/sns/pixiv.svg (100%) rename {docs/public => public}/group/vocaloid-utau-fans/styles.css (100%) rename {docs/public => public}/llms.txt (100%) rename {docs/public => public}/message-box/quq/1.jpg (100%) rename "docs/public/message-box/quq/qq-group-operation/group-migration/\351\200\232\347\237\245\347\276\244\350\277\201\347\247\273\350\257\264\346\230\216.pdf" => "public/message-box/quq/qq-group-operation/group-migration/\351\200\232\347\237\245\347\276\244\350\277\201\347\247\273\350\257\264\346\230\216.pdf" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2071.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2071.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20710.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20710.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20711.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20711.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20712.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20712.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20713.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\20713.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2072.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2072.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2073.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2073.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2074.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2074.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2075.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2075.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2076.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2076.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2077.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2077.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2078.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2078.png" (100%) rename "docs/public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2079.png" => "public/message-box/\347\272\261\346\251\231\351\235\210/band-history/\345\233\276\347\211\2079.png" (100%) rename {docs/public => public}/pdfjs/LICENSE (100%) rename {docs/public => public}/pdfjs/build/pdf.mjs (100%) rename {docs/public => public}/pdfjs/build/pdf.mjs.map (100%) rename {docs/public => public}/pdfjs/build/pdf.sandbox.mjs (100%) rename {docs/public => public}/pdfjs/build/pdf.sandbox.mjs.map (100%) rename {docs/public => public}/pdfjs/build/pdf.worker.mjs (100%) rename {docs/public => public}/pdfjs/build/pdf.worker.mjs.map (100%) rename {docs/public => public}/pdfjs/web/cmaps/78-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Add-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Add-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Add-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Add-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-0.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-1.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-3.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-4.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-5.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/B5pc-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/B5pc-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/CNS-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/CNS-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/CNS1-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/CNS1-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/CNS2-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/CNS2-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/ETHK-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/ETHK-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/ETen-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/ETen-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/ETenms-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/ETenms-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Ext-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Ext-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GB-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GB-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GB-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GB-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBK-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBK-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBK2K-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBK2K-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBKp-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBKp-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBT-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBT-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBT-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBT-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBpc-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/GBpc-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKdla-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKdla-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKdlb-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKdlb-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKgccs-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKgccs-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKm314-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKm314-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKm471-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKm471-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKscs-B5-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/HKscs-B5-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Hankaku.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Hiragana.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSC-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSC-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSC-Johab-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSC-Johab-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSCms-UHC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSCms-UHC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Katakana.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/LICENSE (100%) rename {docs/public => public}/pdfjs/web/cmaps/NWP-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/NWP-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/RKSJ-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/RKSJ-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/Roman.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/V.bcmap (100%) rename {docs/public => public}/pdfjs/web/cmaps/WP-Symbol.bcmap (100%) rename {docs/public => public}/pdfjs/web/compressed.tracemonkey-pldi-09.pdf (100%) rename {docs/public => public}/pdfjs/web/debugger.css (100%) rename {docs/public => public}/pdfjs/web/debugger.mjs (100%) rename {docs/public => public}/pdfjs/web/images/altText_add.svg (100%) rename {docs/public => public}/pdfjs/web/images/altText_disclaimer.svg (100%) rename {docs/public => public}/pdfjs/web/images/altText_done.svg (100%) rename {docs/public => public}/pdfjs/web/images/altText_spinner.svg (100%) rename {docs/public => public}/pdfjs/web/images/altText_warning.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-check.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-comment.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-help.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-insert.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-key.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-newparagraph.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-noicon.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-note.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-paperclip.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-paragraph.svg (100%) rename {docs/public => public}/pdfjs/web/images/annotation-pushpin.svg (100%) rename {docs/public => public}/pdfjs/web/images/cursor-editorFreeHighlight.svg (100%) rename {docs/public => public}/pdfjs/web/images/cursor-editorFreeText.svg (100%) rename {docs/public => public}/pdfjs/web/images/cursor-editorInk.svg (100%) rename {docs/public => public}/pdfjs/web/images/cursor-editorTextHighlight.svg (100%) rename {docs/public => public}/pdfjs/web/images/editor-toolbar-delete.svg (100%) rename {docs/public => public}/pdfjs/web/images/findbarButton-next.svg (100%) rename {docs/public => public}/pdfjs/web/images/findbarButton-previous.svg (100%) rename {docs/public => public}/pdfjs/web/images/gv-toolbarButton-download.svg (100%) rename {docs/public => public}/pdfjs/web/images/loading-icon.gif (100%) rename {docs/public => public}/pdfjs/web/images/loading.svg (100%) rename {docs/public => public}/pdfjs/web/images/messageBar_closingButton.svg (100%) rename {docs/public => public}/pdfjs/web/images/messageBar_warning.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-firstPage.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-handTool.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-lastPage.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-selectTool.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg (100%) rename {docs/public => public}/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-bookmark.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-currentOutlineItem.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-download.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-editorFreeText.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-editorHighlight.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-editorInk.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-editorStamp.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-menuArrow.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-openFile.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-pageDown.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-pageUp.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-presentationMode.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-print.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-search.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-sidebarToggle.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-viewAttachments.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-viewLayers.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-viewOutline.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-viewThumbnail.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-zoomIn.svg (100%) rename {docs/public => public}/pdfjs/web/images/toolbarButton-zoomOut.svg (100%) rename {docs/public => public}/pdfjs/web/images/treeitem-collapsed.svg (100%) rename {docs/public => public}/pdfjs/web/images/treeitem-expanded.svg (100%) rename {docs/public => public}/pdfjs/web/locale/ach/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/af/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/an/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ar/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ast/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/az/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/be/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/bg/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/bn/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/bo/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/br/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/brx/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/bs/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ca/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/cak/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ckb/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/cs/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/cy/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/da/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/de/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/dsb/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/el/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/en-CA/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/en-GB/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/en-US/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/eo/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/es-AR/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/es-CL/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/es-ES/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/es-MX/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/et/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/eu/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/fa/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ff/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/fi/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/fr/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/fur/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/fy-NL/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ga-IE/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/gd/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/gl/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/gn/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/gu-IN/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/he/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/hi-IN/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/hr/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/hsb/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/hu/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/hy-AM/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/hye/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ia/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/id/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/is/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/it/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ja/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ka/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/kab/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/kk/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/km/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/kn/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ko/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/lij/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/lo/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/locale.json (100%) rename {docs/public => public}/pdfjs/web/locale/lt/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ltg/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/lv/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/meh/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/mk/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/mr/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ms/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/my/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/nb-NO/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ne-NP/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/nl/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/nn-NO/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/oc/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/pa-IN/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/pl/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/pt-BR/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/pt-PT/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/rm/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ro/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ru/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sat/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sc/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/scn/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sco/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/si/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sk/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/skr/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sl/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/son/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sq/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sr/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/sv-SE/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/szl/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ta/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/te/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/tg/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/th/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/tl/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/tr/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/trs/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/uk/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/ur/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/uz/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/vi/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/wo/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/xh/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/zh-CN/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/locale/zh-TW/viewer.ftl (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitDingbats.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitFixed.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitFixedBold.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitSerif.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitSerifBold.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/FoxitSymbol.pfb (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/LICENSE_FOXIT (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/LICENSE_LIBERATION (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf (100%) rename {docs/public => public}/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf (100%) rename {docs/public => public}/pdfjs/web/viewer.css (100%) rename {docs/public => public}/pdfjs/web/viewer.html (100%) rename {docs/public => public}/pdfjs/web/viewer.mjs (100%) rename {docs/public => public}/pdfjs/web/viewer.mjs.map (100%) rename {docs/public => public}/robots.txt (100%) create mode 100644 scripts/verify-export.mjs create mode 100644 source.config.ts create mode 100644 tsconfig.json diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 54a7695..65cab28 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,90 +1,62 @@ name: Deploy Pages -# 触发条件,main分支被修改后 on: push: branches: [main] - # pull_request: - # branches: [main] - - # 支持手动在工作流上触发 + pull_request: + branches: [main] workflow_dispatch: -# 设置时区 env: TZ: Asia/Shanghai + NEXT_TELEMETRY_DISABLED: 1 -# 权限设置 permissions: - # 允许读取仓库内容的权限。 contents: read - # 允许写入 GitHub Pages 的权限。 - pages: write - # 允许写入 id-token 的权限。 - id-token: write -# 并发控制配置 concurrency: - group: pages - cancel-in-progress: false + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} -# 定义执行任务 jobs: - # 构建任务 build: - runs-on: ubuntu-latest - - # node v24 运行 - strategy: - matrix: - node-version: [24] - steps: - # 拉取代码 - - name: Checkout - uses: actions/checkout@v3 + - name: Checkout with complete page history + uses: actions/checkout@v4 with: - # 保留 Git 信息 fetch-depth: 0 - - # 设置使用 Node.js 版本 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - uses: pnpm/action-setup@v4 - name: Install pnpm + - name: Set up pnpm + uses: pnpm/action-setup@v4 with: - version: 11 + version: 11.19.0 run_install: false - - # 安装依赖 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: pnpm - name: Install dependencies run: pnpm install --frozen-lockfile - - # 构建项目 - - name: Build blog project - run: | - echo ${{ github.workspace }} - pnpm build - - # 上传 VitePress 构建产物,用于后续部署 - # 不经 Jekyll 处理(dist/.nojekyll 已禁用),避免下划线开头的文件被丢弃 - - name: Upload artifact + - name: Check types, search targets and static output + run: pnpm check + - name: Upload GitHub Pages artifact + if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' uses: actions/upload-pages-artifact@v3 with: - path: ./docs/.vitepress/dist + path: ./out - # 部署任务 deploy: + if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' + needs: build + permissions: + pages: write + id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest - needs: build steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index ce7ca6d..6f47bc5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,11 @@ -node_modules -dist -cache -.temp -.DS_Store \ No newline at end of file +node_modules/ +dist/ +cache/ +.temp/ +.DS_Store +.next/ +.source/ +out/ +*.tsbuildinfo +next-env.d.ts +.env*.local diff --git a/AGENTS.md b/AGENTS.md index 692fbf7..c2ad802 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,56 +1,33 @@ # AGENTS.md -面向 AI agent 的仓库维护说明。人类投稿者请看站点[贡献指南](https://whudays.org/maintainer/contributing)。 +武汉大学动漫协会(WHUDAYS)历史存档站。Fumadocs + Next.js + React;完整静态导出部署至 GitHub Pages,正式域名 `whudays.org`。 -## 项目 +## 硬性约束 -武汉大学动漫协会(武大漫协 / WHUDAYS)社团历史存档站。[VitePress](https://vitepress.dev/) 静态站,GitHub Pages 部署,正式域名 `whudays.org`。 +1. 站内链接用绝对路径,例如 `/group/ani-key/`;不要使用相对链接。构建的死链检查失败时不能提交。 +2. 新增页面需同步 `lib/navigation.json` 对应分区侧栏;子分区按最长路径匹配,不能覆盖丢失。 +3. 改动后运行 `pnpm check`,确保类型检查和完整构建通过。 +4. Commit 不要带 AI 的 Co-Authors。Commit message 使用中文并说明原因。 +5. 不能删除或改名历史附件、中文 URL、旧锚点或独立 HTML 存档。变更时必须先解释兼容方案。 -- 内容源在 `docs/`,VitePress 配置在 `docs/.vitepress/config.js` -- 本地预览 `pnpm dev`,构建 `pnpm build` +## 内容与资源 -## 硬性约束(最易违反,务必遵守) +- 内容在 `docs/<区域>/**/*.mdx`;区域为 activity、about、department、group、message-box、maintainer +- 图片、附件和独立 HTML 存档直接维护在根目录 `public/`,用根绝对路径引用;例如 `public/activity/2024/x.jpg` → `/activity/2024/x.jpg` +- 年份为学年,例如 2024 指 2024.6–2025.6,与干部任期一致 +- 内容页面使用无 `.html` 后缀的地址;独立 HTML 存档保持原地址 +- 标题锚点沿用旧规则;添加显式锚点使用 Fumadocs 支持的 `[#anchor]` -1. **站内链接用绝对路径**(`/group/...`),禁用相对路径。构建期有死链检查,失效链接会让 `pnpm build` 失败、阻断部署。 -2. **新增页面必须同步侧边栏**:在 `docs/.vitepress/config.js` 的 `themeConfig.sidebar` 对应区域手动登记,否则页面不出现在导航。 -3. **改动后跑 `pnpm build` 验证**能通过再提交。 -4. **commit 不要带 AI 的 Co-Authors**——这是社区硬性规矩,带了会被拒。 -5. commit message 用中文,描述清楚"为什么"。 +## React / MDX -## 目录与资源约定 +- `ChatMessage`、`MemberCard`、`TeamMembers`、`TeamPage`、`TeamPageTitle`、`TeamPageSection`、`Badge`、`Callout` 已全局注册 +- 组件支持服务器渲染,不再依赖 Vue `ClientOnly`;保留的同名兼容组件会直接输出子内容 +- JavaScript 变量用 `export const`;动态属性用 `avatar={avatarOf('名字')}`;不能使用 Vue `:prop`、` + + ; +} diff --git a/app/markdown/[...slug]/route.ts b/app/markdown/[...slug]/route.ts new file mode 100644 index 0000000..cda5176 --- /dev/null +++ b/app/markdown/[...slug]/route.ts @@ -0,0 +1,20 @@ +import { source, getMarkdownPath } from '@/lib/source'; + +export const dynamic = 'force-static'; +export const dynamicParams = false; + +export function generateStaticParams() { + return source.getPages().map(page => ({ + slug: getMarkdownPath(page.path).slice('/markdown/'.length).split('/').map(decodeURIComponent), + })); +} + +export async function GET(_request: Request, { params }: { params: Promise<{ slug: string[] }> }) { + const { slug } = await params; + const requestedPath = `/markdown/${slug.join('/')}`; + const page = source.getPages().find(page => getMarkdownPath(page.path) === requestedPath); + if (!page) return new Response('Not found', { status: 404 }); + return new Response(await page.data.getText('raw'), { + headers: { 'Content-Type': 'text/plain; charset=utf-8' }, + }); +} diff --git a/app/not-found.tsx b/app/not-found.tsx new file mode 100644 index 0000000..b4672e9 --- /dev/null +++ b/app/not-found.tsx @@ -0,0 +1,5 @@ +import { HomeLayout } from '@fumadocs/base-ui/layouts/home'; +import { baseOptions } from '@/lib/layout.shared'; +export default function NotFound() { + return

404

页面不存在

可以使用站内搜索查找活动或资料

返回首页
; +} diff --git a/app/search-index.json/route.ts b/app/search-index.json/route.ts new file mode 100644 index 0000000..7ea734d --- /dev/null +++ b/app/search-index.json/route.ts @@ -0,0 +1,26 @@ +import { createSearchTokenizer } from '@/lib/search-tokenizer'; +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; +import { collectComponentText } from '@/lib/search-component-text.mjs'; + +export const dynamic = 'force-static'; +export const revalidate = false; +export async function GET() { + const api = createFromSource(source, { + tokenizer: createSearchTokenizer(), + buildIndex(page) { + const text = collectComponentText(page.data._exports); + return { + id: page.url, + url: page.url, + title: page.data.title, + description: page.data.description, + structuredData: { + ...page.data.structuredData, + contents: [...page.data.structuredData.contents, ...text], + }, + }; + }, + }); + return api.staticGET(); +} diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 0000000..933d03a --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,16 @@ +import type { MetadataRoute } from 'next'; +import { source, getCanonicalPath } from '@/lib/source'; +import { readPageHistory } from '@/lib/git-history.mjs'; +import { site } from '@/lib/site'; + +export const dynamic = 'force-static'; + +export default function sitemap(): MetadataRoute.Sitemap { + return source.getPages().map(page => { + const lastModified = readPageHistory(`docs/${page.path}`)[0]?.date; + return { + url: `${site.url}${getCanonicalPath(page.path)}`, + ...(lastModified ? { lastModified } : {}), + }; + }); +} diff --git a/components/archive-cards.css b/components/archive-cards.css new file mode 100644 index 0000000..f1275d5 --- /dev/null +++ b/components/archive-cards.css @@ -0,0 +1,51 @@ +.archive-card-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr)); + align-items: stretch; + gap: 16px; +} +.archive-card { + min-width: 0; + overflow: hidden; + border-radius: 20px; + background: #eeeef0; + transition: box-shadow .2s; +} +.dark .archive-card { background: #202020; } +.archive-card:hover, .archive-card:focus-within { + box-shadow: inset 0 0 0 1px var(--color-fd-primary); +} +.archive-card-avatar { + width: 80px; + height: 80px; + margin: 0 auto 12px; + border-radius: 50%; + object-fit: cover; +} +.archive-card-title { + margin: 0; + border: 0; + padding: 0; + font-size: 18px; + font-weight: 650; + line-height: 26px; + overflow-wrap: anywhere; +} +.archive-card-subtitle { + margin: 4px 0 0; + color: var(--color-fd-muted-foreground); + font-size: 15px; + font-weight: 500; + line-height: 22px; + overflow-wrap: anywhere; +} +.archive-card-term { + margin: 8px 0 0; + color: var(--color-fd-muted-foreground); + font-size: 14px; + line-height: 22px; + white-space: nowrap; +} +@media (prefers-reduced-motion: reduce) { + .archive-card { transition: none; } +} diff --git a/components/canonical-url.tsx b/components/canonical-url.tsx new file mode 100644 index 0000000..c3367a6 --- /dev/null +++ b/components/canonical-url.tsx @@ -0,0 +1,15 @@ +'use client'; +import { useEffect } from 'react'; +import { useRouter } from 'next/navigation'; + +/** Legacy HTML files are real SSR pages; move their address to the clean route + * after hydration so active navigation and subsequent Back/Forward stay in sync. */ +export function CanonicalUrl({ path }: { path: string }) { + const router = useRouter(); + useEffect(() => { + if (window.location.pathname.endsWith('.html')) { + router.replace(`${path}${window.location.search}${window.location.hash}`, { scroll: false }); + } + }, [path, router]); + return null; +} diff --git a/components/content.css b/components/content.css new file mode 100644 index 0000000..759bec7 --- /dev/null +++ b/components/content.css @@ -0,0 +1,238 @@ +/*! + * Team and badge styles adapted from VitePress 2.0.0-alpha.5 (MIT). + * Copyright (c) 2019-present, Yuxi (Evan) You + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* Content components remain server-rendered; the root .dark class handles theme changes. */ +:where(.VPTeamPage, .VPTeamPageTitle, .VPTeamPageSection, .VPTeamMembers) { + --whu-team-bg: var(--color-fd-muted, #f6f6f7); + --whu-team-page-bg: var(--color-fd-background, #fff); + --whu-team-muted: var(--color-fd-muted-foreground, #67676c); + --whu-team-border: var(--color-fd-border, #e2e2e3); + --whu-team-brand: var(--color-fd-primary, #3451b2); + --whu-team-sponsor: #db2777; +} + +.dark :where(.VPTeamPage, .VPTeamPageTitle, .VPTeamPageSection, .VPTeamMembers) { + --whu-team-bg: var(--color-fd-muted, #202127); + --whu-team-page-bg: var(--color-fd-background, #1b1b1f); + --whu-team-muted: var(--color-fd-muted-foreground, #98989f); + --whu-team-border: var(--color-fd-border, #3c3f44); + --whu-team-brand: var(--color-fd-primary, #a8b1ff); +} + +.ChatMessage { + display: flex; + align-items: flex-end; + gap: 5px; + margin: 10px 0; + text-align: left; +} + +.ChatMessage[data-position='right'] { flex-direction: row-reverse; } +.ChatMessage .chat-avatar { + flex: 0 0 50px; + width: 50px; + height: 50px; + margin: -5px 0 0; + border-radius: 50%; + object-fit: cover; +} +.ChatMessage .chat-content { min-width: 0; max-width: 70%; margin-right: auto; } +.ChatMessage[data-position='right'] .chat-content { margin-right: 0; margin-left: auto; } +.ChatMessage .chat-nickname { margin-bottom: 5px; font-weight: 700; } +.ChatMessage[data-position='right'] .chat-nickname { text-align: right; } +.ChatMessage .message-bubble { + border-radius: 10px; + padding: 8px 12px; + color: #000; + background: #f0f0f0; + overflow-wrap: anywhere; +} +.dark .ChatMessage .message-bubble { color: #fff; background: #333; } +.ChatMessage .message-bubble img { display: block; max-width: 100%; height: auto; margin: 0; } +.ChatMessage .message-bubble a { color: var(--color-fd-primary, #3451b2); text-decoration: underline; } + +.VPBadge { + display: inline-block; + margin-left: 2px; + border: 1px solid transparent; + border-radius: 12px; + padding: 0 10px; + font-size: 12px; + font-weight: 500; + line-height: 22px; + vertical-align: middle; + transform: translateY(-2px); +} +.VPBadge.small { padding: 0 6px; line-height: 18px; font-size: 10px; transform: translateY(-8px); } +.VPBadge.info { color: #67676c; background: #8e96aa24; } +.VPBadge.tip { color: #3451b2; background: #646cff24; } +.VPBadge.warning { color: #915930; background: #eab30824; } +.VPBadge.danger { color: #b8272c; background: #f43f5e24; } +.dark .VPBadge.info { color: #c2c2c4; background: #65758529; } +.dark .VPBadge.tip { color: #a8b1ff; background: #646cff29; } +.dark .VPBadge.warning { color: #f9b44e; background: #eab30829; } +.dark .VPBadge.danger { color: #f66f81; background: #f43f5e29; } + +.member-grid { + column-count: 2; + column-gap: 24px; + max-width: 900px; + margin: 30px auto; + padding: 10px; +} +.member-card-link { + display: block; + break-inside: avoid; + margin-bottom: 24px; + text-decoration: none; + color: inherit; +} +.member-card { + position: relative; + display: flex; + flex-direction: column; + min-height: 120px; + border-radius: 12px; + padding: 20px; + background: #eff2f3; + box-shadow: 0 2px 12px #39c5bb33; + transform: scale(1); + transition: box-shadow 0.3s ease, transform 0.3s ease; +} +.dark .member-card { background: #1c1d1d; box-shadow: 0 2px 12px #39c5bb55; } +.member-card:hover, .member-card:focus-within { box-shadow: 0 8px 32px #e6188055; transform: scale(1.05); } +.member-card-target { + position: absolute; + inset: 0; + z-index: 1; + border-radius: inherit; +} +.member-card-target:focus-visible { outline: 2px solid #39c5bb; outline-offset: 4px; } +.member-card-top { display: flex; align-items: flex-start; gap: 15px; margin-bottom: 15px; } +.member-card .member-avatar { + flex: 0 0 70px; + width: 70px; + height: 70px; + margin: 0; + border-radius: 50%; + object-fit: cover; + box-shadow: 0 0 8px #39c5bb88; +} +.member-info { flex: 1; min-width: 0; text-align: left; overflow-wrap: anywhere; } +.member-info .member-name { margin-bottom: 8px; font-size: 18px; font-weight: 700; line-height: 1.2; } +.member-info .member-description { margin-top: 8px; color: #666; font-size: 14px; } +.dark .member-info .member-description { color: #b6b6bc; } +.member-sns { display: flex; justify-content: center; gap: 8px; margin-top: auto; } +.member-sns a { position: relative; z-index: 2; display: inline-flex; border-radius: 4px; } +.member-sns a:focus-visible { outline: 2px solid #39c5bb; outline-offset: 4px; } +.member-sns .member-sns-logo { width: 32px; height: 32px; margin: 0; transition: transform 0.2s; } +.member-sns a:hover .member-sns-logo, .member-sns a:focus-visible .member-sns-logo { transform: scale(1.1); } + +.VPTeamMembers { width: 100%; margin: 24px 0; } +.VPTeamMembers .team-container { margin: 0 auto; } +.VPTeamMembers.count-1 .team-container { max-width: 368px; } +.VPTeamMembers.count-2 .team-container { max-width: 760px; } +.VPTeamMembers .team-item { min-width: 0; } +.VPTeamMembersItem { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; +} +.VPTeamMembersItem .profile { flex-grow: 1; padding: 20px; } +.VPTeamMembersItem .data { text-align: center; overflow-wrap: anywhere; } +.VPTeamMembersItem .avatar { position: relative; flex-shrink: 0; } +.VPTeamMembersItem .avatar-img { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; border-radius: 50%; object-fit: cover; } +.VPTeamMembersItem.year-group .name { min-height: 22px; } +.VPTeamMembersItem .org.link { color: inherit; text-decoration: none; transition: color .2s; } +.VPTeamMembersItem .org.link:hover { color: var(--whu-team-brand); } +.VPTeamMembersItem .desc { margin: 12px auto 0; font-size: 14px; line-height: 22px; } +.VPTeamMembersItem .desc a { color: var(--whu-team-brand); font-weight: 500; text-decoration: underline dotted; transition: color .2s; } +.VPTeamMembersItem .links { display: flex; justify-content: center; margin-top: 12px; } +.VPTeamMembersItem .VPSocialLinks { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; } +.VPTeamMembersItem .VPSocialLink { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border-radius: 6px; + color: var(--whu-team-muted); + text-decoration: none; + transition: color 0.25s; +} +.VPTeamMembersItem .VPSocialLink:hover { color: var(--whu-team-brand); } +.VPTeamMembersItem .VPSocialLink:focus-visible { outline: 2px solid var(--whu-team-brand); outline-offset: 2px; } +.VPTeamMembersItem .team-social-icon, .VPTeamMembersItem .team-social-icon svg { display: block; width: 20px; height: 20px; fill: currentColor; } +.VPTeamMembersItem .sp-link { + display: flex; + justify-content: center; + align-items: center; + padding: 16px; + text-align: center; + font-size: 14px; + font-weight: 500; + color: var(--whu-team-sponsor); + background: var(--whu-team-bg); + text-decoration: none; + transition: color 0.25s, background-color 0.25s; +} +.VPTeamMembersItem .sp-link:hover, .VPTeamMembersItem .sp-link:focus-visible { color: #fff; background: var(--whu-team-sponsor); } +.VPTeamMembersItem .sp-link:focus-visible { outline: 2px solid var(--whu-team-brand); outline-offset: -3px; } +.VPTeamMembersItem .sp-icon { flex: 0 0 16px; width: 16px; height: 16px; margin-right: 8px; } + +.VPTeamPage { width: 100%; margin: 48px 0 64px; } +.VPTeamPage > .VPTeamPageSection + .VPTeamPageSection, +.VPTeamPage > .VPTeamMembers + .VPTeamPageSection { margin-top: 64px; } +.VPTeamPage > .VPTeamMembers + .VPTeamMembers { margin-top: 24px; } +.VPTeamPage > .VPTeamMembers { padding: 0; } +.VPTeamPageTitle { padding: 48px 32px; text-align: center; } +.VPTeamPageTitle > .title { margin: 0; letter-spacing: 0; line-height: 44px; font-size: 36px; font-weight: 500; } +.VPTeamPageTitle > .lead { margin: 0 auto; max-width: 512px; padding-top: 12px; line-height: 24px; font-size: 16px; font-weight: 500; color: var(--whu-team-muted); } +.VPTeamPageSection { padding: 0; } +.VPTeamPageSection > .title { position: relative; margin: 0 auto; max-width: 1152px; text-align: center; color: var(--whu-team-muted); } +.VPTeamPageSection .title-line { position: absolute; top: 16px; left: 0; width: 100%; height: 1px; background: var(--whu-team-border); } +.VPTeamPageSection .title-text { position: relative; display: inline-block; margin: 0; border: 0; padding: 0 24px; letter-spacing: 0; line-height: 32px; font-size: 20px; font-weight: 500; background: var(--whu-team-page-bg); } +.VPTeamPageSection > .lead { margin: 0 auto; max-width: 480px; padding-top: 12px; text-align: center; line-height: 24px; font-size: 16px; font-weight: 500; color: var(--whu-team-muted); } +.VPTeamPageSection > .members { margin-top: 24px; } +.VPTeamPageSection > .members:first-child { margin-top: 0; } +.VPTeamPageSection > .lead img, .VPTeamPageTitle > .lead img { max-width: 100%; } + +@media (max-width: 700px) { + .member-grid { column-count: 1; } +} +@media (min-width: 768px) { + .VPTeamPage > .VPTeamPageTitle + .VPTeamPageSection { margin-top: 16px; } + .VPTeamPage > .VPTeamPageSection + .VPTeamPageSection, + .VPTeamPage > .VPTeamMembers + .VPTeamPageSection { margin-top: 96px; } + .VPTeamPageTitle { padding: 64px 48px 48px; } + .VPTeamPageTitle > .title { letter-spacing: -0.5px; line-height: 56px; font-size: 48px; } + .VPTeamPageTitle > .lead { max-width: 592px; letter-spacing: 0.15px; line-height: 28px; font-size: 20px; } +} +@media (min-width: 960px) { + .VPTeamPageTitle { padding: 80px 64px 48px; } +} +@media (prefers-reduced-motion: reduce) { + .member-card, .member-sns-logo { transition: none !important; } + .member-card:hover, .member-card:focus-within, .member-sns a:hover .member-sns-logo, .member-sns a:focus-visible .member-sns-logo { transform: none; } +} diff --git a/components/content.tsx b/components/content.tsx new file mode 100644 index 0000000..1baafb9 --- /dev/null +++ b/components/content.tsx @@ -0,0 +1,262 @@ +import type { HTMLAttributes, ReactNode } from 'react'; +import { PLACEHOLDER_AVATAR } from '../lib/people.js'; +import * as icons from '../lib/icons.js'; +import './archive-cards.css'; +import './content.css'; + +const classes = (...values: Array) => + values.filter(Boolean).join(' '); + +/** The former ClientOnly content is now safe to render on the server. */ +export function ClientOnly({ children }: { children?: ReactNode }) { + return <>{children}; +} + +export interface ChatMessageProps extends HTMLAttributes { + avatar?: string; + nickname?: string; + /** Trusted, repository-authored HTML, matching the original message format. */ + message?: string; + position?: 'left' | 'right'; +} + +export function ChatMessage({ + avatar = PLACEHOLDER_AVATAR, + nickname, + message, + position = 'left', + className, + children, + ...props +}: ChatMessageProps) { + return ( +
+ {nickname +
+ {nickname &&
{nickname}
} + {message === undefined ? ( +
{children}
+ ) : ( +
+ )} +
+
+ ); +} + +export interface BadgeProps extends HTMLAttributes { + text?: string; + type?: 'info' | 'tip' | 'warning' | 'danger'; +} + +export function Badge({ text, type = 'tip', className, children, ...props }: BadgeProps) { + return {children ?? text}; +} + +export interface MemberSocial { + platform: string; + url: string; + icon: string; +} + +export interface MemberCardProps extends HTMLAttributes { + name: string; + avatar?: string; + description?: string; + link?: string; + badges?: Array>; + socials?: MemberSocial[]; +} + +export function MemberCard({ + name, + avatar = PLACEHOLDER_AVATAR, + description, + link, + badges = [], + socials = [], + className, + ...props +}: MemberCardProps) { + return ( + + ); +} + +export interface TeamSocialLink { + icon: string | { svg?: string }; + link: string; + ariaLabel?: string; +} + +export interface TeamMember { + avatar?: string; + name: string; + title?: string; + org?: string; + orgLink?: string; + /** Trusted HTML from the checked-in member registry or MDX. */ + desc?: string; + links?: TeamSocialLink[]; + sponsor?: string; + actionText?: string; +} + +const githubIcon = 'GitHub'; +const genericLinkIcon = ''; + +function socialIcon(link: TeamSocialLink) { + return typeof link.icon === 'string' + ? (link.icon === 'github' ? githubIcon : (icons as Record)[link.icon]) || genericLinkIcon + : link.icon.svg || genericLinkIcon; +} + +function socialLabel(link: TeamSocialLink) { + if (link.ariaLabel) return link.ariaLabel; + if (typeof link.icon === 'string') return link.icon; + return link.icon.svg?.match(/]*>([^<]+)<\/title>/i)?.[1] || link.link.trim(); +} + +function externalLink(href?: string) { + return href && /^(?:https?:)?\/\//i.test(href.trim()) + ? { target: '_blank', rel: 'noopener noreferrer' } + : {}; +} + +export function TeamMembers({ + members, + size = 'medium', + variant = 'person', + className, + id, + ...props +}: HTMLAttributes & { + members: TeamMember[]; + size?: 'small' | 'medium'; + /** Year groups display their academic year above the group name. */ + variant?: 'person' | 'year'; +}) { + return ( +
+
+ {members.map((member, index) => ( +
+
+
+
+ {member.name} +
+
+ {variant === 'year' &&

{member.title}学年

} +

{member.name}

+ {variant === 'year' &&

{member.title}.6–{Number(member.title) + 1}.6

} + {variant === 'person' && (member.title || member.org) && ( +

+ {member.title && {member.title}} + {member.title && member.org && @ } + {member.org && (member.orgLink + ? {member.org} + : {member.org})} +

+ )} + {member.desc &&
} + {member.links && member.links.length > 0 && ( +
+
+ {member.links.map((link, linkIndex) => ( + + + ))} +
+
+ )} +
+
+ {member.sponsor && ( + + )} +
+
+ ))} +
+
+ ); +} + +export function TeamPage({ className, children, ...props }: HTMLAttributes) { + return
{children}
; +} + +export interface TeamPageTitleProps extends Omit, 'title'> { + title?: ReactNode; + lead?: ReactNode; +} + +export function TeamPageTitle({ title, lead, className, children, ...props }: TeamPageTitleProps) { + return ( +
+ {title &&

{title}

} + {lead &&
{lead}
} + {children} +
+ ); +} + +export interface TeamPageSectionProps extends Omit, 'title'> { + title?: ReactNode; + lead?: ReactNode; + members?: ReactNode; +} + +export function TeamPageSection({ title, lead, members, className, children, ...props }: TeamPageSectionProps) { + return ( +
+ {title &&
+ } + {lead &&
{lead}
} + {(members || children) &&
{members ?? children}
} +
+ ); +} + +// Friendly to older MDX snippets while all page sources use the React names. +export { + TeamMembers as VPTeamMembers, + TeamPage as VPTeamPage, + TeamPageTitle as VPTeamPageTitle, + TeamPageSection as VPTeamPageSection, +}; diff --git a/components/git-changelog.css b/components/git-changelog.css new file mode 100644 index 0000000..e76349f --- /dev/null +++ b/components/git-changelog.css @@ -0,0 +1,87 @@ +/* Nolebase 2.17.1 component styles and UnoCSS utilities, scoped to this React port. + * See git-history-view.tsx for the upstream MIT licence and original-site patch. + */ +.git-changelog { + --history-bg: #8e96aa24; + --history-code-bg: #8e96aa24; + color: var(--vp-c-text-1); + font-size: 16px; + line-height: 24px; +} +.dark .git-changelog { --history-bg: #65758529; --history-code-bg: #65758529; } +.git-changelog h2 { + margin: 48px 0 16px; + border-top: 1px solid var(--vp-c-divider); + padding-top: 24px; + letter-spacing: -.02em; + line-height: 32px; + font-size: 24px; + font-weight: 600; + position: relative; +} +.git-changelog .git-changelog-anchor { + text-decoration: none; + position: absolute; + left: -.87em; + padding-right: .23em; + font-weight: 500; + opacity: 0; + transition: color .25s, opacity .25s; +} +.git-changelog h2:hover .git-changelog-anchor, +.git-changelog-anchor:focus-visible { opacity: 1; } +.git-changelog a { color: var(--vp-c-brand-1); font-weight: 500; text-decoration: underline; text-underline-offset: 2px; transition: color .25s; } +.git-changelog a:hover { color: var(--vp-c-brand-2); } +.git-changelog a:focus-visible, +.git-changelog button:focus-visible { outline: 2px solid var(--vp-c-brand-1); outline-offset: 3px; border-radius: 4px; } +.git-changelog code { + border-radius: 4px; + padding: 3px 6px; + background: var(--history-code-bg); + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace; + font-size: .875em; + transition: color .25s, background-color .5s; +} +.git-changelog-empty { font-style: italic; opacity: .7; } +.vp-nolebase-git-changelog-history-container { border-radius: 8px; padding: 16px; background: var(--history-bg); } +.vp-nolebase-git-changelog-history-container[data-fresh] { background: #4ade8029; } +.vp-nolebase-git-changelog-title { position: relative; color: var(--vp-c-text-1); font-size: 14px; user-select: none; transition: color .2s ease-in-out; } +.vp-nolebase-git-changelog-title:hover { color: var(--vp-c-brand-1); } +.git-changelog button { border: 0; padding: 0; color: inherit; background: transparent; font: inherit; line-height: inherit; cursor: pointer; } +.git-changelog-toggle { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 12px; text-align: left; } +.vp-nolebase-git-changelog-last-edited-title { display: inline-flex; align-items: center; gap: 12px; font-weight: 800; } +.vp-nolebase-git-changelog-view-full-history-title { display: inline-flex; align-items: center; gap: 12px; padding-left: 36px; font-weight: 400; white-space: nowrap; } +.git-changelog-icon { display: inline-block; flex-shrink: 0; width: 1.2em; min-width: 1.2rem; height: 1.2em; vertical-align: middle; } +.git-changelog .git-changelog-sort { position: absolute; right: calc(7.2em + 28px); top: 0; height: 100%; display: inline-flex; align-items: center; } +.git-changelog-chevron { transition: transform .2s ease-in-out; } +[data-expanded='true'] .git-changelog-chevron { transform: rotate(180deg); } +.git-changelog-collapse { display: grid; grid-template-rows: 0fr; visibility: hidden; transition: grid-template-rows .2s ease-in-out, visibility .2s; } +[data-expanded='true'] .git-changelog-collapse { grid-template-rows: 1fr; visibility: visible; } +.git-changelog-collapse-content { min-height: 0; overflow: hidden; } +.git-changelog-list { display: grid; grid-template-columns: 30px minmax(0, 1fr); margin: 12px 0 0 -6px; gap: 6px; } +.git-changelog-list > * { margin-top: auto; margin-bottom: auto; } +.git-changelog-commit-icon { margin: auto; transform: rotate(90deg); opacity: .3; } +.git-changelog-entry { display: flex; align-items: baseline; gap: 4px; min-width: 0; } +.git-changelog-sha { flex-shrink: 0; } +.git-changelog-sha code { color: var(--vp-c-brand-1); font-size: 14px; line-height: 16px; } +.git-changelog-content { min-width: 0; overflow-wrap: anywhere; } +.git-changelog-message { font-size: 14px; line-height: 20px; } +.vp-nolebase-git-changelog-authors { margin: 4px 0 4px 12px; } +.vp-nolebase-git-changelog-author { display: inline; margin-right: .5em; white-space: nowrap; } +.vp-nolebase-git-changelog-author img { display: inline-block; width: 24px; height: 24px; margin: 0; border: 2px solid var(--vp-c-bg-soft); border-radius: 50%; object-fit: cover; vertical-align: middle; } +.vp-nolebase-git-changelog-author-name { margin-left: .25em; font-size: 14px; line-height: 20px; vertical-align: middle; } +.git-changelog-content time, .git-changelog-release time { font-size: 12px; line-height: 16px; opacity: .5; } +.git-changelog-release-icon { display: inline-flex; width: 1.75em; height: 1.75em; margin: auto; border-radius: 50%; background: #9ca3af1a; opacity: .9; } +.git-changelog-release-icon svg { width: 50%; min-width: 50%; height: 50%; margin: auto; } +.git-changelog-release { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; } +.git-changelog-release code { font-weight: 700; } +@media (max-width: 639px) { + .git-changelog-sha, .git-changelog-sha + span { display: none; } + .vp-nolebase-git-changelog-view-full-history-title > span { display: none; } + .git-changelog .git-changelog-sort { right: calc(1.2em + 16px); } + .git-changelog-list { font-size: 12px; } + .git-changelog-message, .vp-nolebase-git-changelog-author-name { font-size: 12px; line-height: 16px; } +} +@media (prefers-reduced-motion: reduce) { + .git-changelog-collapse, .git-changelog-chevron { transition: none; } +} diff --git a/components/git-changelog.tsx b/components/git-changelog.tsx new file mode 100644 index 0000000..398e516 --- /dev/null +++ b/components/git-changelog.tsx @@ -0,0 +1,8 @@ +import { getPageHistory, shouldShowChangelog, type ChangelogFrontmatter } from '../lib/changelog'; +import { GitHistoryView } from './git-history-view'; + +/** Read history only on the server and preserve all original per-page exclusions. */ +export function GitChangelog({ sourcePath, frontmatter = {} }: { sourcePath: string; frontmatter?: ChangelogFrontmatter }) { + if (!shouldShowChangelog(frontmatter)) return null; + return ; +} diff --git a/components/git-history-view.tsx b/components/git-history-view.tsx new file mode 100644 index 0000000..8769682 --- /dev/null +++ b/components/git-history-view.tsx @@ -0,0 +1,150 @@ +'use client'; + +/*! + * Adapted from @nolebase/vitepress-plugin-git-changelog 2.17.1 (MIT). + * https://github.com/nolebase/integrations/tree/v2.17.1/packages/vitepress-plugin-git-changelog + * + * MIT License + * + * Copyright (c) 2023-PRESENT All the contributors of Nólëbase + * Copyright (c) GitHub, Inc. (Octicons) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import { Fragment, useEffect, useId, useState, type ReactNode } from 'react'; +import { differenceInDays, formatDistanceToNow } from 'date-fns'; +import { zhCN } from 'date-fns/locale'; +import type { HistoryAuthor, HistoryCommit } from '../lib/changelog'; +import './git-changelog.css'; + +const repository = 'https://github.com/WHUDAYS/WHUDAYS.github.io'; +const absoluteDate = (date: string) => new Date(date).toLocaleDateString('zh-CN'); +const fullDate = (date: string) => new Date(date).toLocaleString('zh-CN', { dateStyle: 'full', timeStyle: 'long' }); + +// The same Octicons used by Nolebase's UnoCSS build, without its global CSS reset. +const iconPaths = { + "history": "m.427 1.927l1.215 1.215a8.002 8.002 0 1 1-1.6 5.685a.75.75 0 1 1 1.493-.154a6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177M7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.75.75 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4", + "sort-desc": "M0 4.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 4.25m0 4a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8.25m0 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75M13.5 10h2.25a.25.25 0 0 1 .177.427l-3 3a.25.25 0 0 1-.354 0l-3-3A.25.25 0 0 1 9.75 10H12V3.75a.75.75 0 0 1 1.5 0z", + "sort-asc": "m12.927 2.573l3 3A.25.25 0 0 1 15.75 6H13.5v6.75a.75.75 0 0 1-1.5 0V6H9.75a.25.25 0 0 1-.177-.427l3-3a.25.25 0 0 1 .354 0M0 12.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75m0-4a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8.25m0-4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 4.25", + "chevron-down": "M12.78 5.22a.75.75 0 0 1 0 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.75.75 0 0 1 1.06 0", + "git-commit": "M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0a2.5 2.5 0 0 0 5 0", + "rocket": "M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.75 8.75 0 0 1-2.564 6.186l-.458.459q-.472.471-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.75.75 0 0 1-1.11-.418l-.954-3.102a1 1 0 0 1-.145-.125L3.754 9.816a1 1 0 0 1-.124-.145L.528 8.717a.75.75 0 0 1-.418-1.11l1.71-2.774A1.75 1.75 0 0 1 3.31 4h3.204q.433-.508.904-.979l.459-.458A8.75 8.75 0 0 1 14.064 0M8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317l2.143 2.143l2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.25 7.25 0 0 0-5.125 2.123M3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.23.23 0 0 1-.201-.064a.23.23 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12m6.94-3.935q-.132.09-.266.175l-2.35 1.521l.548 1.783l1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116L5.2 5.766q.087-.135.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0a1 1 0 0 1 2 0" +} as const; +function Icon({ name, className = '' }: { name: keyof typeof iconPaths; className?: string }) { + return ; +} + +function safeLink(href: string) { + return /^(?:https?:\/\/|\/|#)/i.test(href) ? href : undefined; +} + +/** Nolebase's inline Markdown and issue links, rendered as escaped React nodes. */ +function CommitMessage({ message }: { message: string }) { + const parts: ReactNode[] = []; + const tokens = /`([^`]+)`|\*\*([^*]+)\*\*|\*([^*]+)\*|\[([^\]]+)\]\(([^)]+)\)|#(\d+)/g; + let cursor = 0; + for (const match of message.matchAll(tokens)) { + parts.push(message.slice(cursor, match.index)); + const [, code, bold, italic, label, href, issue] = match; + parts.push({code !== undefined ? {code} + : bold !== undefined ? {bold} + : italic !== undefined ? {italic} + : issue !== undefined ? #{issue} + : {label}}); + cursor = match.index + match[0].length; + } + parts.push(message.slice(cursor)); + return <>{parts}; +} + +function Author({ author }: { author: HistoryAuthor }) { + const content = <>{`${author.name}{author.name}; + return author.url + ? {content} + : {content}; +} + +function CommittedOn({ commit }: { commit: HistoryCommit }) { + return ; +} + +function CommitList({ commits }: { commits: HistoryCommit[] }) { + return
{commits.map(commit => + {commit.tags?.length ? <> + +
+ {commit.tags.map(tag => {tag.name})} + +
+ : <> + +
+ {commit.shortSha} + + + + {commit.authors.map((author, index) => )} + + +
+ } +
)}
; +} + +/** React port of Nolebase 2.17.1 Changelog/CommitRegularLine/CommitTagLine. + * The original site's author-name patch is preserved. Contributors were disabled. + * All records stay in the exported HTML; collapsing only changes their visibility. + */ +export function GitHistoryView({ commits }: { commits: HistoryCommit[] }) { + const [descending, setDescending] = useState(true); + const [expanded, setExpanded] = useState(false); + const [now, setNow] = useState(null); + const historyId = useId(); + useEffect(() => { + setNow(Date.now()); + const timer = window.setInterval(() => setNow(Date.now()), 60_000); + return () => window.clearInterval(timer); + }, []); + const latest = commits[0]; + const fresh = latest && now !== null && differenceInDays(now, new Date(latest.date)) < 1; + const ordered = descending ? commits : [...commits].reverse(); + return
+

页面历史#

+ {!latest ?
暂无最近变更历史
:
+
+ + +
+
+
+
+
} +
; +} diff --git a/components/home.tsx b/components/home.tsx new file mode 100644 index 0000000..fa5c744 --- /dev/null +++ b/components/home.tsx @@ -0,0 +1,25 @@ +import { HomeLayout } from '@fumadocs/base-ui/layouts/home'; +import { baseOptions } from '@/lib/layout.shared'; +import { SiteFooter } from './site-footer'; + +type Hero = { name?: string; text?: string; tagline?: string; image?: { src: string; alt?: string }; actions?: { text: string; link: string; theme?: string }[] }; +type Feature = { title: string; details?: string; link?: string }; +export function Home({ hero, features = [] }: { hero: Hero; features?: Feature[] }) { + return +
+
+
+

{hero.name}{hero.text}

+

{hero.tagline}

+
{hero.actions?.map((action) => {action.text})}
+
+ {hero.image &&
{hero.image.alt
} +
+
{features.map((feature) => +

{feature.title}

{feature.details}

+
)}
+ +
+ +
; +} diff --git a/components/hq-years.css b/components/hq-years.css new file mode 100644 index 0000000..b9993ae --- /dev/null +++ b/components/hq-years.css @@ -0,0 +1,23 @@ +.hq-year-grid { margin: 24px 0; } +.hq-year-card .hq-year-link { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + height: 100%; + padding: 20px; + color: inherit; + text-align: center; + text-decoration: none; +} +.hq-year-card .hq-year-link:focus-visible { + outline: 2px solid var(--color-fd-primary); + outline-offset: -4px; + border-radius: 20px; +} +.hq-year-name { min-height: 22px; } +.hq-year-arrow { position: absolute; top: 16px; right: 16px; color: var(--color-fd-muted-foreground); transition: color .2s; } +.hq-year-link:hover .hq-year-arrow { color: var(--color-fd-primary); } +@media (prefers-reduced-motion: reduce) { + .hq-year-arrow { transition: none; } +} diff --git a/components/hq-years.tsx b/components/hq-years.tsx new file mode 100644 index 0000000..05d2006 --- /dev/null +++ b/components/hq-years.tsx @@ -0,0 +1,25 @@ +import type { ReactNode } from 'react'; +import { ArrowUpRight } from 'lucide-react'; +import { PLACEHOLDER_AVATAR } from '@/lib/people'; +import './archive-cards.css'; +import './hq-years.css'; + +export function HQYearGrid({ children }: { children: ReactNode }) { + return
{children}
; +} + +export function HQYearCard({ year, name, avatar }: { + year: number; + name?: string; + avatar?: string; +}) { + return ; +} diff --git a/components/mdx.tsx b/components/mdx.tsx new file mode 100644 index 0000000..4903c70 --- /dev/null +++ b/components/mdx.tsx @@ -0,0 +1,9 @@ +import defaultMdxComponents from '@fumadocs/base-ui/mdx'; +import { Callout } from '@fumadocs/base-ui/components/callout'; +import type { MDXComponents } from 'mdx/types'; +import * as content from './content'; + +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { ...defaultMdxComponents, ...content, Callout, img: (props) => , ...components }; +} +export const useMDXComponents = getMDXComponents; diff --git a/components/page-view-options.tsx b/components/page-view-options.tsx new file mode 100644 index 0000000..d5b7a54 --- /dev/null +++ b/components/page-view-options.tsx @@ -0,0 +1,66 @@ +'use client'; + +import { ChevronDown, ExternalLink, TextIcon } from 'lucide-react'; +import { Popover, PopoverContent, PopoverTrigger } from '@fumadocs/base-ui/components/ui/popover'; +import { buttonVariants } from '@fumadocs/base-ui/components/ui/button'; + +/* + * Brand icon paths from @fumadocs/base-ui. + * MIT License + * + * Copyright (c) 2023 Fuma + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +const brandPaths = { + "GitHub": "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12", + "OpenAI": "M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z", + "Anthropic": "M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z" +} as const; + +function BrandIcon({ brand }: { brand: keyof typeof brandPaths }) { + return ; +} + +export function PageViewOptions({ markdownUrl, githubUrl, pageUrl }: { + markdownUrl: string; + githubUrl: string; + pageUrl: string; +}) { + const prompt = `请阅读 ${pageUrl},我想询问有关页面内容的问题。`; + const items = [ + { title: '在 GitHub 查看', href: githubUrl, icon: }, + { title: '查看 Markdown', href: markdownUrl, icon: